Browse Source

Remove all debug statements

master
Pete Shadbolt 8 years ago
parent
commit
b7cda793ed
1 changed files with 0 additions and 62 deletions
  1. +0
    -62
      abp/graphstate.py

+ 0
- 62
abp/graphstate.py View File

@@ -7,10 +7,6 @@ import json
import qi, clifford, util import qi, clifford, util
import random import random


output = open("debug_pete.txt", "w")
def debug(x):
output.write(str(x)+"\n")

class GraphState(object): class GraphState(object):


def __init__(self, nodes=[]): def __init__(self, nodes=[]):
@@ -42,7 +38,6 @@ 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]


@@ -67,36 +62,17 @@ 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


debug("remove_byprod_op called: (v, avoid, vb):")
self.print_adj_list_line(a)
self.print_adj_list_line(avoid)
self.print_adj_list_line(swap_qubit)
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"]]):
if v == "x": if v == "x":
self.local_complementation(a, "U ->") self.local_complementation(a, "U ->")
else: else:
self.local_complementation(swap_qubit, "V ->") self.local_complementation(swap_qubit, "V ->")


assert self.node[a]["vop"]==0

debug("remove_byprod_op: after (v, avoid, vb):")
self.print_adj_list_line(a)
self.print_adj_list_line(avoid)
self.print_adj_list_line(swap_qubit)

assert self.node[a]["vop"] == 0

def local_complementation(self, v, prefix = ""): def local_complementation(self, v, prefix = ""):
""" As defined in LISTING 1 of Anders & Briegel """ """ As defined in LISTING 1 of Anders & Briegel """
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)


@@ -117,23 +93,16 @@ class GraphState(object):


def act_cz(self, a, b): def act_cz(self, a, b):
""" Act a controlled-phase gate on two qubits """ """ Act a controlled-phase gate on two qubits """
debug("before cphase between {} and {}".format(a, b))
self.print_adj_list_line(a)
self.print_adj_list_line(b)

ci = self.get_connection_info(a, b) ci = self.get_connection_info(a, b)
if ci["non1"]: if ci["non1"]:
debug("cphase: left vertex has NONs -> putting it to Id")
self.remove_vop(a, b) self.remove_vop(a, b)


ci = self.get_connection_info(a, b) ci = self.get_connection_info(a, b)
if ci["non2"]: if ci["non2"]:
debug("cphase: right vertex has NONs -> putting it to Id")
self.remove_vop(b, a) self.remove_vop(b, a)


ci = self.get_connection_info(a, b) ci = self.get_connection_info(a, b)
if ci["non1"] and not clifford.is_diagonal(self.node[a]["vop"]): if ci["non1"] and not clifford.is_diagonal(self.node[a]["vop"]):
debug("cphase: left one needs treatment again -> putting it to Id")
self.remove_vop(a, b) self.remove_vop(a, b)


self.cz_with_table(a, b) self.cz_with_table(a, b)
@@ -150,32 +119,13 @@ class GraphState(object):


def cz_with_table(self, a, b): def cz_with_table(self, a, b):
""" Run the table """ """ Run the table """
debug("cphase_with_table called on:")
self.print_adj_list_line(a)
self.print_adj_list_line(b)

ci = self.get_connection_info(a, b) ci = self.get_connection_info(a, b)
try:
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:
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)


debug("cphase_with_table: after")
self.print_adj_list_line(a)
self.print_adj_list_line(b)

ci = self.get_connection_info(a, b)
assert ci["non1"]==False or clifford.is_diagonal(self.node[a]["vop"])
assert ci["non2"]==False or clifford.is_diagonal(self.node[b]["vop"])


def measure_z(self, node, force=None): def measure_z(self, node, force=None):
""" Measure the graph in the Z-basis """ """ Measure the graph in the Z-basis """
@@ -261,18 +211,6 @@ class GraphState(object):
rows.append(s) rows.append(s)
return " \n".join(rows) + " \n" return " \n".join(rows) + " \n"


def get_adj_list_line(self, key):
""" TODO: delete """
node = self.node[key]
adj = " ".join(map(str, sorted(self.adj[key])))
vop = clifford.get_name(node["vop"])
s = "Vertex {}: VOp {}, neighbors {}".format(key, vop, adj)
return s

def print_adj_list_line(self, key):
debug(self.get_adj_list_line(key))


def __eq__(self, other): def __eq__(self, other):
""" Check equality between graphs """ """ Check equality between graphs """
return self.adj == other.adj and self.node == other.node return self.adj == other.adj and self.node == other.node


Loading…
Cancel
Save