TensorFlow Probability (TFP) is a production-grade library for probabilistic modeling and Bayesian inference. It provides a comprehensive suite of probability distributions, bijectors (normalizing flows), MCMC kernels (HMC, NUTS, SMC, etc.), variational inference, Gaussian processes, structural time series, and Bayesian optimization. The library supports TensorFlow, JAX, and NumPy backends through a rewrite system, enabling seamless switching between hardware accelerators. The architecture is modular: each distribution, bijector, and kernel inherits from well-defined abstract base classes with `parameter_properties` for automatic shape and constraint inference. Key entry points include `tfp.distributions`, `tfp.bijectors`, `tfp.mcmc`, `tfp.vi`, `tfp.sts`, and `tfp.experimental` for cutting-edge methods. The code is heavily tested across all backends, with property-based tests and numerical stability checks. While primarily an application library, it also includes research-grade components in `discussion/` and `spinoffs/` (Inference Gym, AutoBNN, FunMC) that serve as benchmarks and experimental prototypes.
PyMC is a production-grade Bayesian modeling and probabilistic programming library built on PyTensor. It exposes a model-building API (pm.Model, pm.Normal, pm.sample), automatic log-probability derivation through graph rewriting, MCMC samplers (NUTS, HMC, Metropolis, Slice, DEMetropolis), Sequential Monte Carlo, variational inference (ADVI, FullRankADVI, SVGD), Gaussian processes, ODE support, and data containers (pm.Data, Minibatch). Users construct symbolic random-variable graphs using PyTensor; PyMC rewrites those graphs into measurable IR, computes log-probabilities and transforms, compiles sampling or variational objective functions, and returns posterior traces as xarray/ArviZ DataTree objects. Although the library primarily serves research and statistical workflows, the repository itself is an application/library, not a data-research pipeline. Architecturally, this is a library, not a service: there are no daemons or network endpoints. The entry points are Python APIs in pymc/model/core.py, pymc/sampling/mcmc.py, pymc/distributions/, pymc/step_methods/, and pymc/variational/. The core data flow is model specification -> PyTensor graph -> fgraph_from_model -> logprob rewrites -> compiled sampling functions -> trace backends (ndarray, zarr) -> to_inference_data for posterior analysis. External dependencies include NumPy, SciPy, PyTensor, ArviZ, and optional JAX/BlackJAX/NumPyro, Numba, Zarr, Rich, and Marimo. The codebase has an extensive test suite and CI, with some experimental areas such as pymc.dims and ongoing deprecations. Maintenance is active, with recent commits and rigorous CI. Technical drift is medium: most of the stack tracks current Python, but the Zarr backend is not yet ported to Zarr 3 and several optional integrations carry compatibility shims. Overall craftsmanship is strong but not exceptional: the code is deeply engineered, though its size and internal coupling make individual components less trivially extractable, and some deprecated APIs and experimental modules add friction.
Pyro is a deep probabilistic programming library built on PyTorch, providing a unified framework for Bayesian inference, variational inference, and Monte Carlo methods. Its architecture centers on composable effect handlers (poutine) that enable tracing, conditioning, replay, and reparameterization of probabilistic programs. The library includes a rich set of distributions, bijective transforms for normalizing flows, automatic guide construction, and a variety of inference algorithms (SVI, HMC, NUTS, SVGD, SMC). It also offers domain-specific contrib modules for Gaussian processes, time series forecasting, epidemiology, optimal experimental design, and multi-object tracking. While primarily a software library, Pyro has strong research roots, with many features inspired by recent papers and experimental modules that may evolve. The codebase is well-structured, extensively tested, and actively maintained, though some contrib modules carry instability warnings and a few internal patches to PyTorch may require attention.
Gavel is a Flask-based web application designed for ranking projects at events like hackathons using pairwise comparisons. The system presents judges with pairs of projects to compare, updating rankings in real-time via a Bayesian inference algorithm. Key components include a custom SQLAlchemy class for serializable transaction isolation, a standalone ranking algorithm module (crowd_bt.py), and utility functions for data handling and security. The application uses PostgreSQL for data storage, Celery for asynchronous email tasks, and relies on Redis as a message broker. Admin interfaces allow managing projects, judges, and global settings, with real-time updates to project rankings displayed via the Mu parameter.
NIMBLE is an R package for hierarchical Bayesian modeling that implements a domain-specific language (BUGS) for model specification and compiles models to C++ for efficient MCMC, Laplace approximation, and other inference algorithms. The architecture is a hybrid R/C++ system where R handles model parsing, compilation orchestration, and high-level algorithm construction, while generated C++ code (using embedded Eigen and CppAD libraries) performs efficient sampling and automatic differentiation. Key entry points include `nimbleModel()`, `buildMCMC()`, `runMCMC()`, and `compileNimble()`. The package provides a 'programming with models' framework allowing users to write custom inference algorithms that operate on arbitrary model structures. It bundles extensive classic BUGS benchmarks for regression testing. While the core functionality is well-maintained, the vendored Eigen and CppAD libraries and the complex compilation system introduce potential drift risks.