Reduced Density Matrices

ctm.generic_abelian.rdm.open_C2x2_LD(coord, state, env, fusion_level='full', verbosity=0)[source]
Parameters:
  • coord (tuple(int,int)) – vertex (x,y) for which reduced density matrix is constructed

  • state (IPEPS_ABELIAN) – underlying wavefunction

  • env (ENV_ABELIAN) – environment corresponding to state

  • fusion_level (str) – controls fusion of indices of open enlarged corner

  • verbosity (int) – logging verbosity

Returns:

left-down enlarged corner with open physical indices

Return type:

yast.tensor

Computes lower-down enlarged corner centered on vertex coord by contracting the following tensor network:

      s,s'
|  | /
T--a^+a--
|  |
C--T-----

The physical indices s and s’ of on-site tensor \(a\) at vertex coord and its hermitian conjugate \(a^\dagger\) are left uncontracted

Depending on fusion_level, the resulting tensor is:

rank-3 : fusion_level= 'full'             rank-5 : fusion_level= 'basic'

  0
 /\   2 (s,s')                            0  1  4 (s,s')
|  | /                                    |  | /
T--a^+a--\                                T--a^+a--3
|  |      >--1                            |  |
C--T-----/                                C--T-----2
ctm.generic_abelian.rdm.rdm1x1(coord, state, env, sym_pos_def=False, verbosity=0)[source]
Parameters:
  • coord (tuple(int,int)) – vertex (x,y) for which reduced density matrix is constructed

  • state (IPEPS_ABELIAN) – underlying wavefunction

  • env (ENV_ABELIAN) – environment corresponding to state

  • verbosity (int) – logging verbosity

Returns:

1-site reduced density matrix with indices \(s;s'\)

Return type:

torch.tensor

Computes 1-site reduced density matrix \(\rho_{1x1}\) centered on vertex coord by contracting the following tensor network:

C--T-----C
|  |     |
T--a^+a--T
|  |     |
C--T-----C

where the physical indices s and s’ of on-site tensor \(A\) at vertex coord and it’s hermitian conjugate \(A^\dagger\) are left uncontracted

ctm.generic_abelian.rdm.rdm1x2(coord, state, env, sym_pos_def=False, verbosity=0)[source]
Parameters:
  • coord (tuple(int,int)) – vertex (x,y) specifies position of 1x2 subsystem

  • state (IPEPS_ABELIAN) – underlying wavefunction

  • env (ENV_ABELIAN) – environment corresponding to state

  • verbosity (int) – logging verbosity

Returns:

2-site reduced density matrix with indices \(s_0s_1;s'_0s'_1\)

Return type:

yast.tensor

Computes 2-site reduced density matrix \(\rho_{1x2}\) of a vertical 1x2 subsystem using following strategy:

  1. compute four individual corners

  2. construct upper and lower half of the network

  3. contract upper and lower halt to obtain final reduced density matrix

C--T------------------C = C2x2_LU(coord)--------C1x2(coord)
|  |                  |   |                     |
T--A^+A(coord)--------T   C2x2_LD(coord+(0,1))--C1x2(coord+0,1))
|  |                  |
T--A^+A(coord+(0,1))--T
|  |                  |
C--T------------------C

The physical indices s and s’ of on-sites tensors \(A\) (and \(A^\dagger\)) at vertices coord, coord+(0,1) are left uncontracted

ctm.generic_abelian.rdm.rdm2x1(coord, state, env, sym_pos_def=False, verbosity=0)[source]
Parameters:
  • coord (tuple(int,int)) – vertex (x,y) specifies position of 2x1 subsystem

  • state (IPEPS_ABELIAN) – underlying wavefunction

  • env (ENV_ABELIAN) – environment corresponding to state

  • verbosity (int) – logging verbosity

Returns:

2-site reduced density matrix with indices \(s_0s_1;s'_0s'_1\)

Return type:

yast.tensor

Computes 2-site reduced density matrix \(\rho_{2x1}\) of a horizontal 2x1 subsystem using following strategy:

  1. compute four individual corners

  2. construct right and left half of the network

  3. contract right and left halt to obtain final reduced density matrix

