mps.canonical_form()
or mps.compress_svd()
. Specifically, I cannot obtain an MPS with a norm of 1, i.e., mps.overlap(mps)
is not equal to 1.I am following the "MPO-MPS" method (arXiv:2001.04611), which is used to represent paired fermion states with an MPS. The main idea involves applying a series of MPOs successively to an MPS, similar to applying fermion creation operators to the vacuum. During the application process, it is necessary to truncate the MPS after each MPO application to prevent the exponential growth of virtual bond dimensions. The truncation involves a right sweep with QR and then a left sweep with SVD truncation, achievable through
mps.compress_svd()
. Once all MPOs are applied, we obtain an MPS representing the ground state of a paired fermion system. Consequently, mpo.expectation_value(mps)
provides the ground state energy.I am working on the transverse-field XY model but have been unable to obtain the correct ground state energy as calculated through exact diagonalization. After each MPO application step with
mps.compress_svd()
, I check the norm of the MPS using mps.overlap(mps)
.Python: Select all
print("applying MPO number", m, "the entropy is", entropy_step, "check the norm is", mps.overlap(mps))
Python: Select all
def contraction_step(mpo,mps):
mpo.apply_naively(mps)
mps.compress_svd({"chi_max":200})
s = mps.entanglement_entropy_segment2(np.arange(M).tolist())
return s
Although I obtain the correct entropies, the norm progressively decreases. I attempted calling
mps.canonical_form()
after mps.compress_svd({"chi_max": 200})
within the MPO application function and also before mpo.expectation_value(mps)
(the step estimating the energy). However, I still cannot obtain the correct norm and energy.I noticed that under MPS.canonical_form(), there is a note stating, "Note that even renormalize=True does not reset the norm to 1. To do that, you would rather have to set psi.norm = 1 explicitly!" However, even if I manually set the norm to 1, the energy remains incorrect.
I have a MATLAB version of the MPO-MPS method code that runs successfully and provides the correct entropies and energy. I intend to rewrite the code in Python using TeNPy, but I am currently struggling to identify the issue.