def test_generate_spin_cases_4(): # a = Term([make_tensor('H', 'v2,c0', 'v0,c2'), make_tensor('t', 'c1,c2', 'v1,v2')], # make_sq('v0,v1', 'c0,c1')) # print(a) # print(a.latex()) # print(a.ambit(), '\n') # # for i in a.generate_spin_cases_naive(): # print(i.latex()) # print() a = Term([ make_tensor('H', 'v2,v3', 'v0,v1'), make_tensor('t', 'c0,c1', 'v2,v3') ], make_sq('v0,v1', 'c0,c1'), 0.125) print(a) print(a.latex(), '\n') for i in a.generate_spin_cases_naive(): print(i.latex()) print(i.ambit()) a = Term([ make_tensor('H', 'p0,g0', 'c0,g1'), make_tensor('t', 'c0,h0', 'p0,p1') ], make_sq('g0,h0', 'g1,p1')) print(a) print(a.latex(), '\n') for i in a.generate_spin_cases_naive(): print(i.latex()) print(i.ambit())
def test_generate_spin_cases_1(): a = Term([make_tensor('H', 'g0,g1', 'g2,g3')], make_sq('g2,g3', 'g0,g1')) ref = { Term([make_tensor('H', 'g2,g3', 'g0,g1', 'si')], make_sq('g2,g3', 'g0,g1', 'si')), Term([make_tensor('H', 'g1,G1', 'g0,G0', 'si')], make_sq('g1,G1', 'g0,G0', 'si')), Term([make_tensor('H', 'G2,G3', 'G0,G1', 'si')], make_sq('G2,G3', 'G0,G1', 'si')) } for i in a.generate_spin_cases_naive(): assert i in ref
def test_generate_spin_cases_3(): list_of_tensors = [ make_tensor('H', "v0,c0", "v1,c1"), make_tensor('t', "v1", "c2"), make_tensor('t', "v2,v3", "c0,c3"), make_tensor('t', "c2,c3", "v0,v3") ] a = Term(list_of_tensors, make_sq("c1", "v2")) ac = Term([ make_tensor('H', 'v2,c1', 'v1,c0'), make_tensor('t', 'c2', 'v1'), make_tensor('t', 'c1,c3', 'v0,v3'), make_tensor('t', 'c2,c3', 'v2,v3') ], make_sq("c0", "v0")) assert a.canonicalize() == ac i_type = 'si' ref = [ Term([ make_tensor('H', 'v2,c1', 'v1,c0', i_type), make_tensor('t', 'c2', 'v1', i_type), make_tensor('t', 'c1,c3', 'v0,v3', i_type), make_tensor('t', 'c2,c3', 'v2,v3', i_type) ], make_sq("c0", "v0", i_type)), Term([ make_tensor('H', 'v2,c1', 'v1,c0', i_type), make_tensor('t', 'c2', 'v1', i_type), make_tensor('t', 'c1,C3', 'v0,V3', i_type), make_tensor('t', 'c2,C3', 'v2,V3', i_type) ], make_sq("c0", "v0", i_type)).canonicalize(), Term([ make_tensor('H', 'v2,C1', 'V1,c0', i_type), make_tensor('t', 'C2', 'V1', i_type), make_tensor('t', 'C1,c3', 'v0,V3', i_type), make_tensor('t', 'C2,c3', 'v2,V3', i_type) ], make_sq("c0", "v0", i_type)).canonicalize(), Term([ make_tensor('H', 'V2,c1', 'V1,c0', i_type), make_tensor('t', 'C2', 'V1', i_type), make_tensor('t', 'c1,c3', 'v0,v3', i_type), make_tensor('t', 'C2,c3', 'V2,v3', i_type) ], make_sq("c0", "v0", i_type)).canonicalize(), Term([ make_tensor('H', 'V2,c1', 'V1,c0', i_type), make_tensor('t', 'C2', 'V1', i_type), make_tensor('t', 'c1,C3', 'v0,V3', i_type), make_tensor('t', 'C2,C3', 'V2,V3', i_type) ], make_sq("c0", "v0", i_type)).canonicalize(), Term([ make_tensor('H', 'V2,C1', 'V1,C0', i_type), make_tensor('t', 'C2', 'V1', i_type), make_tensor('t', 'C1,C3', 'V0,V3', i_type), make_tensor('t', 'C2,C3', 'V2,V3', i_type) ], make_sq("C0", "V0", i_type)), Term([ make_tensor('H', 'V2,C1', 'V1,C0', i_type), make_tensor('t', 'C2', 'V1', i_type), make_tensor('t', 'C1,c3', 'V0,v3', i_type), make_tensor('t', 'C2,c3', 'V2,v3', i_type) ], make_sq("C0", "V0", i_type)).canonicalize(), Term([ make_tensor('H', 'V2,c1', 'v1,C0', i_type), make_tensor('t', 'c2', 'v1', i_type), make_tensor('t', 'c1,C3', 'V0,v3', i_type), make_tensor('t', 'c2,C3', 'V2,v3', i_type) ], make_sq("C0", "V0", i_type)).canonicalize(), Term([ make_tensor('H', 'v2,C1', 'v1,C0', i_type), make_tensor('t', 'c2', 'v1', i_type), make_tensor('t', 'C1,c3', 'V0,v3', i_type), make_tensor('t', 'c2,c3', 'v2,v3', i_type) ], make_sq("C0", "V0", i_type)).canonicalize(), Term([ make_tensor('H', 'v2,C1', 'v1,C0', i_type), make_tensor('t', 'c2', 'v1', i_type), make_tensor('t', 'C1,C3', 'V0,V3', i_type), make_tensor('t', 'c2,C3', 'v2,V3', i_type) ], make_sq("C0", "V0", i_type)).canonicalize() ] count = 0 for i in ac.generate_spin_cases_naive(): assert i in ref count += 1 assert count == len(ref)
def test_generate_spin_cases_2(): from collections import defaultdict # -0.25 * H^{aw}_{xy} * T^{uv}_{az} * L^{xyz}_{uvw} a = Term([ make_tensor('H', 'a1,a2', 'p0,a0'), make_tensor('t', 'a4,a5', 'p0,a3'), make_tensor('L', 'a1,a2,a3', 'a0,a4,a5') ], SecondQuantizedOperator.make_empty(), -0.25) spin_combined = {} spin_coeff = defaultdict(list) for term in a.generate_spin_cases_naive(): name = term.hash_term() spin_coeff[name].append(term.coeff) spin_combined[name] = term for name, term in spin_combined.items(): term.coeff = sum(spin_coeff[name]) if abs(term.coeff) < 1.0e-15: spin_combined.pop(name) ref = { Term([ make_tensor('H', 'a1,a2', 'p0,a0', 'si'), make_tensor('t', 'a4,a5', 'p0,a3', 'si'), make_tensor('L', 'a1,a2,a3', 'a0,a4,a5', 'si') ], SecondQuantizedOperator.make_empty('si'), -0.25), Term([ make_tensor('H', 'A1,A2', 'P0,A0', 'si'), make_tensor('t', 'A4,A5', 'P0,A3', 'si'), make_tensor('L', 'A1,A2,A3', 'A0,A4,A5', 'si') ], SecondQuantizedOperator.make_empty('si'), -0.25), Term([ make_tensor('H', 'a1,A2', 'p0,A0', 'si'), make_tensor('t', 'a4,a5', 'p0,a3', 'si'), make_tensor('L', 'a1,A2,a3', 'A0,a4,a5', 'si') ], SecondQuantizedOperator.make_empty('si'), -0.5).canonicalize(), Term([ make_tensor('H', 'a1,a2', 'p0,a0', 'si'), make_tensor('t', 'a4,A5', 'p0,A3', 'si'), make_tensor('L', 'a1,a2,A3', 'a0,a4,A5', 'si') ], SecondQuantizedOperator.make_empty('si'), -0.5).canonicalize(), Term([ make_tensor('H', 'A1,a2', 'P0,a0', 'si'), make_tensor('t', 'A4,a5', 'P0,a3', 'si'), make_tensor('L', 'A1,a2,a3', 'a0,A4,a5', 'si') ], SecondQuantizedOperator.make_empty('si'), -1).canonicalize(), Term([ make_tensor('H', 'a1,A2', 'P0,a0', 'si'), make_tensor('t', 'A4,A5', 'P0,A3', 'si'), make_tensor('L', 'a1,A2,A3', 'a0,A4,A5', 'si') ], SecondQuantizedOperator.make_empty('si'), -0.5).canonicalize(), Term([ make_tensor('H', 'A1,A2', 'P0,A0', 'si'), make_tensor('t', 'A4,a5', 'P0,a3', 'si'), make_tensor('L', 'A1,A2,a3', 'A0,A4,a5', 'si') ], SecondQuantizedOperator.make_empty('si'), -0.5).canonicalize(), Term([ make_tensor('H', 'a1,A2', 'p0,A0', 'si'), make_tensor('t', 'a4,A5', 'p0,A3', 'si'), make_tensor('L', 'a1,A2,A3', 'A0,a4,A5', 'si') ], SecondQuantizedOperator.make_empty('si'), -1).canonicalize() } for i in spin_combined.values(): assert i in ref assert len(spin_combined) == len(ref)