SubspaceExpansion¶
full name: tenpy.algorithms.dmrg.SubspaceExpansion
parent module:
tenpy.algorithms.dmrg
type: class
Inheritance Diagram

Methods
|
|
|
Preform a subspace expansion of a single-site wave function on one side. |
Update the amplitude, possibly disable the mixer. |
Class Attributes and Properties
how many sites the theta in perturb_svd should have |
- class tenpy.algorithms.dmrg.SubspaceExpansion(options, sweep_activated)[source]¶
Bases:
Mixer
Mixer of a direct subspace expansion for both single-site DMRG and two-site DMRG.
Performs a subspace expansion following [hubig2015]. It views theta as a single-site wave function.
It is actually not necessary to fill the next_B with zeros as described in Hubig’s paper; rather we directly project the wR leg of VH onto the IdL index, which corresponds to taking the original theta (up to truncation).
Pictorially for a subspace expansion of the left U while moving right:
| --theta--- .-theta--- --U---S---VH--- | | | | | | | =dot=> LP---H0--mix_L-- =SVD=> | .---[IdL] | | | (vL.p0),(wR.vR)
For a left-move:
| --theta--- --theta--. ---U---S---VH-- | | | | | | | =dot=> --mix_R-H0---RP =SVD=> [IdR]-. | | | | (vL.wL),(p0.vR)
Note that only the U during the right move (or VH during left-move) is guaranteed to be an isometry as expected in the canonical form; VH during the right-move contains a “subspace expansion” and does not fulfill the canonical
VH.dot(VH.conj().T) == eye
. Moreover, the U constructed from a two-site theta viewing the'(p1.vR)
leg as just vR in the right-move is (mathematically) equivalent to the U returned by theDensityMatrixMixer
(up to degenerate singular values).In other words, the
SubspaceExpansion
andDensityMatrixMixer
should produce equivalent results; they only differ in the way they calculate U and V internally.- update_sites = 1¶
how many sites the theta in perturb_svd should have
- perturb_svd(engine, theta, i0, move_right)[source]¶
Preform a subspace expansion of a single-site wave function on one side.
- Parameters
engine (
DMRGEngine
) – The DMRG engine calling the mixer.theta (
Array
) – The optimized wave function, prepared for svd, with labels'(vL.p0)', 'vR'
for right move, or'vL', '(p0.vR)'
for left move.i0 (int) – The site index where theta lives.
move_right (bool) – Whether we move to the right (
True
) or left (False
).
- Returns
U, VH (
Array
) – Left and right part of the subspace-expanded svd. Always such that the contractionU.S.VH
resembles the original theta up to truncation error. U has labels'(vL.p0)', 'vR'
(right move) or'vL', 'vR'
(left move). V has labels'vL', 'vR'
(right move) or'(vL.p0)', 'vR'
(left move). For a right move, only U is canonical; for a left-move only VH is canonical.S (1D ndarray) – (Perturbed) singular values on the new bond.
err (
TruncationError
) – The truncation error introduced.S_approx (ndarray) – Same as S.