  We present Cobaya, a general-purpose Bayesian analysis code aimed at models
with complex internal interdependencies. Without the need for specific code by
the user, interdependencies between different stages of a model pipeline are
exploited for sampling efficiency: intermediate results are automatically
cached, and parameters are grouped in blocks according to their dependencies
and optimally sorted, taking into account their individual computational costs,
so as to minimize the cost of their variation during sampling, thanks to a
novel algorithm. Cobaya allows exploration of posteriors using a range of Monte
Carlo samplers, and also has functions for maximization and
importance-reweighting of Monte Carlo samples with new priors and likelihoods.
Cobaya is written in Python in a modular way that allows for extendability, use
of calculations provided by external packages, and dynamical reparameterization
without modifying its source. It can exploit hybrid OpenMP/MPI parallelization,
and has sub-millisecond overhead per posterior evaluation. Though Cobaya is a
general purpose statistical framework, it includes interfaces to a set of
cosmological Boltzmann codes and likelihoods (the latter being agnostic with
respect to the choice of the former), and automatic installers for external
dependencies.
