Contributing#

1. Install Development Build#

From a command line, execute the following commands:

git clone https://github.com/MSDLLCpapers/obsidian
cd obsidian
git checkout main
pip install -e .[dev]

2. Style#

Linting is enforced with flake8 based on configurations in .flake8.

We recommend using VS Code with flake8 extensions to automatically aid adherence to code style.

All function and method signatures should contain Python 3.10+ type hints.

Each module, class, method, and function should have a docstring. We use Google style docstrings.

We prefer that class docstrings be written under class definition instead of __init__.

3. Documentation#

For documentation building, obsidian uses sphinx with autodoc and autosummary

In order to rebuild documentation, first be sure to have installed the documentation build

pip install -e .[docs]

The perform the following steps:

cd obsidian/docs
make clean
make html

Documentation HTML output will be built in obsidian/docs/build with the homepage at build/html/index.html.

Guidance Documentation#

New or major changes to subpackages or modules (e.g. acquisition, surrogate, optimizer.BO_optimizer, objectives.scalarize) should be covered by informative documentation detailing API usage in Wiki articles.

Major features or configurations should be documented as examples in Tutorial notebooks.

4. Testing#

For testing, obsidian uses pytest.

In order to run pytests, execute the following commands:

cd obsidian
pytest > logs/pytest_output.txt

By default, code coverage reports will be generated in logs/pytestCovReport according to configurations pytest.ini and .coveragerc. Logs will be output to logs/pytest_output.txt.

We have also enabled fast testing with majority coverage and flagged slow tests that can be avoided until major pull requests.

pytest -m fast
pytest -m "not slow"

All new features should be fully covered by newly written pytests.

5. License#

By contributing to obsidian, you agree that your contributions will be licensed under the package LICENSE.