@@ -96,7 +96,7 @@ def test_local_complementation(): | |||
def test_single_qubit(): | |||
""" A multi qubit test with Hadamards only""" | |||
for repeat in tqdm(range(REPEATS), desc="Randomly testing single qubit operations against circuit model"): | |||
for repeat in tqdm(range(REPEATS), desc="Single qubit rotations against CircuitModel"): | |||
circuit = [(0, random.choice(range(24))) for i in range(DEPTH)] | |||
a = mock.circuit_to_state(mock.ABPWrapper, 1, circuit) | |||
b = mock.circuit_to_state(mock.CircuitModelWrapper, 1, circuit) | |||
@@ -105,7 +105,7 @@ def test_single_qubit(): | |||
def test_graph_state_multiqubit(n=6): | |||
""" A multi qubit test with Hadamards only""" | |||
for repeat in tqdm(range(REPEATS), desc="Random graph states against the circuit model"): | |||
for repeat in tqdm(range(REPEATS), desc="Random graph states against the CircuitModel"): | |||
circuit = mock.random_graph_circuit(n) | |||
a = mock.circuit_to_state(mock.ABPWrapper, n, circuit) | |||
b = mock.circuit_to_state(mock.CircuitModelWrapper, n, circuit) | |||
@@ -114,7 +114,7 @@ def test_graph_state_multiqubit(n=6): | |||
def test_stabilizer_state_multiqubit(n=6): | |||
""" A multi qubit test with arbitrary local rotations """ | |||
for repeat in tqdm(range(REPEATS), desc="Random Clifford circuits against the circuit model"): | |||
for repeat in tqdm(range(REPEATS), desc="Random Clifford circuits against the CircuitModel"): | |||
circuit = mock.random_stabilizer_circuit(n) | |||
a = mock.circuit_to_state(mock.ABPWrapper, n, circuit) | |||
b = mock.circuit_to_state(mock.CircuitModelWrapper, n, circuit) | |||
@@ -1,7 +1,8 @@ | |||
import numpy as np | |||
from abp import qi | |||
from abp import GraphState | |||
from abp import qi, GraphState | |||
from tqdm import tqdm | |||
DEPTH = 1000 | |||
def test_init(): | |||
""" Can you initialize some qubits """ | |||
@@ -108,11 +109,55 @@ def test_to_state_vector_single_qubit(): | |||
g.act_cz(0, 1) | |||
assert np.allclose(g.to_state_vector().state, qi.bond) | |||
def test_normalize_global_phase(): | |||
""" We should be able to see that two states are equivalent up to a global phase """ | |||
for i in range(10): | |||
u = qi.pz | |||
phase = np.random.uniform(0, 2*np.pi) | |||
m = np.exp(1j*phase) * u | |||
phase = np.random.uniform(0, 2 * np.pi) | |||
m = np.exp(1j * phase) * u | |||
normalized = qi.normalize_global_phase(m) | |||
assert np.allclose(normalized, u) | |||
def test_against_chp(n=5): | |||
""" Test against CHP if it is installed """ | |||
try: | |||
import chp | |||
except ImportError: | |||
print "Not testing against CHP -- not installed" | |||
return | |||
def get_chp_state(): | |||
""" Helper to convert CHP to CircuitModel """ | |||
output = qi.CircuitModel(n) | |||
ket = chp.get_ket() | |||
nonzero = np.sqrt(len(ket)) | |||
output.state[0, 0] = 0 | |||
for key, phase in ket.items(): | |||
output.state[key] = np.exp(1j * phase * np.pi / 2) / nonzero | |||
return output | |||
# Run a simple circuit | |||
chp.init(n) | |||
chp.act_hadamard(0) | |||
chp.act_cnot(0, 1) | |||
psi = qi.CircuitModel(n) | |||
psi.act_hadamard(0) | |||
psi.act_cnot(0, 1) | |||
assert psi == get_chp_state() | |||
# Run a random circuit | |||
chp.init(n) | |||
psi = qi.CircuitModel(n) | |||
for i in tqdm(range(DEPTH), "Testing CircuitModel against CHP"): | |||
if np.random.rand() > .5: | |||
a = np.random.randint(0, n - 1) | |||
chp.act_hadamard(a) | |||
psi.act_hadamard(a) | |||
else: | |||
a, b = np.random.randint(0, n - 1, 2) | |||
if a != b: | |||
chp.act_cnot(a, b) | |||
psi.act_cnot(a, b) | |||
assert psi == get_chp_state() |