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.
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]'
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.
Please refer to the artifact at the ACM Digital Library: https://doi.org/10.1145/3453483.3454078
Please refer to GUIDE.md for a description of the main source files in this repository.
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.
Coming Soon!
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},
}
Apache 2.0; see LICENSE.txt
The logo was designed by McCoy R. Becker.