Cathedral 0.3

Cathedral 0.3 is a small release focused on making the library more reliable for actual use.

The biggest change is reproducibility. Cathedral now uses an internal NumPy Generator-based RNG path, so calls like infer(..., seed=123) produce repeatable results across rejection sampling, importance sampling, Metropolis-Hastings, and predictive checks. Helpful for debugging real models.

I also fixed a correctness issue in weighted importance sampling. If you call infer(..., method="importance", resample=False), posterior summaries now use the normalized importance weights rather than treating the retained traces as equally weighted. That makes mean, std, histograms, probabilities, and credible intervals do the right thing.

There are a few quality-of-life additions too: a compact Posterior.summary() helper, several practical distributions (Exponential, LogNormal, Binomial, and StudentT), and a lightweight benchmark script for tracking inference behavior over time.

I’m gearing up to start using the library for real modeling tasks, we’ll see what else pops up when I try to use this for real.

Update/That was quick: I cut a small 0.3.1 patch shortly after this release. It adds local posterior checkpointing with Posterior.save() / Posterior.load() (just pickle), and a new Posterior.extend() helper for continuing inference with the same method. Rejection, importance, and MH posteriors can now be extended with additional traces; exact enumeration recomputes the path set rather than duplicating exact paths.