Site¶
full name: tenpy.networks.site.Site
parent module:
tenpy.networks.site
type: class
Inheritance Diagram
Methods
|
Initialize self. |
|
Add one on-site operators. |
|
Change the charges of the site (in place). |
|
Load instance from a HDF5 file. |
|
Return the hermitian conjugate of a given operator. |
|
Return operator of given name. |
|
Multiply operator 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. |
|
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, **site_ops)[source]¶ Bases:
tenpy.tools.hdf5_io.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 obained withget_op()
. The operator namesId
andJW
are reserved for the identy 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.- 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'
.
-
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)
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], ['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()) array([[ 0., 1.], [ 0., 0.]]) >>> print(site.get_op('Sminus').to_ndarray()) array([[ 0., 0.], [ 1., 0.]]) >>> print(site.get_op('Splus Sminus').to_ndarray()) array([[ 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 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()
, useold_leg.perm_flat_from_perm_qind(perm_qind)
. Ignored ifNone
.
-
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)[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 antries tohc_ops
.
-
remove_op
(name)[source]¶ Remove an added operator.
- Parameters
name (str) – The name of the operator to be removed.
-
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
-
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.
- 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
-
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()
.
-
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'
.