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 strictly to the right of site i. |
|
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()
. Seeinit_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 corresponding
get_LP()
andget_RP()
call, respectively, from disk.preload_RP (int | None) – If not None, preload the tensors for the corresponding
get_LP()
andget_RP()
call, respectively, from disk.
- 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: