def testE2(self): bra = braE2("occ", "vir", "occ", "vir") ket = ketE2("occ", "vir", "occ", "vir") out = apply_wick(bra * ket) aout = AExpression(Ex=out) i = Idx(0, "occ") a = Idx(0, "vir") j = Idx(1, "occ") b = Idx(1, "vir") k = Idx(2, "occ") c = Idx(2, "vir") l = Idx(3, "occ") d = Idx(3, "vir") tensors = [Tensor([a, b, i, j], ""), Tensor([k, l, c, d], "")] tr1 = Term( 1, [], tensors, [], [Delta(i, k), Delta(j, l), Delta(a, c), Delta(b, d)]) tr2 = Term( -1, [], tensors, [], [Delta(i, l), Delta(j, k), Delta(a, c), Delta(b, d)]) tr3 = Term( -1, [], tensors, [], [Delta(i, k), Delta(j, l), Delta(a, d), Delta(b, c)]) tr4 = Term( 1, [], tensors, [], [Delta(i, l), Delta(j, k), Delta(a, d), Delta(b, c)]) ref = Expression([tr1, tr2, tr3, tr4]) aref = AExpression(Ex=ref) self.assertTrue(aout.pmatch(aref)) op = E2("A", ["occ"], ["vir"]) out = apply_wick(bra * op) out.resolve() aout = AExpression(Ex=out) ext = Tensor([a, b, i, j], "") ten = Tensor([a, b, i, j], "A", sym=get_sym(True)) at1 = ATerm(scalar=1, sums=[], tensors=[ext, ten]) self.assertTrue(len(aout.terms) == 1) self.assertTrue(at1.pmatch(aout.terms[0]))
def test_connected(self): H1 = one_e("f", ["occ", "vir"], norder=True) H2 = two_e("I", ["occ", "vir"], norder=True) H = H1 + H2 bra = braE2("occ", "vir", "occ", "vir") C0 = E0("c") C1 = E1("c", ["occ"], ["vir"]) C2 = E2("c", ["occ"], ["vir"]) ket = C0 + C1 + C2 HC = H * ket S = bra * HC out = apply_wick(S) out.resolve() final = AExpression(Ex=out) out = [at.connected() for at in final.terms] ref = [True] * 19 ref[0] = ref[1] = ref[2] = ref[3] = False self.assertTrue(ref == out)
print(final) # first derivative wrt X ket = ketE1("occ", "vir") S = H * ket out = apply_wick(S) out.resolve() final = AExpression(Ex=out) final.sort_tensors() final.transpose((1, 0)) print("dE/dX =") print(final) print("") # second derivative wrt X*X* bra = braE2("occ", "vir", "occ", "vir") S = bra * H out = apply_wick(S) out.resolve() final = AExpression(Ex=out) final.sort_tensors() print("d^2E/dX*dX* =") print(final) # second derivative wrt X*X ket = ketE1("occ", "vir") bra = braE1("occ", "vir") S = bra * H * ket out = apply_wick(S) out.resolve() final = AExpression(Ex=out)