Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test that gateset is preserved #84

33 changes: 26 additions & 7 deletions ucc/tests/test_compile.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,48 @@
import pytest

from pytket import Circuit as TketCircuit
from benchmarks.circuits import qcnn_circuit, random_clifford_circuit
from cirq import CNOT
from cirq import Circuit as CirqCircuit
from cirq import H, LineQubit
from pytket import Circuit as TketCircuit
from qiskit import QuantumCircuit as QiskitCircuit
from cirq import H, CNOT, LineQubit

from qiskit.converters import circuit_to_dag
from qiskit.transpiler.passes import GatesInBasis
from ucc import compile
from ucc.transpilers.ucc_defaults import UCCDefault1


def test_qiskit_compile():
circuit = QiskitCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
result_circuit = compile(circuit, return_format='original')
result_circuit = compile(circuit, return_format="original")
assert isinstance(result_circuit, QiskitCircuit)


def test_cirq_compile():
qubits = LineQubit.range(2)
circuit = CirqCircuit(H(qubits[0]), CNOT(qubits[0], qubits[1]))
result_circuit = compile(circuit, return_format='original')
result_circuit = compile(circuit, return_format="original")
assert isinstance(result_circuit, CirqCircuit)


def test_tket_compile():
circuit = TketCircuit(2)
circuit.H(0)
circuit.CX(0, 1)
result_circuit = compile(circuit, return_format='original')
result_circuit = compile(circuit, return_format="original")
assert isinstance(result_circuit, TketCircuit)


@pytest.mark.parametrize("circuit_function", [qcnn_circuit, random_clifford_circuit])
@pytest.mark.parametrize("num_qubits", [4, 5, 6, 7, 8, 9, 10])
@pytest.mark.parametrize("seed", [1, 326, 5678, 12345])
def test_compilation_retains_gateset(circuit_function, num_qubits, seed):
circuit = circuit_function(num_qubits, seed)
transpiler = UCCDefault1()
target_basis = transpiler.target_basis
transpiled_circuit = transpiler.run(circuit)
dag = circuit_to_dag(transpiled_circuit)
analysis_pass = GatesInBasis(basis_gates=target_basis)
analysis_pass.run(dag)
assert analysis_pass.property_set["all_gates_in_basis"] == True