Skip to content

reichlab/idmodels

Repository files navigation

idmodels

A Python module for modeling infectious disease. Currently supports two classes of models:

  • gradient boosting quantile regression (gbqr)
  • seasonal autoregressive integrated models with exogenous covariates (sarix)

Installing and running the package (no development)

To install this package via pip:

pip install git+https://github.com/reichlab/idmodels.git

Setup for local development

The steps below are for setting up a local development environment. This process entails more than just installing the package, because we need to ensure that all developers have a consistent, reproducible environment.

Assumptions

Developers will be using a Python virtual environment that:

Setup steps

  1. Clone this repository

  2. Change to the repo's root directory:

    cd idmodels
  3. Make sure the correct version of Python is currently active, and create a Python virtual environment:

    python -m venv .venv
  4. Activate the virtual environment:

    # MacOs/Linux
    source .venv/bin/activate
    
    # Windows
    .venv\Scripts\activate
  5. Install the package dependencies and install the package in editable mode:

    python -m pip install -r requirements/requirements-dev.txt && python -m pip install -e .
  6. Optional: if you use pre-commit in your workflow to automate code formatting and other tasks, install it. Otherwise, delete .pre-commit-config.yaml.

  7. Run the test suite to confirm that everything is working:

    python -m pytest

Development workflow

Because the package is installed in "editable" mode, you can run the code as though it were a normal Python package, while also being able to make changes and see them immediately.

Updating dependencies

Prerequisites:

Note: using pipx (instead of pip) to install uv is a handy way to ensure that uv is available for all of the Python environments on your machine.

The "lockfile" for this project is simply an annotated requirements.txt that is generated by uv (uv is a replacement for pip-compile, which could also be used). There's also a requirements-dev.txt file that contains dependencies needed for development (e.g., pytest).

To add or remove a project dependency:

  1. Add or remove the dependency in the [dependencies] section of pyproject.toml (or in the dev section of [project.optional-dependencies], if it's a development dependency). Don't pin a specific version, since that will make it harder for users to install the package.

  2. Generate updated requirements files:

    uv pip compile pyproject.toml -o requirements/requirements.txt && uv pip compile pyproject.toml --extra dev -o requirements/requirements-dev.txt
  3. Update project dependencies:

    Note: This package was originally developed on MacOS. If you have trouble installing the dependencies. uv pip sync has a --python-platform flag that can be used to specify the platform.

    # note: requirements-dev.txt contains the base requirements AND the dev requirements
    #
    # using pip
    python -m pip install -r requirements/requirements-dev.txt
    #
    # alternately, you can use uv to install the dependencies: it is faster and has a
    # a handy sync option that will cleanup unused dependencies
    uv pip sync requirements/requirements-dev.txt && python -m pip install -e .

About

Infectious disease models in Python

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published