Release date: 2026-07-23
Public upgrade path: 5.1.2 to 5.2.0
Moira 5.2.0 promotes global solar and lunar eclipse circumstances into first-class, immutable engine products and admits a NumPy-free spherical cartography surface for maximum-visible magnitude and obscuration. The release is additive at the public API boundary and keeps astronomical policy, timescales, ephemeris identity, surface model, and known exclusions explicit.
EclipseCalculator.solar_global_circumstances(...) and the corresponding
Moira facade method assemble:
Authoritative horizon junctions, including the 2032 annular and 2049 near-singular hybrid cases exercised by the release corpus, are retained as exact incidences. Only sub-0.5-second numerical micro-branches wholly confined to the declared half-kilometre junction neighborhood are normalized. Connected-component and sunrise/sunset incidence invariants remain strict.
EclipseCalculator.lunar_global_circumstances(...) and the facade expose one
geocentric result with explicit native and nasa_compat modes. The result
carries:
Mode purity is enforced: native physical geometry and NASA-compatibility canon geometry cannot be mixed inside one result.
solar_eclipse_cartography(...) evaluates the lawful observer-visible eclipse
interval at adaptive icosphere vertices and produces separate magnitude and
obscuration contours. Refinement is conforming across shared edges and is
driven by:
The result reports its requested and achieved depth, mesh triangle count, maximum angular edge, field and angular tolerances, unresolved-edge count, and convergence state. A flat renderer receives antimeridian-split segments; a 3D globe retains spherical connectivity.
Duration contours, terrain and elevation, atmospheric refraction, weather, lunar-limb topography, and projection-specific screen coordinates are not part of this admitted product.
The optional FastAPI surface adds:
POST /v1/eclipses/solar/global-circumstances;POST /v1/eclipses/solar/cartography; andPOST /v1/eclipses/lunar/global-circumstances.Request bounds and response convergence metadata are typed in the OpenAPI contract. The server remains a transport layer; solver and cartography doctrine stay in the engine.
The release exercises total, annular, hybrid, partial, polar-central, and near-singular solar geometry; penumbral, partial, total, and limiting lunar geometry; adaptive-mesh closure; antimeridian splitting; public exports; native boundary behavior; and REST serialization.
The new global vessels are bound to the repository’s existing NASA/GSFC Besselian and hashed lunar-figure corpora. Detailed 2027-08-02 solar and 2026-08-28 lunar fields are additionally compared with declared EclipseWise DE405/DE430 rows. These are named cross-model comparisons. Moira’s runtime continues to use content-identified DE441/LE441, its declared mean-limb and WGS-84 policies, and its selected Delta-T model.
No NumPy, SciPy, Swiss Ephemeris, or jplephem runtime dependency is introduced. A native dense-field cartography accelerator remains deferred until measured production evidence justifies its boundary and parity cost.
One warm-reader Windows/Python 3.14 smoke using DE441/LE441 and the 2027-08-02 total eclipse measured:
solar_global_circumstances(...): 18.92 seconds wall time; andsolar_eclipse_cartography(...): 39.74 seconds wall time.The cartography result contained 21 evaluated mesh vertices and 38 triangles
at achieved depth 1. It correctly reported converged=False with 31 unresolved
edges under the requested default tolerances. These single-process timings are
performance evidence only. They establish the need for background execution,
request deduplication, caching, and explicit convergence handling in an
interactive website; they are not a throughput guarantee or scientific
validation result.