Transpilation#
Plasma-SABRE (PermeabiLity Assisted Sectionalized Movement Acceleration) is a high-performance version of the established SABRE algorithm [1], purpose-built for Qrisp and IQM hardware. It outperforms existing approaches through several novel extensions:
PermeabilityGraph (PDAG) — leverages Qrisp’s commutation-aware DAG so the router can reorder commuting gates to avoid unnecessary SWAPs. To learn more about the Permeability Graph, please check out [2].
Sectionalized SABRE — splits the circuit at Qrisp’s permeability terminator nodes and compiles each section independently with parallel random-seed trials. Early mistakes are quarantined within their section rather than cascading through the whole circuit.
Parallel tempering — distributes different greediness levels across parallel routing threads, analogous to simulated annealing at different temperatures.
Modified SABRE cost function — relevance-decay-weighted extended set, descendant-count priority, and a congestion penalty that spreads work across idle qubits.
Numba-JIT core — compiled to native code with
int16index types throughout, packing more data into each cache line and reducing memory bandwidth pressure in the hot SABRE metric loop.
You control two key trade-offs through simple parameters on every pass:
effort— higher values explore more layout candidates and routing trials per section, yielding better results at the cost of longer compilation time.depth_weight—-1minimizes gate count,0balances gate count and depth,+1minimizes circuit depth.
PassManager infrastructure#
All transpilation passes are designed for Qrisp’s PassManager class,
a composable pipeline where passes are added with the += operator and
applied in sequence via pm.run(qc). You can mix and match them
freely — combine plasma-sabre routing with your own custom decomposition
passes, or insert standard Qrisp optimizations before or after
IQM-specific conversion:
from qrisp import PassManager, convert_to_cz, combine_single_qubit_gates
from iqm.qrisp_iqm import plasma_layout, plasma_route, transpile_to_iqm
# One-liner: full plasma-sabre pipeline
iqm_ready = transpile_to_iqm(qc, connectivity=topology)
# Or build your own pipeline
pm = PassManager()
pm += combine_single_qubit_gates # Qrisp built-in
pm += plasma_layout(topology, effort=40, depth_weight=-0.5)
pm += plasma_route(topology, effort=40, depth_weight=-0.5)
pm += convert_to_cz()
pm += convert_to_prx
transpiled = pm.run(qc)
Default pipeline#
|
Factory that builds a fully configured |
|
Convenience function that calls |
Layout & routing#
Stochastic initial qubit placement. Tries VF2++ subgraph isomorphism first;
falls back to heuristic search. Parameters: |
|
Exact subgraph isomorphism layout. Raises an error if no perfect mapping exists. |
|
|
Explicit mapping of logical qubits to physical qubit indices. |
Inserts SWAP gates to satisfy connectivity constraints. Parameters:
|
Optimization#
Commutes phase gates to reduce circuit depth. |
|
Parallelizes measurement operations for more efficient execution. |