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

  1. 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.
  2. 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.
  3. 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
  1. 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.