TwoSiteMixer

class tenpy.algorithms.dmrg.TwoSiteMixer(mixer_params)[source]

Bases: tenpy.algorithms.dmrg.SingleSiteMixer

Mixer for two-site DMRG.

This is the two-site version of the mixer described in [Hubig2015]. Equivalent to the DensityMatrixMixer, but never construct the full density matrix.

Methods

perturb_svd(self, engine, theta, i0, move_right)

Mix extra terms to theta and perform an SVD.

subspace_expand(self, engine, theta, i0, …)

Expand the MPS subspace, to allow the bond dimension to increase.

update_amplitude(self, sweeps)

Update the amplitude, possibly disable the mixer.

perturb_svd(self, engine, theta, i0, move_right)[source]

Mix extra terms to theta and perform an SVD.

Parameters
engineEngine

The DMRG engine calling the mixer.

thetaArray

The optimized wave function, prepared for svd.

i0int

Site index; theta lives on i0, i0+1.

update_LPbool

Whether to calculate the next env.LP[i0+1].

update_RPbool

Whether to calculate the next env.RP[i0].

Returns
UArray

Left-canonical part of theta. Labels '(vL.p0)', 'vR'.

S1D ndarray | 2D Array

Without mixer just the singluar values of the array; with mixer it might be a general matrix; see comment above.

VHArray

Right-canonical part of theta. Labels 'vL', '(vR.p1)'.

errTruncationError

The truncation error introduced.

subspace_expand(self, engine, theta, i0, move_right, next_B)

Expand the MPS subspace, to allow the bond dimension to increase.

This is the subspace expansion following [Hubig2015].

Parameters
engineSingleSiteDMRGEngine | TwoSiteDMRGEngine

‘Engine’ for the DMRG algorithm

thetaArray

Optimized guess for the ground state of the effective local Hamiltonian.

i0int

Site index at which the local update has taken place.

move_rightbool

Whether the next i0 of the sweep will be right or left of the current one.

next_BArray

The subspace expansion requires to change the tensor on the next site as well. If move_right, it should correspond to engine.psi.get_B(i0+1, form='B'). If not move_right, it should correspond to engine.psi.get_B(i0-1, form='A').

Returns
theta :

Local MPS tensor at site i0 after subspace expansion.

next_B :

MPS tensor at site i0+1 or i0-1 (depending on sweep direction) after subspace expansion.

update_amplitude(self, sweeps)

Update the amplitude, possibly disable the mixer.

Parameters
sweepsint

The number of performed sweeps, to check if we need to disable the mixer.

Returns
mixerMixer | None

Returns self if we should continue mixing, or None, if the mixer should be disabled.