Repository navigation
Release 1.3.0 (October 5, 2026)
Summary
Added
- Added support for OpenQASM 3
end;statements. Unrolling stops after an unconditionalend;in global or nested scopes and keepsend;inside runtime-dependent branches. (#396)
Fixed
- Fixed bare OpenQASM expression statements raising
AttributeErrororKeyError. Their values are now evaluated and discarded, and unknown gate errors name the gate using the original source line. (#388) - Fixed qubit register ranges dropping their final qubit during unrolling. Endpoints are now inclusive for gates, aliases, barriers, and measurements. Code using an exclusive upper bound must lower it by one, for example
q[0:1]instead ofq[0:2]to select two qubits. (#432) - Fixed
csandcsdgfromstdgates.incbeing rejected during unrolling. They now decompose to controlled phase shifts. (#439) - Fixed Clifford+T rebasing for exact
rx,ry, andrzrotations at multiples of π/4. These gates now decompose instead of disappearing, while angles outside the exact basis raiseRebaseErrorinstead of producing an incorrect result. (#428) - Fixed the OpenQASM 2 serializer emitting OpenQASM 3 syntax for classical conditionals.
if(m==1) x q[1];was written as a braced block and, afterunroll(), as a per-bitif (m[0] == true)chain, which QASM 2 parsers such as pytket and Qiskit reject. Conditionals are now emitted asif (creg == int) <statement>, andvalidate()rejects branch shapes QASM 2 cannot express. (#337) - Fixed
unroll()readingc[0]as the most significant bit of a classical register condition, soif (c == 2)ran its body whencwas 1.>=,<=,>,<, out-of-range values, and single-bit conditions such asc[0] < 1now unroll correctly too, and!=is now supported. (#444)
Dependencies
- Bumped
codecov/codecov-actionfrom 7.0.0 to 7.1.1. (#430) - Bumped
actions/checkoutfrom 7.0.0 and 4.4.0 (inscorecard.yml) to 7.0.1. (#423)
Other
- Added a
notify-docsjob to the release workflow. When a release reaches PyPI it sends apackage-releasedevent toqBraid/docs, which opens a pull request bumping itsversions.jsonso this release's documentation moves from Latest into Stable. The job reads the published version from PyPI rather than the release tag, runs withcontinue-on-error, and skips whenDOCS_DISPATCH_TOKENis absent, so it can never fail or block a release. (#443)
New Contributors
- @danielgaskins made their first contribution in #424
Full Changelog: v1.2.1...v1.3.0