JPL Moshier Ephemeris Python
Pure Python ctypes runtime FFI binding for the project-owned JPL Moshier Ephemeris C library.
This package wraps the native jme_* API directly. It is intended to be a true raw I/O surface: no recalculation, no normalization, no rounding, no reshaping, no dropped buffers, and no hidden status conversion.
Contract
- Primary public functions:
jme_* - Primary public constants:
JME_* - Current wrapper target: all
225publicjme_*functions tracked by the native API inventory - Current constant target: all
480publicJME_*constants from the native headers - Native runtimes bundled in the wheel:
jmepluscalceph - No CPython extension module; pure Python loader plus bundled native libraries
- Argument order, pointer ownership, output buffers, and return values are kept as-is from the native C API
Installation
pip install jmeph-ffi
End users do not need to download native binaries manually. The package ships its bundled jme and calceph runtimes inbuilt inside the wheel.
Native Libraries
The package bundles the same prebuilt runtimes as the PHP wrapper:
linux-x64/libjme.solinux-x64/libcalceph.solinux-arm64/libjme.solinux-arm64/libcalceph.somacos-x64/libjme.dylibmacos-x64/libcalceph.dylibmacos-arm64/libjme.dylibmacos-arm64/libcalceph.dylibwindows-x64/jme.dllwindows-x64/calceph.dll
The local/PHP release source below is for maintainers and package build refresh only, not for normal users.
Local source for those prebuilt runtimes during development:
Copy from a local checkout of jpl-moshier-ephemeris-php/libs
Published runtime source:
https://github.com/jayeshmepani/jpl-moshier-ephemeris-php/releases/tag/prebuilt-libs
You can override discovery with:
JME_LIBRARY_PATHJME_CALCEPH_LIBRARY_PATH
Search order:
- explicit environment override
- bundled
src/jpl_moshier_ephemeris/libs/<platform>/ - common system library paths
Quick Start
from jpl_moshier_ephemeris import (
JME_BODY_SUN,
JME_CALC_SPEED,
JME_CALENDAR_GREGORIAN,
JmeEph,
c_double,
create_string_buffer,
)
jme = JmeEph()
jd = jme.jme_julian_day(2000, 1, 1, 12.0, JME_CALENDAR_GREGORIAN)
xx = (c_double * 6)()
err = create_string_buffer(256)
rc = jme.jme_calc_ut(jd, JME_BODY_SUN, JME_CALC_SPEED, xx, err)
print(rc, list(xx), err.value.decode())
Development
python -m pip install -e ".[dev]"
python scripts/fetch_prebuilt.py
python -m ruff check .
python -m ruff format . --check
python -m pyright
python -m pytest
python -m build
python -m twine check dist/*
The test suite verifies:
225/225configured ctypes function signatures480/480generatedJME_*constants- import and runtime loading
- basic native contract calls such as version, Julian day conversion, calculation, houses, ayanamsa, Delta-T, split-degree, body naming, and refraction
- optional source-surface audit against the local native
jpl-ephemeris-tree
Credits
This package is a binding for JPL Moshier Ephemeris (JME) by Jayesh Mepani (Jayesh Patel). JME builds on:
- JPL DE440 / DE441 ephemerides (NASA/JPL; Park et al. 2021). Kernels are downloaded separately and are redistributed unmodified per the NAIF rules.
- CALCEPH 5.0.1 (Copyright CNRS, Observatoire de Paris, Observatoire de la Côte d'Azur), used under the CeCILL-B license. Prebuilt CALCEPH runtime libraries are bundled unmodified; license text in
LICENSES/CeCILL-B.txt; provided without warranty (CeCILL-B Articles 8 and 9); source code at https://calceph.imcce.fr/. - Stephen L. Moshier: plan404 and Astronomical Almanac 5.6 analytical theories (Moshier engine). MIT License by permission of the author (12 October 2026; record). Portions derived from the work of Stephen L. Moshier, incorporated herein by permission of the author.
- ELP 2000-82B by M. Chapront-Touzé and J. Chapront (CDS VI/79), evaluated by JME's own code generated from the unmodified CDS files.
- VSOP87 by P. Bretagnon and G. Francou (CDS VI/81); C code from Greg A. Miller's VSOP87-Multilang (public domain dedication).
- Jean Meeus, Astronomical Algorithms (formulas cited); F. Espenak and J. Meeus (NASA) ΔT polynomials; ERFA (BSD 3-Clause, NumFOCUS Foundation) IAU 2000B nutation; Yale Bright Star Catalogue (Hoffleit and Warren).
Full credits, terms, and required notice texts: THIRD_PARTY_NOTICES.md.
License
Package license: MIT AND CeCILL-B.
- The original code in this repository (the Python
ctypesbinding, tests and scripts) is licensed under the MIT License, Copyright (c) 2026 Jayesh Mepani (Jayesh Patel). TheLICENSEfile contains only the MIT text for that code. - The bundled prebuilt CALCEPH 5.0.1 runtime libraries are licensed under CeCILL-B; the full text is in
LICENSES/CeCILL-B.txt. - The bundled JME runtime libraries contain the Moshier material (plan404, AA 5.6), which is distributed under the MIT License by permission of Stephen L. Moshier, 12 October 2026 (permission record). Portions derived from the work of Stephen L. Moshier, incorporated herein by permission of the author.
Third-party components keep their own terms; see THIRD_PARTY_NOTICES.md.
Metadata
Release files for jmeph-ffi 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jmeph_ffi-1.1.0.tar.gz | 20.8 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jmeph_ffi-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.7 MB
Release files / jmeph_ffi-1.1.0.tar.gz
| Download URL | jmeph_ffi-1.1.0.tar.gz |
|---|---|
| Size | 20.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b09c8093f97e30f00326fedca6f59820c93958361b89a579d409d87e83a1c90a
|
|
BLAKE2b-256 checksum How to use checksums |
a1126bb68a7b5a83a049a97dc4f4cba7dc12d6e687e1aa0ebc4bcc6fbeb71503
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / jmeph_ffi-1.1.0-py3-none-any.whl
| Download URL | jmeph_ffi-1.1.0-py3-none-any.whl |
|---|---|
| Size | 21.0 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
292b1524ec64c7f5430acdfe6111c6585c02a9e3000ec64a09868509c9c7d4c4
|
|
BLAKE2b-256 checksum How to use checksums |
1df0d2045f7a52ce495e97c1192c533dec3f143627c2d8ef02e861153ba63b9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency log