Releases: PECOS-packages/PECOS
Release list
py-0.9.0.dev2
PECOS 0.9.0.dev2 (pre-release)
Additive pre-release on top of 0.9.0.dev1 -- no new default-behavior changes. (New to the 0.9.0 series? The headline change is in the py-0.9.0.dev0 notes: the Rust classical interpreter is now the default.)
Highlight: restored wheel platform compatibility
The 0.9.0.dev1 native wheels inadvertently required macOS 15 / manylinux 2.34+ because the LLVM 21 migration inherited newer deployment floors from the toolchain providers. This release restores the intended floors: macOS 13.0 (macosx_13_0 wheels for arm64 and x86_64, built against a checksum-pinned from-source LLVM 21.1.8) and manylinux_2_28 on Linux. The release workflow now fails if wheel tags or embedded Mach-O minimum versions exceed the platform policy, so a future toolchain bump cannot silently raise the floors again (#364).
Installing this pre-release
pip install quantum-pecos==0.9.0.dev2
# or with uv (transitive pre-release pins need the flag):
uv pip install --prerelease=allow quantum-pecos==0.9.0.dev2
What's Changed
- ci: restore Python wheel platform compatibility by @qciaran in #364
- Bump Python packages to 0.9.0.dev2 by @ciaranra in #366
Full Changelog: py-0.9.0.dev1...py-0.9.0.dev2
py-0.9.0.dev1
PECOS 0.9.0.dev1 (pre-release)
Additive pre-release on top of 0.9.0.dev0 -- no new default-behavior changes. (New to the 0.9.0 series? The headline change is in the py-0.9.0.dev0 notes: the Rust classical interpreter is now the default.)
Highlight: surface-code check plans and scheduling
Surface-code circuit construction gains resolved check-plan metadata (deterministic, hashable check plans), additional CNOT round orderings in the schedule, SZZ interaction-basis coverage, and simplified reliable-observable selection. The DEM builder's boundary with the neo noise stack is clarified: gate-event Pauli channels reject idle-noise configuration (idle noise is modeled by the neo IdleChannel) (#338).
Also in this release
- WASM foreign objects: the Wasmtime epoch deadline is now armed before instantiation, fixing spurious "interrupt" traps when instantiating sufficiently complex modules (seen on macOS arm64); covered by a Rust regression test and a new wheel smoke test in CI (#359).
- Decoders: the accumulated observable correction on the wide (>64 observables) decode path is now a lossless wide mask, and the mask is exposed (#357).
- Statistics: expanded Jeffreys interval API in pecos-num --
JeffreysEstimator/JeffreysIntervaltypes,jeffreys_point, and typed errors (#337). - RNG:
pecos-randommigrated torapidrandwith stream-identical seeding -- no behavioral change (#356). - Release/supply-chain tooling: publish-wheels.sh no longer masks twine errors or skips confirmations (#352); dependency-integrity checks fail closed on unexpected untracked lockfiles and the
pecos-rslib-llvmOS classifier is fixed (#353); smoke tests install wheels with their real dependency metadata (#354); post-release dependency refresh with a durable idna floor (#355).
Installing this pre-release
pip install quantum-pecos==0.9.0.dev1
# or with uv (transitive pre-release pins need the flag):
uv pip install --prerelease=allow quantum-pecos==0.9.0.dev1
What's Changed
- Smoke-test wheels against their real dependency metadata by @ciaranra in #354
- Fix silent failures in publish-wheels.sh (masked twine errors, skipped confirmations) by @ciaranra in #352
- Post-release papercuts: fail-closed lockfile check, llvm classifier, version-agnostic docs by @ciaranra in #353
- Post-release dependency refresh (updatelocks) with a durable idna floor by @ciaranra in #355
- Migrate pecos-random to rapidrand with stream-identical seeding by @ciaranra in #356
- Jeffreys interval polish by @ciaranra in #337
- Update accumulated observable correction on the wide decode path by @ciaranra in #357
- Pecos dev merge by @ciaranra in #338
- fix(wasm): arm epoch deadline before instantiation by @qciaran in #359
- Bump Python packages to 0.9.0.dev1 by @ciaranra in #361
- Fix click and setuptools advisories in exp lockfiles by @ciaranra in #363
Full Changelog: py-0.9.0.dev0...py-0.9.0.dev1
py-0.9.0.dev0
PECOS 0.9.0.dev0 (pre-release)
Highlight: Rust classical interpreter is now the default
HybridEngine's default classical interpreter is now the Rust-backed RustPhirClassicalInterpreter (previously the pure-Python PhirClassicalInterpreter). For valid PHIR programs supplied as a dict, JSON string, or to_phir_dict()-convertible object it is behaviorally equivalent — differentially validated against the Python interpreter (~3,200 fuzzed programs, QASM-generated-PHIR differentials, exact exception-type parity).
Escape hatch: to restore the previous behavior, construct the engine with HybridEngine(cinterp="python").
Boundary behavior was brought to parity so the switch is not silent: phir_validate now schema-validates on the Rust path; division by zero raises ZeroDivisionError and undefined classical variables raise KeyError on both interpreters; undeclared assignment/ffcall/measurement targets fail fast (matching Python) instead of being auto-created; check_ffc fails fast on missing foreign functions; run_multisim works with to_dict-capable foreign objects. Known limitation: PyPHIR program objects are not accepted by the Rust interpreter (clear TypeError; use a dict/JSON or cinterp="python").
Also in this release
- PHIR engine fail-fast fixes (#345): invalid variable definitions and out-of-range measurement writes error instead of being silently swallowed; the no-return measurement index is absolute across batches.
- ~41 previously-dormant
pecos-phir-jsonintegration tests revived and running in CI. - Signed PHIR registers render as two's-complement binary strings (i(S+1) semantics); WASM fixtures corrected to
i32 size 31. - Supply-chain: cxx 1.0.195, Go 1.26.5, triaged cgmath advisories (#349).
pecos-rslib-llvmis published alongsidepecos-rslibandquantum-pecos(exact-version pins).
Rust API note: PecosError gains a RuntimeUndefinedVariable variant — source-breaking for downstream code that exhaustively matches the enum (0.x pre-release).
What's Changed
- Explore zx by @ciaranra in #272
- Some more RNG Error fixes by @Jonhas-qtm in #270
- exposing stabilizer seeding for the Python wrappers by @ciaranra in #275
- Structure by @ciaranra in #276
- Api polish by @ciaranra in #277
- Bump rustls-webpki from 0.103.9 to 0.103.10 by @dependabot[bot] in #274
- Bump black from 26.3.0 to 26.3.1 by @dependabot[bot] in #268
- Bump tornado from 6.5.4 to 6.5.5 by @dependabot[bot] in #265
- Clifford rz simulators by @ciaranra in #278
- QoL: installation and dev workflow polish by @ciaranra in #279
- Rslib direct deps by @ciaranra in #280
- Cleanup by @ciaranra in #281
- Clean by @ciaranra in #282
- Foreign plugins by @ciaranra in #283
- rust phir classical interp by @ciaranra in #284
- Bump wasmtime from 43.0.0 to 43.0.1 in /python/quantum-pecos/tests/docs/rust_crate by @dependabot[bot] in #286
- Bump wasmtime from 43.0.0 to 43.0.1 in the rust-security group across 1 directory by @dependabot[bot] in #285
- Update setuptools requirement from >=62.6 to >=82.0.1 by @dependabot[bot] in #289
- Update wasmtime requirement from >=13.0 to >=43.0.0 by @dependabot[bot] in #288
- Update maturin requirement from <2.0,>=1.2 to >=1.13.1,<2.0 by @dependabot[bot] in #287
- Simulator optimization branch: GPU density matrix, perf, audits, shar… by @ciaranra in #290
- Surf dems by @qciaran in #293
- Surf dems2 by @ciaranra in #294
- StabMps/StabVec: stabilizer+MPS simulator, Python bindings, Selene pl… by @ciaranra in #295
- Bump jupyterlab from 4.5.6 to 4.5.7 by @dependabot[bot] in #299
- Bump notebook from 7.5.5 to 7.5.6 by @dependabot[bot] in #298
- Update pymdown-extensions requirement from >=10.4 to >=10.21.2 by @dependabot[bot] in #297
- Bump rustls-webpki from 0.103.10 to 0.103.13 in /python/quantum-pecos/tests/docs/rust_crate by @dependabot[bot] in #296
- Bump rustls-webpki from 0.103.12 to 0.103.13 in the rust-security group across 1 directory by @dependabot[bot] in #300
- Bump wasmtime from 43.0.1 to 43.0.2 in the rust-security group across 1 directory by @dependabot[bot] in #304
- Bump mistune from 3.2.0 to 3.2.1 by @dependabot[bot] in #302
- Bump jupyter-server from 2.17.0 to 2.18.0 by @dependabot[bot] in #301
- Cleanup by @ciaranra in #306
- Polish pecos-neo tool builder execution by @ciaranra in #308
- Feat/optional mwpf cmake detection by @ciaranra in #309
- Profile plumbing and pyo3 fixes by @ciaranra in #310
- Polish by @ciaranra in #311
- Bump idna from 3.14 to 3.15 by @dependabot[bot] in #313
- Bump pymdown-extensions from 10.21.2 to 10.21.3 by @dependabot[bot] in #312
- Dem polish by @ciaranra in #314
- Cleanup by @ciaranra in #315
- CI/supply-chain security hardening by @ciaranra in #316
- Drain remaining code-scanning alerts: idna pin, OSV ignores, FFI SAFETY + null-checks by @ciaranra in #317
- Refactor 5 FFI test sites to NonNull / as_ref().expect() for clearer non-null contracts by @ciaranra in #318
- fix: add RNGadvance support to legacy Python CVM by @qartik in #330
- fix: restore custatevec import compatibility by @qartik in #334
- ci: shorten PR workflow critical path by @qartik in #331
- Dep bump by @ciaranra in #322
- Run generated documentation examples in docs CI by @qciaran in #340
- perf: remove coordinator result lock contention by @qartik in #335
- Render signed PHIR registers as two's-complement bits instead of a sign prefix by @ciaranra in #339
- Bump mistune from 3.2.1 to 3.3.0 by @dependabot[bot] in #346
- Default HybridEngine to the Rust classical interpreter, with parity fixes and #345 engine fail-fast by @ciaranra in #347
- Clear post-merge OSV advisories (cxx, Go stdlib, cgmath) by @ciaranra in #349
- Raise the python-core post-merge timeout to 75 minutes by @ciaranra in #350
- Bump Python packages to 0.9.0.dev0 by @ciaranra in #351
Full Changelog: py-0.8.0.dev8...py-0.9.0.dev0
Installing this pre-release
pip install quantum-pecos==0.9.0.dev0
# or with uv (transitive pre-release pins need the flag):
uv pip install --prerelease=allow quantum-pecos==0.9.0.dev0
py-0.8.0.dev8
What's Changed
- Changing error message for RNGIndex for more clarity by @Jonhas-qtm in #267
- Phir by @ciaranra in #269
- bump Python version to 0.8.0.dev8 by @ciaranra in #271
Full Changelog: py-0.8.0.dev7...py-0.8.0.dev8
py-0.8.0.dev7
py-0.8.0.dev6
py-0.8.0.dev5
py-0.8.0.dev4
What's Changed
- polishing wasm by @ciaranra in #252
- More py to rs by @ciaranra in #235
- More decoders2 by @ciaranra in #253
- Bump wasmtime from 41.0.3 to 41.0.4 by @dependabot[bot] in #254
- Stabilizer cleanup by @ciaranra in #255
- bump py version to 0.8.0.dev4 by @ciaranra in #256
Full Changelog: py-0.8.0.dev3...py-0.8.0.dev4
py-0.8.0.dev3
What's Changed
- fixing .reset() to give state, making .probabilities/probability() av… by @ciaranra in #250
- bumping from 0.8.0.dev2 to 0.8.0.dev3 by @ciaranra in #251
Full Changelog: py-0.8.0.dev2...py-0.8.0.dev3