diff --git a/qiskit/test/mock/utils/backend_converter.py b/qiskit/test/mock/utils/backend_converter.py index 39023e8de97d..c58881c1257c 100644 --- a/qiskit/test/mock/utils/backend_converter.py +++ b/qiskit/test/mock/utils/backend_converter.py @@ -21,6 +21,7 @@ from qiskit.circuit.library.standard_gates import IGate, SXGate, XGate, CXGate, RZGate from qiskit.circuit.parameter import Parameter from qiskit.circuit.gate import Gate +from qiskit.circuit.delay import Delay from qiskit.circuit.measure import Measure from qiskit.circuit.reset import Reset from qiskit.providers.models.pulsedefaults import PulseDefaults @@ -123,6 +124,9 @@ def convert_to_target(conf_dict: dict, props_dict: dict = None, defs_dict: dict target[inst][(qubit,)].calibration = sched else: target[inst][qarg].calibration = sched + target.add_instruction( + Delay(Parameter("t")), {(bit,): None for bit in range(target.num_qubits)} + ) return target diff --git a/qiskit/visualization/gate_map.py b/qiskit/visualization/gate_map.py index 48044e7a04dd..aaba7b825ae3 100644 --- a/qiskit/visualization/gate_map.py +++ b/qiskit/visualization/gate_map.py @@ -958,6 +958,8 @@ def plot_error_map(backend, figsize=(12, 9), show_title=True, qubit_coordinates= if prop_dict is None or None in prop_dict: continue for qargs, inst_props in prop_dict.items(): + if inst_props is None: + continue if gate == "measure": if inst_props.error is not None: read_err[qargs[0]] = inst_props.error diff --git a/releasenotes/notes/delay-fake-backends-3f68c074e85d531f.yaml b/releasenotes/notes/delay-fake-backends-3f68c074e85d531f.yaml new file mode 100644 index 000000000000..0c0f9d77f06f --- /dev/null +++ b/releasenotes/notes/delay-fake-backends-3f68c074e85d531f.yaml @@ -0,0 +1,12 @@ +--- +fixes: + - | + The :class:`~.BackendV2` based fake backends in + the :mod:`qiskit.providers.fake_provider` module, such as + ``FakeMontrealV2``, previously were missing the :class:`~qiskit.circuit.Delay` operation + support from their :attr:`~.BackendV2.target` attribute. This prevented + compiling some :class:`~.QuantumCircuit` objects that contained + :class:`~qiskit.circuit.Delay` instructions to these backends. This has been corrected + by adding the :class:`~qiskit.circuit.Delay` to the :class:`~.Target` object for each + fake backend to ensure that the compiler knows that :class:`~qiskit.circuit.Delay` is + a valid operation on the fake backends. diff --git a/test/python/providers/test_fake_backends.py b/test/python/providers/test_fake_backends.py index 2ef684e826b7..2e99feb0033d 100644 --- a/test/python/providers/test_fake_backends.py +++ b/test/python/providers/test_fake_backends.py @@ -25,6 +25,7 @@ from qiskit.execute_function import execute from qiskit.test.base import QiskitTestCase from qiskit.test.mock import FakeProviderForBackendV2, FakeProvider +from qiskit.test.mock import FakeMumbaiV2 from qiskit.utils import optionals FAKE_PROVIDER_FOR_BACKEND_V2 = FakeProviderForBackendV2() @@ -146,3 +147,13 @@ def test_defaults_to_dict(self, backend): self.assertGreater(i, 1e6) else: self.skipTest("Backend %s does not have defaults" % backend) + + def test_delay_circuit(self): + backend = FakeMumbaiV2() + qc = QuantumCircuit(2) + qc.delay(502, 0, unit="ns") + qc.x(1) + qc.delay(250, 1, unit="ns") + qc.measure_all() + res = transpile(qc, backend) + self.assertIn("delay", res.count_ops())