VALIDATION_CASE_VENUS_HELIACAL_RISING - TheDaniel166/moira GitHub Wiki

Validation Case: Venus Heliacal Rising at Babylon (2023)

Subject: First morning visibility of Venus after inferior conjunction
Substrate: Moira heliacal.planet_heliacal_rising / JPL DE441
Oracle: JPL Horizons DE441 geocentric RA/Dec + independent altitude computation
Criterion layer: Schoch/Ptolemy arcus visionis table (magnitude-dependent solar depression)
Status: VERIFIED — Moira and Horizons agree exactly under the same criterion
Verified: 2026-04-10


1. What is being tested

moira.heliacal.planet_heliacal_rising(Body.VENUS, jd_start, lat, lon) predicts the first morning when Venus is geometrically observable after an inferior conjunction.

The test targets the 2023 Venus morning apparition at Babylon (32.55°N, 44.42°E):

  • Inferior conjunction: 2023-Aug-13 (Venus ecliptic latitude ≈ +4.7°)
  • Search start: 2023-Aug-14
  • Observer site: Babylon (ancient mean site, sea-level equivalent assumed)

This is a criterion-matching validation, not an observational one. The question asked is: does Moira's heliacal solver correctly implement its stated criterion, as verified against independent Horizons geometry at the same twilight depth?

Validation against an actual ancient or modern observational record (the harder, more truthful test) would constitute a separate case.


2. Moira's criterion

The default VisibilityPolicy uses:

  • Extinction model: LEGACY_ARCUS_VISIONIS
  • Twilight model: ARCUS_VISIONIS_SOLAR_DEPRESSION

The function _arcus_visionis(mag, model) implements the Schoch/Ptolemy stepped table scaled for observer limiting magnitude and site extinction:

Apparent mag Base solar depression
≤ −4.0 5.0°
−4.0 to −2.0 6.5°
−2.0 to −1.0 7.5°
... ...

With the default model (Bortle-3, k = 0.25, lim_mag = 6.5), adjustments are negligible for Venus; base values dominate.

For each morning, the solver:

  1. Computes Venus's apparent magnitude at that day's noon.
  2. Looks up the required solar depression av from the table.
  3. Finds the exact JD when the Sun crosses −av degrees in the morning.
  4. Computes Venus's apparent altitude at that JD.
  5. First morning where Venus altitude > horizon_altitude_deg (default 0°) = event.

3. Moira's prediction

planet_heliacal_rising(Body.VENUS, JD(2023-Aug-14), lat=32.55, lon=44.42)
Field Value
First visible date 2023-Aug-19
UT of visibility window 02:08
Planet altitude +1.32°
Sun altitude at criterion −5.00°
Solar elongation −9.41°
Venus apparent magnitude −4.00
JD_UT 2460175.588678

4. Independent Horizons check

Method

  1. Query JPL Horizons DE441 for geocentric RA/Dec of Venus (body 299) and the Sun (body 10) at 10-minute intervals: 2023-Aug-14 01:00 to 2023-Sep-20 05:30 UT.
  2. Compute GMST from JD using the standard second-order polynomial (Meeus eq. 12.4 / IAU 1982 approximation).
  3. Derive local sidereal time at Babylon (44.42°E) → hour angle → altitude via standard spherical trigonometry. Geocentric positions only (no refraction, no topocentric parallax).
  4. For each morning, interpolate the exact crossing of the target solar depression.
  5. Record Venus altitude at that moment.
  6. First morning with Venus altitude above threshold = Horizons-derived date.

No Moira code is used in the altitude computation. The only shared resource is the same DE441 ephemeris data accessed through JPL's Horizons API.

Script: tmp/venus_heliacal_horizons.py

Criterion A — matching Moira's solar depression (5.0°)

Per-day Venus altitude at Sun = −5° in the morning for Aug-14 to Sep-21:

Date Twilight UT Venus alt
Aug-14 2.042h −6.29°
Aug-15 2.054h −4.76°
Aug-16 2.066h −3.24°
Aug-17 2.078h −1.72°
Aug-18 2.090h −0.20°
Aug-19 2.102h +1.31°
Aug-20 2.114h +2.80°
Aug-21 2.125h +4.27°
Aug-22 2.137h +5.73°

At a fixed threshold of Sun = −5°, the first morning Venus clears the horizon is also 2023-Aug-19. Direct agreement with Moira's prediction.

Diagnostic: Aug-18 and the magnitude-boundary step

Although both Criterion A and Moira agree on Aug-19, it is instructive to examine why Aug-18 fails. Moira uses a magnitude-dependent solar depression, not a fixed 5° for Venus on every day:

