diff --git a/qiskit/transpiler/passes/routing/basic_swap.py b/qiskit/transpiler/passes/routing/basic_swap.py index 0cae1d8651d3..65b22ef9c178 100644 --- a/qiskit/transpiler/passes/routing/basic_swap.py +++ b/qiskit/transpiler/passes/routing/basic_swap.py @@ -60,7 +60,7 @@ def run(self, dag): compatible with the DAG, or if the coupling_map=None. """ if self.fake_run: - return self.fake_run(dag) + return self._fake_run(dag) new_dag = dag.copy_empty_like() diff --git a/releasenotes/notes/fix-basicswap-fakerun-7469835327f6c8a1.yaml b/releasenotes/notes/fix-basicswap-fakerun-7469835327f6c8a1.yaml new file mode 100644 index 000000000000..c740479e2889 --- /dev/null +++ b/releasenotes/notes/fix-basicswap-fakerun-7469835327f6c8a1.yaml @@ -0,0 +1,4 @@ +fixes: + - | + Fixes a typo where BasicSwap called ``fake_run()`` the attribute instead of ``_fake_run()`` the function. + Refer to `#10149 ` for more details. diff --git a/test/python/transpiler/test_basic_swap.py b/test/python/transpiler/test_basic_swap.py index f9b9f7824eed..53bd599651d2 100644 --- a/test/python/transpiler/test_basic_swap.py +++ b/test/python/transpiler/test_basic_swap.py @@ -14,6 +14,8 @@ import unittest from qiskit.transpiler.passes import BasicSwap +from qiskit.transpiler.passmanager import PassManager +from qiskit.transpiler.layout import Layout from qiskit.transpiler import CouplingMap, Target from qiskit.circuit.library import CXGate from qiskit.converters import circuit_to_dag @@ -369,6 +371,43 @@ def test_far_swap_with_gate_the_middle(self): self.assertEqual(circuit_to_dag(expected), after) + def test_fake_run(self): + """A fake run, doesn't change dag + q0:--(+)-------.-- + | | + q1:---|--------|-- + | + q2:---|--------|-- + | | + q3:---.--[H]--(+)- + + CouplingMap map: [0]--[1]--[2]--[3] + + q0:-------(+)-------.--- + | | + q1:-----X--.--[H]--(+)-- + | + q2:--X--X--------------- + | + q3:--X------------------ + + """ + coupling = CouplingMap([[0, 1], [1, 2], [2, 3]]) + + qr = QuantumRegister(4, "q") + circuit = QuantumCircuit(qr) + circuit.cx(qr[3], qr[0]) + circuit.h(qr[3]) + circuit.cx(qr[0], qr[3]) + + fake_pm = PassManager([BasicSwap(coupling, fake_run=True)]) + real_pm = PassManager([BasicSwap(coupling, fake_run=False)]) + + self.assertEqual(circuit, fake_pm.run(circuit)) + self.assertNotEqual(circuit, real_pm.run(circuit)) + self.assertIsInstance(fake_pm.property_set["final_layout"], Layout) + self.assertEqual(fake_pm.property_set["final_layout"], real_pm.property_set["final_layout"]) + if __name__ == "__main__": unittest.main()