Site
full name: tenpy.networks.site.Site
parent module:
tenpy.networks.site
type: class
Inheritance Diagram
Methods
|
|
|
Add one on-site operators. |
|
Change the charges of the site (in place). |
|
Convert charge values to Jordan-Wigner parity. |
|
Load instance from a HDF5 file. |
|
Return the hermitian conjugate of a given operator. |
|
Return operator of given name. |
|
Multiply operator names together. |
|
Multiply local operators (possibly given by their names) together. |
|
Whether an (composite) onsite operator is fermionic and needs a Jordan-Wigner string. |
|
Remove an added operator. |
|
Rename an added operator. |
|
Export self into a HDF5 file. |
|
Sort the |
|
Return index of a basis state from its label. |
|
Same as |
Sanity check, raises ValueErrors, if something is wrong. |
|
|
Check whether 'name' labels a valid onsite-operator. |
Class Attributes and Properties
Dimension of the local Hilbert space. |
|
Dictionary of on-site operators for iteration. |
- class tenpy.networks.site.Site(leg, state_labels=None, sort_charge=True, **site_ops)[source]
Bases:
Hdf5Exportable
Collects necessary information about a single local site of a lattice.
This class defines what the local basis states are: it provides the
leg
defining the charges of the physical leg for this site. Moreover, it stores (local) on-site operators, which are directly available as attribute, e.g.,self.Sz
is the Sz operator for theSpinSite
. Alternatively, operators can be obtained withget_op()
. The operator namesId
andJW
are reserved for the identity and Jordan-Wigner strings.Warning
The order of the local basis can change depending on the charge conservation! This is a necessary feature since we need to sort the basis by charges for efficiency. We use the
state_labels
andperm
to keep track of these permutations.Changed in version 0.10: Added sort_charge defaulting to False.
Changed in version 1.0: Make sort_charge default to True.
- Parameters:
leg (
LegCharge
) – Charges of the physical states, to be used for the physical leg of MPS.state_labels (None | list of str) – Optionally a label for each local basis states.
None
entries are ignored / not set.**site_ops – Additional keyword arguments of the form
name=op
given toadd_op()
. The identity operator'Id'
is automatically included. If no'JW'
for the Jordan-Wigner string is given,'JW'
is set as an alias to'Id'
.sort_charge (bool) – Whether
sort_charge()
should be called at the end of initialization. This is usually a good idea to reduce potential overhead when using charge conservation. Note that this might permute the order of the local basis states!
- state_labels
(Optional) labels for the local basis states.
- Type:
{str: int}
- opnames
Labels of all onsite operators (i.e.
self.op
exists if'op'
inself.opnames
). Note thatget_op()
allows arbitrary concatenations of them.- Type:
- need_JW_string
Labels of all onsite operators that need a Jordan-Wigner string. Used in
op_needs_JW()
to determine whether an operator anticommutes or commutes with operators on other sites.- Type:
- ops
Onsite operators are added directly as attributes to self. For example after
self.add_op('Sz', Sz)
you can useself.Sz
for the Sz operator. All onsite operators have labels'p', 'p*'
.- Type:
- perm
Index permutation of the physical leg compared to conserve=None, i.e.
OP_conserved = OP_nonconserved[np.ix_(perm,perm)]
andperm[state_labels_conserved["some_state"]] == state_labels_nonconserved["some_state"]
.- Type:
1D array
- JW_exponent
Exponents of the
'JW'
operator, such thatself.JW.to_ndarray() = np.diag(np.exp(1.j*np.pi* JW_exponent))
- Type:
1D array
- hc_ops
Mapping from operator names to their hermitian conjugates. Use
get_hc_op_name()
to obtain entries.- Type:
dict(str->str)
- charge_to_JW_parity
If set, it is a list of factors, one per charge, such that
(-1)**np.mod(np.sum(charges * charge_to_JW_parity, axis=-1), 2)
is the Jordan-Wigner sign associated to a given set of charges. Seecharge_to_JW_signs()
for more details. Often not defined at all or None, which indicates that charge information is not enough to extract the Jordan-Wigner signs, i.e., we might not have total fermion number as well-defined charge.- Type:
None | 1D array
- used_sort_charge
Whether
sort_charge()
was called. Note that the default argument for permute_dense inadd_op()
changes to True in that case, to ensure a consistent use.- Type:
Examples
The following generates a site for spin-1/2 with Sz conservation. Note that
Sx = (Sp + Sm)/2
violates Sz conservation and is thus not a valid on-site operator.>>> chinfo = npc.ChargeInfo([1], ['2 * Sz']) >>> ch = npc.LegCharge.from_qflat(chinfo, [1, -1]) >>> Sp = [[0, 1.], [0, 0]] >>> Sm = [[0, 0], [1., 0]] >>> Sz = [[0.5, 0], [0, -0.5]] >>> site = Site(ch, ['up', 'down'], Splus=Sp, Sminus=Sm, Sz=Sz) >>> print(site.Splus.to_ndarray()) [[0. 0.] [1. 0.]] >>> print(site.get_op('Sminus').to_ndarray()) [[0. 1.] [0. 0.]] >>> print(site.get_op('Splus Sminus').to_ndarray()) [[0. 0.] [0. 1.]]
Note that sorting the charges (which happens by default!) may lead to unintuitive matrix representations of the operators, because physicists are typically not used to writing them in the sorted basis (in this case
['down', 'up']
);We get the unchanged order by setting
sort_charges=False
. This is discouraged though, as it can introduce overhead.>>> site = Site(ch, ['up', 'down'], Splus=Sp, Sminus=Sm, Sz=Sz, sort_charge=False) >>> print(site.Splus.to_ndarray()) [[0. 1.] [0. 0.]] >>> print(site.get_op('Sminus').to_ndarray()) [[0. 0.] [1. 0.]] >>> print(site.get_op('Splus Sminus').to_ndarray()) [[1. 0.] [0. 0.]]
- 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. IfNone
, use trivial charges.permute (ndarray | None) – The permutation applied to the physical leg, which also gets used to adjust
state_labels
andperm
. If you sorted the previous leg withperm_qind, new_leg_charge = leg.sort()
, useold_leg.perm_flat_from_perm_qind(perm_qind)
. Ignored ifNone
.
- sort_charge(bunch=True)[source]
Sort the
leg
charges (in place).- Parameters:
bunch (bool) – Whether to also group equal charges into larger blocks (usually a good idea).
- Returns:
perm – The permutation
- Return type:
1D ndarray
- property dim
Dimension of the local Hilbert space.
- property onsite_ops
Dictionary of on-site operators for iteration.
Single operators are accessible as attributes.
- add_op(name, op, need_JW=False, hc=None, permute_dense=None)[source]
Add one on-site operators.
- 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 toArray
. 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
, add name toneed_JW_string
.hc (None | False | str) – The name for the hermitian conjugate operator, to be used for
hc_ops
. By default (None
), try to auto-determine it. IfFalse
, disable adding entries tohc_ops
.permute_dense (bool | None) – Flag to enable/disable permutations when converting op from numpy to np_conserved arrays. If True, the operator is permuted with
perm
to account for permutations induced by sorting charges; False disables the permutations. By default (None
), the value ofused_sort_charge
is used.
- remove_op(name)[source]
Remove an added operator.
- Parameters:
name (str) – The name of the operator to be removed.
- state_indices(labels)[source]
Same as
state_index()
, but for multiple labels.
- 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:
- op_needs_JW(name)[source]
Whether an (composite) onsite operator is fermionic and needs a Jordan-Wigner string.
- Parameters:
- Returns:
needs_JW – Whether the operator needs a Jordan-Wigner string, judging from
need_JW_string
.- Return type:
- 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.
- multiply_operators(operators)[source]
Multiply local operators (possibly given by their names) together.
- Parameters:
operators (list of {str |
Array
}) – List of valid operator names (to be translated withget_op()
) or directly on-site operators in the form of npc arrays with'p', 'p*'
label. The operators are multiplied left-to-right.- Returns:
combined_operator – The product of the given operators in a left-to-right multiplication following the usual mathematical convention. For example, if
operators=['Sz', 'Sp', 'Sx']
, the final operator is equivalent tosite.get_op('Sz Sp Sx')
, with the'Sx'
operator acting first on any physical state.- Return type:
- charge_to_JW_signs(charges)[source]
Convert charge values to Jordan-Wigner parity.
Often, charge conservation contains the (parity of) the total fermion number. This information is enough to lift a Jordan-Wigner string applied on the left of a given bond to the virtual leg of an MPS: given the total parity number of fermions
parity[alpha] = N_fermions[alpha] % 2
in each Schmidt state|alpha>
, simply send|alpha> --> (-1)**parity[alpha] |alpha>
. Given the charges values of the Schmidt states|alpha>
, this function returns the corresponding(-1)**parity
Jordan-Wigner signs.- Parameters:
charges (2D or 1D array) – Charge values, last dimension is len
chinfo.qnumber
. We choose the convention that these charge values correspond to an “incoming” leg withqconj=+1
.- Returns:
Should only have values +1 or -1.
- Return type:
JW_signs
- 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
- 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__
withsave_dict_content()
, storing the format under the attribute'format'
.