Transpilation#

Plasma-SABRE (PermeabiLity Assisted Sectionalized Movement Acceleration) is a high-performance version of the established SABRE algorithm (Li et al., ASPLOS 2019), 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 this work.

  • 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 int16 index 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-1 minimizes gate count, 0 balances gate count and depth, +1 minimizes 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#

create_iqm_pass_manager

Create a PassManager pre-configured for IQM transpilation.

transpile_to_iqm

Transpile a Qrisp QuantumCircuit for execution on IQM hardware.

Layout & Routing#

plasma_layout

Create a layout pass that finds an initial qubit mapping.

plasma_route

Create a pass that performs routing (SWAP insertion) on the existing layout.

vf2pp_layout

Create a pass that finds a qubit layout using VF2++ subgraph isomorphism.

Optimization#

commute_phases

Create a pass that optimizes U3 gates by commuting phase information past SWAP gates.

measurement_parallelization

Combine consecutive measurements into single multi-qubit measurements.