moira

Moira 5.2.0 - Global Eclipse Circumstances and Adaptive Cartography

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.

Solar global circumstances

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.

Lunar global circumstances

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.

Adaptive spherical cartography

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.

REST admission

The optional FastAPI surface adds:

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.

Validation evidence

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.

Performance smoke

One warm-reader Windows/Python 3.14 smoke using DE441/LE441 and the 2027-08-02 total eclipse measured:

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.