Skip to content

Classify hybrid (annular-total) eclipses; add NASA 2031 Nov 14 hybrid reference (item 14)#15

Merged
wiyth00 merged 1 commit into
mainfrom
feat/hybrid-classification
Jul 25, 2026
Merged

Classify hybrid (annular-total) eclipses; add NASA 2031 Nov 14 hybrid reference (item 14)#15
wiyth00 merged 1 commit into
mainfrom
feat/hybrid-classification

Conversation

@wiyth00

@wiyth00 wiyth00 commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Summary

Work-plan item 14. enumerate_real_solar_eclipses labelled every central eclipse by the sign of the near-side core radius at greatest eclipse only, so genuinely hybrid eclipses were mislabelled total (or annular). The new _classify_central_eclipse helper samples the signed core radius along the whole central track (±3 h at 120 s steps via iter_real_track, off-ellipsoid samples skipped); if the radius takes both signs anywhere on the track the eclipse is labelled hybrid, matching NASA/GSFC catalog conventions. Otherwise the label falls back to the previous sign-at-greatest rule, unchanged.

Adds the NASA/GSFC 2031 Nov 14 hybrid eclipse (Saros 143, member 24/72) as a validation reference, appended at the end of NASA_GSFC_REFERENCES to keep the tuple chronological. All values are quoted verbatim from the GSFC Besselian-elements page: greatest eclipse 21:07:30.2 TDT (= 21:06:12.3 UT), ΔT 77.9 s, 0°38.0′S 137°37.8′W, central duration 01m08.3s. The existing parametrized tests in tests/test_known_eclipses.py automatically pick this reference up, so DE440s timing (<60 s TT), greatest-eclipse position (<25 km), and the hybrid type label are all CI-enforced.

New tests/test_hybrid_classification.py:

  • test_2031_nov_14_is_classified_hybridfails on main (main labels it total).
  • Guards that 2026-08-12 stays total and 2027-02-06 stays annular (no relabelling of unambiguous events).

Scientific impact

  • No change to computed results
  • Changes computed results (explain below)

Eclipse type labels move for genuinely hybrid rows in the real-Moon catalog (timing, coordinates, and geometry are untouched — the classifier only reads additional samples). Two caveats for review:

  1. Please re-run the full catalog and diff the eclipse_type column of real_moon_eclipses.csv against a pre-change run to see exactly which rows move; any downstream logic that filters on total/annular labels would see those rows reclassified.
  2. The 2026-08-12 anchor event is unaffected (regression-tested).

Runtime: each central eclipse now costs up to ~180 extra shadow evaluations (one per 120 s track sample, short-circuiting once both signs are seen). Adding the 2031 reference also widens the validation enumeration window from 2026–2028 to 2026–2031, so the validation stage and tests/test_known_eclipses.py take proportionally longer.

Checklist

  • Regression test fails on main (test_2031_nov_14_is_classified_hybrid).
  • Reference values quoted verbatim from the GSFC source page (no fabricated digits).
  • CI green — note: CI is the first integrated execution; I could not run pytest locally in this environment. Will fix promptly if red.

Note for merge ordering: this PR appends to the end of NASA_GSFC_REFERENCES; the item-17 PR inserts at the beginning and both keep the tuple chronological, so the two merge cleanly in either order.

… the track

Item 14: enumerate_real_solar_eclipses previously labelled every central
eclipse by the sign of the near-side core radius at greatest eclipse only,
so hybrid eclipses were mislabelled total (or annular). The classifier now
samples the signed core radius along the whole central track (+/-3 h at
120 s steps via iter_real_track); if it takes both signs the eclipse is
labelled "hybrid", matching NASA/GSFC catalog conventions.

Adds the NASA/GSFC 2031 Nov 14 hybrid eclipse (Saros 143) as a validation
reference, with all published values quoted verbatim from the GSFC
Besselian-elements page. Regression tests pin 2031-11-14 as hybrid and
guard 2026-08-12 (total) and 2027-02-06 (annular) against relabelling.
@wiyth00
wiyth00 merged commit 4c81dbe into main Jul 25, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant