# GroupedSite¶

Inheritance Diagram

Methods

 GroupedSite.__init__(sites[, labels, charges]) Initialize self. GroupedSite.add_op(name, op[, need_JW]) Add one on-site operators. GroupedSite.change_charge([new_leg_charge, …]) Change the charges of the site (in place). GroupedSite.from_hdf5(hdf5_loader, h5gr, subpath) Load instance from a HDF5 file. Return operator of given name. Return the Kronecker product $$op0 \otimes op1$$ of local operators. Multiply operator names together. Whether an (composite) onsite operator is fermionic and needs a Jordan-Wigner string. Remove an added operator. GroupedSite.rename_op(old_name, new_name) Rename an added operator. GroupedSite.save_hdf5(hdf5_saver, h5gr, subpath) Export self into a HDF5 file. Return index of a basis state from its label. Same as state_index(), but for multiple labels. Sanity check, raises ValueErrors, if something is wrong. Check whether ‘name’ labels a valid onsite-operator.

Class Attributes and Properties

 GroupedSite.dim Dimension of the local Hilbert space. GroupedSite.onsite_ops Dictionary of on-site operators for iteration.
class tenpy.networks.site.GroupedSite(sites, labels=None, charges='same')[source]

Group two or more Site into a larger one.

A typical use-case is that you want a NearestNeighborModel for TEBD although you have next-nearest neighbor interactions: you just double your local Hilbertspace to consist of two original sites. Note that this is a ‘hack’ at the cost of other things (e.g., measurements of ‘local’ operators) getting more complicated/computationally expensive.

If the individual sites indicate fermionic operators (with entries in need_JW_string), we construct the new on-site oerators of site1 to include the JW string of site0, i.e., we use the Kronecker product of [JW, op] instead of [Id, op] if necessary (but always [op, Id]). In that way the onsite operators of this DoubleSite automatically fulfill the expected commutation relations. See also Fermions and the Jordan-Wigner transformation.

Parameters
• sites (list of Site) – The individual sites being grouped together. Copied before use if charges!='same'.

• labels – Include the Kronecker product of the each onsite operator op on sites[i] and identities on other sites with the name opname+labels[i]. Similarly, set state labels for ' '.join(state[i]+'_'+labels[i]). Defaults to [str(i) for i in range(n_sites)], which for example grouping two SpinSites gives operators name like "Sz0" and sites labels like 'up_0 down_1'.

• charges ('same' | 'drop' | 'independent') – How to handle charges, defaults to ‘same’. 'same' means that all sites have the same ChargeInfo, and the total charge is the sum of the charges on the individual sites. 'independent' means that the sites have possibly different ChargeInfo, and the charges are conserved separately, i.e., we have n_sites conserved charges. For 'drop', we drop any charges, such that the remaining legcharges are trivial.

n_sites

The number of sites grouped together, i.e. len(sites).

Type

int

sites

The sites grouped together into self.

Type

list of Site

labels

The labels using which the single-site operators are added during construction.

Type

list of str

kroneckerproduct(ops)[source]

Return the Kronecker product $$op0 \otimes op1$$ of local operators.

Parameters

ops (list of Array) – One operator (or operator name) on each of the ungrouped sites. Each operator should have labels ['p', 'p*'].

Returns

prod – Kronecker product $$ops[0] \otimes ops[1] \otimes \cdots$$, with labels ['p', 'p*'].

Return type

Array

add_op(name, op, need_JW=False)[source]

Parameters
• name (str) – A valid python variable name, used to label the operator. The name under which op is added as attribute to self.

• op (np.ndarray | Array) – A matrix acting on the local hilbert space representing the local operator. Dense numpy arrays are automatically converted to Array. LegCharges have to be [leg, leg.conj()]. We set labels 'p', 'p*'.

• need_JW (bool) – Whether the operator needs a Jordan-Wigner string. If True, the function adds name to need_JW_string.

change_charge(new_leg_charge=None, permute=None)[source]

Change the charges of the site (in place).

Parameters
• new_leg_charge (LegCharge | None) – The new charges to be used. If None, use trivial charges.

• permute (ndarray | None) – The permuation applied to the physical leg, which gets used to adjust state_labels and perm. If you sorted the previous leg with perm_qind, new_leg_charge = leg.sort(), use leg.perm_flat_from_perm_qind(perm_qind). Ignored if None.

property dim

Dimension of the local Hilbert space.

classmethod from_hdf5(hdf5_loader, h5gr, subpath)[source]

Load instance from a HDF5 file.

This method reconstructs a class instance from the data saved with save_hdf5().

Parameters
• hdf5_loader (Hdf5Loader) – Instance of the loading engine.

• h5gr (Group) – HDF5 group which is represent the object to be constructed.

• subpath (str) – The name of h5gr with a '/' in the end.

Returns

obj – Newly generated class instance containing the required data.

Return type

cls

get_op(name)[source]

Return operator of given name.

Parameters

name (str) – The name of the operator to be returned. In case of multiple operator names separated by whitespace, we multiply them together to a single on-site operator (with the one on the right acting first).

Returns

op – The operator given by name, with labels 'p', 'p*'. If name already was an npc Array, it’s directly returned.

Return type

np_conserved

multiply_op_names(names)[source]

Multiply operator names together.

Join the operator names in names such that get_op returns the product of the corresponding operators.

Parameters

names (list of str) – List of valid operator labels.

Returns

combined_opname – A valid operator name Operatorname representing the product of operators in names.

Return type

str

property onsite_ops

Dictionary of on-site operators for iteration.

Single operators are accessible as attributes.

op_needs_JW(name)[source]

Whether an (composite) onsite operator is fermionic and needs a Jordan-Wigner string.

Parameters

name (str) – The name of the operator, as in get_op().

Returns

needs_JW – Whether the operator needs a Jordan-Wigner string, judging from need_JW_string.

Return type

bool

remove_op(name)[source]

Parameters

name (str) – The name of the operator to be removed.

rename_op(old_name, new_name)[source]

Parameters
• old_name (str) – The old name of the operator.

• new_name (str) – The new name of the operator.

save_hdf5(hdf5_saver, h5gr, subpath)[source]

Export self into a HDF5 file.

This method saves all the data it needs to reconstruct self with from_hdf5().

This implementation saves the content of __dict__ with save_dict_content(), storing the format under the attribute 'format'.

Parameters
• hdf5_saver (Hdf5Saver) – Instance of the saving engine.

• h5gr (:classGroup) – HDF5 group which is supposed to represent self.

• subpath (str) – The name of h5gr with a '/' in the end.

state_index(label)[source]

Return index of a basis state from its label.

Parameters

label (int | string) – eather the index directly or a label (string) set before.

Returns

state_index – the index of the basis state associated with the label.

Return type

int

state_indices(labels)[source]

Same as state_index(), but for multiple labels.

test_sanity()[source]

Sanity check, raises ValueErrors, if something is wrong.

valid_opname(name)[source]

Check whether ‘name’ labels a valid onsite-operator.

Parameters

name (str) – Label for the operator. Can be multiple operator(labels) separated by whitespace, indicating that they should be multiplied together.

Returns

validTrue if name is a valid argument to get_op().

Return type

bool