pyblock.algorithm

pyblock.algorithm.dmrg

DMRG algorithm.

class pyblock.algorithm.dmrg.DMRG(mpo, mps, bond_dims, noise=0.0, contractor=None)

Bases: object

DMRG algorithm.

Attributes:
n_sites : int
Number of sites/orbitals
dot : int
Two-dot (2) or one-dot (1) scheme.
bond_dims : list(int) or int
Bond dimension for each sweep.
noise : list(float) or float
Noise prefactor for each sweep.
energies : list(float)
Energies collected for all sweeps.
blocking(i, forward, bond_dim, noise)

Perform one blocking iteration.

Args:
i : int
Site index of left dot
forward : bool
Direction of current sweep. If True, sweep is performed from left to right.
bond_dim : int
Bond dimension of current sweep.
noise : float
Noise prefactor of current sweep.
Returns:
energy : float
Ground state energy.
error : float
Sum of discarded weights.
ndav : int
Number of Davidson iterations.
construct_envs()
set_mps(tags, wfn)
solve(n_sweeps, tol, forward=True, two_dot_to_one_dot=-1)

Perform DMRG algorithm.

Args:
n_sweeps : int
Maximum number of sweeps.
tol : float
Energy convergence threshold.
forward : bool
Direction of first sweep. If True, sweep is performed from left to right.
two_dot_to_one_dot : int or -1
Indicating when to switch to one-dot scheme. If -1, no switching.
Returns:
energy : float
Final ground state energy.
sweep(forward, bond_dim, noise)

Perform one sweep iteration.

Args:
forward : bool
Direction of current sweep. If True, sweep is performed from left to right.
bond_dims : int
Bond dimension of current sweep.
noise : float
Noise prefactor of current sweep.
Returns:
energy : float
Ground state energy.
update_one_dot(i, forward, bond_dim, noise)

Update local site in one-dot scheme.

Args:
i : int
Site index of left dot
forward : bool
Direction of current sweep. If True, sweep is performed from left to right.
bond_dim : int
Bond dimension of current sweep.
noise : float
Noise prefactor of current sweep.
Returns:
energy : float
Ground state energy.
error : float
Sum of discarded weights.
ndav : int
Number of Davidson iterations.
update_two_dot(i, forward, bond_dim, noise)

Update local sites in two-dot scheme.

Args:
i : int
Site index of left dot
forward : bool
Direction of current sweep. If True, sweep is performed from left to right.
bond_dim : int
Bond dimension of current sweep.
noise : float
Noise prefactor of current sweep.
Returns:
energy : float
Ground state energy.
error : float
Sum of discarded weights.
ndav : int
Number of Davidson iterations.
exception pyblock.algorithm.dmrg.DMRGError

Bases: Exception

class pyblock.algorithm.dmrg.MovingEnvironment(n_sites, center, dot, tn, iprint=True)

Bases: object

Environment blocks in DMRG.

Attributes:
n_sites : int
Number of sites/orbitals.
dot : int
Two-dot (2) or one-dot (1) scheme.
tnc : TensorNetwork
The tensor network <bra|H|ket> before contraction.
pos : int
Current site position of left dot.
envs : dict(int -> TensorNetwork)
DMRG Environment for different positions of left dot.
init_environments()

Initialize DMRG Environment blocks by contraction.

move_to(i)

Change the current left dot site to i (by zero or one site).

prepare_sweep(dot, pos)

Prepare environment for next sweep.

pyblock.algorithm.dmrg.pprint(*args, **kwargs)

pyblock.algorithm.time_evolution

Imaginary time evolution algorithm.

class pyblock.algorithm.time_evolution.ExpoApply(mpo, mps, beta, bond_dims, contractor=None, canonical_form=None)

Bases: object

Apply exp(beta H) to MPS (tangent space approach).

Attributes:
n_sites : int
Number of sites/orbitals
dot : int
Two-dot (2) or one-dot (1) scheme.
bond_dims : list(int) or int
Bond dimension for each sweep.
energies : list(float)
Energies collected for all sweeps.
canonical_form : list(str)
The canonical form of initial MPS. If None, assumming it is LL..CC..RR (dot=2) or LL..C..RR (dot=1)
blocking(i, forward, bond_dim, beta)

Perform one blocking iteration.

Args:
i : int
Site index of left dot
forward : bool
Direction of current sweep. If True, sweep is performed from left to right.
bond_dim : int
Bond dimension of current sweep.
beta : float
Beta parameter in \(\exp(-\beta H)\).
Returns:
energy : float
Energy of state \(\exp(-\beta H) |\psi\rangle\).
normsq : float
Self inner product of state \(\exp(-\beta H) |\psi\rangle\).
error : float
Sum of discarded weights.
nexpos : (int, int)
Number of operator multiplication in forward and backward exponential step.
construct_envs()
set_mps(tags, wfn)
solve(n_sweeps, forward=True, two_dot_to_one_dot=-1, current_beta=0.0, iprint=True)

Perform time evolution algorithm.

Args:
n_sweeps : int
Maximum number of sweeps (two sweeps will calculate one exp(-beta H) application)
forward : bool
Direction of first sweep. If True, sweep is performed from left to right.
two_dot_to_one_dot : int or -1
Indicating when to switch to one-dot scheme. If -1, no switching.
Returns:
energy : float
Energy of state \(\exp(-\beta * (n_{sweeps}/2) H) |\psi\rangle\).
sweep(forward, bond_dim, beta)

Perform one sweep iteration.

Args:
forward : bool
Direction of current sweep. If True, sweep is performed from left to right.
bond_dim : int
Bond dimension of current sweep.
beta : float
Beta parameter in \(\exp(-\beta H)\).
Returns:
energy : float
Energy of state \(\exp(-\beta H) |\psi\rangle\).
normsq : float
Self inner product of state \(\exp(-\beta H) |\psi\rangle\).
error : float
Largest sum of discarded weights.
update_one_dot(i, forward, bond_dim, beta)

Update local site in one-dot scheme.

Args:
i : int
Site index of left dot
forward : bool
Direction of current sweep. If True, sweep is performed from left to right.
bond_dim : int
Bond dimension of current sweep.
beta : float
Beta parameter in \(\exp(-\beta H)\).
Returns:
energy : float
Energy of state \(\exp(-\beta H) |\psi\rangle\).
normsq : float
Self inner product of state \(\exp(-\beta H) |\psi\rangle\).
error : float
Sum of discarded weights.
nexpos : (int, int)
Number of operator multiplication in forward and backward exponential step.
update_two_dot(i, forward, bond_dim, beta)

Update local sites in two-dot scheme.

Args:
i : int
Site index of left dot
forward : bool
Direction of current sweep. If True, sweep is performed from left to right.
bond_dim : int
Bond dimension of current sweep.
beta : float
Beta parameter in \(\exp(-\beta H)\).
Returns:
energy : float
Energy of state \(\exp(-\beta H) |\psi\rangle\).
normsq : float
Self inner product of state \(\exp(-\beta H) |\psi\rangle\).
error : float
Sum of discarded weights.
nexpos : (int, int)
Number of operator multiplication in forward and backward exponential step.
exception pyblock.algorithm.time_evolution.TEError

Bases: Exception

pyblock.algorithm.time_evolution.pprint(*args, **kwargs)

pyblock.algorithm.expectation

Expectation calculation for <MPS1|MPO|MPS2>.

class pyblock.algorithm.expectation.Expect(mpo, bra_mps, ket_mps, bra_canonical_form=None, ket_canonical_form=None, contractor=None)

Bases: object

Calculation of expectation value <MPS1|MPO|MPS2>. The expectation value can be evaluated at current canonical form, when forward is None. Otherwise, it is recommended that bond_dim (bond dimension) of the MPS is given, and one sweep will be performed and expectation value will be evaluated at each canonical form. The sweep will thus change the canonical form of MPS and MPSInfo in contractor. Therefore, it is recommended that a copy of MPS and MPSInfo is used here.

Attributes:
n_sites : int
Number of sites/orbitals
dot : int
Two-dot (2) or one-dot (1) scheme.
blocking(i, forward, bond_dim)

Perform one blocking iteration.

Args:
i : int
Site index of left dot
forward : bool or None
Direction of current sweep. If True, sweep is performed from left to right. If None, no sweep is performed (local evaluation).
bond_dim : int
Bond dimension of current sweep.
Returns:
result : float
Expectation value.
construct_envs()
get_1pdm(normsq=1)

1-particle density matrix.

get_1pdm_spatial(normsq=1)

Spatial 1-particle density matrix.

