Skip to main content

Summer is a compartmental disease modelling framework, written in Python. It provides a high-level API to build and run models.

Project description

Summer: compartmental disease modelling in Python

Automated Tests

Summer is a Python-based framework for the creation and execution of compartmental (or "state-based") epidemiological models of infectious disease transmission.

It provides a range of structures for easily implementing compartmental models, including structure for some of the most common features added to basic compartmental frameworks, including:

  • A variety of inter-compartmental flows (infections, transitions, births, deaths, imports)
  • Force of infection multipliers (frequency, density)
  • Post-processing of compartment sizes into derived outputs
  • Stratification of compartments, including:
    • Adjustments to flow rates based on strata
    • Adjustments to infectiousness based on strata
    • Heterogeneous mixing between strata
    • Multiple disease strains

Some helpful links to learn more:

Installation and Quickstart

This project requires at least Python 3.7 (and is actively targeted at 3.9) Install the summerepi package from PyPI

pip install summerepi

Then you can use the library to build and run models. See here for some code examples.

Development

Poetry is used for packaging and dependency management.

Initial project setup is documented here and should work for Windows or Ubuntu, maybe for MacOS.

Some common things to do as a developer working on this codebase:

# Activate summer conda environment prior to doing other stuff (see setup docs)
conda activate summer

# Install latest requirements
poetry install

# Publish to PyPI - use your PyPI credentials
poetry publish --build

# Add a new package
poetry add

# Run tests
pytest -vv

# Format Python code
black .
isort . --profile black

Releases

Releases are numbered using Semantic Versioning

  • 1.0.0/1:
    • Initial release
  • 1.1.0:
    • Add stochastic integrator
  • 2.0.2:
    • Rename fractional flow to transition flow
    • Remove sojourn flow
    • Add vectorized backend and other performance improvements
  • 2.0.3:
    • Set default IVP solver to use a maximum step size of 1 timestep
  • 2.0.4:
    • Add runtime derived values
  • 2.0.5:
    • Remove legacy Summer implementation
  • 2.1.0:
    • Add AdjustmentSystems
    • Improve vectorization of flows
    • Add computed_values inputs to flow and adjustment parameters
  • 2.1.1:
    • Fix for invalid/unused package imports (cachetools)
  • 2.2.0
    • Add validation and compartment caching optimizations
  • 2.2.1
    • Derived output index caching
    • Optimized fast-tracks for infectious multipliers
  • 2.2.2
    • JIT infectiousness calculations
    • Various micro-optimizations
  • 2.2.3
    • Bugfix release (clamp outputs to 0.0)
  • 2.2.4
    • Datetime awareness, DataFrame outputs
  • 2.2.5
    • Performance improvements (frozenset), no API changes
  • 2.2.6
    • Verify strata in flow adjustments (prevent unexpected behaviour)
  • 2.2.7
    • Rename add_flow_adjustments -> set_flow_adjustments
  • 2.2.8
    • Split imports functionality (add_importation_flow now requires split_imports arg)
  • 2.2.9
    • Post-stratification population restribution
  • 2.3.0
    • First official version to support only Python 3.7
  • 2.5.0
    • Support Python 3.9
  • 2.6.0
    • Merge 3.9/master branches
  • 2.7.0
    • Include Python 3.10 support and update requirements
  • 3.6.0
    • Summer 'classic' end-of-line release
  • 3.6.3
    • Small compatibility fixed for numpy deprecations

Release process

To do a release:

  • Commit any code changes and push them to GitHub
  • Choose a new release number accoridng to Semantic Versioning
  • Add a release note above
  • Edit the version key in pyproject.toml to reflect the release number
  • Publish the package to PyPI using Poetry, you will need a PyPI login and access to the project
  • Commit the release changes and push them to GitHub (Use a commit message like "Release 1.1.0")
  • Update requirements.txt in Autumn to use the new version of Summer
poetry build
poetry publish

Documentation

Sphinx is used to automatically build reference documentation for this library. The documentation is automatically built and deployed to summerepi.com whenever code is pushed to master.

To run or edit the code examples in the documentation, start a jupyter notebook server as follows:

jupyter notebook --config docs/jupyter_notebook_config.py
# Go to http://localhost:8888/tree/docs/examples in your web browser.

You can clean outputs from all the example notbooks with

./docs/scripts/clean.sh

To build and deploy

./docs/scripts/build.sh
./docs/scripts/deploy.sh

To work on docs locally

./docs/scripts/watch.sh

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

summerepi-3.6.4.tar.gz (44.7 kB view details)

Uploaded Source

Built Distribution

summerepi-3.6.4-py3-none-any.whl (50.3 kB view details)

Uploaded Python 3

File details

Details for the file summerepi-3.6.4.tar.gz.

File metadata

  • Download URL: summerepi-3.6.4.tar.gz
  • Upload date:
  • Size: 44.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.10.10 Windows/10

File hashes

Hashes for summerepi-3.6.4.tar.gz
Algorithm Hash digest
SHA256 42b1c9e32a4a60f3612579a5972e4900595d8573ef797c590d4141ac19c75250
MD5 336a8b0741ecc5a7afae7550af926cfd
BLAKE2b-256 3ad03d645964dedc8a2766e385ef894c7184d78f62e5606361bb0eac35095234

See more details on using hashes here.

File details

Details for the file summerepi-3.6.4-py3-none-any.whl.

File metadata

  • Download URL: summerepi-3.6.4-py3-none-any.whl
  • Upload date:
  • Size: 50.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.10.10 Windows/10

File hashes

Hashes for summerepi-3.6.4-py3-none-any.whl
Algorithm Hash digest
SHA256 bc6de076569027338831a72e6a94679fa62d5087a4e551c7ed11bef8b7bbcd14
MD5 a620f88940756eef3d6be7923678ed67
BLAKE2b-256 8edc9e0da0ef7a98cb6f87f831ef6c37a9faea90a9f58577dba03dbcfb59f3c0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page