Contributing to chemotools
March 6, 2026 · View on GitHub
Thanks for your interest in contributing to chemotools 🎉
We welcome bug reports, feature ideas, code improvements, and documentation updates. Every contribution helps!
You can also check the Project Board to see what’s currently in progress.
Guidelines
chemotools is designed for production use, with a focus on quality and consistency.
When contributing, please keep in mind:
-
✅ Follow the Scikit-Learn API
All transformers must implement the scikit-learn API for interoperability. -
✅ Avoid redundancy
Don’t re-implement functionality already available in other libraries that follow the same API. -
✅ Write tests
Every new function or fix must include unit tests to ensure reliability. -
✅ Maintain quality
Use the provided tooling (formatting, linting, typing, tests) to keep the codebase consistent.
How to Contribute
-
Report issues
- For bugs: open an issue with steps to reproduce and sample code/data if possible.
- For enhancements: describe the idea, its benefits, and example usage.
-
Propose changes
- Open an issue first so we can discuss scope.
- Create a new branch for your contribution.
- Make your changes, including tests and documentation updates if needed.
- Branches should be shor-lived with a well defined scope, following a truck-based development philosophy.
-
Check your work
Use the Taskfile for a quick workflow:task install # install dependencies task check # run formatting, linting, typing, tests task test # quick test run in the current environment task test:matrix # run the nox compatibility matrix locally task coverage # run tests with coverage task build # build the package
For compatibility checks across supported Python versions and dependency floors, use nox:
uv run nox --list
uv run nox -s tests-3.12
uv run nox -s tests-min-sklearn-3.10
uv run nox -s tests-min-sklearn-3.12
-
Open a Pull Request (PR)
- Explain what the change does and why.
- Ensure CI checks pass (formatting, lint, type checks, tests).
- Be responsive to feedback.
Code Style
- Code is automatically formatted and linted using Ruff.
- Type checking is done with MyPy.
- Follow general Python best practices: descriptive names, no magic numbers, clear docstrings.
Testing & Coverage
-
Run tests with:
task test -
Coverage is tracked with Codecov. PRs should not reduce coverage.
License
By contributing, you agree that your contributions will be licensed under the project’s MIT License.