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


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


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

# 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")

Install AePPL#

AePPL installation can happen in a few different ways. You can install AePPL with conda or with pip. To get the bleeding edge version you can install aeppl-nightly.

pip install aeppl
conda install -c conda-forge aeppl
pip install aeppl-nightly

Getting Started#