C--T------------T------------------C = C2x2_LU(coord)--C2x2(coord+(1,0))
|  |            |                  |   |               |
T--A^+A(coord)--A^+A(coord+(1,0))--T   C2x1_LD(coord)--C2x1(coord+(1,0))
|  |            |                  |
C--T------------T------------------C

The physical indices s and s’ of on-sites tensors \(A\) (and \(A^\dagger\)) at vertices coord, coord+(1,0) are left uncontracted

ctm.generic_abelian.rdm.rdm2x2(coord, state, env, sym_pos_def=False, verbosity=0)[source]
Parameters:
  • coord (tuple(int,int)) – vertex (x,y) specifies upper left site of 2x2 subsystem

  • state (IPEPS_ABELIAN) – underlying wavefunction

  • env (ENV_ABELIAN) – environment corresponding to state

  • verbosity (int) – logging verbosity

Returns:

4-site reduced density matrix with indices \(s_0s_1s_2s_3;s'_0s'_1s'_2s'_3\)

Return type:

yast.tensor

Computes 4-site reduced density matrix \(\rho_{2x2}\) of 2x2 subsystem specified by the vertex coord of its upper left corner using strategy:

  1. compute four individual corners

  2. construct upper and lower half of the network

  3. contract upper and lower half to obtain final reduced density matrix

C--T------------------T------------------C = C2x2_LU(coord)--------C2x2(coord+(1,0))
|  |                  |                  |   |                     |
T--a^+a(coord)--------a^+a(coord+(1,0))--T   C2x2_LD(coord+(0,1))--C2x2(coord+(1,1))
|  |                  |                  |
T--a^+a(coord+(0,1))--a^+a(coord+(1,1))--T
|  |                  |                  |
C--T------------------T------------------C

The physical indices s and s’ of on-sites tensors \(A\) (and \(A^\dagger\)) at vertices coord, coord+(1,0), coord+(0,1), and coord+(1,1) are left uncontracted and given in the same order:

s0 s1
s2 s3

Specific RDMs for Kagome iPEPS

ctm.pess_kagome_abelian.rdm_kagome.double_layer_a(state, coord, open_sites=[], force_cpu=False, verbosity=0)[source]
Parameters:
  • state (IPEPS_KAGOME_ABELIAN) – underlying wavefunction

  • coord (tuple(int,int)) – vertex (x,y) for which the reduced density matrix is constructed

  • open_sites (list(int)) – a list DoFs to leave open (uncontracted).

  • force_cpu (bool) – perform on CPU

Returns:

result of (partial) contraction of double-layer tensor

Return type:

yast.Tensor

Build double-layer tensor of Kagome iPEPS with open, partially or fully contracted physical space of 3 DoFs on down triangle:

      u(-)                             (+)
      |                                /
(-)l--\                          (+)--A*--(-)         (-)
       \                          (-)/|\ \            /
       s0--s2--r (+)         ->       | | \  -> (-)--a*a--(+)
        | /                        s' 0 1 2         / \
        |/   <- DOWN_T                ? ? ?       (+)  s,s'
       s1                           s 0 1 2
        |                             | | /
     (+)d                         (-)\|/ /
                                 (-)--A--(+)
                                  (+)/

Default results in contraction over all 3 DoFs. Physical indices are aggregated into a single index with structure \(|ket \rangle\langle bra| = s_0,...,s_2;s'_0,...,s'_2\).

The available choices for open_sites are: [], [0], [1], [2], [0,1], [0,2], [1,2], and [0,1,2].

ctm.pess_kagome_abelian.rdm_kagome.enlarged_corner(coord, state, env, corner, open_sites=[], force_cpu=False, verbosity=0)[source]
Parameters:
  • coord (tuple(int,int)) – vertex (x,y) for which the enlarged corner is constructed

  • state (IPEPS_KAGOME_ABELIAN) – underlying wavefunction

  • env (ENV_ABELIAN) – environment corresponding to state

  • corner (str) – which corner to construct. The four options are: ‘LU’, ‘RU’, ‘RD’, and ‘LD’ for “left up” corner, “right up” corner, “right down” corner, and “left down” corner.

  • open_sites (list(int)) – a list DoFs to leave open (uncontracted).

  • force_cpu (bool) – perform on CPU

