Source code for pybambi.multinest

"""Wrapper for PyMultiNest.

Author: Will Handley (wh260@cam.ac.uk)
Date: November 2018
"""
from numpy.ctypeslib import as_array


[docs]def run_multinest(loglikelihood, prior, dumper, nDims, nlive, root, ndump, eff, seed=-1): """Run MultiNest. See https://arxiv.org/abs/0809.3437 for more detail Parameters ---------- loglikelihood: :obj:`callable` probability function taking a single parameter: - theta: numpy.array physical parameters, `shape=(nDims,)` returning a log-likelihood (float) prior: :obj:`callable` tranformation function taking a single parameter - cube: numpy.array hypercube parameters, `shape=(nDims,)` returning physical parameters (`numpy.array`) dumper: :obj:`callable` access function called every nlive iterations giving a window onto current live points. Single parameter, no return: - live: `numpy.array` live parameters and loglikelihoods, `shape=(nlive,nDims+1)` nDims: int Dimensionality of sampling space nlive: int Number of live points root: str base name for output files ndump: int How many iterations between dumper function calls eff: float Efficiency of MultiNest seed: int Seed for sampler. Optional, no default seed. """ import pymultinest def multinest_prior(cube, ndim, nparams): theta = prior(as_array(cube, shape=(nparams,))) for i, elem in enumerate(theta): cube[i] = elem def multinest_loglikelihood(cube, ndim, nparams): return loglikelihood(as_array(cube, shape=(nparams,))) def multinest_dumper(nSamples, nlive, nPar, physLive, posterior, paramConstr, maxLogLike, logZ, logZerr, nullcontext): dumper(physLive[:, :-1], physLive[:, -1], posterior[:, :-2], posterior[:, -2]) pymultinest.run(multinest_loglikelihood, multinest_prior, nDims, resume=False, verbose=True, dump_callback=multinest_dumper, n_iter_before_update=ndump//10, n_live_points=nlive, outputfiles_basename=root, sampling_efficiency=eff, evidence_tolerance=0.01, seed=seed)