|
20 | 20 | from qiskit.circuit import ClassicalRegister, QuantumRegister, Instruction, Qubit |
21 | 21 | from qiskit.transpiler import PassManager, Target |
22 | 22 | from qiskit.dagcircuit import DAGCircuit |
23 | | -from qiskit_ibm_transpiler.ai.routing import AIRouting |
24 | 23 |
|
25 | 24 | from mqt.predictor.utils import calc_supermarq_features |
26 | 25 | from mqt.predictor.rl.actions import Action |
27 | 26 |
|
28 | 27 | if TYPE_CHECKING: |
29 | 28 | from numpy.random import Generator |
30 | 29 | from numpy.typing import NDArray |
| 30 | + from qiskit_ibm_transpiler.ai.routing import AIRouting |
| 31 | +else: |
| 32 | + AIRouting = object # type: ignore[misc] |
31 | 33 |
|
32 | 34 | import zipfile |
33 | 35 | from importlib import resources |
@@ -103,7 +105,7 @@ def add_cregs_and_measurements( |
103 | 105 | qc.append(instr, new_qargs, cargs) |
104 | 106 | return qc |
105 | 107 |
|
106 | | -class SafeAIRouting(AIRouting): |
| 108 | +class SafeAIRouting(AIRouting): # type: ignore[misc] |
107 | 109 | """ |
108 | 110 | Custom AIRouting wrapper that removes classical registers before routing. |
109 | 111 |
|
@@ -137,9 +139,15 @@ def run(self, dag: DAGCircuit) -> DAGCircuit: |
137 | 139 |
|
138 | 140 | qubit_map = {} |
139 | 141 | for virt in qc_orig.qubits: |
140 | | - phys = final_layout[virt] |
| 142 | + try: |
| 143 | + phys = final_layout[virt] # This is now safe due to above check |
| 144 | + except KeyError as err: |
| 145 | + raise RuntimeError(f"Virtual qubit {virt} not found in final layout!") from err |
141 | 146 | if isinstance(phys, int): |
142 | | - qubit_map[virt] = qc_routed.qubits[phys] |
| 147 | + try: |
| 148 | + qubit_map[virt] = qc_routed.qubits[phys] |
| 149 | + except IndexError as err: |
| 150 | + raise RuntimeError(f"Physical index {phys} is out of range in routed circuit!") from err |
143 | 151 | else: |
144 | 152 | try: |
145 | 153 | idx = qc_routed.qubits.index(phys) |
@@ -183,6 +191,8 @@ def best_of_n_passmanager( |
183 | 191 | else: |
184 | 192 | all_passes = action.transpile_pass(device) |
185 | 193 |
|
| 194 | + assert isinstance(all_passes, list) |
| 195 | + |
186 | 196 | layout_passes = all_passes[:-1] |
187 | 197 | routing_pass = all_passes[-1:] |
188 | 198 |
|
|
0 commit comments