diff --git a/qermit/clifford_noise_characterisation/dfsc.py b/qermit/clifford_noise_characterisation/dfsc.py index 467dcb3c..e71905b6 100644 --- a/qermit/clifford_noise_characterisation/dfsc.py +++ b/qermit/clifford_noise_characterisation/dfsc.py @@ -75,6 +75,7 @@ def preparation_circuit_for_partition( # transform string, then append gates for preparing # +1 eigenstate to circuit # use RemoveRedundancies after to minimise gates required in cosntruction + Transform.RebaseToTket().apply(clifford_circuit) Transform.RebaseToCliffordSingles().apply(clifford_circuit) for string in partition: transformed_string = apply_clifford_basis_change(string, clifford_circuit) diff --git a/tests/dfsc_test.py b/tests/dfsc_test.py index ab16eb5c..dcc41098 100644 --- a/tests/dfsc_test.py +++ b/tests/dfsc_test.py @@ -14,10 +14,11 @@ from pytket import Circuit, Qubit -from pytket.circuit import fresh_symbol # type: ignore +from pytket.circuit import fresh_symbol, PauliExpBox # type: ignore from pytket.transform import Transform # type: ignore from qermit import ( # type: ignore + AnsatzCircuit, SymbolsDict, ObservableTracker, MeasurementCircuit, @@ -309,6 +310,32 @@ def test_DFSC_mitex_gen(): assert res[0][qps_12] == -1.0 assert res[1][qps_012] == 0.7 +def test_CRY_case(): + backend=AerBackend() + dfsc_mitex = gen_DFSC_MitEx(backend=backend) + sym = fresh_symbol("test") + peb_xyz = PauliExpBox([Pauli.X, Pauli.Y, Pauli.Z], sym) + + c = Circuit(3, 3) + c.add_pauliexpbox(peb_xyz, [Qubit(0), Qubit(1), Qubit(2)]).CRy(sym, 0,1).Z(1).Z(2) + c.add_pauliexpbox(peb_xyz, [Qubit(0), Qubit(1), Qubit(2)]).Z(0).Z(1).Z(2) + c.add_pauliexpbox(peb_xyz, [Qubit(0), Qubit(1), Qubit(2)]).Z(0).Z(1).Z(2) + c.add_pauliexpbox(peb_xyz, [Qubit(0), Qubit(1), Qubit(2)]) + Transform.DecomposeBoxes().apply(c) + + symbols = SymbolsDict.symbols_from_dict({sym: 0.25}) + + qubit_pauli_string = QubitPauliString( + [Qubit(0), Qubit(1), Qubit(2)], [Pauli.Z, Pauli.Z, Pauli.Z] + ) + ansatz_circuit = AnsatzCircuit(c, 2000, symbols) + + exp = [ + ObservableExperiment( + ansatz_circuit, ObservableTracker(QubitPauliOperator({qubit_pauli_string: 1.0})) + ) + ] + assert dfsc_mitex.run(exp) if __name__ == "__main__": test_get_clifford_mcs() @@ -318,3 +345,4 @@ def test_DFSC_mitex_gen(): test_DFSC_characterisation_task_gen() test_DFSC_correction_task_gen() test_DFSC_mitex_gen() + test_CRY_case()