A differentiable N-body model for multi-planet systems.
jnkepler
is a Python package for modeling photometric and radial velocity data of multi-planet systems via N-body integration. Built with JAX, it leverages automatic differentiation for efficient computation of model gradients. This enables seamless integration with gradient-based optimizers and Hamiltonian Monte Carlo methods, including the No-U-Turn Sampler (NUTS) in NumPyro. The package is particularly suited for efficiently sampling from multi-planet posteriors involving a larger number of parameters and strong degeneracy.
- jnkepler.jaxttv: A differentialble N-body model for analyzing transit timing variations (TTVs) and radial velocities (RVs) of multi-planet systems.
- jnkepler.nbodytransit: A differentialble photodynamical model.
jaxoplanet
needs to be installed for using this package. - jnkepler.nbodyrv: A differentiable RV model taking into account mutual interactions between planets.
See readthedocs for more details.
pip install jnkepler
or
python setup.py install
from source
Explore example notebooks in the examples/
directory to see jnkepler
in action:
-
minimal example for computing transit times:
examples/minimal_example.ipynb
-
TTV modeling:
examples/kep51_ttv_iidnormal.ipynb
- posterior sampling with NUTS
- reproducing the result in Libby-Roberts et al. 2020
-
Photodynamical modeling:
examples/kep51_photodynamics_gp.ipynb
- SVI optimization & posterior sampling with NUTS
- noise modeling using Gaussian Process with
celerite2.jax
- TOI-1136: TTV modeling of 6-planets in a resonance chain [paper]
- TOI-2015: joint TTV & RV modeling of a two-planet system [paper]
- Kepler-51: four-planet modeling including JWST data [paper] [repository]
- Masuda et al. (2024), A Fourth Planet in the Kepler-51 System Revealed by Transit Timing Variations, AJ in press.