Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 3.1.0 instead.

LibEphemeris

PyPI Downloads PyPI Downloads PyPI Downloads PyPI Version Python Versions License

A high-precision astronomical ephemeris library for Python, powered by NASA JPL DE440/DE441 ephemerides and IAU 2006/2000A standards.

Drop-in replacement for PySwissEph - readable Python algorithms, standard debugging, easy deployment on the scientific Python stack (NumPy, Skyfield, pyerfa).


Features

  • NASA JPL DE440/DE441 - modern planetary ephemerides via Skyfield, with full-range DE441 support for deep-history and far-future work
  • IAU + Vondrák 2011 standards - long-term precession and of-date mean obliquity (Vondrák 2011, valid ±200,000 years), nutation (IAU 2006/2000A) via the official ERFA library
  • Latest-reconstruction Delta T (TT−UT1) - IERS-observed values for the atomic-clock era and the most recent published reconstruction of Earth's rotation from ancient eclipse records (Stephenson, Morrison & Hohenkerk 2016 with the Morrison et al. 2021 update) for historical dates; one consistent ΔT drives positions and house angles on every backend, so a chart stays accurate and self-consistent from antiquity to the far future (details)
  • Validated high precision - planetary differences typically measured in fractions of an arcsecond, house cusps < 0.02", benchmarked across 4,400+ comparison rounds (full report)
  • Four backends, one API - Skyfield, LEB (~14x speedup), Horizons API, and adaptive auto mode through the same calc_ut() interface
  • 25 house systems (26 codes), 47 ayanamsha modes - independently verified against pyswisseph
  • Physical planet centers - outer planets corrected from barycenters using JPL satellite ephemerides
  • Thread-safe contexts when you need them - SwissEph-compatible globals for drop-in migration, EphemerisContext for concurrent workloads
  • 15,000+ years of coverage - base, medium, and extended precision tiers from modern use to -13200 / +17191 CE
  • Readable Python 3.12+ - the ephemeris algorithms are plain, inspectable Python; clean installs across CI, containers, and serverless from prebuilt scientific wheels

Why LibEphemeris

Swiss Ephemeris is the industry standard for planetary calculations. But its Python binding (pyswisseph) wraps a large opaque C library - hard to build from source, hard to inspect or debug, tied to a single computation model.

