Skip to content

v3.0.0

Latest

Choose a tag to compare

@richteague richteague released this 13 May 14:08
· 2 commits to master since this release

A major refactor centred on a JAX-backed model, a new class hierarchy, and an opt-in gradient-based MCMC sampler. All user-facing call signatures from 2.x are preserved.

Highlights

  • JAX backend for the rotation map model and likelihood: JIT-compiled, autodifferentiable, and GPU-aware.
  • numpyro NUTS sampler as an opt-in MCMC backend via mcmc='numpyro' in fit_map() and Annulus3D.get_vlos_GP(). emcee remains the default. Legacy nwalkers/nburnin/nsteps kwargs map onto numpyro's num_chains/num_warmup/num_samples internally.
  • Class hierarchy split: datacubeimagecube (shared FITS I/O) + momentmap (2D) + linecube (3D); AnnulusAnnulus2D / Annulus3D. Legacy import aliases retained.
  • imagecube.to_fits() and linecube.to_momentmap() (via bettermoments).
  • GP backend swapped from celerite to tinygp.quasisep.Matern32 for JAX compatibility.
  • Performance: ~16× cumulative speedup in warm fit_map calls via JIT-closure + vmap'd batch log-probability.
  • Test suite (tests/) and GitHub Actions CI (pytest matrix on Python 3.11 + 3.13, ruff lint gate).
  • Tutorial 6 demonstrates the numpyro path end-to-end.

Breaking changes

  • Minimum Python is now 3.10 (was 3.8).
  • celerite is no longer a dependency (replaced by tinygp). Drop it from pinned environments.
  • A few previously-hidden DeprecationWarnings may surface (notably from emcee 3.x sampler.chain).

See the full CHANGELOG entry for the complete list of added, changed, removed, and fixed items, plus migration notes.