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.
- Primary public functions:
jme_* - Primary public constants:
JME_* - Current wrapper target: all
204publicjme_*functions tracked by the native API inventory - Current constant target: all
462publicJME_*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
pip install jmeph-ffiEnd users do not need to download native binaries manually. The package ships its bundled jme and calceph runtimes inbuilt inside the wheel.
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
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())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:
204/204configured ctypes function signatures462/462generatedJME_*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
MIT. The Python package and the project-owned JME native library are intended to remain under MIT-compatible distribution.