solve(forward=None, bond_dim=-1)

Calculate expectation value.

Args:
forward : bool or None
Direction of current sweep. If True, sweep is performed from left to right. If None, no sweep is performed (local evaluation).
bond_dim : int
Bond dimension of current sweep.
Returns:
expect : float
Expectation value.
update_one_dot(i, forward, bond_dim)

Update local sites in one-dot scheme.

Args:
i : int
Site index of left dot
forward : bool or None
Direction of current sweep. If True, sweep is performed from left to right. If None, no sweep is performed (local evaluation).
bond_dim : int
Bond dimension of current sweep.
Returns:
expect : float
Expectation value.
update_two_dot(i, forward, bond_dim)

Update local sites in two-dot scheme.

Args:
i : int
Site index of left dot
forward : bool or None
Direction of current sweep. If True, sweep is performed from left to right. If None, no sweep is performed (local evaluation).
bond_dim : int
Bond dimension of current sweep.
Returns:
expect : float
Expectation value.
exception pyblock.algorithm.expectation.ExpectationError

Bases: Exception

pyblock.algorithm.expectation.pprint(*args, **kwargs)

pyblock.algorithm.compress

Compression algorithm.

class pyblock.algorithm.compress.Compress(mpo, mps, ket_mps, bond_dims, noise, ket_bond_dim=-1, bra_canonical_form=None, ket_canonical_form=None, contractor=None)

Bases: object

Compression after apply MPO on MPS.

Attributes:
n_sites : int
Number of sites/orbitals
dot : int
Two-dot (2) or one-dot (1) scheme.
bond_dims : list(int) or int
Bond dimension for each sweep.
blocking(i, forward, bond_dim, ket_bond_dim, noise, beta)

Perform one blocking iteration.

Args:
i : int
Site index of left dot
forward : bool
Direction of current sweep. If True, sweep is performed from left to right.
bond_dim : int
Bra bond dimension of current sweep.
ket_bond_dim : int
Ket bond dimension of current sweep.
noise : float
Noise prefactor of current sweep.
beta : float
Not used.
Returns:
norm : float
Norm of compressed state.
error : float
Sum of discarded weights.
nexpo : int
Number of operator multiplication steps.
construct_envs()
set_mps(tags, wfn)
solve(n_sweeps, tol, forward=True, two_dot_to_one_dot=-1)

Perform Compression algorithm.

Args:
n_sweeps : int
Maximum number of sweeps.
tol : float
Norm convergence threshold.
forward : bool
Direction of first sweep. If True, sweep is performed from left to right.
two_dot_to_one_dot : int or -1
Indicating when to switch to one-dot scheme. If -1, no switching.
Returns:
nrom : float
Final compressed stae norm.
sweep(forward, bond_dim, ket_bond_dim, noise, beta)

Perform one sweep iteration.

Args:
forward : bool
Direction of current sweep. If True, sweep is performed from left to right.
bond_dim : int
Bra bond dimension of current sweep.
ket_bond_dim : int
Ket bond dimension of current sweep.
noise : float
Noise prefactor of current sweep.
beta : float
Not used.
Returns:
norm : float
Norm of compressed state.
update_one_dot(i, forward, bond_dim, ket_bond_dim, noise, beta)

Update local sites in one-dot scheme.

Args:
i : int
Site index of left dot
forward : bool
Direction of current sweep. If True, sweep is performed from left to right.
bond_dim : int
Bra bond dimension of current sweep.
ket_bond_dim : int
Ket bond dimension of current sweep.
beta : float
Not used.
Returns:
norm : float
Norm of compressed state.
error : float
Sum of discarded weights.
nexpos : (int, int)
Number of operator multiplication steps.
update_two_dot(i, forward, bond_dim, ket_bond_dim, noise, beta)

Update local sites in two-dot scheme.

Args:
i : int
Site index of left dot
forward : bool
Direction of current sweep. If True, sweep is performed from left to right.
bond_dim : int
Bra bond dimension of current sweep.
ket_bond_dim : int
Ket bond dimension of current sweep.
beta : float
Not used.
Returns:
norm : float
Norm of compressed state.
error : float
Sum of discarded weights.
nexpos : (int, int)
Number of operator multiplication steps.
exception pyblock.algorithm.compress.CompressionError

Bases: Exception

pyblock.algorithm.compress.pprint(*args, **kwargs)