0.17.0 - 2026-03-12¶
Removed¶
Removed
TWIRLING_GROUPSandGroupLiteralfromannotationsin favor ofGroupMode. (#300)
Added¶
Added
BalancedUniformPaulidistribution that ensures the same number of X/Y and I/Z are chosen on each qubit. (#264)Added
GroupModeenum to configure the twirling distribution onTwirlannotations. (#300)Added serialization support for
BalancedUniformPaulidistribution (SSV 3). (#301)Added the local Clifford twirling group. This group twirls a two-qubit entangling gate with the subgroup of single-qubit Cliffords that remain single-qubit Clifford under conjugation. This feature is enabled by using a
Twirlannotation withGroupMode.LOCAL_C1or"local_c1"as the group. To support new groups like the local Clifford twirling group, added thetwirling_groupkeyword argument to thegenerate_boxing_pass_managerfunction with default"pauli". Added thePropagateLocalC1Nodeand supporting lookup tables in the newtablesmodule. Added theUniformLocalC1distribution. (#308)Added
samplomatic.utils.unbox()utility function for inlining box operations from a circuit. (#318)Added the
Tagannotation to provide trace information of a box on corresponding barriers after thebuildprocess. The same mechanism is used to include theInjectNoise.refon corresponding barriers as well. (#319)Added the
UniformPauliSubsetdistribution that samples from a given subset of Paulis. (#332)Added
DistributionSamplingNodethat samples from any distribution and places the result into a register. This differs fromTwirlSamplingNodein that we do not instantiate a sample and inverse-sample pair, just a sample. (#334)
Changed¶
Increased the default SSV from
2to3. (#336)Changed
Twirl.groupparameter to acceptGroupModevalues instead ofVirtualType. (#300)Updated minimum qiskit version to 2.3.0. (#304)
Lookup tables for single-qubit Cliffords,
C1_LOOKUP_TABLEandC1_INVERSE_TABLE, that were in thevirtual_registers.tablessubmodule have been moved to the top-leveltablesmodule. (#308)SSV 3 serializes
Distributions using dedicated serializers. Previously, they were specified ad-hoc by the serializer ofTwirlSamplingNode. (#332)
Improved¶
Fixed¶
Fixed an issue where unsupported virtual types could be serialized for SSV 1. (#315)
Made
BoxKeyhashing deterministic across Python processes by using SHA-256 instead of the built-inhash(), which is randomized byPYTHONHASHSEED. This causedAddInjectNoiseto generate differentrefnames for identical boxes across runs, since it derived short hash keys fromBoxKey.__hash__. Also fixed a bug inAddInjectNoise._get_ref()where the computed ref was not being cached correctly. It is expected that these bugs were only visible when this pass was being run in parallel by the qiskit pass manager. (#322)