GroupedSite¶
full name: tenpy.networks.site.GroupedSite
parent module:
tenpy.networks.site
type: class
-
class
tenpy.networks.site.
GroupedSite
(sites, labels=None, charges='same')[source]¶ Bases:
tenpy.networks.site.Site
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
- siteslist 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 nameopname+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.
- siteslist of
- Attributes
- n_sitesint
The number of sites grouped together, i.e.
len(sites)
.- siteslist of
Site
The sites grouped together into self.
- labels: list of str
The labels using which the single-site operators are added during construction.
Methods
add_op
(self, name, op[, need_JW])Add one on-site operators.
change_charge
(self[, new_leg_charge, permute])Change the charges of the site (in place).
get_op
(self, name)Return operator of given name.
kroneckerproduct
(self, ops)Return the Kronecker product \(op0 \otimes op1\) of local operators.
multiply_op_names
(self, names)Multiply operator names together.
op_needs_JW
(self, name)Whether an (composite) onsite operator is fermionic and needs a Jordan-Wigner string.
remove_op
(self, name)Remove an added operator.
rename_op
(self, old_name, new_name)Rename an added operator.
state_index
(self, label)Return index of a basis state from its label.
state_indices
(self, labels)Same as
state_index()
, but for multiple labels.test_sanity
(self)Sanity check, raises ValueErrors, if something is wrong.
valid_opname
(self, name)Check whether ‘name’ labels a valid onsite-operator.
-
kroneckerproduct
(self, ops)[source]¶ Return the Kronecker product \(op0 \otimes op1\) of local operators.
-
add_op
(self, name, op, need_JW=False)¶ Add one on-site operators.
- Parameters
- namestr
A valid python variable name, used to label the operator. The name under which op is added as attribute to self.
- opnp.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_JWbool
Whether the operator needs a Jordan-Wigner string. If
True
, the function adds name toneed_JW_string
.
-
change_charge
(self, new_leg_charge=None, permute=None)¶ 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.- permutendarray | None
The permuation applied to the physical leg, which gets used to adjust
state_labels
andperm
. If you sorted the previous leg withperm_qind, new_leg_charge = leg.sort()
, useleg.perm_flat_from_perm_qind(perm_qind)
. Ignored ifNone
.
- new_leg_charge
-
property
dim
¶ Dimension of the local Hilbert space.
-
get_op
(self, name)¶ Return operator of given name.
- Parameters
- namestr
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
np_conserved
The operator given by name, with labels
'p', 'p*'
. If name already was an npc Array, it’s directly returned.
- op
-
multiply_op_names
(self, names)¶ Multiply operator names together.
Join the operator names in names such that get_op returns the product of the corresponding operators.
- Parameters
- nameslist of str
List of valid operator labels.
- Returns
- combined_opnamestr
A valid operator name Operatorname representing the product of operators in names.
-
property
onsite_ops
¶ Dictionary of on-site operators for iteration.
Single operators are accessible as attributes.
-
op_needs_JW
(self, name)¶ Whether an (composite) onsite operator is fermionic and needs a Jordan-Wigner string.
- Parameters
- namestr
The name of the operator, as in
get_op()
.
- Returns
- needs_JWbool
Whether the operator needs a Jordan-Wigner string, judging from
need_JW_string
.
-
remove_op
(self, name)¶ Remove an added operator.
- Parameters
- namestr
The name of the operator to be removed.
-
rename_op
(self, old_name, new_name)¶ Rename an added operator.
- Parameters
- old_namestr
The old name of the operator.
- new_namestr
The new name of the operator.
-
state_index
(self, label)¶ Return index of a basis state from its label.
- Parameters
- labelint | string
eather the index directly or a label (string) set before.
- Returns
- state_indexint
the index of the basis state associated with the label.
-
state_indices
(self, labels)¶ Same as
state_index()
, but for multiple labels.
-
test_sanity
(self)¶ Sanity check, raises ValueErrors, if something is wrong.