|
- import numpy as np
- from abp import GraphState
- from abp import qi, clifford
- from anders_briegel import graphsim
- from tqdm import tqdm
- import random
-
- REPEATS = 100000
- LOCAL_ROTATION = 0
- CZ = 1
- MEASURE = 2
-
- def test_single_qubit_measurements():
- """ Various simple tests of measurements """
-
- # Test that measuring |0> in Z gives 0
- g = GraphState([0])
- assert g.measure(0, "pz") == 0, "Measuring |0> in Z gives 0"
-
- # Test that measuring |1> in Z gives 1
- g = GraphState([0])
- g.act_local_rotation(0, "px")
- assert g.measure(0, "pz") == 1, "Measuring |1> in Z gives 1"
-
- # Test that measuring |+> in X gives 0
- g = GraphState([0])
- g.act_local_rotation(0, "hadamard")
- assert g.measure(0, "px") == 0
- assert g.measure(0, "px") == 0, "Measuring |+> in X gives 0"
- g.act_local_rotation(0, "pz")
- assert g.measure(0, "px") == 1, "Measuring |-> in X gives 1"
-
- def test_random_outcomes():
- """ Testing random behaviour """
- ones = 0
- for i in range(1000):
- g = GraphState([0])
- g.act_local_rotation(0, "hadamard")
- ones += g.measure(0, "pz")
- assert 400 < ones < 600, "This is a probabilistic test!"
-
- def test_projection():
- """ Test that projection works correctly """
- g = GraphState([0])
- g.act_local_rotation(0, "hadamard")
- g.measure(0, "pz", 0)
- assert np.allclose(g.to_state_vector().state, qi.zero)
-
- def test_another_projection():
- """ This one fails at the moment """
- g = GraphState([0])
- g.act_local_rotation(0, "hadamard")
- g.measure(0, "pz", 1)
- assert np.allclose(g.to_state_vector().state, qi.one)
-
- def test_z_measurement_against_ab():
- for i in range(10):
- a = graphsim.GraphRegister(1)
- b = GraphState()
- b.add_node(0)
- #print a.measure(0, graphsim.lco_Z)
- #print b.measure(0, "pz")
-
- def test_all(N=20):
- """ Test everything"""
-
- #clifford.use_old_cz()
-
- #a = graphsim.GraphRegister(N)
- #b = GraphState(range(N))
- #previous_state, previous_cz = None, None
- #for i in tqdm(range(REPEATS), desc="Testing all gates against Anders and Briegel"):
- #which = random.choice([LOCAL_ROTATION, CZ, MEASURE])
- #if which == LOCAL_ROTATION:
- #j = random.randint(0, N-1)
- #u = random.randint(0, 23)
- #a.local_op(j, graphsim.LocCliffOp(u))
- #b.act_local_rotation(j, u)
- #elif which == CZ:
- #q = random.randint(0, N-2)
- #if a!=b:
- #a.cphase(q, q+1)
- #b.act_cz(q, q+1)
- #else:
- #q = random.randint(0, N-2)
- #m = random.choice([1,2,3])
- #force = random.choice([0, 1])
- #thing=3
- #ma = a.measure(q, graphsim.LocCliffOp(m))
- #mb = b.measure(q, str(m), force)
- #print ma, mb
- #assert ma == mb, i
-
|