diff --git a/qiskit/compiler/transpiler.py b/qiskit/compiler/transpiler.py index 4b7b0bbf0869..6eb851910ddd 100644 --- a/qiskit/compiler/transpiler.py +++ b/qiskit/compiler/transpiler.py @@ -921,11 +921,15 @@ def _parse_instruction_durations(backend, inst_durations, dt, circuits): take precedence over backend durations, but be superceded by ``inst_duration``s. """ if not inst_durations: - backend_durations = InstructionDurations() - try: - backend_durations = InstructionDurations.from_backend(backend) - except AttributeError: - pass + backend_version = getattr(backend, "version", 0) + if backend_version <= 1: + backend_durations = InstructionDurations() + try: + backend_durations = InstructionDurations.from_backend(backend) + except AttributeError: + pass + else: + backend_durations = backend.instruction_durations durations = [] for circ in circuits: diff --git a/releasenotes/notes/fix-transpile-backendv2-durations-dbc85688564cc271.yaml b/releasenotes/notes/fix-transpile-backendv2-durations-dbc85688564cc271.yaml new file mode 100644 index 000000000000..00e7886468ba --- /dev/null +++ b/releasenotes/notes/fix-transpile-backendv2-durations-dbc85688564cc271.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + Fixed an issue with the :func:`~.transpile` function when run with a + :class:`~.BackendV2` based backend and setting the ``scheduling_method`` + keyword argument. Previously, the function would not correctly process + the default durations of the instructions supported by the backend which + would lead to an error. diff --git a/test/python/compiler/test_transpiler.py b/test/python/compiler/test_transpiler.py index 3a6de35f49a7..83fa89503027 100644 --- a/test/python/compiler/test_transpiler.py +++ b/test/python/compiler/test_transpiler.py @@ -35,7 +35,7 @@ from qiskit.circuit.library import CXGate, U3Gate, U2Gate, U1Gate, RXGate, RYGate, RZGate, UGate from qiskit.circuit.measure import Measure from qiskit.test import QiskitTestCase -from qiskit.test.mock import FakeMelbourne, FakeRueschlikon, FakeAlmaden +from qiskit.test.mock import FakeMelbourne, FakeRueschlikon, FakeAlmaden, FakeMumbaiV2 from qiskit.transpiler import Layout, CouplingMap from qiskit.transpiler import PassManager from qiskit.transpiler.target import Target @@ -1242,6 +1242,18 @@ def test_delay_converts_to_dt(self): out = transpile(qc, dt=1e-9) self.assertEqual(out.data[0][0].unit, "dt") + def test_scheduling_backend_v2(self): + """Test that scheduling method works with Backendv2.""" + qc = QuantumCircuit(2) + qc.h(0) + qc.cx(0, 1) + qc.measure_all() + + backend = FakeMumbaiV2() + out = transpile([qc, qc], backend, scheduling_method="alap") + self.assertIn("delay", out[0].count_ops()) + self.assertIn("delay", out[1].count_ops()) + @data(1, 2, 3) def test_no_infinite_loop(self, optimization_level): """Verify circuit cost always descends and optimization does not flip flop indefinitely."""