All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Test suite of 442 tests across four tiers: structural (
tests/core/), transform equivalence against hand-written raw jax (tests/functional/), numerical correctness against closed forms andoptax(tests/numerics/), plustests/utils/,tests/nn/and per-backend smoke tests (tests/devices/). Coverage ofpcx/is 96%. - 29 verified defects, each with a failing test asserting the correct behaviour. Marked
bugand excluded from the default run; reported by an advisory CI job. Every marker opens with the issue that owns the defect, so the marker is the map from test to fix. 19 are tracked as issues #67 to #79; the 10 still under discussion with the maintainers live inBUGS.md, which is deleted once they are resolved. tests/README.mddocumenting the testing strategy: the tiers and their oracles, thebug/device/slowmarkers, the shared fixtures, and how mutation testing validates the suite.scripts/mutation_test.py, which injects deliberate defects to confirm the suite detects them. It currently catches 10 of 10.- Autouse fixture reseeding the global
pcx.RKGaround every test, since it is wall-clock-seeded module state and the default argument of every layer and Vode constructor, so without it the suite is order-dependent. devicemarker andjust test-devicesfor accelerator smoke tests (CPU, CUDA, Apple Metal), which skip when a backend is absent and never run in CI.uvas the package and environment manager, replacing Poetry. Dependencies are locked inuv.lock.tyas the type checker, wired into CI as an advisory (non-blocking) job.pytesttest suite with atests/package, coverage configuration and Codecov reporting.justfilewith recipes for the full developer loop (just install,just check,just test,just all).CHANGELOG.mdplus.github/scripts/extract_changelog.py, which turns the section for a version into GitHub release notes.- CI test matrix across Linux, macOS and Windows on Python 3.11–3.13.
- A build job that verifies the wheel installs and imports on a clean interpreter.
- Dependabot updates for GitHub Actions, so retired action versions are caught before they break a workflow.
codecov.ymlconfiguring informational coverage status checks while the suite is built out.
pyproject.tomlmigrated from the Poetry table layout to PEP 621[project]metadata withhatchlingas the build backend.- Ruff now runs against an explicit rule selection (
E,W,F,I,UP,B,C4,RUF) so linting does not drift between ruff releases. - The five separate workflows (format, lint, type-check, test, publish) are consolidated into
ci.ymlandrelease.yml. The old workflows referenced apcaxdirectory that no longer exists, and the test and type-check workflows were entirely commented out. - Release publishing is now tag-driven and verifies that the git tag,
pyproject.tomlversion andCHANGELOG.mdsection all agree before uploading. - The Docker image and dev container install with
uvrather than Poetry, and both now build ajusttoolchain. .readthedocs.yamlmoved fromdocs/to the repository root and installs thedocsdependency group withuv.docs/source/is now generated at build time rather than committed. The tutorial notebooks are mirrored in fromexamples/and the API stubs come fromsphinx-apidoc;just docsruns the same steps locally.
- The committed
docs/source/pcax.*.rstAPI stubs, which documented apcaxpackage that no longer exists — so the published API reference had been empty.
just fixran the formatter before the linter, soruff check --fixcould leave its rewrites unformatted andjust allwould then fail its own format check.- Various lint findings across
pcx: unsorted imports, deprecatedtypingaliases, implicitOptionalannotations, stale# noqacodes, and an unnecessarymap/zippairing inBaseModule.flatten_module_with_keys. repr()of a composed transform names every layer instead of collapsing to the innermost function (#104).
Releases up to and including 0.6.2.post3 predate this changelog. See the GitHub releases for their history.