def test_expectation_value_multisite(): s = spin_half psi = mps.MPS.from_singlets(s, 6, [(0, 1), (2, 3), (4, 5)], lonely=[], bc='finite') SpSm = npc.outer(s.Sp.replace_labels(['p', 'p*'], ['p0', 'p0*']), s.Sm.replace_labels(['p', 'p*'], ['p1', 'p1*'])) psi1 = psi.copy() ev = psi.expectation_value(SpSm) npt.assert_almost_equal(ev, [-0.5, 0., -0.5, 0., -0.5]) env1 = mps.MPSEnvironment(psi1, psi) ev = env1.expectation_value(SpSm) npt.assert_almost_equal(ev, [-0.5, 0., -0.5, 0., -0.5]) psi1.apply_local_op(2, SpSm) # multi-site operator ev = psi1.expectation_value(SpSm) # normalized! npt.assert_almost_equal(ev, [-0.5, 0., 0.0, 0., -0.5]) env1 = mps.MPSEnvironment(psi1, psi) ev = env1.expectation_value(SpSm) / psi1.overlap(psi) # normalize npt.assert_almost_equal(ev, [-0.5, 0., -1., 0., -0.5])
def test_MPSEnvironment(): xxz_pars = dict(L=4, Jxx=1., Jz=1.1, hz=0.1, bc_MPS='finite') L = xxz_pars['L'] M = XXZChain(xxz_pars) state = ([0, 1] * L)[:L] # Neel state psi = mps.MPS.from_product_state(M.lat.mps_sites(), state, bc='finite') env = mps.MPSEnvironment(psi, psi) env.get_LP(3, True) env.get_RP(0, True) env.test_sanity() for i in range(4): ov = env.full_contraction(i) # should be one print("total contraction on site", i, ": ov = 1. - ", ov - 1.) assert (abs(abs(ov) - 1.) < 1.e-14) env.expectation_value('Sz')