0.20.0 - 2026-06-23

Deprecated

  • The default value for the inject noise site for the generate_boxing_pass_manager, AddInjectNoise, and InjectNoise has been updated from 'before' to None, which results in a future warning and sets the value to 'before'. In a future release, the default will be updated to 'after'. (#372)

Added

  • Added support for propagating Pauli twirls past single-qubit Clifford gates (s, sx, sdg, sxdg, and compositions with h) and through single-qubit rotations (rz, p, rx) at Clifford angles when they appear between entangling gates inside a Twirl box. (#351)

  • Exposed three primitives that together let consumers of build() evaluate deterministic template parameters (e.g., RZZ angles) without invoking Samplex.sample:

    • Samplex.param_table — return the underlying ParameterExpressionTable.

    • Samplex.passthrough_params — a tuple (template_idxs, expression_idxs) mapping each passthrough template parameter to its expression-table index.

    • ParameterExpressionTable.evaluate — gained an optional indices argument so callers can evaluate only a chosen subset of the table’s expressions.

    (#367)

  • Random phases are now applied to qubits after mid-circuit measurement twirling. (#369)

  • Added reset twirling. Rather than propagating virtual registers, a reset in a twirl‑annotated box discards them and instead samples and injects a new random phase following the reset. (#371)

Changed

  • Twirl emissions are now inserted at the easy-hard boundary of boxes with a Twirl annotation "left" dressing when building. Previously, they were inserted after the content of the box. (#368)

Improved

  • Measurement twirling is now implemented using virtual gate propagation. A virtual Pauli is propagated past a measure by discarding its z component, while propagating its x component and recording it as a bit flip. Previously, measurement twirling was implemented by collecting bit flips associated with virtual gates exclusively in the right hand side of a left-dressed box. The new approach allows for more flexible measurement twirling, e.g., sequential measurements of the same qubit to different clbits in the same box and measurement twirling in right-dressed boxes. (#369)

  • Removed the restriction of having a single entangler type when using Group.local_c1. (#370)

Fixed

  • Fixed an issue when using GroupMode.local_pauli twirling where the fallback for Clifford gates to the Pauli group would not trigger when a fractional gate was also present. (#370)

  • Fixed a bug where untwirled measurements in annotated boxes did not block leftwards virtual gate propagation. (#373)