Contributing

We welcome contributions to gproptim! Please read the Code of Conduct before participating.

Getting Started

git clone https://github.com/TheochemUI/gpr_optim.git
cd gpr_optim

# C++ development
pixi shell
meson setup builddir -Dwith_tests=true
meson compile -C builddir
meson test -C builddir

# Python development
pixi run -e python build
pixi run -e python test

Types of Contributions

  • Bug Reports: Open an issue with reproduction steps

  • Documentation: Typos, missing guides, API doc improvements

  • Performance: Always include benchmark results (see Performance Guide)

  • Features: Discuss in an issue first for larger changes

Commit Style

GaussianProcessRegression: refactor Cholesky solve path

Replaced inline Eigen LLT calls with gpr::linalg::cholesky() so the
backend abstraction is used consistently.

Code Style

  • C++ code: clang-format (see .clang-format)

  • Python: standard formatting

  • Nim: standard Nim style (camelCase, 2-space indent)

  • Doxygen: Javadoc style (/** @brief ... */)

Pre-commit

uvx prek -a           # run all checks
uvx prek install      # install git hook

Changelog

Add a towncrier news fragment to docs/newsfragments/:

# Format: +<short_hash>.<topic>.<category>.md
# Categories: added, changed, fixed, removed, deprecated, security, dev
echo "Description of the change" > docs/newsfragments/+abc1234.topic.changed.md

Benchmarking

Before submitting performance-related PRs, run the A/B benchmark:

pixi run -e python bench

See the Performance Optimisation Guide for profiling methodology and hot-path guidelines.