The Sum-Product Probabilistic Language
Project description
Sum-Product Probabilistic Language
SPPL is a probabilistic programming language that delivers exact solutions to a broad range of probabilistic inference queries. The language handles continuous, discrete, and mixed-type probability distributions; many-to-one numerical transformations; and a query language that includes general predicates on random variables.
Users express generative models as probabilistic programs with standard imperative constructs, such as arrays, if/else branches, for loops, etc. The program is then translated to a sum-product expression (a generalization of sum-product networks) that statically represents the probability distribution of all random variables in the program. This expression is used to deliver answers to probabilistic inference queries.
A system description of SPPL is given in the following paper:
SPPL: Probabilistic Programming with Fast Exact Symbolic Inference. Saad, F. A.; Rinard, M. C.; and Mansinghka, V. K. In PLDI 2021: Proceedings of the 42nd ACM SIGPLAN International Conference on Programming Language Design and Implementation, June 20-25, Virtual, Canada. ACM, New York, NY, USA. 2021. https://doi.org/10.1145/3453483.3454078.
Installation
This software is tested on Ubuntu 20.04 and Python 3.8. SPPL is available on the PyPI repository
$ python -m pip install sppl
To install the Jupyter interface, first obtain the system-wide dependencies in requirements.sh and then run
$ python -m pip install 'sppl[magics]'
Examples
The easiest way to use SPPL is via the browser-based Jupyter interface, which
allows for interactive modeling, querying, and plotting.
Refer to the .ipynb
notebooks under the
examples directory.
Benchmarks
Please refer to the artifact at the ACM Digital Library: https://doi.org/10.1145/3453483.3454078
Guide to Source Code
Please refer to GUIDE.md for a description of the main source files in this repository.
Tests
To run the test suite as a user, first install the test dependencies:
$ python -m pip install 'sppl[tests]'
Then run the test suite:
$ python -m pytest --pyargs sppl
To run the test suite as a developer:
- To run crash tests:
$ ./check.sh
- To run integration tests:
$ ./check.sh ci
- To run a specific test:
$ ./check.sh [<pytest-opts>] /path/to/test.py
- To run the examples:
$ ./check.sh examples
- To build a docker image:
$ ./check.sh docker
- To generate a coverage report:
$ ./check.sh coverage
To view the coverage report, open htmlcov/index.html
in the browser.
Language Reference
Coming Soon!
Citation
To cite this work, please use the following BibTeX.
@inproceedings{saad2021sppl,
title = {{SPPL:} Probabilistic Programming with Fast Exact Symbolic Inference},
author = {Saad, Feras A. and Rinard, Martin C. and Mansinghka, Vikash K.},
booktitle = {PLDI 2021: Proceedings of the 42nd ACM SIGPLAN International Conference on Programming Design and Implementation},
pages = {804--819},
year = 2021,
location = {Virtual, Canada},
publisher = {ACM},
address = {New York, NY, USA},
doi = {10.1145/3453483.3454078},
address = {New York, NY, USA},
keywords = {probabilistic programming, symbolic execution, static analysis},
}
License
Apache 2.0; see LICENSE.txt
Acknowledgments
The logo was designed by McCoy R. Becker.
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
File details
Details for the file sppl-2.0.4.tar.gz
.
File metadata
- Download URL: sppl-2.0.4.tar.gz
- Upload date:
- Size: 71.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 400a7becbf11a4df3a5783bc175ccd03c3bfb339bd84d6b8c16153d776afe811 |
|
MD5 | ca62396a45b4351b944edaff191ded20 |
|
BLAKE2b-256 | 40691aa678da77e1a7f32f76c0def088ca06b26c1f6cba0c8f91703757b33a4d |
File details
Details for the file sppl-2.0.4-py3-none-any.whl
.
File metadata
- Download URL: sppl-2.0.4-py3-none-any.whl
- Upload date:
- Size: 92.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bd56a6d4a031f9224cf71e06c4cc125df27798810e42fc742e2cbb7c2b2b84f6 |
|
MD5 | 2bab7e1c2c96d250ed2a1a8a75ca676e |
|
BLAKE2b-256 | 93dd419076ced1a43f253daebb085d71b7cf8fd0d0a6a929bb5026d847f5e8a3 |