TensorNetwork icon indicating copy to clipboard operation
TensorNetwork copied to clipboard

Bug of setting `center_position` in `apply_two_site_gate` when there's no truncation

Open SUSYUSTC opened this issue 3 years ago • 0 comments

In source file matrixproductstates/base_mps.py function apply_two_site_gate line 583-592:

      if center_position == site2:
        R, Q = self.backend.rq(tensor, pivot_axis=2)
        left_tensor = R
        right_tensor = Q
        set_center_position(site2)
      else:
        Q, R = self.backend.qr(tensor, pivot_axis=2)
        left_tensor = Q
        right_tensor = R
        set_center_position(site1)

This code block corresponds to the case that no truncation is performed when applying a two site gate. Since site1 is left to site2, and that all nodes except the center one should be unitary after the operations, one should use rq if center_position == site1 and qr if center_position == site2.

So the right one should be

      if center_position == site1:
        R, Q = self.backend.rq(tensor, pivot_axis=2)
        left_tensor = R
        right_tensor = Q
        set_center_position(site1)
      else:
        Q, R = self.backend.qr(tensor, pivot_axis=2)
        left_tensor = Q
        right_tensor = R
        set_center_position(site2)

A simple example to illustrate this issue is:

import tensornetwork as tn
import numpy as np
I = np.eye(4, dtype=np.complex64).reshape((2, 2, 2, 2))

mps = tn.FiniteMPS.random([2, 2, 2, 2], [4, 4, 4], dtype=np.complex64, canonicalize=True)
mps.position(2)
mps.apply_two_site_gate(I, 1, 2, center_position=1)
print(mps.bond_dimensions)
print(mps.check_canonical())

mps = tn.FiniteMPS.random([2, 2, 2, 2], [4, 4, 4], dtype=np.complex64, canonicalize=True)
mps.position(2)
mps.apply_two_site_gate(I, 1, 2, center_position=1, max_singular_values=100)
print(mps.bond_dimensions)
print(mps.check_canonical())

where I got

[1, 2, 4, 2, 1] 
(1.6877086162567145+0j)     # not canonical because of wrong center position
[1, 2, 4, 2, 1]
(8.9081379319908e-08+0j)    # canonical

SUSYUSTC avatar Nov 21 '21 07:11 SUSYUSTC