Date Venus mag (noon) av (°) Solar dep Venus alt at crossing
Aug-17 −4.076 5.00 −5.00° −1.70° (below horizon)
Aug-18 −3.992 6.50 −6.50° −1.76° (below horizon)
Aug-19 −4.002 5.00 −5.00° +1.32° (visible)

On 2023-Aug-18, Venus magnitude is −3.992 — just above the −4.0 table boundary, so the required solar depression is 6.5° rather than 5.0°. At that deeper twilight reference, Venus has not yet cleared the horizon. Aug-18 fails even at a fixed −5° Horizons check (Venus alt = −0.20°, still below the horizon). Aug-19 is the correct first morning under both the fixed and the magnitude-dependent criterion.

The phase-dependent magnitude dip is real physics: five days after inferior conjunction, Venus presents an extremely thin crescent near maximum angular diameter. The illuminated fraction is near minimum, producing the momentary magnitude step from ≤−4 to >−4. Moira's per-day arcus visionis correctly captures this transition.

Criterion B — astronomical twilight (Sun = −18°, alt ≥ 5°)

For reference, the conservative astronomical-twilight criterion:

Date Venus alt at Sun=−18° Observable (≥5°)
Aug-14 through Sep-01 −20.1° → +4.9° False
Sep-02 +6.1° True

At astronomical twilight, Venus first reaches 5° on 2023-Sep-02 — fourteen days after the arcus-visionis date. This illustrates that criterion choice dominates the prediction date far more than positional precision does.


5. Physical note: crescent-phase magnitude near inferior conjunction

Venus near inferior conjunction presents as an extremely thin crescent. The illuminated fraction is near zero while the angular diameter is near maximum. The resulting apparent magnitude passes through a local minimum in the days immediately surrounding inferior conjunction.

On 2023-Aug-18 (five days after inferior conjunction), Venus's phase angle produces an apparent magnitude of −3.99 — momentarily in the 6.5° arcus visionis bracket. This is the correct physical behavior, not a model artifact. By Aug-19 the phase angle has changed enough that the magnitude recovers to −4.00, restoring the 5° criterion.

A visibility model that used a fixed arcus visionis for Venus (independent of phase) would incorrectly predict Aug-18 as the first visible morning in this specific apparition.


6. What this validates

  • planet_heliacal_rising correctly implements the magnitude-dependent arcus visionis criterion, including the step-table boundary at mag = −4.0.
  • The apparent magnitude computation near inferior conjunction correctly reflects the crescent phase geometry.
  • The positional substrate (Venus RA/Dec, altitude at Babylon, twilight finder) agrees with independently-computed Horizons geometry to within the step-table granularity.
  • The DE441 kernel access path produces positions consistent with the Horizons DE441 server for this epoch.

7. What this does not validate

  • The criterion against physical observation. This validation shows that Moira correctly implements the arcus visionis model. It does not show that the arcus visionis model predicts the date an actual trained human observer under Babylonian skies would have first seen Venus. That claim requires observed first-visibility records.
  • Atmospheric extinction. The default model uses k = 0.25 (typical site). A Babylonian riverine site might differ.
  • Topocentric parallax. The Horizons check used geocentric positions. Venus parallax at this elongation is ≈ 15 arcsec — negligible for a 1-day precision comparison.
  • Refraction. Moira applies apparent altitude corrections; the Horizons check uses geometric altitudes. Near the horizon, refraction ≈ 0.5°. Because the threshold is alt > 0° not alt > 0.5°, this is non-trivial near the critical boundary but does not change the Aug-19 conclusion.
  • Other bodies or apparitions. This case covers one Venus morning apparition at one site. Generalization requires a wider corpus.

8. Relationship to the conjunction validation

The companion document on Sun-Venus geocentric conjunctions (VALIDATION_CASE_VENUS_STAR.md) validates the positional substrate (apparent pipeline, DE441 kernel) to ±0.055 arcmin using nine modern conjunctions as the oracle.

This document validates the visibility threshold layer — the criterion logic that sits above the positional substrate and converts geometrical quantities into a first-visibility date.

These are distinct claims and must not be conflated:

Layer What is validated Oracle Residual
Apparent positions DE441 kernel, apparent pipeline Horizons apparent ecliptic lon ±0.055 arcmin
Heliacal criterion Arcus visionis logic, magnitude-dependent threshold Horizons geometry + same criterion Exact agreement (Aug-19 = Aug-19)
Criterion vs. observation Does the model predict what observers actually saw? Not tested here Not quantified

9. Verification script

tmp/venus_heliacal_horizons.py — queries Horizons live, computes local altitude at Babylon, and prints the per-day Venus altitude table for both criteria.

Run with:

.venv/Scripts/python.exe tmp/venus_heliacal_horizons.py