Fast Keplerian orbit computation using Taylor series expansions.
Project description
MeepMeep
Fast Keplerian orbits for exoplanet modelling.
MeepMeep computes Keplerian orbit quantities — transit geometry, projected separations, radial velocities, and phase curves — using 5th-order Taylor expansions around a set of expansion points distributed along the orbit. This makes it an order of magnitude faster than per-point Newton-Raphson while keeping the approximation error well below the photometric noise of current instruments. Optional analytic gradients with respect to the orbital parameters make it suitable for gradient-based inference (HMC, optimisers).
All hot paths are Numba-jitted and can be called
directly from your own @njit kernels with no wrapper overhead.
The method is described in Parviainen & Korth (2020), MNRAS 499, 3356.
Installation
pip install meepmeep
For a development checkout:
git clone https://github.com/hpparvi/meepmeep.git
cd meepmeep
pip install -e ".[test]"
Quickstart
import numpy as np
from meepmeep import Orbit
o = Orbit(npt=15, ep_placement="ea")
o.set_pars(tc=0.0, p=3.4, a=8.0, i=1.55, e=0.1, w=0.4) # times in days, angles in radians
o.set_data(np.linspace(-0.15, 0.15, 500))
x, y, z = o.xyz() # sky-frame position (R_star); z > 0 toward observer
sep = np.hypot(x, y) # sky-projected separation, the b(t) of transit models
rv = o.radial_velocity(k=120.0) # radial velocity in the units of k
Bind tp=... instead of tc=... to anchor the orbit at periastron passage.
Analytic gradients
o = Orbit(derivatives=True)
o.set_pars(tc=0.0, p=3.4, a=8.0, i=1.55, e=0.1, w=0.4)
o.set_data(times)
x, y, z, dx, dy, dz = o.xyz() # gradients w.r.t. (tc, p, a, i, e, w, lan), shape (N, 7)
Conventions
- Units: times in days, angles in radians, lengths in stellar radii
(
ais the scaled semi-major axisa / R_star). - Parameter order (solvers and gradients):
(tc, p, a, i, e, w, lan)— transit-centre time, period, scaled semi-major axis, inclination, eccentricity, argument of periastron, longitude of the ascending node.lanis optional and defaults to0.0. - Coordinates:
x, yspan the sky plane;zis the line of sight, positive toward the observer. Transit occurs atz > 0, secondary eclipse atz < 0;i = pi/2is edge-on.
Public API
| Import | Purpose |
|---|---|
meepmeep.Orbit |
3D, multi-expansion-point orbit; any orbital phase |
meepmeep.Expansion2D / Expansion3D |
single-expansion-point, transit-window evaluators |
meepmeep.numba2d / meepmeep.numba3d |
low-level @njit Taylor primitives |
Everything under meepmeep.backends/ is implementation detail and may be
restructured without notice; import only from the entry points above. See
docs/llms.md for a complete API cheatsheet.
Testing
pip install -e ".[test]"
pytest meepmeep/tests/ # full suite
NUMBA_DISABLE_JIT=1 pytest -m "not slow" --cov # with coverage
Coverage must run with the JIT disabled — compiled kernels are invisible to the tracer otherwise.
Documentation
Full documentation is built with Sphinx from docs/source/:
cd docs && make html # output in docs/build/html/
Citing
If MeepMeep contributes to work that leads to a publication, please cite Parviainen and Korth (2020):
@ARTICLE{2020MNRAS.499.3356P,
author = {{Parviainen}, H. and {Korth}, J.},
title = "{Going back to basics: accelerating exoplanet transit modelling using Taylor-series expansion of the orbital motion}",
journal = {Monthly Notices of the Royal Astronomical Society},
year = 2020,
month = dec,
volume = {499},
number = {3},
pages = {3356-3361},
doi = {10.1093/mnras/staa2953},
adsurl = {https://ui.adsabs.harvard.edu/abs/2020MNRAS.499.3356P},
}
License
MeepMeep is released under the GNU General Public License v3.0. See
LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file meepmeep-1.0.0.tar.gz.
File metadata
- Download URL: meepmeep-1.0.0.tar.gz
- Upload date:
- Size: 604.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af0e4f2c26204c251d032d1d5164ea0587c084bf23bc2d9edcfac6a6cfb23925
|
|
| MD5 |
ce961370fb460324c23358f773453fd6
|
|
| BLAKE2b-256 |
3ae418b888b150e6d958a93a53025860a105147fd9eea2ee993c08497b221e86
|
File details
Details for the file meepmeep-1.0.0-py3-none-any.whl.
File metadata
- Download URL: meepmeep-1.0.0-py3-none-any.whl
- Upload date:
- Size: 215.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
899b1e55637974605d187b3896f9a5ed6c0dd280fc39cb4140b0b1df9465eeee
|
|
| MD5 |
69aad22274a1147846b816f40dc15676
|
|
| BLAKE2b-256 |
d849cd208a362c71441d0bba70de7ad6a069fb94589d9d8d56e412e695781940
|