Source code for sbijax._src.inference.abc.sabc

"""Simulated annealing approximate Bayesian computation.

Implements the method of :cite:t:`albert2025simulated` as a functional
``ABCSampler``. The particle-annealing
core is reused from the existing implementation; this factory exposes it behind
a pure ``sample`` function taking the prior and simulator separately.
"""

from sbijax._src.inference.abc._sabc_engine import SABC as _SABCEngine
from sbijax._src.inference.abc._sabc_engine import abs_distance
from sbijax._src.inference.abc._sampler import ABCSampler


[docs] def sabc(prior, simulator, *, summary_fn=lambda x: x, distance_fn=abs_distance): """Construct a simulated annealing ABC sampler. Args: prior: a ``tfd`` distribution serving as the prior over parameters simulator: a callable ``(rng_key, theta) -> y`` summary_fn: maps simulated data to summary statistics distance_fn: distance between simulated and observed summaries Returns: an ``ABCSampler`` """ engine = _SABCEngine((prior, simulator), summary_fn, distance_fn) def sample(rng_key, observable, **kwargs): return engine.sample_posterior(rng_key, observable, **kwargs) return ABCSampler(sample=sample)