diff --git a/qermit/taskgraph/mitex.py b/qermit/taskgraph/mitex.py index 7d72e138..48710404 100644 --- a/qermit/taskgraph/mitex.py +++ b/qermit/taskgraph/mitex.py @@ -134,6 +134,18 @@ def task( symbols = ansatz_circuit[2] observable_tracker = measurement_wire[1] + non_existant_qubits = ( + observable_tracker.qubit_pauli_operator.all_qubits.difference( + set(circuit.qubits) + ) + ) + # TODO: In a future refactor, this check should be done + # inside ObservableExperiment. + if len(non_existant_qubits) > 0: + raise Exception( + f"ObservableTracker qubits {non_existant_qubits} are not found in circuit." + ) + # first make sure all observable has some measurement circuit strings_for_circuits = observable_tracker.get_empty_strings() for string in strings_for_circuits: diff --git a/tests/mitex_test.py b/tests/mitex_test.py index 76c8b02b..7480c614 100644 --- a/tests/mitex_test.py +++ b/tests/mitex_test.py @@ -15,6 +15,7 @@ import copy +import pytest from pytket.circuit import Circuit, OpType, Qubit, fresh_symbol # type: ignore from pytket.extensions.qiskit import AerBackend # type: ignore from pytket.pauli import Pauli, QubitPauliString # type: ignore @@ -37,6 +38,44 @@ ) +def test_valid_observable(): + backend = AerBackend(n_qubits=2) + mitex = MitEx(backend=backend) + + circuit = Circuit() + q_reg = circuit.add_q_register(name="my_quibts", size=2) + circuit.CX(q_reg[0], q_reg[1]) + + qps_one = QubitPauliString( + [Qubit(name="my_quibts", index=0), Qubit(name="my_quibts", index=1)], + [Pauli.Z, Pauli.Z], + ) + qps_two = QubitPauliString([Qubit(1), Qubit(2)], [Pauli.Z, Pauli.Z]) + + obs_exp = ObservableExperiment( + AnsatzCircuit(circuit, 2, SymbolsDict()), + ObservableTracker( + QubitPauliOperator( + { + qps_one: 1, + } + ) + ), + ) + + assert mitex.run([obs_exp])[0]._dict[qps_one] == 1.0 + + obs_exp = ObservableExperiment( + AnsatzCircuit(circuit, 2, SymbolsDict()), + ObservableTracker(QubitPauliOperator({qps_one: 1, qps_two: 1})), + ) + with pytest.raises( + Exception, + match="ObservableTracker qubits \{q\[2\], q\[1\]\} are not found in circuit.", + ): + mitex.run([obs_exp]) + + def test_mitex_cache(): circuit = Circuit(1).X(0) backend = AerBackend()