Abelian-symmetric environment

class ctm.generic_abelian.env_abelian.ENV_ABELIAN(chi=1, state=None, settings=None, init=False, init_method=None, ctm_args=<config.CTMARGS object>, global_args=<config.GLOBALARGS object>)[source]
Parameters:
  • chi (int) – environment bond dimension \(\chi\)

  • state (IPEPS_ABELIAN) – wavefunction

  • settings (NamedTuple or SimpleNamespace (TODO link to definition)) – YAST configuration

  • init (bool) – initialize environment tensors

  • init_method (str) – choice of environment initialization. See init_env().

  • ctm_args (CTMARGS) – CTM algorithm configuration

  • global_args (GLOBALARGS) – global configuration

For each pair of (vertex, on-site tensor) in the elementary unit cell of state, create corresponding environment tensors: Half-row/column tensors T’s and corner tensors C’s. The corner tensors have dimensions \(\chi \times \chi\) and the half-row/column tensors have dimensions \(\chi \times \chi \times D^2\) (D might vary depending on the corresponding dimension of on-site tensor). The environment of each double-layer tensor (A) is composed of eight different tensors:

y\x -1 0 1
 -1  C T C
  0  T A T
  1  C T C

The individual tensors making up the environment of a site are defined by four directional vectors \(d = (x,y)_{\textrm{environment tensor}} - (x,y)_\textrm{A}\) as follows:

C(-1,-1)   T        (1,-1)C
           |(0,-1)
T--(-1,0)--A(0,0)--(1,0)--T
           |(0,1)
C(-1,1)    T         (1,1)C

These environment tensors of some ENV object e are accesed through its members C and T by providing a tuple of coordinates and directional vector to the environment tensor:

coord=(0,0)                # tuple(x,y) identifying vertex on the square lattice
rel_dir_vec_C=(-1,-1)      # tuple(rx,ry) identifying one of the four corner tensors
rel_dir_vec_T=(-1,0)       # tuple(rx,ry) identifying one of the four half-row/column tensors
C_upper_left= e.C[(coord,rel_dir_vec_C)] # return upper left corner tensor of site at coord
T_left= e.T[(coord,rel_dir_vec_T)]       # return left half-row tensor of site at coord

The index-position convention is as follows: Start from the index in the direction “up” <=> (0,-1) and continue anti-clockwise. The reference symmetry signatures are shown on the right:

C--1 0--T--2 0--C        C(+1) (-1)T(+1) (-1)C
|       |       |       (+1)     (+1)      (+1)
0       1       1
0               0
|               |       (-1)               (-1)
T--2         1--T        T(+1)           (-1)T
|               |       (+1)               (+1)
1               2
0       0       0
|       |       |       (-1)     (-1)      (-1)
C--1 1--T--2 1--C        C(+1) (-1)T(+1) (-1)C

Note

The structure of fused double-layer legs, which are carried by T-tensors, is obtained by fusing on-site tensor (ket) with its conjugate (bra). The leg of ket always preceeds bra when fusing.

clone()[source]
Returns:

returns a clone of the environment

Return type:

ENV_ABELIAN

Create a clone of environment with all tensors (their blocks) attached to the computational graph.

Note

This operation preserves gradient tracking.

detach()[source]
Returns:

returns a view of the environment with all C,T tensors detached from computational graph.

Return type:

ENV_ABELIAN

In case of using PyTorch backend, get a detached “view” of the environment. See torch.Tensor.detach.

Note

This operation does not preserve gradient tracking.

to_dense(state, ctm_args=<config.CTMARGS object>, global_args=<config.GLOBALARGS object>)[source]
Parameters:

state (IPEPS_ABELIAN) – abelian-symmetric iPEPS

Returns:

returns equivalent of the environment with all C,T tensors in their dense representation on PyTorch backend.

Return type:

ENV

Create a copy of environment with all on-site tensors as dense possesing no explicit block structure (symmetry). The virtual spaces of on-site tensors in state are added to corresponding spaces of environment’s T tensors to guarantee consistency.

Note

This operations preserves gradients on the returned dense environment.

ctm.generic_abelian.env_abelian.init_env(state, env, init_method=None, ctm_args=<config.CTMARGS object>)[source]
Parameters:
  • state (IPEPS_ABELIAN) – wavefunction

  • env (ENV_ABELIAN) – CTM environment

  • init_method (str) – desired initialization method

  • ctm_args (CTMARGS) – CTM algorithm configuration

Initializes the environment env according to one of the supported options specified by CTMARGS.ctm_env_init_type

  • CTMRG - tensors C and T are built from the on-site tensors of state