Tutorial for the International Conference on Probabilistic Numerics 2026, built around message-passing Bayesian inference with RxInfer.
The series covers the five classic problem settings of probabilistic-numerics.org, each as a pair of notebooks — a Julia Pluto edition in julia/ and a Python Marimo edition in python/:
| # | Topic | Julia (Pluto) | Python (Marimo) |
|---|---|---|---|
| 1 | Probabilistic linear algebra | julia/01-probabilistic-linear-algebra.jl |
python/01-probabilistic-linear-algebra.py |
| 2 | Bayesian quadrature | julia/02-bayesian-quadrature.jl |
python/02-bayesian-quadrature.py |
| 3 | Probabilistic optimization | julia/03-probabilistic-optimization.jl |
python/03-probabilistic-optimization.py |
| 4 | Probabilistic ODE solvers | julia/04-probabilistic-ode-solvers.jl |
python/04-probabilistic-ode-solvers.py |
| 5 | Probabilistic PDE solvers | julia/05-probabilistic-pde-solvers.jl |
python/05-probabilistic-pde-solvers.py |
julia> import Pkg; Pkg.add("Pluto")
julia> import Pluto; Pluto.run()then open the notebook file from the Pluto welcome screen. Pluto's built-in package manager installs each notebook's dependencies (RxInfer, Plots, PlutoUI, SpecialFunctions) automatically on first open — the first run takes a few minutes.
Each python/ notebook declares its dependencies inline (PEP 723), so with uv installed a notebook is self-contained:
uvx marimo edit --sandbox python/01-probabilistic-linear-algebra.pyOr, in an environment with marimo, numpy, scipy and plotly:
marimo edit python/01-probabilistic-linear-algebra.pyThe Julia editions use RxInfer for the message-passing section; since there is no Python equivalent, the Marimo editions reproduce that step with a small hand-rolled Gaussian belief-propagation routine (gaussian_bp) and check it digit-for-digit against the closed form, exactly as the Julia notebooks check against RxInfer.