def test_MPO(): s = spin_half for bc in mpo.MPO._valid_bc: for L in [4, 2, 1]: print(bc, ", L =", L) grid = [[s.Id, s.Sp, s.Sm, s.Sz], [None, None, None, s.Sm], [None, None, None, s.Sp], [None, None, None, s.Id]] legW = npc.LegCharge.from_qflat(s.leg.chinfo, [[0], s.Sp.qtotal, s.Sm.qtotal, [0]]) W = npc.grid_outer(grid, [legW, legW.conj()], grid_labels=['wL', 'wR']) Ws = [W] * L if bc == 'finite': Ws[0] = Ws[0][0:1, :, :, :] Ws[-1] = Ws[-1][:, 3:4, :, :] H = mpo.MPO([s] * L, Ws, bc=bc, IdL=[0] * L + [None], IdR=[None] + [-1] * (L)) H_copy = mpo.MPO([s] * L, Ws, bc=bc, IdL=[0] * L + [None], IdR=[None] + [-1] * (L)) H.test_sanity() print(H.dim) print(H.chi) assert H.is_equal(H) # everything should be equal to itself assert H.is_hermitian() H.sort_legcharges() H.test_sanity() assert H.is_equal(H_copy) if L == 4: H2 = H.group_sites(n=2) H2.test_sanity() assert H2.L == 2
def test_MPO(): s = spin_half for bc in mpo.MPO._valid_bc: for L in [4, 2, 1]: print(bc, ", L =", L) grid = [[s.Id, s.Sp, s.Sz], [None, None, s.Sm], [None, None, s.Id]] legW = npc.LegCharge.from_qflat(s.leg.chinfo, [[0], s.Sp.qtotal, [0]]) W = npc.grid_outer(grid, [legW, legW.conj()]) W.iset_leg_labels(['wL', 'wR', 'p', 'p*']) Ws = [W] * L if bc == 'finite': Ws[0] = Ws[0][0:1, :, :, :] Ws[-1] = Ws[-1][:, 2:3, :, :] H = mpo.MPO([s] * L, Ws, bc=bc, IdL=[0] * L + [None], IdR=[None] + [-1] * (L)) H.test_sanity() print(H.dim) print(H.chi) if L == 4: H2 = H.group_sites(n=2) H2.test_sanity() assert H2.L == 2