@@ -7,8 +7,9 @@ import json | |||||
import qi, clifford, util | import qi, clifford, util | ||||
import random | import random | ||||
output = open("debug_pete.txt", "w") | |||||
def debug(x): | def debug(x): | ||||
pass | |||||
output.write(str(x)+"\n") | |||||
class GraphState(object): | class GraphState(object): | ||||
@@ -41,6 +42,7 @@ class GraphState(object): | |||||
def del_edge(self, v1, v2): | def del_edge(self, v1, v2): | ||||
""" Delete an edge between two vertices in the self """ | """ Delete an edge between two vertices in the self """ | ||||
debug("deling edge") | |||||
del self.adj[v1][v2] | del self.adj[v1][v2] | ||||
del self.adj[v2][v1] | del self.adj[v2][v1] | ||||
@@ -65,7 +67,7 @@ class GraphState(object): | |||||
def remove_vop(self, a, avoid): | def remove_vop(self, a, avoid): | ||||
""" Reduces VOP[a] to the identity """ | """ Reduces VOP[a] to the identity """ | ||||
# TODO: sucks! | |||||
others = set(self.adj[a]) - {avoid} | others = set(self.adj[a]) - {avoid} | ||||
swap_qubit = others.pop() if others else avoid | swap_qubit = others.pop() if others else avoid | ||||
@@ -73,10 +75,16 @@ class GraphState(object): | |||||
self.print_adj_list_line(a) | self.print_adj_list_line(a) | ||||
self.print_adj_list_line(avoid) | self.print_adj_list_line(avoid) | ||||
self.print_adj_list_line(swap_qubit) | self.print_adj_list_line(swap_qubit) | ||||
debug("using {}".format(clifford.decompositions[self.node[a]["vop"]])) | |||||
converted = clifford.decompositions[self.node[a]["vop"]] | |||||
converted = "".join("U" if x == "x" else "V" for x in converted) | |||||
debug("using {}".format(converted)) | |||||
for v in reversed(clifford.decompositions[self.node[a]["vop"]]): | for v in reversed(clifford.decompositions[self.node[a]["vop"]]): | ||||
self.local_complementation(a if v == "x" else swap_qubit) | |||||
if v == "x": | |||||
self.local_complementation(a, "U ->") | |||||
else: | |||||
self.local_complementation(swap_qubit, "V ->") | |||||
assert self.node[a]["vop"]==0 | assert self.node[a]["vop"]==0 | ||||
debug("remove_byprod_op: after (v, avoid, vb):") | debug("remove_byprod_op: after (v, avoid, vb):") | ||||
@@ -84,9 +92,11 @@ class GraphState(object): | |||||
self.print_adj_list_line(avoid) | self.print_adj_list_line(avoid) | ||||
self.print_adj_list_line(swap_qubit) | self.print_adj_list_line(swap_qubit) | ||||
def local_complementation(self, v): | |||||
assert self.node[a]["vop"] == 0 | |||||
def local_complementation(self, v, prefix = ""): | |||||
""" As defined in LISTING 1 of Anders & Briegel """ | """ As defined in LISTING 1 of Anders & Briegel """ | ||||
debug("V ->Inverting about {}".format(self.get_adj_list_line(v))) | |||||
debug("{}Inverting about {}".format(prefix, self.get_adj_list_line(v))) | |||||
for i, j in it.combinations(self.adj[v], 2): | for i, j in it.combinations(self.adj[v], 2): | ||||
self.toggle_edge(i, j) | self.toggle_edge(i, j) | ||||
@@ -149,19 +159,15 @@ class GraphState(object): | |||||
assert ci["non1"]==False or clifford.is_diagonal(self.node[a]["vop"]) | assert ci["non1"]==False or clifford.is_diagonal(self.node[a]["vop"]) | ||||
assert ci["non2"]==False or clifford.is_diagonal(self.node[b]["vop"]) | assert ci["non2"]==False or clifford.is_diagonal(self.node[b]["vop"]) | ||||
except AssertionError: | except AssertionError: | ||||
print ci | |||||
print self.node[a]["vop"] | |||||
print self.node[b]["vop"] | |||||
debug(ci) | |||||
debug(self.node[a]["vop"]) | |||||
debug(self.node[b]["vop"]) | |||||
edge = self.has_edge(a, b) | edge = self.has_edge(a, b) | ||||
new_edge, self.node[a]["vop"], self.node[ | new_edge, self.node[a]["vop"], self.node[ | ||||
b]["vop"] = clifford.cz_table[edge, self.node[a]["vop"], self.node[b]["vop"]] | b]["vop"] = clifford.cz_table[edge, self.node[a]["vop"], self.node[b]["vop"]] | ||||
if new_edge != edge: | if new_edge != edge: | ||||
self.toggle_edge(a, b) | self.toggle_edge(a, b) | ||||
if new_edge: | |||||
debug("adding edge") | |||||
else: | |||||
debug("deling edge") | |||||
debug("cphase_with_table: after") | debug("cphase_with_table: after") | ||||
self.print_adj_list_line(a) | self.print_adj_list_line(a) | ||||
@@ -0,0 +1,381 @@ | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
deling edge 0 - 1 | |||||
deling edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
deling edge 0 - 1 | |||||
deling edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
deling edge 0 - 1 | |||||
deling edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
deling edge 0 - 1 | |||||
deling edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp YC, neighbors | |||||
Vertex 2: VOp YC, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp YC, neighbors | |||||
Vertex 2: VOp YC, neighbors | |||||
deling edge 1 - 2 | |||||
deling edge | |||||
cphase_with_table: after: | |||||
Vertex 1: VOp YC, neighbors | |||||
Vertex 2: VOp YC, neighbors | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
deling edge 0 - 1 | |||||
deling edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp IA, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp IA, neighbors | |||||
adding edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
cphase: left vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
using UUUU | |||||
U ->Inverting about Vertex 1: VOp IA, neighbors 0 | |||||
U ->Inverting about Vertex 1: VOp YD, neighbors 0 | |||||
U ->Inverting about Vertex 1: VOp XA, neighbors 0 | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 0 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
adding edge | |||||
cphase_with_table: after: | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp IA, neighbors 1 | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp YC, neighbors 1 | |||||
cphase: left vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp YC, neighbors 1 | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
using UUUU | |||||
U ->Inverting about Vertex 1: VOp IA, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp YD, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp XA, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 0 2 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp YC, neighbors 1 | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp YC, neighbors 1 | |||||
adding edge | |||||
cphase_with_table: after: | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp XF, neighbors 1 | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp XF, neighbors 1 | |||||
cphase: left vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp XF, neighbors 1 | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
using V | |||||
V ->Inverting about Vertex 0: VOp IA, neighbors 1 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp XF, neighbors 1 | |||||
Vertex 0: VOp YD, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp XF, neighbors 1 | |||||
adding edge | |||||
cphase_with_table: after: | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
cphase: left vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
Vertex 0: VOp YD, neighbors 1 | |||||
using V | |||||
V ->Inverting about Vertex 0: VOp YD, neighbors 1 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
Vertex 0: VOp XA, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
adding edge | |||||
cphase_with_table: after: | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp IF, neighbors 1 | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp XA, neighbors 1 | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
cphase: right vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 0: VOp XA, neighbors 1 | |||||
Vertex 2: VOp IF, neighbors 1 | |||||
using V | |||||
V ->Inverting about Vertex 2: VOp IF, neighbors 1 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 0: VOp XA, neighbors 1 | |||||
Vertex 2: VOp YC, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp XA, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
deling edge 0 - 1 | |||||
deling edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp ZA, neighbors 2 | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp ZA, neighbors 2 | |||||
cphase: right vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp ZA, neighbors 2 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 2: VOp IA, neighbors 1 | |||||
using VV | |||||
V ->Inverting about Vertex 2: VOp IA, neighbors 1 | |||||
V ->Inverting about Vertex 2: VOp YD, neighbors 1 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
adding edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
cphase: right vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
using UUUU | |||||
U ->Inverting about Vertex 1: VOp IA, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp YD, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp XA, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 0 2 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
deling edge 0 - 1 | |||||
deling edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
cphase: right vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
using UUUU | |||||
U ->Inverting about Vertex 1: VOp IA, neighbors 2 | |||||
U ->Inverting about Vertex 1: VOp YD, neighbors 2 | |||||
U ->Inverting about Vertex 1: VOp XA, neighbors 2 | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 2 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
adding edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp YC, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
cphase: right vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 0: VOp YC, neighbors 1 | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
using UUUU | |||||
U ->Inverting about Vertex 1: VOp IA, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp YD, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp XA, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 0 2 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 0: VOp YC, neighbors 1 | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp YC, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
adding edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp IF, neighbors 1 | |||||
Vertex 1: VOp YB, neighbors 0 2 | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp YB, neighbors 0 2 | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
cphase: left vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp YB, neighbors 0 2 | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
Vertex 0: VOp IF, neighbors 1 | |||||
using VVV | |||||
V ->Inverting about Vertex 0: VOp IF, neighbors 1 | |||||
V ->Inverting about Vertex 0: VOp YC, neighbors 1 | |||||
V ->Inverting about Vertex 0: VOp XF, neighbors 1 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
Vertex 0: VOp ZC, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
deling edge 1 - 2 | |||||
deling edge | |||||
cphase_with_table: after: | |||||
Vertex 1: VOp ZA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp ZC, neighbors 1 | |||||
Vertex 1: VOp ZA, neighbors 0 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp ZC, neighbors 1 | |||||
Vertex 1: VOp ZA, neighbors 0 | |||||
adding edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp IF, neighbors 1 | |||||
Vertex 1: VOp YB, neighbors 0 | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp YB, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
cphase: left vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp YB, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
Vertex 0: VOp IF, neighbors 1 | |||||
using VVV | |||||
V ->Inverting about Vertex 0: VOp IF, neighbors 1 | |||||
V ->Inverting about Vertex 0: VOp YC, neighbors 1 | |||||
V ->Inverting about Vertex 0: VOp XF, neighbors 1 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
Vertex 0: VOp ZC, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
adding edge | |||||
cphase_with_table: after: | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp IA, neighbors 1 | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp ZC, neighbors 1 | |||||
Vertex 1: VOp YC, neighbors 0 2 | |||||
cphase: right vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp YC, neighbors 0 2 | |||||
Vertex 0: VOp ZC, neighbors 1 | |||||
Vertex 2: VOp IA, neighbors 1 | |||||
using UVVVU | |||||
U ->Inverting about Vertex 1: VOp YC, neighbors 0 2 | |||||
V ->Inverting about Vertex 2: VOp YB, neighbors 0 1 | |||||
V ->Inverting about Vertex 2: VOp XE, neighbors 0 1 | |||||
V ->Inverting about Vertex 2: VOp ZB, neighbors 0 1 | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 2 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
Vertex 0: VOp ZC, neighbors 2 | |||||
Vertex 2: VOp YC, neighbors 0 1 | |||||
cphase: left one needs treatment again -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 0: VOp ZC, neighbors 2 | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
Vertex 2: VOp YC, neighbors 0 1 | |||||
using UUUVU | |||||
U ->Inverting about Vertex 0: VOp ZC, neighbors 2 | |||||
V ->Inverting about Vertex 2: VOp ZE, neighbors 0 1 | |||||
U ->Inverting about Vertex 0: VOp YD, neighbors 1 2 | |||||
U ->Inverting about Vertex 0: VOp XA, neighbors 1 2 | |||||
U ->Inverting about Vertex 0: VOp ZD, neighbors 1 2 | |||||
remove_byprod_op, after: (v, avoid, vb): | |||||
Vertex 0: VOp IA, neighbors 1 2 | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp XA, neighbors 0 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp IA, neighbors 1 2 | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
deling edge 0 - 1 | |||||
deling edge | |||||
cphase_with_table: after: | |||||
Vertex 0: VOp IA, neighbors 2 | |||||
Vertex 1: VOp IA, neighbors |
@@ -0,0 +1,364 @@ | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table: after | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table: after | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table: after | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table: after | |||||
Vertex 0: VOp YC, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp YC, neighbors | |||||
Vertex 2: VOp YC, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp YC, neighbors | |||||
Vertex 2: VOp YC, neighbors | |||||
cphase_with_table: after | |||||
Vertex 1: VOp YC, neighbors | |||||
Vertex 2: VOp YC, neighbors | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
cphase_with_table: after | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp YC, neighbors | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp IA, neighbors | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp IA, neighbors | |||||
cphase_with_table: after | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
cphase: left vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
using UUUU | |||||
U ->Inverting about Vertex 1: VOp IA, neighbors 0 | |||||
U ->Inverting about Vertex 1: VOp YD, neighbors 0 | |||||
U ->Inverting about Vertex 1: VOp XA, neighbors 0 | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 0 | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
cphase_with_table: after | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp IA, neighbors 1 | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp YC, neighbors 1 | |||||
cphase: left vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp YC, neighbors 1 | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
using UUUU | |||||
U ->Inverting about Vertex 1: VOp IA, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp YD, neighbors 0 2 | |||||
deling edge | |||||
U ->Inverting about Vertex 1: VOp XA, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 0 2 | |||||
deling edge | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp YC, neighbors 1 | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp YC, neighbors 1 | |||||
cphase_with_table: after | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp XF, neighbors 1 | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp XF, neighbors 1 | |||||
cphase: left vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp XF, neighbors 1 | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
using V | |||||
V ->Inverting about Vertex 0: VOp IA, neighbors 1 | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp XF, neighbors 1 | |||||
Vertex 0: VOp YD, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp XF, neighbors 1 | |||||
cphase_with_table: after | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
cphase: left vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
Vertex 0: VOp YD, neighbors 1 | |||||
using V | |||||
V ->Inverting about Vertex 0: VOp YD, neighbors 1 | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
Vertex 0: VOp XA, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
cphase_with_table: after | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 2: VOp IF, neighbors 1 | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp XA, neighbors 1 | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
cphase: right vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp XB, neighbors 0 2 | |||||
Vertex 0: VOp XA, neighbors 1 | |||||
Vertex 2: VOp IF, neighbors 1 | |||||
using V | |||||
V ->Inverting about Vertex 2: VOp IF, neighbors 1 | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 0: VOp XA, neighbors 1 | |||||
Vertex 2: VOp YC, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp XA, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
deling edge | |||||
cphase_with_table: after | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp ZA, neighbors 2 | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp ZA, neighbors 2 | |||||
cphase: right vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp ZA, neighbors 2 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 2: VOp IA, neighbors 1 | |||||
using VV | |||||
V ->Inverting about Vertex 2: VOp IA, neighbors 1 | |||||
V ->Inverting about Vertex 2: VOp YD, neighbors 1 | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
cphase_with_table: after | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
cphase: right vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
using UUUU | |||||
U ->Inverting about Vertex 1: VOp IA, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp YD, neighbors 0 2 | |||||
deling edge | |||||
U ->Inverting about Vertex 1: VOp XA, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 0 2 | |||||
deling edge | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
deling edge | |||||
cphase_with_table: after | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
cphase: right vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
using UUUU | |||||
U ->Inverting about Vertex 1: VOp IA, neighbors 2 | |||||
U ->Inverting about Vertex 1: VOp YD, neighbors 2 | |||||
U ->Inverting about Vertex 1: VOp XA, neighbors 2 | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 2 | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 2: VOp ZC, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp IA, neighbors | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
cphase_with_table: after | |||||
Vertex 0: VOp IA, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp YC, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
cphase: right vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 0: VOp YC, neighbors 1 | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
using UUUU | |||||
U ->Inverting about Vertex 1: VOp IA, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp YD, neighbors 0 2 | |||||
deling edge | |||||
U ->Inverting about Vertex 1: VOp XA, neighbors 0 2 | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 0 2 | |||||
deling edge | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 0: VOp YC, neighbors 1 | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp YC, neighbors 1 | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
cphase_with_table: after | |||||
Vertex 0: VOp IF, neighbors 1 | |||||
Vertex 1: VOp YB, neighbors 0 2 | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp YB, neighbors 0 2 | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
cphase: left vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp YB, neighbors 0 2 | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
Vertex 0: VOp IF, neighbors 1 | |||||
using VVV | |||||
V ->Inverting about Vertex 0: VOp IF, neighbors 1 | |||||
V ->Inverting about Vertex 0: VOp YC, neighbors 1 | |||||
V ->Inverting about Vertex 0: VOp XF, neighbors 1 | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
Vertex 0: VOp ZC, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp XA, neighbors 1 | |||||
deling edge | |||||
cphase_with_table: after | |||||
Vertex 1: VOp ZA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp ZC, neighbors 1 | |||||
Vertex 1: VOp ZA, neighbors 0 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp ZC, neighbors 1 | |||||
Vertex 1: VOp ZA, neighbors 0 | |||||
cphase_with_table: after | |||||
Vertex 0: VOp IF, neighbors 1 | |||||
Vertex 1: VOp YB, neighbors 0 | |||||
before cphase between 1 and 2 | |||||
Vertex 1: VOp YB, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
cphase: left vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp YB, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
Vertex 0: VOp IF, neighbors 1 | |||||
using VVV | |||||
V ->Inverting about Vertex 0: VOp IF, neighbors 1 | |||||
V ->Inverting about Vertex 0: VOp YC, neighbors 1 | |||||
V ->Inverting about Vertex 0: VOp XF, neighbors 1 | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
Vertex 0: VOp ZC, neighbors 1 | |||||
cphase_with_table called on: | |||||
Vertex 1: VOp IA, neighbors 0 | |||||
Vertex 2: VOp IA, neighbors | |||||
cphase_with_table: after | |||||
Vertex 1: VOp IA, neighbors 0 2 | |||||
Vertex 2: VOp IA, neighbors 1 | |||||
before cphase between 0 and 1 | |||||
Vertex 0: VOp ZC, neighbors 1 | |||||
Vertex 1: VOp YC, neighbors 0 2 | |||||
cphase: right vertex has NONs -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp YC, neighbors 0 2 | |||||
Vertex 0: VOp ZC, neighbors 1 | |||||
Vertex 2: VOp IA, neighbors 1 | |||||
using UVVVU | |||||
U ->Inverting about Vertex 1: VOp YC, neighbors 0 2 | |||||
V ->Inverting about Vertex 2: VOp YB, neighbors 0 1 | |||||
deling edge | |||||
V ->Inverting about Vertex 2: VOp XE, neighbors 0 1 | |||||
V ->Inverting about Vertex 2: VOp ZB, neighbors 0 1 | |||||
deling edge | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 2 | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
Vertex 0: VOp ZC, neighbors 2 | |||||
Vertex 2: VOp YC, neighbors 0 1 | |||||
cphase: left one needs treatment again -> putting it to Id | |||||
remove_byprod_op called: (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
Vertex 0: VOp ZC, neighbors 2 | |||||
Vertex 2: VOp YC, neighbors 0 1 | |||||
using UUUU | |||||
U ->Inverting about Vertex 1: VOp IA, neighbors 2 | |||||
U ->Inverting about Vertex 1: VOp YD, neighbors 2 | |||||
U ->Inverting about Vertex 1: VOp XA, neighbors 2 | |||||
U ->Inverting about Vertex 1: VOp ZD, neighbors 2 | |||||
remove_byprod_op: after (v, avoid, vb): | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
Vertex 0: VOp ZC, neighbors 2 | |||||
Vertex 2: VOp YC, neighbors 0 1 | |||||
cphase_with_table called on: | |||||
Vertex 0: VOp ZC, neighbors 2 | |||||
Vertex 1: VOp IA, neighbors 2 | |||||
{'was_edge': False, 'non1': True, 'non2': True} | |||||
11 | |||||
0 | |||||
cphase_with_table: after | |||||
Vertex 0: VOp YC, neighbors 2 | |||||
Vertex 1: VOp IA, neighbors 2 |
@@ -31,4 +31,5 @@ def anders(): | |||||
b.print_adj_list() | b.print_adj_list() | ||||
pete() | pete() | ||||
anders() | |||||
@@ -0,0 +1,32 @@ | |||||
from abp import GraphState | |||||
from anders_briegel import graphsim | |||||
from abp import clifford | |||||
import random, difflib, re | |||||
from copy import deepcopy | |||||
def isequal(a, b): | |||||
""" TODO: Sketchy as you like. Remove this abomination """ | |||||
aa = a.get_adj_list() | |||||
bb = b.adj_list() | |||||
return re.sub("\\s", "", aa) == re.sub("\\s", "", bb) | |||||
clifford.use_old_cz() | |||||
N = 3 | |||||
a = graphsim.GraphRegister(N) | |||||
b = GraphState(range(N)) | |||||
previous_state, previous_cz = None, None | |||||
while isequal(a, b): | |||||
if random.random()>0.5: | |||||
j = random.randint(0, N-1) | |||||
a.hadamard(j) | |||||
b.act_hadamard(j) | |||||
else: | |||||
q = random.randint(0, N-2) | |||||
if a!=b: | |||||
a.cphase(q, q+1) | |||||
b.act_cz(q, q+1) | |||||