GPry via Cobaya
===============
`GPry `_ is a package for Bayesian inference of expensive likelihoods using Gaussian Process (GP) emulation. Instead of evaluating your likelihood thousands of times, GPry builds a surrogate GP model using active learning—intelligently choosing evaluation points to maximise information gain—and can reduce the number of likelihood evaluations by a factor of 100 or more. It is best suited for smooth, low-dimensional (≲20 parameters) likelihoods where each evaluation is computationally expensive.
This interface bridges Discovery models to GPry through `Cobaya `_. It builds a Cobaya model from your Discovery likelihood and priors, then runs GPry (or another Cobaya sampler) on it.
Minimal Run
-----------
.. code-block:: python
from discoverysamplers.gpry_interface import DiscoveryGPryCobayaBridge
def my_model(params):
x, y = params['x'], params['y']
return -0.5 * (x**2 + y**2)
priors = {'x': ('uniform', -5.0, 5.0), 'y': ('uniform', -5.0, 5.0)}
# Create the bridge (accepts callable or object with .logL attribute)
bridge = DiscoveryGPryCobayaBridge(
discovery_model=my_model,
priors=priors,
latex_labels={'x': r'$x$', 'y': r'$y$'},
like_name='my_like',
)
info, sampler = bridge.run_sampler(max_samples=5000) # defaults to GPry
products = sampler.products()
samples = products["sample"]
print(samples.mean('x'), samples.std('x'))
Using with Discovery Likelihoods
--------------------------------
.. code-block:: python
import discovery as ds
# Create Discovery likelihood
psr = ds.Pulsar.read_feather('path/to/pulsar.feather')
likelihood = ds.PulsarLikelihood([...])
# Pass the likelihood object directly
bridge = DiscoveryGPryCobayaBridge(
discovery_model=likelihood, # or likelihood.logL - both work
priors=priors,
like_name='pulsar_likelihood'
)
Priors
------
- Uniform: ``("uniform", min, max)`` → Cobaya ``prior: {min, max}``
- Log-uniform: ``("loguniform", a, b)`` → Cobaya ``prior: {dist: loguniform, a, b}``
- Normal: ``("normal", mean, sigma[, min, max])`` → Cobaya ``prior: {dist: norm, loc, scale}``
- Fixed: ``("fixed", value)`` → fixed parameter
- Callable priors are **not** supported here.
Key Options
-----------
- ``sampler``: choose Cobaya sampler (``'gpry'`` default, or ``'mcmc'``, ``'polychord'`` if installed).
- ``max_samples``: total samples for GPry.
- ``alternative_paramnames``: remap model names to Cobaya names.
- ``latex_labels``: used for GetDist outputs.
Manual Access
-------------
.. code-block:: python
info = bridge.info # Cobaya info dict
model = bridge.model # Cobaya model
loglike = model.loglike({'x': 0.0, 'y': 0.0})
Tips
----
- Keep priors bounded; GPry and Cobaya expect finite ranges for uniform/loguniform.
- Use GetDist (already in Cobaya) for plots and summaries: ``products = sampler.products(); samples = products["sample"]``.
- When using alternative names, ensure you still provide priors keyed by the original Discovery names.
See Also
--------
- :doc:`../api/gpry_interface` - API reference
- `Cobaya documentation `_
- `GetDist documentation `_