Contributions#
For a substantial API change, describe the user workflow in an issue first. Small fixes and documentation improvements can go directly to a pull request. Work on a topic branch in your fork, and keep a pull request focused enough to review on its own.
Read
AGENTS.md, and the implementation and tests you are changing.Make a coherent change, updating the documentation of any public behaviour it changes. Do not edit generated files by hand.
Run the checks.
./scripts/run_tests.shbuilds and runs the suite without installing anything and takes pytest arguments; Python changes also run./scripts/lint.sh, or./scripts/lint.sh --fixto have ruff write what it can. Run the full suite for native changes andpython scripts/check_device.pyfor device changes, on suitable hardware.For documentation, run
./scripts/build_docs.sh, the strict build described in Documentation, and run changed examples with./scripts/build_docs.sh --execute. State unavailable hardware or optional dependencies in the pull request.Commit the intended files, push to your fork, and open a pull request against upstream’s default branch, as a draft while work remains.
A pull request description states the problem, the resulting behaviour and how it was validated, with reproducible commands and numerical tolerances where relevant. Cite the issue, and the paper for a new method.
To update your view of upstream:
git fetch upstream
git rebase upstream/main
git submodule update --init --recursive
Rebase only a topic branch whose history is yours to rewrite. Updating the
BART submodule is deliberate work: regenerate with
python scripts/gen_catalogue.py and review the resulting API differences.
./scripts/run_tests.sh runs both generators before the suite, and
tests/test_catalogue.py and tests/test_abi.py fail when the checked-in files
have drifted.
A numerical test compares BART against something outside BART: an independent FFT or DFT, a closed-form signal, a finite difference or an adjoint identity. Comparing two entry points into the same implementation establishes nothing.