Contributing

Thanks for helping us build Rubicon!

Cloning the Repository

Make a fork of the rubicon-ml repo and clone the fork:

git clone https://github.com/<your-github-username>/rubicon-ml
cd rubicon-ml

You may want to add https://github.com/capitalone/rubicon-ml/ as an upstream remote:

git remote add upstream https://github.com/capitalone/rubicon-ml

Creating a Development Environment

We have a conda environment YAML file with all the necessary dependencies at the root of the repository.

conda create -n rubicon-ml-dev python=3.11
conda activate rubicon-ml-dev

Building rubicon_ml

After you’ve cloned the repository, use pip to install rubicon_ml locally:

python -m pip install -e './[dev]'

Style

rubicon_ml uses black for formatting, flake8 for linting, and isort for standardizing imports. If you installed rubicon_ml using conda, these tools will already be in your environment.

black rubicon_ml tests
flake8 rubicon_ml tests
isort -rc rubicon_ml tests

Install and configure pre-commit to automatically run each of these tools before committing. Once installed, run pre-commit install to set up the git hooks.

Running Tests

rubicon_ml uses pytest for testing. Run the tests from the root rubicon_ml directory as follows:

python -m pytest

Documentation

We follow numpydoc formatting for our docstrings. This lets us use sphinx to automatically generate a library reference.

We also use nbsphinx to render our example notebooks directly from our repo. To reduce the complexity of our documentation builds, we only commit executed notebooks to the repo so nbsphinx doesn’t have to spend time executing them itself.

To build the documentation locally, use the provided Makefile:

make clean html

The newly built documentation can be opened in a browser.

open ./build/html/index.html

Never commit built documentation code directly, only the source. Our .gitignore should handle keeping built docs out of the repo, and our CICD handles deploying newly committed documentation.