Skip to content
11 changes: 8 additions & 3 deletions qiskit/compiler/transpiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -666,9 +666,14 @@ def _parse_basis_gates(basis_gates, backend, circuits):
def _parse_inst_map(inst_map, backend, num_circuits):
# try getting inst_map from user, else backend
if inst_map is None:
if hasattr(backend, "defaults"):
inst_map = getattr(backend.defaults(), "instruction_schedule_map", None)

backend_version = getattr(backend, "version", 0)
if not isinstance(backend_version, int):
backend_version = 0
if backend_version <= 1:
if hasattr(backend, "defaults"):
inst_map = getattr(backend.defaults(), "instruction_schedule_map", None)
else:
inst_map = backend.target.instruction_schedule_map()
# inst_maps could be None, or single entry
if inst_map is None or isinstance(inst_map, InstructionScheduleMap):
inst_map = [inst_map] * num_circuits
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
fixes:
- |
Fixed support in :func:`~qiskit.compiler.transpile` for passing a
:class:`~qiskit.pulse.InstructionMap` to the underlying :class:`~qiskit.transpiler.PassManager`
based on the :class:`~qiskit.transpiler.Target` for :class:`~qiskit.providers.backend.BackendV2` based
backends.
7 changes: 7 additions & 0 deletions test/python/providers/test_backend_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

from qiskit.circuit import QuantumCircuit, ClassicalRegister, QuantumRegister
from qiskit.compiler import transpile
from qiskit.compiler.transpiler import _parse_inst_map
from qiskit.pulse.instruction_schedule_map import InstructionScheduleMap
from qiskit.test.base import QiskitTestCase
from qiskit.test.mock.fake_backend_v2 import FakeBackendV2, FakeBackend5QV2
from qiskit.test.mock.fake_mumbai_v2 import FakeMumbaiV2
Expand Down Expand Up @@ -165,3 +167,8 @@ def test_transpile_mumbai_target(self):
expected.measure(qr[0], cr[0])
expected.measure(qr[1], cr[1])
self.assertEqual(expected, tqc)

def test_transpile_parse_inst_map(self):
"""Test that transpiler._parse_inst_map() supports BackendV2."""
inst_map = _parse_inst_map(inst_map=None, backend=self.backend, num_circuits=1)[0]
Comment thread
HuangJunye marked this conversation as resolved.
self.assertIsInstance(inst_map, InstructionScheduleMap)