コード例 #1
0
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())
コード例 #2
0
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
コード例 #3
0
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)
コード例 #4
0
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)