How to Contribute¶
Prerequisites¶
Development setup¶
-
Fork the repository on GitHub
-
Clone your fork:
-
Install dependencies:
-
Install pre-commit hooks:
Make changes¶
-
Create a branch:
-
Make your changes
-
Run the fast test suite to verify nothing is broken:
-
Format and fix code:
-
Commit your changes using Conventional Commits:
Running tests¶
Tests are categorized by markers:
- Default (no marker): fast unit tests
@pytest.mark.slow: tests taking more than a few seconds or making network requests@pytest.mark.integration: end-to-end or multi-component tests
Run all tests:
Run tests with coverage:
Code quality¶
Run linters and type checks:
All public functions, methods, and classes require NumPy-style docstrings. Coverage is enforced at 100% by interrogate.
Check docstring coverage:
Build and serve documentation¶
Build:
Serve locally:
Pre-PR checklist¶
-
just test-fastpasses -
just fixshows no remaining issues - New functionality has tests
- Changed documentation renders correctly via
just serve - Commit messages follow Conventional Commits
Open a Pull Request¶
-
Push your branch:
-
Open a Pull Request on GitHub
-
Ensure all CI checks pass and address review feedback
CI test strategy¶
The CI pipeline uses two tiers:
- Fast tests: Run on Python 3.11 and 3.13. On draft PRs, Ubuntu only. On ready PRs and
main, Ubuntu, Windows, and macOS. - Full test suite: Runs all tests (fast + slow + integration) on Ubuntu across Python 3.11-3.13 when the PR is not a draft or on
main. Includes coverage reporting on the minimum supported Python version.