|
|
@@ -132,8 +132,8 @@ class GraphState(object): |
|
|
|
#basis, phase = clifford.conjugate(basis, ha) |
|
|
|
basis, phase = clifford.conjugate(basis, self.node[node]["vop"]) |
|
|
|
|
|
|
|
print "MEASURE" |
|
|
|
print "Op: {} Phase: {}".format(basis, phase) |
|
|
|
#print "MEASURE" |
|
|
|
#print "Op: {} Phase: {}".format(basis, phase) |
|
|
|
|
|
|
|
# Flip a coin |
|
|
|
result = force if force!=None else random.choice([0, 1]) |
|
|
@@ -183,15 +183,15 @@ class GraphState(object): |
|
|
|
# Update the VOPs. TODO: pretty ugly |
|
|
|
if result: |
|
|
|
# Do a z on all ngb(vb) \ ngb(v) \ {v}, and some other stuff |
|
|
|
self.act_local_rotation(node, "pz") |
|
|
|
self.act_local_rotation(friend, "msqy") |
|
|
|
self.act_local_rotation2(node, "pz") |
|
|
|
self.act_local_rotation2(friend, "msqy") |
|
|
|
for n in set(self.adj[friend]) - set(self.adj[node]) - {node}: |
|
|
|
self.act_local_rotation(n, "pz") |
|
|
|
self.act_local_rotation2(n, "pz") |
|
|
|
else: |
|
|
|
# Do a z on all ngb(v) \ ngb(vb) \ {vb}, and sqy on the friend |
|
|
|
self.act_local_rotation(friend, "sqy") |
|
|
|
self.act_local_rotation2(friend, "sqy") |
|
|
|
for n in set(self.adj[node]) - set(self.adj[friend]) - {friend}: |
|
|
|
self.act_local_rotation(n, "pz") |
|
|
|
self.act_local_rotation2(n, "pz") |
|
|
|
|
|
|
|
# Toggle the edges. TODO: Yuk. Just awful! |
|
|
|
a = set(self.adj[node].keys()) |
|
|
@@ -212,7 +212,7 @@ class GraphState(object): |
|
|
|
# Do some rotations |
|
|
|
for neighbour in self.adj[node]: |
|
|
|
# NB: should these be hermitian_conjugated? |
|
|
|
self.act_local_rotation(neighbour, "sqz" if result else "msqz") |
|
|
|
self.act_local_rotation2(neighbour, "sqz" if result else "msqz") |
|
|
|
|
|
|
|
# A sort of local complementation |
|
|
|
vngbh = set(self.adj[node]) | {node} |
|
|
@@ -222,9 +222,9 @@ class GraphState(object): |
|
|
|
# lcoS.herm_adjoint() if result else lcoS |
|
|
|
# else smiZ |
|
|
|
# 5 else 6 |
|
|
|
print "RESULT is {:d}, op is {} doing {}".format(result, self.node[node]["vop"], 5 if result else 6) |
|
|
|
#print "RESULT is {:d}, op is {} doing {}".format(result, self.node[node]["vop"], 5 if result else 6) |
|
|
|
self.act_local_rotation2(node, 5 if result else 6) |
|
|
|
print "BECAME ", self.node[node]["vop"] |
|
|
|
#print "BECAME ", self.node[node]["vop"] |
|
|
|
return result |
|
|
|
|
|
|
|
def measure_z(self, node, result): |
|
|
@@ -234,12 +234,14 @@ class GraphState(object): |
|
|
|
for neighbour in tuple(self.adj[node]): |
|
|
|
self.del_edge(node, neighbour) |
|
|
|
if result: |
|
|
|
self.act_local_rotation(neighbour, "pz") |
|
|
|
self.act_local_rotation2(neighbour, "pz") |
|
|
|
|
|
|
|
# Rotate |
|
|
|
self.act_local_rotation(node, "hadamard") |
|
|
|
if result: |
|
|
|
self.act_local_rotation(node, "px") |
|
|
|
self.act_local_rotation2(node, "px") |
|
|
|
self.act_local_rotation2(node, "hadamard") |
|
|
|
else: |
|
|
|
self.act_local_rotation2(node, "hadamard") |
|
|
|
|
|
|
|
return result |
|
|
|
|
|
|
|