diff --git a/ucc/tests/test_compile.py b/ucc/tests/test_compile.py index 4fcc1f7e..580a9aad 100644 --- a/ucc/tests/test_compile.py +++ b/ucc/tests/test_compile.py @@ -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