Contributing¶
Contributions are welcome! savana is designed as an umbrella for
independently-usable geospatial modules, new sensors, feature stacks,
classification schemes, validation workflows, and utilities should be
addable as their own module without breaking any existing module's API.
savana.rainfall (precipitation product assessment) is the second such
module, added alongside the original land-system classification pipeline
following exactly this pattern, a useful reference if you're adding a
third.
Reporting bugs¶
Please open an issue at github.com/desmond-lartey/savana/issues with:
- Your OS and Python version
- The
savanaversion (savana.__version__) - Which module (classification or rainfall)
- Steps to reproduce, for classification, the AOI type you used; for rainfall, the station input and product(s) involved
Development setup¶
git clone https://github.com/desmond-lartey/savana.git
cd savana
pip install -e ".[dev,docs,vector,rainfall]"
pytest tests/
Pull requests¶
- Keep new functionality in its own module where possible, mirroring the
existing
composites/indices/masks/classifierssplit for classification-side work, or thestations/zones/ingestion/extraction/validationsplit for rainfall-side work - If you're adding an entirely new module (not extending classification or
rainfall), give it its own subpackage under
savana/(seesavana/rainfall/for the shape: its own__init__.pywith the same PEP 562 lazy-loading pattern, its ownconfig.pyof overridable defaults, its own optional-dependency extra inpyproject.toml) - Add or update tests in
tests/ - Update the docs (
docs/) if you add public API surface, everything insavana.__init__._LAZY_SYMBOL_MAP(classification) orsavana.rainfall.__init__._LAZY_SYMBOL_MAP(rainfall) should have a corresponding docstring picked up in the relevant Classification API Reference / Rainfall API Reference page