MPOEnvironment¶
full name: tenpy.networks.mpo.MPOEnvironment
parent module:
tenpy.networks.mpo
type: class
Inheritance Diagram

Methods
|
|
Update short_term_keys for the cache and possibly preload tensors. |
|
Delete all partial contractions except the left-most LP and right-most RP. |
|
Delete stored part strictly to the left of site i. |
|
Delete stored part scrictly to the right of site i. |
|
Calculate expectation values for a bunch of terms and sum them up. |
|
Calculate the energy by a full contraction of the network. |
|
|
Calculate LP at given site from nearest available one (including i). |
Return number of physical sites in the contractions of get_LP(i). |
|
|
Calculate RP at given site from nearest available one (including i). |
Return number of physical sites in the contractions of get_RP(i). |
|
Return data for (re-)initialization of the environment. |
|
Return True if LP left of site i is stored. |
|
Return True if RP right of site i is stored. |
|
|
Build an initial left part |
|
Build initial right part |
(Re)initialize first LP and last RP from the given data. |
|
|
Store part to the left of site i. |
|
Store part to the right of site i. |
Sanity check, raises ValueErrors, if something is wrong. |
- class tenpy.networks.mpo.MPOEnvironment(bra, H, ket, cache=None, **init_env_data)[source]¶
Bases:
BaseEnvironment
Stores partial contractions of \(<bra|H|ket>\) for an MPO H.
The network for a contraction \(<bra|H|ket>\) of an MPO H between two MPS looks like:
| .------>-M[0]-->-M[1]-->-M[2]-->- ... ->--. | | | | | | | | ^ ^ ^ | | | | | | | | LP[0] ->-W[0]-->-W[1]-->-W[2]-->- ... ->- RP[-1] | | | | | | | | ^ ^ ^ | | | | | | | | .------<-N[0]*-<-N[1]*-<-N[2]*-<- ... -<--.
We use the following label convention (where arrows indicate qconj):
| .-->- vR vL ->-. | | | | LP->- wR wL ->-RP | | | | .--<- vR* vL* -<-.
See
BaseEnvironment
for further details.- Parameters
bra (
MPS
) – The MPS to project on. Should be given in usual ‘ket’ form; we call conj() on the matrices directly.H (
MPO
) – The MPO sandwiched between bra and ket. Should have ‘IdL’ and ‘IdR’ set on the first and last bond.ket (
MPS
) – The MPS on which H acts. May be identical with bra.**init_env_data – Further keyword arguments with initialization data, as returned by
get_initialization_data()
. Seeinitialize_first_LP_last_RP()
for details on these parameters.
- init_first_LP_last_RP(init_LP=None, init_RP=None, age_LP=0, age_RP=0, start_env_sites=None)[source]¶
(Re)initialize first LP and last RP from the given data.
If init_LP and init_RP are not given, we try to find sensible initial values. Dummy environments can by built with
init_LP()
andinit_RP()
, especially for finite MPS.For infinite MPS, we try to converge the environments with one of two methods:
If start_env_sites is given as an integer, contract that many sites into the environment from the given init_LP and init_RP or new trivial environments built with
init_LP()
/init_RP()
.If start_env_sites is None, and
bra
isket
, get init_LP and init_RP withMPOTransferMatrix.find_init_LP_RP()
.
- Parameters
init_LP (
None
|Array
) – Initial very left partLP
and very right partRP
. IfNone
, try to build (and converge) them as described above.init_RP (
None
|Array
) – Initial very left partLP
and very right partRP
. IfNone
, try to build (and converge) them as described above.age_LP (int) – The number of physical sites involved into the contraction of init_LP and init_RP.
age_RP (int) – The number of physical sites involved into the contraction of init_LP and init_RP.
start_env_sites (int | None) – Number of sites over which to converge the environment for infinite systems. See above.
- init_LP(i, start_env_sites=0)[source]¶
Build an initial left part
LP
.For start_env_sites > 0, make the assumptions that bra is the same as ket and in canonical form, and that H is a Hamiltonian with the following block-form (up to a permutation of MPO indices; this is the case for any model defined in TeNPy),
\[\begin{split}W = \begin{pmatrix} 1 & C & D \\ 0 & A & B \\ 0 & 0 & 1 \end{pmatrix}\end{split}\]Given that, we can converge the environment even in the thermodynamic limit:
LP[IdL, :, :]
just contains the energy for the left part of the Hamiltonian, contributing just a constant we can ignore (since we only look at relative energies)LP[IdR, :, :] = eye(:, :)
is just the MPS environment. The remaining part is the harder one: we need to converge $C + CA + CAA + CAAA + … $ sandwiched between the MPS. However, H often has finite range, which makes A nil-potent, such that we only need to contract the environment a few times from the left.Todo
Right now, for infinite/long range it just limits the number of iterations. In general, we could calculate the exact $X = C + CA + CAA +…$ with the geometric series by solving the set of linear equation $ X(1-A) = C$ for X, (and analogously $(1-A)X = B$ for the right environment RP).
- get_LP(i, store=True)[source]¶
Calculate LP at given site from nearest available one (including i).
The returned
LP_i
corresponds to the following contraction, where the M’s and the N’s are in the ‘A’ form:| .-------M[0]--- ... --M[i-1]--->- 'vR' | | | | | LP[0]---W[0]--- ... --W[i-1]--->- 'wR' | | | | | .-------N[0]*-- ... --N[i-1]*--<- 'vR*'
- Parameters
- Returns
LP_i – Contraction of everything left of site i, with labels
'vR*', 'wR', 'vR'
for bra, H, ket.- Return type
- get_RP(i, store=True)[source]¶
Calculate RP at given site from nearest available one (including i).
The returned
RP_i
corresponds to the following contraction, where the M’s and the N’s are in the ‘B’ form:| 'vL' ->---M[i+1]-- ... --M[L-1]----. | | | | | 'wL' ->---W[i+1]-- ... --W[L-1]----RP[-1] | | | | | 'vL*' -<---N[i+1]*- ... --N[L-1]*---.
- Parameters
- Returns
RP_i – Contraction of everything right of site i, with labels
'vL*', 'wL', 'vL'
for bra, H, ket.- Return type
- full_contraction(i0)[source]¶
Calculate the energy by a full contraction of the network.
The full contraction of the environments gives the value
<bra|H|ket> `` ignoring the :attr:`~tenpy.networks.mps.MPS.norm` of the `bra` and `ket`, i.e. the total energy (even if bra and ket are not normalized). For this purpose, this function contracts ``get_LP(i0+1, store=False)
andget_RP(i0, store=False)
with appropriate singular values in between.- Parameters
i0 (int) – Site index.
- cache_optimize(short_term_LP=[], short_term_RP=[], preload_LP=None, preload_RP=None)[source]¶
Update short_term_keys for the cache and possibly preload tensors.
- Parameters
short_term_LP (list of int) – i indices for
get_LP()
andget_RP()
, respectively, for which a repeated look-up could happen, i.e., for which tensors should be kept in RAM until the next call to this function.short_term_RP (list of int) – i indices for
get_LP()
andget_RP()
, respectively, for which a repeated look-up could happen, i.e., for which tensors should be kept in RAM until the next call to this function.preload_LP (int | None) – If not None, preload the tensors for the corrsponding
get_LP()
andget_RP()
call, respectively, from disk.preload_RP (int | None) – If not None, preload the tensors for the corrsponding
get_LP()
andget_RP()
call, respectively, from disk.
- expectation_value_terms_sum(term_list)[source]¶
Calculate expectation values for a bunch of terms and sum them up.
This is equivalent to the following expression:
sum([self.expectation_value_term(term)*strength for term, strength in term_list])
However, for effiency, the term_list is converted to an MPO and the expectation value of the MPO is evaluated.
Warning
This function works only for finite bra and ket and does not include normalization factors.
- Parameters
term_list (
TermList
) – The terms and prefactors (strength) to be summed up.- Returns
terms_sum (list of (complex) float) – Equivalent to the expression
sum([self.expectation_value_term(term)*strength for term, strength in term_list])
._mpo – Intermediate results: the generated MPO. For a finite MPS,
terms_sum = _mpo.expectation_value(self)
, for an infinite MPSterms_sum = _mpo.expectation_value(self) * self.L
See also
expectation_value_term
evaluates a single term.
tenpy.networks.mpo.MPO.expectation_value
expectation value density of an MPO.
- get_LP_age(i)[source]¶
Return number of physical sites in the contractions of get_LP(i).
Might be
None
.
- get_RP_age(i)[source]¶
Return number of physical sites in the contractions of get_RP(i).
Might be
None
.
- get_initialization_data(first=0, last=None, include_bra=False, include_ket=False)[source]¶
Return data for (re-)initialization of the environment.
- Parameters
first (int) – The first and last site, to the left and right of which we should return the environments. Defaults to 0 and
L
- 1.last (int) – The first and last site, to the left and right of which we should return the environments. Defaults to 0 and
L
- 1.include_bra (bool) – Whether to also return the
bra
andket
, respectively.include_ket (bool) – Whether to also return the
bra
andket
, respectively.
- Returns
init_env_data – A dictionary with the following entries.
- init_LP, init_RP
Array
LP on the left of site first and RP on the right of site last, which can be used as init_LP and init_RP for the initialization of a new environment.
- age_LP, age_RPint
The number of physical sites involved into the contraction yielding init_LP and init_RP, respectively.
- bra, ket
MPS
References of
bra
andket
. Only included if include_bra and include_ket are True, respectively.
- init_LP, init_RP
- Return type