LibEphemeris provides the same API with a modern foundation:

  • NASA JPL ephemerides instead of semi-analytical theory - DE440/DE441 are the latest planetary ephemerides from the Jet Propulsion Laboratory, the same data used for spacecraft navigation.
  • IAU + Vondrák 2011 standards - long-term precession and of-date mean obliquity (Vondrák, Capitaine & Wallace 2011, valid ±200,000 years instead of the IAU 2006 polynomial's few centuries), nutation (IAU 2006/2000A), all computed via the official ERFA library (the open-source implementation of IAU SOFA), not custom routines.
  • Up-to-date Earth-rotation timeline (ΔT) - the TT↔UT1 conversion uses the latest published reconstruction of Earth's rotation from historical eclipse records (Stephenson-Morrison-Hohenkerk 2016 with the Morrison et al. 2021 revision), blended with IERS observations - so ancient and historical charts sit on the most current scientific ΔT, the same time argument shared by positions and house angles.
  • Physical planet centers - Jupiter, Saturn, Uranus, Neptune corrected from system barycenters to actual body centers using JPL satellite ephemerides. Most libraries skip this.
  • Independently verified - every function cross-validated against pyswisseph, JPL Horizons, and astropy/ERFA. Precision report with full methodology.
  • Readable Python algorithms - plain, inspectable source and standard debugging instead of an opaque C library. Installs from prebuilt wheels (NumPy/Skyfield/pyerfa) across any platform, CI, or serverless environment.

Switching from pyswisseph? Your existing code works with minimal changes. Migration guide.

Accuracy over deep time

Because house cusps derive from the long-term Vondrák 2011 model (valid ±200,000 years) and houses and bodies share one obliquity and one ΔT, charts stay correct and internally self-consistent across the whole ±13,000-year ephemeris range, where a truncated precession polynomial drifts by degrees. Cusp speeds are computed as the genuine dλ/dt of the full house solution, matching the real cusp motion to < 0.005 °/day — including the iteratively-solved Placidus and Koch systems near the polar circle, where an analytic speed approximation can be off by tens to hundreds of °/day.

Methodology: Long-term sidereal time, precession & cusp speeds. Full head-to-head with Swiss Ephemeris: Swiss Ephemeris Comparison.


Quick Start

import libephemeris as swe
from libephemeris.constants import SUN, MOON, FLG_SPEED

jd = swe.julday(2000, 1, 1, 12.0)  # J2000.0

sun, _ = swe.calc_ut(jd, SUN, FLG_SPEED)
moon, _ = swe.calc_ut(jd, MOON, FLG_SPEED)

print(f"Sun:  {sun[0]:.4f} deg, speed {sun[3]:.4f} deg/day")
print(f"Moon: {moon[0]:.4f} deg, speed {moon[3]:.4f} deg/day")
# House cusps (Placidus, Rome)
cusps, ascmc = swe.houses(swe.julday(2024, 11, 5, 18.0), 41.9028, 12.4964, b"P")
print(f"ASC: {ascmc[0]:.4f}, MC: {ascmc[1]:.4f}")

For concurrent or multi-threaded workloads, use EphemerisContext instead of the module-level global state.

More examples: Getting Started


Verified Precision

Every number independently measured across 4,400+ validation rounds. Precision report · full Swiss Ephemeris comparison.

Category Typical Max Scope
Sun-Pluto 0.04-0.26" 1.17" Pluto max 0.75"; Neptune is the widest observed planetary delta
Moon 0.70" 3.32" Different underlying lunar models
House cusps < 0.01" 0.02" All 25 systems (modern); long-term model holds to ±13,000 yr
House cusp speeds < 0.005°/day True dλ/dt; more accurate than analytic approximations on Placidus/Koch
Fixed stars < 0.1" 0.51" 1,447-entry Hipparcos catalog; 116 cross-checked vs SIMBAD
Solar eclipses - < 6s Timing accuracy
Lunar eclipses - < 8s Timing accuracy
Ayanamsha < 0.001 deg 0.006 deg All 47 sidereal modes

Four Backends, One API

Choose your trade-off between speed, locality, and setup. The same calc_ut() interface works across all four modes, from zero-install Horizons lookups to precomputed LEB throughput.

Mode Backend Speed Use case
"auto" LEB -> Horizons -> Skyfield adaptive Default. Best onboarding; resolves local or remote data transparently
"skyfield" JPL DE440/DE441 via Skyfield ~120 us High-precision local JPL workflow
"leb" Precomputed Chebyshev polynomials ~5 us Maximum throughput for repeated calculations
"horizons" NASA JPL Horizons REST API ~300 ms No local ephemeris files required
from libephemeris import set_calc_mode
set_calc_mode("leb")  # or via env: LIBEPHEMERIS_MODE=leb

Installation

pip install libephemeris

Out of the box, the wheel includes a bundled LEB2 base-tier core for the 14 core bodies (1850-2150). With the default medium tier, the library can auto-download the additional LEB2 data it needs on first use.

Recommended first-time setup:

libephemeris init                 # Optional but recommended interactive config
libephemeris download auto        # Download exactly what your config needs
libephemeris status               # Verify installed data and active setup

Prefer to install a tier directly? Use one of these:

libephemeris download base         # 1850-2150, lightweight
libephemeris download medium       # 1550-2650, ~200 MB (recommended)
libephemeris download extended     # -13200 to +17191 CE, full range

Optional extras: pip install libephemeris[stars] for star-catalog tooling, [nbody] for REBOUND/ASSIST n-body integration, [all] for everything. Details.


Documentation


Contributing

git clone https://github.com/g-battaglia/libephemeris.git
cd libephemeris && uv pip install -e ".[dev]"
poe lint                           # Ruff lint + auto-fix
poe test:leb:fast                  # Recommended fast unit suite
poe test:skyfield:fast             # Skyfield backend unit suite

Part of the Kerykeion Ecosystem

LibEphemeris is the computation engine behind:

  • Astrologer Studio — professional online astrology software (in production)
  • Kerykeion — Python astrology library (v6 alpha)
  • Astrologer API — hosted REST API for astrology data and SVG charts (upcoming)

Learn more at kerykeion.net.


License

Licensed under the Apache License 2.0 — a permissive license free for any use, including closed-source and commercial products, subject to preservation of copyright, license, and attribution notices. See LICENSING.md for details. PyPI releases carry this license.

Note: the optional libephemeris[nbody] extra pulls in rebound and assist (GPL-3.0-or-later), which are not part of the core install and are never bundled. Installing that extra makes your combined installation subject to the GPL; the core library and its required dependencies are permissive. See THIRD_PARTY_NOTICES.md.

LibEphemeris is an independent, API-compatible implementation; it contains no Swiss Ephemeris code (NOTICE.md, THIRD_PARTY_NOTICES.md). "Swiss Ephemeris" is a product of Astrodienst AG.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

libephemeris-3.0.0rc5.tar.gz (12.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

libephemeris-3.0.0rc5-py3-none-any.whl (12.7 MB view details)

Uploaded Python 3

File details

Details for the file libephemeris-3.0.0rc5.tar.gz.

File metadata

  • Download URL: libephemeris-3.0.0rc5.tar.gz
  • Upload date:
  • Size: 12.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for libephemeris-3.0.0rc5.tar.gz
Algorithm Hash digest
SHA256 29e590749ce72ff7647f4dd385b64e25213b8b7c5c067a1101b01af368d0d599
MD5 7c02db4bfeef277eece550dfe465eb32
BLAKE2b-256 4d9e012002d6ac77948ee283466e518d067623c44e5ad1fef536db21924c1f57

See more details on using hashes here.

File details

Details for the file libephemeris-3.0.0rc5-py3-none-any.whl.

File metadata

  • Download URL: libephemeris-3.0.0rc5-py3-none-any.whl
  • Upload date:
  • Size: 12.7 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for libephemeris-3.0.0rc5-py3-none-any.whl
Algorithm Hash digest
SHA256 d0c5a3cfbb40062fe9500617ac6ea8af1b9913c7667b01dbe30fd5430e874862
MD5 07eb2ec17b30be98e1fac7f15164a3fe
BLAKE2b-256 5f1337bdbcd45386b38aea7770aeda48a4cbcfd123affa328bf1355eabdaf0c3

See more details on using hashes here.

Release history Release notifications | RSS feed

3.1.0

2 files

3.0.0

2 files

This release

3.0.0rc5 This release

2 files

2.0.2

2 files

2.0.1

2 files

2.0.0

2 files

1.6.0

2 files

1.5.0

2 files

1.4.0

2 files

1.3.0

2 files

1.2.0

2 files

1.1.0

2 files

1.0.0

2 files

0.20.0

2 files

0.15.0

2 files

0.10.0

2 files

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

0.6.0

2 files

0.4.0

2 files

0.2.0

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.1

2 files

0.1.0

2 files

0.0.3

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page