Goals scenario analysis
Project description
goals-scenario
Goals scenario analysis
- Github repository: https://github.com/avenirhealth-org/goals-scenario/
- Documentation: https://avenirhealth-org.github.io/goals-scenario/
Installation
pip install avenir_goals_scenario
After installation, the goals-scenario command is available on your PATH.
Quick start
For full details of the CLI please see the CLI reference
goals-scenario --help # or -h
goals-scenario --version # or -v
Generate scenarios
goals-scenario scenarios --dest-path ./scenarios.csv
Run scenario analysis
Analysis is configured via a JSON config file:
goals-scenario run --config-path config.json
Config file format
Field names are case-insensitive.
{
"Goals_path": "path/to/pjnz/files",
"Scenario_path": "path/to/scenarios/scenarios.csv",
"Scenario_file_name": "scenarios.csv",
"Output_path": "path/to/output",
"Output_file_name": "results.parquet",
"Base_year": "2025",
"Output_indicators": [
"PLHIV",
"New Infections",
"AIDS deaths",
"Number on ART",
"DALYs",
"Total Cost"
]
}
| Field | Description |
|---|---|
Goals_path |
Directory containing .PJNZ files |
Scenario_path |
Directory containing the scenario file |
Scenario_file_name |
Filename of the scenario CSV |
Output_path |
Directory to write output to |
Output_file_name |
Filename for the output file |
Base_year |
Base year for the analysis |
Output_indicators |
List of indicators to include in output |
Tab completion
To install shell tab completion:
goals-scenario --install-completion
Development
Prerequisites
- uv for installing Python, package management
- (Optionally) make. Should be installed by default, except on windows, where it is easiest to install it via Chocolatey
choco install make
Development with make
There is a Makefile which wraps some common uv commands you will need during development.
Set Up Your Development Environment
Install the environment and the pre-commit hooks with
make install
This will also generate your uv.lock file.
Run code checks
make check
Run tests
make test
Build docs site
make docs
Development with uv
If you choose not to use make, you can use uv directly.
Set Up Your Development Environment
Install the environment and the pre-commit hooks with
uv sync
uv run pre-commit install
This will also generate your uv.lock file.
Run code checks
Run pre-commit checks, include ruff linting and formatting
uv run pre-commit run -a
Run type checking
uv run ty check
Run tests
uv run pytest
Build docs site
uv run mkdocs serve
Run compatibility tests
Compatability tests with tox are configured. Run them with
uv run tox
These are also run on CI, so not the end of the world if you don't do it locally.
Vendored SpectrumEngine import code
We need to re-use some of the PJNZ import code from SpectrumEngine. At the moment, this is vendored here directly. There is a script to update the vendored code which should be run before a release. The script uses a file ./scripts/spectrum_engine_ref to clone the specified branch or ref.
With make:
make pjnz-import-code
Run script directly
uv run ./scripts/update_pjnz_import_code.py
CLI
The CLI is built using typer which builds CLI docs automatically from python type hints and decorators. It also gives us some neat things like auto completion. And progress bars down the line!
Release process
Creating a release will
- Build & push the package to PyPI
- Build an updated docs site
To create a release you need to
- Update the version number in the
pyproject.tomlor ensure it has updated since the last release - Go to the releases page and "Draft a new release"
- Create a new tag, I usually use a tag which matches the version number you are releasing. Set a release title and text. Usually useful to include in the text a summary of the changes since the last release.
- Publish the release. This will trigger a GitHub action which will push the package to PyPI and update the docs site.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file avenir_goals_scenario-0.0.3.tar.gz.
File metadata
- Download URL: avenir_goals_scenario-0.0.3.tar.gz
- Upload date:
- Size: 62.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91fb1dbdcb3a41ec2703884877b38ea4d4fba7706be6b4cb6f3c2636b884da5a
|
|
| MD5 |
f1723aabe9230a2305abd67f049092eb
|
|
| BLAKE2b-256 |
1147e58217c0953566e06a712468bed1405a02db7736c492c6eacfeb9a9d9f6e
|
File details
Details for the file avenir_goals_scenario-0.0.3-py3-none-any.whl.
File metadata
- Download URL: avenir_goals_scenario-0.0.3-py3-none-any.whl
- Upload date:
- Size: 66.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d75c6eb8a15af8e0395b6cc4ae0025bbbf0710263d02f80b306cc6c5aa3a0f6
|
|
| MD5 |
615f2d74afec6dd9fea5f2daaa32ea6c
|
|
| BLAKE2b-256 |
2094dc64884647046c79caf9f51d1b13f0a84101669845d281f70b4a053667a0
|