Skip to main content

prodigy: PRObability DIstributions via GeneratingfunctionologY

prodigy is a prototypical tool for the analysis of probabilistic non-negative integer programs with while-loops. It is based on (probability) generating functions.

It provides a command-line interface and a web GUI.

Contents

  1. Installation
  2. Basic Usage

Installation

With pip

Prodigy is on PyPI as prodigy-ppl (the command and the Python package are called prodigy):

pip install prodigy-ppl

This needs Python 3.11 or newer and uses the SymPy and SymEngine engines. For the faster GiNaC engine (--engine ginac), install GiNaC and its Python bindings first (they are not on PyPI), then the extra:

pip install "pygin @ git+https://github.com/LKlinke/prodigy-ginac-bindings.git@dynamic-variables"
pip install "prodigy-ppl[ginac]"

With Docker

The image contains the command line and the web GUI with the SymPy and SymEngine engines, for amd64 and arm64 (tags: version, e.g. 3.1.0, minor version 3.1, and latest). Without arguments it starts the web GUI on http://localhost:8080:

docker run --rm -p 8080:8080 ghcr.io/lklinke/prodigy

Arguments are passed to prodigy; mount the folder with your programs to use the command line:

docker run --rm -v "$PWD":/work ghcr.io/lklinke/prodigy main /work/example.pgcl

Dockerfile.artifact builds the full environment for artifacts (all engines including GiNaC, the sources and the development tools): make docker-artifact, then docker run -ti prodigy-artifact.

From source

To install Prodigy from the repository, follow these steps:

  1. Make sure Python 3.11 or newer is installed (tested with 3.11 and 3.14).
  2. Install GiNaC, which also requires CLN.
  3. Install uv.
  4. Clone or download the Prodigy repository, open a command prompt in its root folder, and type ./install.sh. This installs Prodigy with the dependency versions locked in uv.lock into .venv, and the Z3 solver for pysmt.

If no errors occurred, you have successfully installed Prodigy. Now there are two options on how to use the tool. You can either use the command-line interface (CLI) or the web GUI. The next section (Basic Usage) details how to achieve both of these things.

Troubleshooting

If you run into trouble during installation, this subsection might be of help. It lists some common problems that might occur during installation of Prodigy and how you can (hopefully) solve them.

  • If you're using Windows, don't (not even WSL). We heavily recommend using either Linux or MacOS, as some of the required libraries have compatibility problems with Windows.
  • If you're using Linux, make sure all of these packages are installed (if you're not using a Debian/Ubuntu based distribution, these might differ slightly):
    • CMake
    • pkg-config
    • build-essential (includes make, g++, gcc, and more)
    • python3-dev (called python3-devel on some other package managers such as yam)

Basic Usage

CLI

  1. In the project directory, run prodigy with uv run prodigy ... (or activate the virtual environment with source .venv/bin/activate and type prodigy ...).
  2. For more information, see the help message (uv run prodigy --help) or have a look into the documentation.

Web GUI

  1. Type uv run prodigy web (or uv run prodigy --engine ginac web for the faster GiNaC engine). The GUI opens in your browser.
  2. Write or load a program, choose a strategy for each loop under Setup, and press Analyze (⌘/Ctrl + Return).

Results come with their guarantee (exact, lower bound with residual mass, upper bound), and queries are answered with sound intervals. See docs/gui.md, which also describes the non-interactive analysis API (prodigy analyze --json).

Development

  • make lint, make mypy and make test run the checks of the CI (pylint, mypy, and the tests with coverage; see .github/workflows/main.yml).
  • uv sync installs pygin (GiNaC) from GitHub through the dependency group ginac; the package on PyPI does not depend on it.
  • Releases: bump version in pyproject.toml, merge, and push a tag v<version> (e.g. v3.1.0). .github/workflows/release.yml runs the checks, waits for approval in the environment release, and publishes to PyPI, the Docker image (Dockerfile) to ghcr.io, and a GitHub release.
  • Dependencies are locked in uv.lock. After changing them in pyproject.toml, run uv lock and commit both files. uv lock --upgrade updates all dependencies within their constraints; Dependabot proposes such updates monthly as pull requests.

Metadata

Release files for prodigy-ppl 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for prodigy-ppl 0.1.0
File Size Uploaded Provenance Actions
prodigy_ppl-0.1.0.tar.gz 776.9 kB With provenance Details for prodigy_ppl-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for prodigy-ppl 0.1.0
File Interpreter ABI Platform Actions
prodigy_ppl-0.1.0-py3-none-any.whl Python 3 none any Details for prodigy_ppl-0.1.0-py3-none-any.whl

Total release size: 1.6 MB

Release files / prodigy_ppl-0.1.0.tar.gz

Download URL prodigy_ppl-0.1.0.tar.gz
Size 776.9 kB
Tags Source
SHA-256 checksum
How to use checksums
ce2b8323dc35d990610a7f908c38b7e611ef3a9e654362795b6961e0d0900688
BLAKE2b-256 checksum
How to use checksums
07b756436a5bc2e0624d9af49066898f58df3f487b8ada84991db1e7e43eb3f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / prodigy_ppl-0.1.0-py3-none-any.whl

Download URL prodigy_ppl-0.1.0-py3-none-any.whl
Size 855.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f7eaeab1ff499f9f2ae015b7bc05c9f1efa22f4aac9bd68246b48f35d1ca01ce
BLAKE2b-256 checksum
How to use checksums
505bd6474816a4d5a316c0289476c3997bf7278d1b7b578451b4a0fba4bed257
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Security for prodigy-ppl 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for prodigy_ppl-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page