def test_eps_r_noop_multi(self): r0 = tc.eps_r_noop(tc.eps_r_noop(self.r2, self.A2, self.B2), self.A1, self.B1) r0_ = tc.eps_r_noop_multi(self.r2, [self.A1, self.A2], [self.B1, self.B2]) self.assertTrue(sp.allclose(r0, r0_)) r0__ = tc.eps_r_noop_multi(self.r2, [self.AA12], [self.BB12]) self.assertTrue(sp.allclose(r0, r0__)) r0C = tc.eps_r_op_2s_C12(self.r2, self.C_A12, self.B1, self.B2) r0C_ = tc.eps_r_noop_multi(self.r2, [self.C_A12], [self.B1, self.B2]) self.assertTrue(sp.allclose(r0C, r0C_)) r0C2 = tc.eps_r_op_2s_C12_AA34(self.r2, self.C_A12, self.BB12) r0C2_ = tc.eps_r_noop_multi(self.r2, [self.C_A12], [self.BB12]) self.assertTrue(sp.allclose(r0C2, r0C2_)) r0CA2 = tc.eps_r_op_2s_C12(tc.eps_r_noop(self.r2, self.A2, self.B2), self.C01, self.A0, self.B1) r0CA2_ = tc.eps_r_noop_multi(self.r2, [self.C01, self.A2], [self.A0, self.BB12]) self.assertTrue(sp.allclose(r0CA2, r0CA2_))
def test_eps_r_noop(self): r0 = tc.eps_r_noop(self.r1, self.A1, self.B1) r0_ = self.E1_AB.dot(self.r1.ravel()).reshape(self.D[0], self.D[0]) self.assertTrue(sp.allclose(r0, r0_)) r1 = tc.eps_r_noop(self.r2, self.A2, self.B2) r1_ = self.E2_AB.dot(self.r2.ravel()).reshape(self.D[1], self.D[1]) self.assertTrue(sp.allclose(r1, r1_))
def test_eps_r_noop_inplace(self): r0 = sp.zeros_like(self.l0) r0_ =tc.eps_r_noop_inplace(self.r1, self.A1, self.B1, r0) self.assertTrue(r0 is r0_) r0__ = tc.eps_r_noop(self.r1, self.A1, self.B1) self.assertTrue(sp.allclose(r0, r0__))
def test_eps_r_noop_eye(self): r0 = tc.eps_r_noop(self.eye1, self.A1, self.B1) r0_ = self.E1_AB.dot(self.eye1.A.ravel()).reshape(self.D[0], self.D[0]) self.assertTrue(sp.allclose(r0, r0_))
def hamiltonian_elements(B1, B2, AL, AR, lL, rR, KL, KR, h_nn, d_max): B1_viol = rgf_violation(B1, AR, rR) B2_viol = rgf_violation(B2, AR, rR) if B1_viol > 1e-12: raise ValueError( "Gauge-fixing condition not satisfied for B1! Violation: {}". format(B1_viol)) if B2_viol > 1e-12: raise ValueError( "Gauge-fixing condition not satisfied for B2! Violation: {}". format(B2_viol)) print(mm.adot(lL, tm.eps_r_noop(rR, B1, B2))) matels = [] if d_max >= 0: # <lL|(B1;B2)|KR> x = tm.eps_l_noop(lL, B1, B2) res1 = mm.adot(x, KR) # <KL|(B1;B2)|rR> x = tm.eps_l_noop(KL, B1, B2) res2 = mm.adot_noconj(x, rR) # Do not conjugate KL contribution # <lL|h(AL,B1;AL,B2)|rR> x = tm.eps_r_op_2s_A(rR, AL, B1, AL, B2, h_nn) res3 = mm.adot(lL, x) # <lL|h(B1,AR;B2,AR)|rR> x = tm.eps_r_op_2s_A(rR, B1, AR, B2, AR, h_nn) res4 = mm.adot(lL, x) matels.append(res1 + res2 + res3 + res4) B1L = tm.eps_l_noop(lL, B1, AL) # <lL|(B1;AL) B2_KR = tm.eps_r_noop(KR, AR, B2) # (AR;B2)|KR> B2_KR += tm.eps_r_op_2s_A(rR, AR, AR, B2, AR, h_nn) # (AR;B2)|KR> + h(AR,AR;B2,AR)|rR> if d_max >= 1: res = mm.adot( B1L, B2_KR) # <lL|(B1;AL) (AR;B2)|KR> + <lL|(B1;AL) h(AR,AR;B2,AR)|rR> x = tm.eps_r_op_2s_A(rR, B1, AR, AL, B2, h_nn) # <lL|h(B1,AR;AL,B2)|rR> res += mm.adot(lL, x) matels.append(res) B2_KR = tm.eps_r_noop(B2_KR, AR, AL) # advance one site (d == 2) # (AR;AL)(AR;B2)|KR> + (AR;AL) h(AR,AR;B2,AR)|rR> + h(AR,AR;AL,B2)|rR> B2_KR += tm.eps_r_op_2s_A(rR, AR, AR, AL, B2, h_nn) for d in range(2, d_max + 1): x = B1L for _ in range(2, d): x = tm.eps_l_noop(x, AR, AL) # (AR;AL)^(d-2) res = mm.adot(x, B2_KR) matels.append(res) return matels
def rgf_violation(B, A, r): return np.linalg.norm(tm.eps_r_noop(r, B, A))