_images/logo.png

AePPL is a flexible collection of tools that allows users to define and manipulate probabilistic models implemented in Aesara.

Features#

AePPL strives to make probabilistic programming as simple as it should be, and as exhaustive as can be.

  • Intuitive: All you need is an Aesara graph that contains random variables; no need to learn a new syntax

  • Exhaustive: If your problem is mathematically well-defined, AePPL is designed to support it.

  • A broad ecosystem: Benefit from Aesara’s current and future compilation backends (e.g. C, JAX, Numba). Use your model with other Aesara, Numba or JAX libraries

  • Flexible: Define your own distributions by transforming random variables directly; condition on transformed random variables; use loops and conditionals in your model.

  • Extensible: Aesara provides tools to easily traverse and transform probabilistic models

Example#

import aeppl
import aesara
import aesara.tensor as at

srng = at.random.RandomStream()

S_rv = srng.invgamma(0.5, 0.5)
Y_rv = srng.normal(0.0, at.sqrt(S_rv))

# Print a LateX representation of the model
aeppl.latex_pprint(Y_rv)

# Compute the joint log-probability for the mixture
logprob, (s_vv, y_vv) = joint_logprob(S_rv, Y_rv)

# Compile to C, Numba or JAX
fn = aesara.function([s_vv, y_vv], logprob)
numba_fn = aesara.function([s_vv, y_vv], logprob, mode="NUMBA")
jax_fn = aesara.function([s_vv, y_vv], logprob, mode="JAX")

Getting Started#