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()