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 contains the SymPy, SymEngine and the faster GiNaC engine (--engine ginac). The GiNaC engine comes from prodigy-ppl-ginac, whose wheels bundle GiNaC; pip installs it on Linux (x86_64, aarch64, glibc) and macOS with Python 3.11–3.14. Elsewhere, the extra ginac builds it from source, which needs a C++17 compiler, CMake and GiNaC:

pip install "prodigy-ppl[ginac]"

With Docker

The image contains the command line and the web GUI with the SymPy, GiNaC 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 uv.
  3. 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 pip builds prodigy-ppl-ginac from source (no wheel for your platform, e.g. Alpine Linux), install GiNaC and 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).
  • Releases: push a tag v<version> (e.g. v3.1.0) on main; the package takes its version from the latest such tag (hatch-vcs, commits after it get a .devN version), so neither pyproject.toml nor uv.lock changes. .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.
  • make docs builds the documentation (Sphinx, docs/source) into docs/build/html: the API reference from the docstrings, the command-line reference from the click commands, and docs/gui.md. Warnings fail the build. .github/workflows/docs.yml builds it for every pull request; a release publishes it on GitHub Pages.

Metadata

Release files for prodigy-ppl 0.1.2

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.2
File Size Uploaded Provenance Actions
prodigy_ppl-0.1.2.tar.gz 781.3 kB With provenance Details for prodigy_ppl-0.1.2.tar.gz

Built distribution (wheel)

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

Total release size: 1.6 MB

Release files / prodigy_ppl-0.1.2.tar.gz

Download URL prodigy_ppl-0.1.2.tar.gz
Size 781.3 kB
Tags Source
SHA-256 checksum
How to use checksums
472ae6cc0840e676a94d05fb3bbd8b5de355ee25f5b91fb5aa097c163fcd47da
BLAKE2b-256 checksum
How to use checksums
e5814555d53eb17fd42b93e6fd7619bf43c26eb1a4a0155b5cb76289280dbb23
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.2-py3-none-any.whl

Download URL prodigy_ppl-0.1.2-py3-none-any.whl
Size 857.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dfad67f7bf413083905dfdd91306d5af6e0cba9d2568aa5eaee5ca7a4b62304e
BLAKE2b-256 checksum
How to use checksums
cc72305a3b256a698fa619a3ef1584071d73e06a9668e687b2a80281ae5d1f62
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.2

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.2.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