@@ -7,8 +7,9 @@ import json | |||
import qi, clifford, util | |||
import random | |||
output = open("debug_pete.txt", "w") | |||
def debug(x): | |||
pass | |||
output.write(str(x)+"\n") | |||
class GraphState(object): | |||
@@ -41,6 +42,7 @@ class GraphState(object): | |||
def del_edge(self, v1, v2): | |||
""" Delete an edge between two vertices in the self """ | |||
debug("deling edge") | |||
del self.adj[v1][v2] | |||
del self.adj[v2][v1] | |||
@@ -65,7 +67,7 @@ class GraphState(object): | |||
def remove_vop(self, a, avoid): | |||
""" Reduces VOP[a] to the identity """ | |||
# TODO: sucks! | |||
others = set(self.adj[a]) - {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(avoid) | |||
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"]]): | |||
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 | |||
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(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 """ | |||
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): | |||
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["non2"]==False or clifford.is_diagonal(self.node[b]["vop"]) | |||
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) | |||
new_edge, self.node[a]["vop"], self.node[ | |||
b]["vop"] = clifford.cz_table[edge, self.node[a]["vop"], self.node[b]["vop"]] | |||
if new_edge != edge: | |||
self.toggle_edge(a, b) | |||
if new_edge: | |||
debug("adding edge") | |||
else: | |||
debug("deling edge") | |||
debug("cphase_with_table: after") | |||
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() | |||
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) | |||