Qiskit Paulice release notes
0.3.0
New Features
-
The windowed search of
qiskit_paulice.add_pauli_checks()now decodes all windows for a target in parallel and scores their candidates as one batch. Withcost="gamma", a seeded search picks the same checks as before. Withcost="LER", a candidate that appears in several windows is now estimated once and that estimate is reused, so LER searches can differ slightly; they were never seed-reproducible. -
Added
qiskit_paulice.checked_circuit.CheckedCircuit.box(), which groups the checked circuit into the annotated boxes used for twirling, noise learning, and sampling, scheduling each Pauli check entangling gate into a box of its own. This minimizes the number of unique entangling layers at the cost of sub-optimal gate scheduling. -
Added the new
qiskit_paulice.checked_circuit.CheckedCircuit.estimate_fault_rates()method for calculating fault rate statistics via Monte Carlo sampling. Every rate is a fraction of all sampled shots. -
qiskit_paulice.add_pauli_checks()scores candidate checks faster withcost="gamma". Noise generators and propagated cumulants are now stored in packed tables instead of one hash map per Pauli. -
Added the new
qiskit_paulice.checked_circuit.CheckedCircuit.dope()method, which addsRZrotations that commute with all spacetime check stabilizers. See arXiv:2607.25941 for details. -
add_pauli_checks()can now find checks for circuit stabilizers, rather than being restricted to only finding checks with respect to terminal measurements. Use the newstabilizersargument to specify a subset of stabilizers for which to find valid checks.
Upgrade Notes
-
qiskit-aeris no longer a dependency ofqiskit-paulice, which never imports it. Thetest,nbtestandnotebook-dependenciesextras still install it. Code that usedAerSimulatoralongsideqiskit-paulicewithout installing an extra must now installqiskit-aeritself. -
A uniform
gate_noisemust now lie in[0, 0.75), the range on which a two-qubit depolarizing channel exists, instead of[0, 3).
Bug Fixes
-
A gate infidelity is now distributed exactly across the Pauli error generators of the channel it describes, both for a uniform
gate_noiseand for the gate-wise modelsfrom_backend()builds, which previously carried less error than the uniform model for the same backend data.from_backendnow rejects malformed or identitypauli_basesentries, and bases that cannot produce an edge’s error. -
add_pauli_checks()withmethod="genetic"ormethod="windowed_genetic"now reports the correctcheck_support. It previously omitted each check’s ancilla, and when only some payload qubits were measured, listed positions in the list of measured qubits instead of qubit indices, soget_postselection_method()computed the wrong syndromes. -
qiskit_paulice.add_pauli_checks()withcost="gamma"and a fixedseednow returns bit-identical costs from one run to the next. Previously the order of gates within a layer and of layered-noise entries depended on hash iteration order, and the gamma sum depended on thread scheduling, so costs could differ in the last bits and near-ties could pick different checks between runs. Because the order is now fixed, a near-tie may resolve to a different check than in earlier releases. -
Fixed a panic (“does not match any known layer type”) with layered gate noise when a layer of the circuit holds only some of the two-qubit gates of a noise layer. Such a layer now takes the noise of the noise layer that contains it, choosing the first in sorted order if several do.
0.2.1
Bug Fixes
-
Fixed issue where input circuits defined on an incomplete Clifford basis gate set would fail to transform back into their original basis after check picking. Now, instead of failing, the checked circuit will be returned in the internal Clifford basis.
-
Fixed issues with circuits containing wires with 2-qubit-depth of 1.
0.2.0
New Features
- Added new
qiskit_paulice.layout.get_check_qubits()function, which provides a straightforward way to find target/ancilla qubit pairs.
0.1.1
Security Issues
- Bumped the required pyo3 version due to known issues in earlier versions.