Correlation functions

ctm.one_site_c4v.corrf_c4v.apply_TM_1sO(state, env, edge, op=None, verbosity=0)[source]
Parameters:
  • state (IPEPS_C4V) – underlying 1-site C4v symmetric wavefunction

  • env (ENV_C4V) – C4v symmetric environment corresponding to state

  • edge (torch.tensor) – tensor of dimensions \(\chi \times D^2 \times \chi\)

  • op (torch.tensor) – operator to be inserted into transfer matrix

  • verbosity (int) – logging verbosity

Returns:

edge with a single instance of the transfer matrix applied. The resulting tensor has an identical index structure as the original edge

Return type:

torch.tensor

Applies a single instance of the “transfer matrix” to the edge tensor by contracting the following network:

      -->
  -----T----------
 |     |
edge--(a^+ op a)--
 |     |
  -----T----------
      <--

where the physical indices s and s’ of the on-site tensor \(a\) and it’s hermitian conjugate \(a^\dagger\) are contracted with identity \(\delta_{s,s'}\) or op (if supplied).

ctm.one_site_c4v.corrf_c4v.apply_TM_1sO_2(state, env, edge, op=None, verbosity=0)[source]
Parameters:
  • state (IPEPS_C4V) – underlying 1-site C4v symmetric wavefunction

  • env (ENV_C4V) – C4v symmetric environment corresponding to state

  • edge (torch.tensor) – tensor of dimensions \(\chi \times (D^2)^2 \times \chi\)

  • op (torch.tensor) – two-site operator to be inserted within the two-site transfer matrix

  • verbosity (int) – logging verbosity

Returns:

edge with a single instance of the transfer matrix applied The resulting tensor has an identical index structure as the original edge

Return type:

torch.tensor

Applies a single instance of the two-site “transfer matrix” to the edge tensor by contracting the following network, or its corresponding rotation depending on the direction:

  -----T----------
 |     |
edge--(a^+ o1 a)--
 |     |   |
 |----(a^+ o2 a)--
 |     |
  -----T----------

The two-site operator is first decomposed into a simple MPO o1–o2 (TODO case where op comes with an extra MPO index):

 s1'  s2'    s1'      s2'
|  op   | = |o1|-----|o2|
 s1   s2     s1       s2

where the physical indices s and s’ of the on-site tensor \(a\) and it’s hermitian conjugate \(a^\dagger\) are contracted with identity \(\delta_{s,s'}\) or o1, o2.

ctm.one_site_c4v.corrf_c4v.apply_TM_2sO(state, env, edge, op=None, verbosity=0)[source]
Parameters:
  • state (IPEPS_C4V) – underlying 1-site C4v symmetric wavefunction

  • env (ENV_C4V) – C4v symmetric environment corresponding to state

  • edge (torch.tensor) – tensor of dimensions \(\chi \times D^2 \times \chi\)

  • op (torch.tensor) – two-site operator to be inserted into the two consecutive transfer matrices

  • verbosity (int) – logging verbosity

Returns:

edge with two transfer matrices (and operator op, if any) applied. The resulting tensor has an identical index structure as the original edge

Return type:

torch.tensor

Applies two transfer matrices to the edge tensor, including the two-site operator op by contracting the following network:

  -----T-------------T------------
 |     |             |
edge--(a^+ op_l a)==(a^+ op_r a)--
 |     |             |
  -----T-------------T------------

where the physical indices s and s’ of the on-site tensor \(a\) and it’s hermitian conjugate \(a^\dagger\) are contracted with identity \(\delta_{s,s'}\) or op_l and op_r if op is supplied. The op_l and op_r are given by the SVD decomposition of two-site operator op:

 0  1        0           1          0            1->0
 |  |  SVD   |           |          |            |
| op |  =  |op_l|--(S--|op^~_r|) = |op_l|--2 2--|op_r|
 |  |        |           |          |            |
 2  3        2           3          2->1         3->1
ctm.one_site_c4v.corrf_c4v.apply_edge(state, env, vec, verbosity=0)[source]
Parameters:
  • state (IPEPS_C4V) – underlying 1-site C4v symmetric wavefunction

  • env (ENV_C4V) – C4v symmetric environment corresponding to state

  • vec (torch.tensor) – tensor of dimensions \(\chi \times D^2 \times \chi\)

  • verbosity (int) – logging verbosity

Returns:

scalar resulting from the contraction of vec with an edge built from environment

Return type:

torch.tensor

Contracts vec tensor with the corresponding edge by contracting the following network:

           ---C
          |   |
scalar = vec--T
          |   |
           ---C
ctm.one_site_c4v.corrf_c4v.apply_edge_L(state, env, vec, verbosity=0)[source]
Parameters:
  • state (IPEPS_C4V) – underlying 1-site C4v symmetric wavefunction

  • env (ENV_C4V) – C4v symmetric environment corresponding to state

  • vec (torch.tensor) – tensor of dimensions \(\chi \times (D^2)^l \times \chi\)

  • verbosity (int) – logging verbosity

Returns:

scalar resulting from the contraction of vec with an edge built from environment

Return type:

torch.tensor

Contracts vec tensor with the corresponding edge by contracting the following network:

             ---0   l+1----C
         A  |              | |
scalar = | vec--1     l----T |
         |  |    ...       | V
            |---l     1----T
             ---l+1     0--C
ctm.one_site_c4v.corrf_c4v.corrf_1sO1sO(state, env, op1, get_op2, dist, rl_0=None, verbosity=0)[source]
Parameters:
  • state (IPEPS_C4V) – underlying 1-site C4v symmetric wavefunction

  • env (ENV_C4V) – C4v symmetric environment corresponding to state

  • op1 (torch.tensor) – first one-site operator \(O_1\)

  • get_op2 (function(int)->torch.tensor) – function returning (position-dependent) second one-site opreator \(\text{get_op2}(r)=O_2\)

  • dist (int) – maximal distance of correlation function

  • rl_0 (tuple(torch.Tensor, torch.Tensor)) – right and left edges of the two-point function network. These are expected to be rank-3 tensor compatible with transfer operator indices. Typically provided by leading eigenvectors of transfer matrix.

  • verbosity (int) – logging verbosity

Returns:

vector corrf of length dist holding the values of correlation function \(\langle O_1(0) O_2(r) \rangle\) for \(r \in [1,dist]\)

Return type:

torch.tensor

Computes the two-point correlation function \(\langle O_1(0) O_2(r) \rangle\) by contracting the following network:

C-----T---------- ... -----T---- ... --------T-------------C
|     |                    |                 |             |
T--(a^+ op_1 a)-- ... --(a^+a)-- ... --(a^+ gen_op2(r) a)--T
|     |                    |                 |             |
C-----T---------- ... -----T---- ... --------T-------------C

for increasingly large distance r up to dist.

ctm.one_site_c4v.corrf_c4v.corrf_2sOH2sOH_E1(state, env, op1, get_op2, dist, verbosity=0)[source]
Parameters:
  • state (IPEPS_C4V) – underlying 1-site C4v symmetric wavefunction

  • env (ENV_C4V) – C4v symmetric environment corresponding to state

  • op1 (torch.tensor) – first two-site operator \(O_1\)

  • get_op2 (function(int)->torch.tensor) – function returning (position-dependent) second two-site operator \(\text{get_op2}(r)=O_2\)

  • dist (int) – maximal distance of correlation function

  • verbosity (int) – logging verbosity

Returns:

vector corrf of length dist holding the values of correlation function \(\langle O_1(0) O_2(r) \rangle\) for \(r \in [2,dist+1]\)

Return type:

torch.tensor

Computes the correlation function \(\langle O_1(0) O_2(r) \rangle\) of two horizontaly-oriented two-site operators by contracting the following network:

C-----T----T------- ... -----T---- ... ----------T----T--------C
|     |    |                 |                   |    |        |
|   /-a^+--a^+-\             |                /--a^+--a^+---\  |
T--< ( op 1 )   >-- ... --(a^+a)-- ... ------< (gen_op2(r)) >--T
|   \-a----a---/             |                \--a----a-----/  |
|     |    |                 |                   |    |        |
C-----T----T------- ... -----T---- ... ----------T----T--------C

for increasingly large distance r up to dist+1.

ctm.one_site_c4v.corrf_c4v.corrf_2sOV2sOV_E2(state, env, op1, get_op2, dist, verbosity=0)[source]
Parameters:
  • state (IPEPS_C4V) – underlying wavefunction

  • env (ENV_C4V) – environment corresponding to state

  • op1 (torch.tensor) – first two-site operator \(O_1\)

  • get_op2 (function(int)->torch.tensor) – function returning (position-dependent) second two-site operator \(\text{get_op2}(r)=O_2\)

  • dist (int) – maximal distance of correlation function

  • verbosity (int) – logging verbosity

Returns:

vector corrf of length dist holding the values of correlation function \(\langle O_1(0) O_2(r) \rangle\) for \(r \in [1,dist]\)

Return type:

torch.tensor

Computes the four-point correlation function \(\langle O_1(0) O_2(r) \rangle\), where both O_1 and O_2 are two-site operators by contracting the following network:

C-----T------ ... ----T----- ... -----T---------C
|     |               |               |         |
T--(a^+--a)-- ... --(a^+a)-- ... --(a^+--a)-----T
|    op1              |           (gen_op2(r))  |
T--(a^+--a)-- ... --(a^+a)-- ... --(a^+--a)-----T
|     |               |               |         |
C-----T------ ... ----T----- ... -----T---------C

for increasingly large distance r up to dist.

ctm.one_site_c4v.corrf_c4v.get_edge(state, env, verbosity=0)[source]
Parameters:
  • state (IPEPS_C4V) – underlying 1-site C4v symmetric wavefunction

  • env (ENV_C4V) – C4v symmetric environment corresponding to state

  • verbosity (int) – logging verbosity

Returns:

tensor with indices \(\chi \times D^2 \times \chi\)

Return type:

torch.tensor

Build initial edge by contracting the following network:

    C--
    |
E = T--
    |
    C--
ctm.one_site_c4v.corrf_c4v.get_edge_L(state, env, l=1, verbosity=0)[source]
Parameters:
  • state (IPEPS_C4V) – underlying 1-site C4v symmetric wavefunction

  • env (ENV_C4V) – C4v symmetric environment corresponding to state

  • l (int) – length of the edge

  • verbosity (int) – logging verbosity

Returns:

tensor with indices \(\chi \times (D^2)^l \times \chi\)

Return type:

torch.tensor

Build an edge of length l by contracting a following network:

       ---->
E = A C--T--...--T--C   |
    | |  |       |  |   V
      0  1       l  l+1