|
@@ -1,91 +0,0 @@ |
|
|
from abp import GraphState, clifford |
|
|
|
|
|
from abp.fancy import GraphState as Fancy |
|
|
|
|
|
from anders_briegel import graphsim |
|
|
|
|
|
import random |
|
|
|
|
|
import numpy as np |
|
|
|
|
|
from tqdm import tqdm |
|
|
|
|
|
import time |
|
|
|
|
|
import itertools as it |
|
|
|
|
|
import sys |
|
|
|
|
|
|
|
|
|
|
|
REPEATS = 100000 |
|
|
|
|
|
N=9 |
|
|
|
|
|
|
|
|
|
|
|
def compare(A, B): |
|
|
|
|
|
keys_same = set(A["node"].keys()) == set(B["node"].keys()) |
|
|
|
|
|
vops_same = all(A["node"][i]["vop"] == B["node"][i]["vop"] for i in A["node"].keys()) |
|
|
|
|
|
edges_same = A["adj"] == B["adj"] |
|
|
|
|
|
if keys_same and vops_same and edges_same: |
|
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
sys.exit(0) |
|
|
|
|
|
print "doing a state vector check" |
|
|
|
|
|
alice = GraphState(range(N)) |
|
|
|
|
|
alice.node = A["node"] |
|
|
|
|
|
alice.adj = A["adj"] |
|
|
|
|
|
|
|
|
|
|
|
bob = GraphState(range(N)) |
|
|
|
|
|
bob.node = B["node"] |
|
|
|
|
|
bob.adj = B["adj"] |
|
|
|
|
|
if alice.to_state_vector() == bob.to_state_vector(): |
|
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return False |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
|
|
|
|
|
|
|
|
clifford.use_old_cz() |
|
|
|
|
|
|
|
|
|
|
|
a = graphsim.GraphRegister(N) |
|
|
|
|
|
b = Fancy(range(N)) |
|
|
|
|
|
|
|
|
|
|
|
# Keep comparing until fail |
|
|
|
|
|
while compare(a.to_json(), b.to_json()): |
|
|
|
|
|
if random.random()>0.5: |
|
|
|
|
|
j = np.random.randint(0, N) |
|
|
|
|
|
u = random.randint(0, 23) |
|
|
|
|
|
print "> Acting U{} on {}".format(u, j) |
|
|
|
|
|
a.local_op(j, graphsim.LocCliffOp(u)) |
|
|
|
|
|
b.act_local_rotation(j, u) |
|
|
|
|
|
print "Done" |
|
|
|
|
|
else: |
|
|
|
|
|
i, j= np.random.randint(0, N, 2) |
|
|
|
|
|
if i!=j: |
|
|
|
|
|
print "> Acting CZ on {} & {}".format(i, j) |
|
|
|
|
|
a.cphase(i, j) |
|
|
|
|
|
b.act_cz(i, j) |
|
|
|
|
|
print "Done" |
|
|
|
|
|
#b.update(delay=0.1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Show the diff |
|
|
|
|
|
A = a.to_json()["node"] |
|
|
|
|
|
B = b.to_json()["node"] |
|
|
|
|
|
for i in range(N): |
|
|
|
|
|
if A[i]["vop"] != B[i]["vop"]: |
|
|
|
|
|
print "{}/ them: {}, me: {}".format(i, A[i]["vop"], B[i]["vop"]) |
|
|
|
|
|
|
|
|
|
|
|
# Now construct unitaries |
|
|
|
|
|
A = a.to_json() |
|
|
|
|
|
B = b.to_json() |
|
|
|
|
|
alice = GraphState(range(N)) |
|
|
|
|
|
alice.node = A["node"] |
|
|
|
|
|
alice.adj = A["adj"] |
|
|
|
|
|
|
|
|
|
|
|
bob = GraphState(range(N)) |
|
|
|
|
|
bob.node = B["node"] |
|
|
|
|
|
bob.adj = B["adj"] |
|
|
|
|
|
print alice.to_state_vector() == bob.to_state_vector() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
b.layout() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|