BridgeStan provides efficient in-memory access through Python, Julia, Rust, and R to the methods of a Stan model, including log densities, gradients, Hessians, and constraining and unconstraining transforms. The motivation was developing inference algorithms in higher-level languages for arbitrary Stan models.
Stan is a probabilistic programming language for coding statistical models. For an introduction to what can be coded in Stan, see the Stan User's Guide.
BridgeStan is currently shipping with Stan version 2.36.0
Documentation is available at https://roualdes.github.io/bridgestan/
BridgeStan has been tested with the following operating system and C++ compiler combinations.
- Linux: Ubuntu 20.04 with gcc 9.4.0
- Apple: Mac OS X 12.2 with Apple clang 11.0.3
- Microsoft: Windows 10 with gcc MSYS2 5.3.0
Installing the core of BridgeStan is as simple as
installing a C++ toolchain
(libraries, compiler, and the make
command), and downloading this
repository. To download the latest development version, you can run
git clone --recurse-submodules https://github.com/roualdes/bridgestan.git
For a full guide on installing, configuring, and using BridgeStan, consult the documentation
To compile the Stan model in test_models/multi/multi.stan
to a binary
shared object (.so
file), use the following.
$ cd bridgestan
$ make test_models/multi/multi_model.so
This will require internet access the first time you run it in order
to download the appropriate Stan compiler for your platform into
<bridgestan-dir>/bin/stanc[.exe]
This repository includes examples of calling Stan through BridgeStan in Python, Julia, R, Rust, and C.
-
From Python:
example.py
-
From Julia:
example.jl
-
From R:
example.r
-
From Rust:
example.rs
-
From C:
example.c
Examples of other functionality can be found in the test
folder for each interface.
We are aware of the following projects using BridgeStan.
- https://github.com/sethaxen/StanLogDensityProblems.jl
- https://github.com/Julia-Tempering/Pigeons.jl
- https://github.com/TuringLang/TuringBenchmarking.jl
- https://github.com/pymc-devs/nutpie
- https://github.com/UoL-SignalProcessingGroup/retrospectr
- https://github.com/UoL-SignalProcessingGroup/SMC-NUTS
If you use BridgeStan in your research, please consider citing our JOSS paper and letting us know so we can list your project here.
- Verified Density Compilation for a Probabilistic Programming Language
- Variational Inference with Gaussian Score Matching
- Stein Π-Importance Sampling
- Batch and match: black-box variational inference with a score-based divergence
The Julia and Python APIs were derived from the Stan Model Server API, which in turn was derived from ReddingStan.
Thanks to Sebastian Weber (GitHub @wds15) for enabling multi-threaded calls from Julia to a single Stan model instance.
Thanks to Adrian Seyboldt (GitHub @aseyboldt) for providing the Rust wrapper.