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")
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")
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('--------------------------------')