from abp import GraphState, CircuitModel, clifford import numpy as np from numpy import random import itertools as it import pytest import mock ab = pytest.importorskip("ab") REPEATS = 100 DEPTH = 100 PAULIS = ("px", "py", "pz") def test_hadamard(): """ Test hadamards """ circuit = [(0, "hadamard")] ab.test_circuit(circuit, 1) def test_local_rotations(): """ Test local rotations """ for i in list(range(REPEATS)): circuit = [(0, random.choice(list(range(24)))) for j in range(DEPTH)] ab.test_circuit(circuit, 1) def test_times_table(): """ Test times table """ for i, j in it.product(list(range(24)), list(range(24))): circuit = [(0, i), (0, j)] ab.test_circuit(circuit, 1) def test_cz_table(): """ Test the CZ table """ for i, j in it.product(list(range(24)), list(range(24))): circuit = [(0, i), (1, j), ((0, 1), "cz")] ab.test_circuit(circuit, 2) def test_cz_hadamard(n=10): """ Test CZs and Hadamards at random """ for i in list(range(REPEATS)): circuit = random.choice(["cz", "hadamard"], DEPTH) circuit = [(mock.random_pair(n), gate) if gate == "cz" else (random.choice(list(range(n))), gate) for gate in circuit] ab.test_circuit(circuit, n) def test_all(n=10): """ Test everything """ for i in list(range(REPEATS)): circuit = random.choice(["cz"] * 10 + list(range(24)), DEPTH) circuit = [(mock.random_pair(n), gate) if gate == "cz" else (random.choice(list(range(n))), gate) for gate in circuit] ab.test_circuit(circuit, n) def test_single_qubit_measurement(): """ Determinstic test of all single-qubit situations """ space = it.product(list(range(24)), PAULIS, (0, 1)) for rotation, measurement, outcome in space: a = mock.circuit_to_state(mock.ABPWrapper, 1, [(0, rotation)]) b = mock.circuit_to_state(mock.AndersWrapper, 1, [(0, rotation)]) result_a = a.measure(0, measurement, outcome) result_b = b.measure(0, measurement, outcome) assert result_a == result_b assert a == b def test_two_qubit_measurement(): """ Various two-qubit measurements on a Bell state""" for measurement, outcome in it.product(PAULIS, (0, 1)): circuit = mock.bell_pair() a = mock.circuit_to_state(mock.ABPWrapper, 2, circuit) b = mock.circuit_to_state(mock.AndersWrapper, 2, circuit) assert a.measure(0, measurement, outcome) == \ b.measure(0, measurement, outcome) assert a == b def test_graph_state_measurement(n = 10): """ Measuring random graph states """ space = list(it.product(list(range(REPEATS)), PAULIS, (0, 1))) for i, measurement, outcome in space: circuit = mock.random_graph_circuit(n, DEPTH) a = mock.circuit_to_state(mock.ABPWrapper, n, circuit) b = mock.circuit_to_state(mock.AndersWrapper, n, circuit) a.measure(0, measurement, outcome) b.measure(0, measurement, outcome) assert a == b def test_stabilizer_state_measurement(n = 10): """ Measuring random stabilizer states """ space = list(it.product(list(range(REPEATS)), PAULIS, (0, 1))) for i, measurement, outcome in space: circuit = mock.random_stabilizer_circuit(n, DEPTH) a = mock.circuit_to_state(mock.ABPWrapper, n, circuit) b = mock.circuit_to_state(mock.AndersWrapper, n, circuit) a.measure(0, measurement, outcome) b.measure(0, measurement, outcome) assert a == b