diff --git a/crates/accelerate/src/sabre_swap/mod.rs b/crates/accelerate/src/sabre_swap/mod.rs index 12c21cbd1ce1..8549d7001cc3 100644 --- a/crates/accelerate/src/sabre_swap/mod.rs +++ b/crates/accelerate/src/sabre_swap/mod.rs @@ -415,8 +415,8 @@ fn swap_map_trial( qubits_decay.fill(1.); num_search_steps = 0; } else { - qubits_decay[best_swap[0]] += DECAY_RATE; - qubits_decay[best_swap[1]] += DECAY_RATE; + qubits_decay[layout.logic_to_phys[best_swap[0]]] += DECAY_RATE; + qubits_decay[layout.logic_to_phys[best_swap[1]]] += DECAY_RATE; } } // If we exceeded the number of allowed attempts without successfully routing a node, we @@ -735,7 +735,8 @@ fn choose_best_swap( + EXTENDED_SET_WEIGHT * extended_set.score(swap, layout, dist) } Heuristic::Decay => { - qubits_decay[swap[0]].max(qubits_decay[swap[1]]) + qubits_decay[layout.logic_to_phys[swap[0]]] + .max(qubits_decay[layout.logic_to_phys[swap[1]]]) * (absolute_score + layer.score(swap, layout, dist) + EXTENDED_SET_WEIGHT * extended_set.score(swap, layout, dist)) diff --git a/releasenotes/notes/sabre-decay-physical-ad2f470cd45d69f3.yaml b/releasenotes/notes/sabre-decay-physical-ad2f470cd45d69f3.yaml new file mode 100644 index 000000000000..8d647d5b13d5 --- /dev/null +++ b/releasenotes/notes/sabre-decay-physical-ad2f470cd45d69f3.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + The ``"decay"`` heuristic of :class:`.SabreSwap` and :class:`.SabreLayout` now tracks the depth + correctly on physical qubits rather than mistakenly tracking the "depth" of swaps on virtual + qubits. diff --git a/test/python/transpiler/test_sabre_layout.py b/test/python/transpiler/test_sabre_layout.py index 2c41de46df04..ff9788521c16 100644 --- a/test/python/transpiler/test_sabre_layout.py +++ b/test/python/transpiler/test_sabre_layout.py @@ -60,7 +60,7 @@ def test_5q_circuit_20q_coupling(self): pass_.run(dag) layout = pass_.property_set["layout"] - self.assertEqual([layout[q] for q in circuit.qubits], [11, 10, 16, 5, 17]) + self.assertEqual([layout[q] for q in circuit.qubits], [16, 7, 11, 12, 13]) def test_6q_circuit_20q_coupling(self): """Test finds layout for 6q circuit on 20q device."""