コード例 #1
0
def run(h, bra, ket, python_out):

    # aaa
    #bra = Operator("bra", "cb b a kb j i")
    #ket = Operator("ket", "id jd kbd ad bd cbd")

    # aab
    #bra = Operator("bra", "cb b a kb j i")
    #ket = Operator("ket", "id jd kbd ad bd cbd")

    # abb
    #bra = Operator("bra", "cb bb a kb jb i")
    #ket = Operator("ket", "id jbd kbd ad bbd cbd")

    # bbb
    #bra = Operator("bra", "cb bb ab kb jb ib")
    #ket = Operator("ket", "ibd jbd kbd abd bbd cbd")

    #bra = Operator("bra", "cb b a kb j i")
    #ket = Operator("ket", "id jd kbd ad bd cbd")

    fs = OperatorString(bra * h * ket)

    root_node = Node(fs)
    wicks(root_node)

    # Pretty Print
    #lines, _, _, _ = get_utf8_tree(root_node)
    #for line in lines:
    #    print(line)

    #print(root_node.right.right.right.right.left.data)

    full = collect_fully_contracted(root_node)

    #print(full)
    #sys.exit()
    new_eqs = []
    new_weights = {}
    if len(full) == 0:
        return
    for i, eq in enumerate(full):
        evs = [x.evaluate() for x in eq.deltas]

        if 0 in evs:
            continue

        mv = h.eval_deltas(eq.deltas)
        #equiv = new_eqs_weights[key]
        #print(equiv)
        #print(eq.deltas)
        #print(eq.sign * eq.weight, mv)

        new_eqs.append((eq.sign * eq.weight, mv))
        new_weights[mv] = eq.sign * eq.weight

    terms = list(zip(*new_eqs))
    if len(terms) > 0:
        uniques = find_equiv(list(terms[1]))
        print("==================================")
        print(h)
        print('----------------')
        for cnt, term in uniques:
            print(int(math.sqrt(cnt)) * new_weights[term], term)
            w = int(math.sqrt(cnt)) * new_weights[term]
            if w < 0:
                str_out = "-" + term.to_python()[1]
            else:
                str_out = term.to_python()[1]

            python_out.append(str_out)

        print("==================================\n")
コード例 #2
0
ファイル: vt2.py プロジェクト: edeustua/wickedtree
def run(h):

    # aaa
    bra = Operator("bra", "c b a k j i")
    ket = Operator("ket", "id jd kd ad bd cd")
    #bra = Operator("bra", "b a j i")
    #bra = Operator("bra", "j b i a")
    #bra = Operator("bra", "a3 a2 a1 i3 i2 i1")
    #ket = Operator("ket", "i1d i2d i6d a1d a5d a6d")
    #bra = Operator("bra", "a3 a2 a1 i3 i2 i1")
    #ket = Operator("ket", "i1d i2d i6d a1d a5d a6d")
    #ket = Operator("ket", "i1d i2d i3d a1d a2d a6d")

    # aab
    #bra = Operator("bra", "cb b a kb j i")
    #ket = Operator("ket", "id jd kbd ad bd cbd")

    # abb
    #bra = Operator("bra", "cb bb a kb jb i")
    #ket = Operator("ket", "id jbd kbd ad bbd cbd")

    # bbb
    #bra = Operator("bra", "cb bb ab kb jb ib")
    #ket = Operator("ket", "ibd jbd kbd abd bbd cbd")

    #bra = Operator("bra", "cb b a kb j i")
    #ket = Operator("ket", "id jd kbd ad bd cbd")

    for t in ts:

        fs = OperatorString(bra * h * t * ket)

        root_node = Node(fs)
        wicks(root_node)

        # Pretty Print
        #lines, _, _, _ = get_utf8_tree(root_node)
        #for line in lines:
        #    print(line)

        #print(root_node.right.right.right.right.left.data)

        #print(fs)
        #root_node.print()
        full = collect_fully_contracted(root_node)

        #print(full)
        #sys.exit()
        new_eqs = []
        new_weights = {}
        if len(full) == 0:
            continue

        for i, eq in enumerate(full):
            evs = [x.evaluate() for x in eq.deltas]

            if 0 in evs:
                continue

            mv = h.eval_deltas(eq.deltas)
            mt = t.eval_deltas(eq.deltas)
            #equiv = new_eqs_weights[key]
            #print(equiv)
            #print(eq.deltas)
            #print(eq.sign * eq.weight, mv)

            new_eqs.append((eq.sign * eq.weight, mv, mt))
            new_weights[(mv, mt)] = eq.sign * eq.weight

        terms = list(zip(*new_eqs))
        #print(terms)
        if len(terms) > 0:
            uniques = find_equiv(list(terms[1:]))
            print("==================================")
            print(h)
            print('----------------')
            for cnt, term in uniques:
                print(int(math.sqrt(cnt)) * new_weights[term], term)

            print("==================================\n")
コード例 #3
0
ファイル: operators.py プロジェクト: edeustua/wickedtree
    ops = gen_fermi_onebody()
    #ops = gen_fermi_twobody()
    #ops = gen_fermi_threebody()

    bra = Operator("bra", "c b a k j i")
    ket = Operator("ket", "id jd kd ad bd dd")


    #sys.exit()

    for op in ops:
        print('--------', op, '-----------')
        fs = OperatorString(bra.string + op.string + ket.string)
        root_node = Node(fs)
        wicks(root_node)
        full = collect_fully_contracted(root_node)

        for eq in full:

            evs = [kd.evaluate() for kd in eq[1]]

            if 0 in evs:
                continue

            m = op.eval_deltas(eq[1])
            print(eq[0], m)

        print('--------------------------------')