Anders and Briegel in Python
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.7KB

  1. from clifford import *
  2. """
  3. Porting Anders and Briegel to Python
  4. """
  5. stab_rep = {None: "-", 0: "X", 1: "Y", 2: "Z"}
  6. class Stabilizer(object):
  7. def __init__(self, graph):
  8. self.paulis = [[None for i in range(graph.nqubits)]
  9. for j in range(graph.nqubits)]
  10. def __str__(self):
  11. return "\n".join(" ".join(stab_rep[x] for x in row) for row in self.paulis)
  12. class Vertex(object):
  13. def __init__(self, index):
  14. self.index = index
  15. self.vertex_operator = lco_h
  16. self.neighbors = set()
  17. def edgelist(self):
  18. return [set((self.index, n)) for n in self.neighbors]
  19. def __str__(self):
  20. return "{}".format(", ".join(map(str, self.neighbors)))
  21. class GraphRegister(object):
  22. def __init__(self, n):
  23. self.nqubits = n
  24. self.vertices = [Vertex(i) for i in xrange(n)]
  25. def add_edge(self, v1, v2):
  26. self.vertices[v1].neighbors.add(v2)
  27. self.vertices[v2].neighbors.add(v1)
  28. def del_edge(self, v1, v2):
  29. self.vertices[v1].neighbors.remove(v2)
  30. self.vertices[v2].neighbors.remove(v1)
  31. def toggle_edge(self, v1, v2):
  32. if v2 in self.vertices[v1].neighbors:
  33. self.del_edge(v1, v2)
  34. else:
  35. self.add_edge(v1, v2)
  36. def edgelist(self):
  37. return map(tuple, frozenset(frozenset((v.index, n))
  38. for v in self.vertices
  39. for n in v.neighbors))
  40. def __str__(self, ):
  41. return "\n".join(str(v) for v in self.vertices
  42. if len(v.neighbors) > 0)
  43. if __name__ == '__main__':
  44. g = GraphRegister(10)
  45. g.toggle_edge(0, 1)
  46. print g