Returns:

result of (partial) contraction of double-layer tensor

Return type:

yast.tensor

Builds enlarged corner relative to the site at coord from the environment:

C---T---                            |   |
|   |                            --a*a--T
T--a*a--                            |   |
|   |     for corner='LU', or    ---T---C  for corner='RD'

The resulting tensor is always reshaped into either rank-2 or rank-3 if some DoFs are left open on the double-layer. In the latter case, these open physical indices are aggregated into the last index of the resulting tensor. The index-ordering convention for enlarged corners follows convention for corner tensors of the environment env.

If open_sites=0 returned tensor has rank-2, where env. indices and auxiliary indices of double-layer tensor in the same direction were fused into a single index. If some DoFs remain open, then returned tensor is rank-3 with extra index carrying all physical DoFs fused in :math:`|ket ranglelangle bra| order:

C---T---\                             C---T---\
|   |    --1                          |   |    --1
T--a*a--/                             T--a*a--/
 \ /                                   \ / \
  |                                     |   2
  0           for open_sites=[], or     0           for non-empty open_sites
ctm.pess_kagome_abelian.rdm_kagome.rdm1x1_kagome(coord, state, env, sites_to_keep=('A', 'B', 'C'), force_cpu=False, sym_pos_def=False, verbosity=0, **kwargs)[source]
Parameters:
  • coord (tuple(int,int)) – vertex (x,y) for which reduced density matrix is constructed

  • state (IPEPS_KAGOME_ABELIAN) – underlying wavefunction

  • env (ENV_ABELIAN) – environment corresponding to state

  • verbosity (int) – logging verbosity

  • sites_to_keep – physical degrees of freedom to be kept. Default: “ABC” - keep all the DOF

  • force_cpu (bool) – perform on CPU

  • sym_pos_def (bool) – make reduced density matrix positive-(semi)definite

Returns:

1-site reduced density matrix with indices \(s;s'\)

Return type:

torch.tensor

Compute 1-kagome-site reduced density matrix \(\rho_{1x1,\textrm{sites_to_keep}}\) centered on vertex coord:

y\x -1 0   1
-1  C1 T4  C4
 0  T1 a*a T3
 1  C2 T2  C3

The physical indices are ordered as \(|ket \rangle\langle bra|\) from on-site tensor A (ket) and then A^dag (bra).

ctm.pess_kagome_abelian.rdm_kagome.rdm2x2_dn_triangle_with_operator(coord, state, env, op, force_cpu=False, verbosity=0, **kwargs)[source]
Parameters:
  • coord (tuple(int,int)) – vertex (x,y) for which the reduced density matrix is constructed

  • state (IPEPS_KAGOME_ABELIAN) – underlying wavefunction

  • env (ENV_ABELIAN) – environment corresponding to state

  • verbosity (int) – logging verbosity

  • op (yast.tensor) – operator to be contracted. It is expected that the op is either rank-6 tensor of shape [physical_dim]*6 or rank-2 tensor of shape [physical_dim**3]*2 (fused bra and ket spaces)

  • force_cpu (bool) – perform on CPU

Returns:

normalized expectation value of the operator op and the norm of the reduced density matrix

Return type:

yast.tensor, yast.tensor

Returns a normalized expectation value of operator inserted into down triangle of upper left corner of 2x2 subsystem:

C    T             T          C
     a             a
     |             |
T b--\          b--\
      \        /    \
      s0--s2--d     XX--XX--d T
       | /           | /
       |/            |/
      s1            XX
       |             |
       c             c
      /             /
     a             a
     |             |
T b--\          b--\
      \        /    \
      XX--XX--d     XX--XX--d T
       | /           | /
       |/            |/
      XX            XX
       |             |
       c             c
C      T             T        C
ctm.pess_kagome_abelian.rdm_kagome.rdm2x2_kagome(coord, state, env, sites_to_keep_00=('A', 'B', 'C'), sites_to_keep_10=('A', 'B', 'C'), sites_to_keep_01=('A', 'B', 'C'), sites_to_keep_11=('A', 'B', 'C'), force_cpu=False, sym_pos_def=False, verbosity=0, **kwargs)[source]
Parameters:
  • coord (tuple(int,int)) – vertex (x,y) specifies upper left site of 2x2 subsystem

  • state (IPEPS_KAGOME_ABELIAN) – underlying wavefunction

  • env (ENV_ABELIAN) – environment corresponding to state

  • verbosity (int) – logging verbosity

  • sites_to_keep_00 – physical sites needed for the unit cell at coord + (0, 0)

  • sites_to_keep_10 – physical sites needed for the unit cell at coord + (1, 0)

  • sites_to_keep_01 – physical sites needed for the unit cell at coord + (0, 1)

  • sites_to_keep_11 – physical sites needed for the unit cell at coord + (1, 1)

  • force_cpu (bool) – perform on CPU

  • sym_pos_def (bool) – make reduced density matrix positive-(semi)definite

Returns:

4-site reduced density matrix with indices \(s_0s_1s_2s_3;s'_0s'_1s'_2s'_3\)

Return type:

yast.Tensor

Computes 4-site reduced density matrix \(\rho_{2x2}\) of 2x2 subsystem specified by the vertex coord of its upper left corner using strategy:

  1. compute four individual corners

  2. construct upper and lower half of the network

  3. contract upper and lower half to obtain final reduced density matrix

C--T------------------T------------------C = C2x2_LU(coord)--------C2x2_RU(coord+(1,0))
|  |                  |                  |   |                     |
T--A^+A(coord)--------A^+A(coord+(1,0))--T   C2x2_LD(coord+(0,1))--C2x2_RD(coord+(1,1))
|  |                  |                  |
T--A^+A(coord+(0,1))--A^+A(coord+(1,1))--T
|  |                  |                  |
C--T------------------T------------------C

The physical indices s and s’ of on-sites tensors \(A\) (and \(A^\dagger\)) at vertices coord, coord+(1,0), coord+(0,1), and coord+(1,1) are left uncontracted and given in the same order:

s0 s1
s2 s3
ctm.pess_kagome_abelian.rdm_kagome.rdm2x2_up_triangle_open(coord, state, env, sym_pos_def=False, force_cpu=False, verbosity=0, **kwargs)[source]
Parameters:
  • coord (tuple(int,int)) – vertex (x,y) specifies upper left site of 2x2 subsystem

  • state (IPEPS_KAGOME_ABELIAN) – underlying wavefunction

  • env (ENV_ABELIAN) – environment corresponding to state

  • verbosity (int) – logging verbosity

  • force_cpu (bool) – perform on CPU

  • sym_pos_def (bool) – make reduced density matrix positive-(semi)definite

Returns:

reduced density matrix as rank-6 tensor

Return type:

yast.Tensor

Build reduced density matrix corresponding to the three sites s0, s1, and s2 of the “up” triangle of Kagome lattice:

C    T             T          C => C2x2_LU(coord)--------C2x2(coord+(1,0))
     a             a               |                  s1/|
     |             |               |/s2               s0\|
T b--\          b--\               C2x2_LD(coord+(0,1))--C2x2(coord+(1,1))
      \        /    \
      XX--XX--d     XX--XX--d T
       | /           | /
       |/            |/
      XX            s1
       |             |
       c             c
      /             /
     a             a
     |             |
T b--\          b--\
      \        /    \
      XX--s2--d     s0--XX--d T
       | /           | /
       |/            |/
      XX            XX
       |             |
       c             c
C      T             T        C
ctm.pess_kagome_abelian.rdm_kagome.trace1x1_dn_kagome(coord, state, env, op, verbosity=0)[source]
Parameters:
  • coord (tuple(int,int)) – vertex (x,y) for which reduced density matrix is constructed

  • state (IPEPS_KAGOME_ABELIAN) – underlying wavefunction

  • env (ENV_ABELIAN) – environment corresponding to state

  • verbosity (int) – logging verbosity

  • op (yast.Tensor) – operator to be contracted. It is expected that the op is either rank-6 tensor or rank-2 tensor with bra and ket spaces fused

Returns:

trace of the given on-site observable

Return type:

yast.Tensor

Evaluate operator op supported on the three sites of the down triangle of Kagome lattice \(Tr{\rho_{1x1,ABC} op}\) centered on vertex coord.