def test_contraction(): i, j, k, l = symbols("i,j,k,l", below_fermi=True) a, b, c, d = symbols("a,b,c,d", above_fermi=True) p, q, r, s = symbols("p,q,r,s") assert contraction(Fd(i), F(j)) == KroneckerDelta(i, j) assert contraction(F(a), Fd(b)) == KroneckerDelta(a, b) assert contraction(F(a), Fd(i)) == 0 assert contraction(Fd(a), F(i)) == 0 assert contraction(F(i), Fd(a)) == 0 assert contraction(Fd(i), F(a)) == 0 assert contraction(Fd(i), F(p)) == KroneckerDelta(i, p) restr = evaluate_deltas(contraction(Fd(p), F(q))) assert restr.is_only_below_fermi restr = evaluate_deltas(contraction(F(p), Fd(q))) assert restr.is_only_above_fermi raises(ContractionAppliesOnlyToFermions, lambda: contraction(B(a), Fd(b)))
def test_contraction(): i, j, k, l = symbols('i,j,k,l', below_fermi=True) a, b, c, d = symbols('a,b,c,d', above_fermi=True) p, q, r, s = symbols('p,q,r,s') assert contraction(Fd(i), F(j)) == KroneckerDelta(i, j) assert contraction(F(a), Fd(b)) == KroneckerDelta(a, b) assert contraction(F(a), Fd(i)) == 0 assert contraction(Fd(a), F(i)) == 0 assert contraction(F(i), Fd(a)) == 0 assert contraction(Fd(i), F(a)) == 0 assert contraction(Fd(i), F(p)) == KroneckerDelta(i, p) restr = evaluate_deltas(contraction(Fd(p), F(q))) assert restr.is_only_below_fermi restr = evaluate_deltas(contraction(F(p), Fd(q))) assert restr.is_only_above_fermi raises(ContractionAppliesOnlyToFermions, lambda: contraction(B(a), Fd(b)))
def test_contraction(): i, j, k, l = symbols('i,j,k,l', below_fermi=True) a, b, c, d = symbols('a,b,c,d', above_fermi=True) p, q, r, s = symbols('p,q,r,s') assert contraction(Fd(i), F(j)) == KroneckerDelta(i, j) assert contraction(F(a), Fd(b)) == KroneckerDelta(a, b) assert contraction(F(a), Fd(i)) == 0 assert contraction(Fd(a), F(i)) == 0 assert contraction(F(i), Fd(a)) == 0 assert contraction(Fd(i), F(a)) == 0 assert contraction(Fd(i), F(p)) == KroneckerDelta(i, p) restr = evaluate_deltas(contraction(Fd(p), F(q))) assert restr.is_only_below_fermi restr = evaluate_deltas(contraction(F(p), Fd(q))) assert restr.is_only_above_fermi
def test_contraction(): i,j,k,l = symbols('ijkl',below_fermi=True) a,b,c,d = symbols('abcd',above_fermi=True) p,q,r,s = symbols('pqrs') assert contraction(Fd(i),F(j)) == KroneckerDelta(i,j) assert contraction(F(a),Fd(b)) == KroneckerDelta(a,b) assert contraction(F(a),Fd(i)) == 0 assert contraction(Fd(a),F(i)) == 0 assert contraction(F(i),Fd(a)) == 0 assert contraction(Fd(i),F(a)) == 0 assert contraction(Fd(i),F(p)) == KroneckerDelta(p,i) restr = evaluate_deltas(contraction(Fd(p),F(q))) assert restr.is_only_below_fermi restr = evaluate_deltas(contraction(F(p),Fd(q))) assert restr.is_only_above_fermi
def test_contraction(): i, j, k, l = symbols("i,j,k,l", below_fermi=True) a, b, c, d = symbols("a,b,c,d", above_fermi=True) p, q, r, s = symbols("p,q,r,s") assert contraction(Fd(i), F(j)) == KroneckerDelta(i, j) assert contraction(F(a), Fd(b)) == KroneckerDelta(a, b) assert contraction(F(a), Fd(i)) == 0 assert contraction(Fd(a), F(i)) == 0 assert contraction(F(i), Fd(a)) == 0 assert contraction(Fd(i), F(a)) == 0 assert contraction(Fd(i), F(p)) == KroneckerDelta(i, p) restr = evaluate_deltas(contraction(Fd(p), F(q))) assert restr.is_only_below_fermi restr = evaluate_deltas(contraction(F(p), Fd(q))) assert restr.is_only_above_fermi
#Link to Second quant documentation: https://docs.sympy.org/latest/modules/physics/secondquant.html pretty_dummies_dict = { 'above': 'abcdefgh', 'below': 'ijklmno', 'general': 'pqrstu' } p, q, r, s = symbols('p,q,r,s', cls=Dummy) #Setup creation and annihilation operators ap_dagger = Fd(p) aq = F(q) #Perform a contraction contr = evaluate_deltas(contraction(ap_dagger, aq)) print("Example outputs") print() print("contraction(a_p^\dagger a_q): ", latex(contr)) print() #Setup Hamiltonian, not on normal order form h = AntiSymmetricTensor('h', (p, ), (q, )) pq = ap_dagger * aq V = AntiSymmetricTensor('V', (p, q), (r, s)) pqsr = Fd(p) * Fd(q) * F(s) * F(r) H0 = h * pq HI = Rational(1, 4) * V * pqsr