|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- from clifford import *
-
- """
- Porting Anders and Briegel to Python
- """
-
- stab_rep = {None: "-", 0: "X", 1: "Y", 2: "Z"}
-
-
- class RightPhase(object):
-
- def __init__(self, phase):
- self.phase = phase % 4
-
- def conjugate
-
-
- class LocalOperator(object):
-
- def __init__(self):
- pass
-
-
- class Stabilizer(object):
-
- def __init__(self, graph):
- n = graph.nqubits
- self.paulis = [[None for i in range(n)] for j in range(n)]
- self.rowsigns = [None for i in range(n)]
-
- for i in range(n):
- self.rowsigns[i] = RightPhase(0)
- for j in range(n):
- if i == j:
- self.paulis[i][j] = lco_x
- elif j in g.vertices[i].neighbors:
- self.paulis[i][j] = lco_z
- else:
- self.paulis[i][j] = lco_id
-
- self.conjugate(i, j, graph.vertices[j].vertex_operator)
-
- def conjugate(self, i, j, vertex_operator):
- self.rowsigns[j] = self.rowsigns[j] + \
- self.paulis[i][j].conjugate(vertex_operator)
-
- def __str__(self):
- return "\n".join(" ".join(stab_rep[x] for x in row) for row in self.paulis)
-
-
- class Vertex(object):
-
- def __init__(self, index):
- self.index = index
- self.vertex_operator = lco_h
- self.neighbors = set()
-
- def edgelist(self):
- return [set((self.index, n)) for n in self.neighbors]
-
- def __str__(self):
- return "{}".format(", ".join(map(str, self.neighbors)))
-
-
- class GraphRegister(object):
-
- def __init__(self, n):
- self.nqubits = n
- self.vertices = [Vertex(i) for i in xrange(n)]
-
- def add_edge(self, v1, v2):
- self.vertices[v1].neighbors.add(v2)
- self.vertices[v2].neighbors.add(v1)
-
- def del_edge(self, v1, v2):
- self.vertices[v1].neighbors.remove(v2)
- self.vertices[v2].neighbors.remove(v1)
-
- def toggle_edge(self, v1, v2):
- if v2 in self.vertices[v1].neighbors:
- self.del_edge(v1, v2)
- else:
- self.add_edge(v1, v2)
-
- def edgelist(self):
- return map(tuple, frozenset(frozenset((v.index, n))
- for v in self.vertices
- for n in v.neighbors))
-
- def __str__(self, ):
- return "\n".join(str(v) for v in self.vertices
- if len(v.neighbors) > 0)
-
- if __name__ == '__main__':
- g = GraphRegister(10)
- g.toggle_edge(0, 1)
- print g
|