DELTA_T_HYBRID_MODEL - TheDaniel166/moira GitHub Wiki
Moira — Delta T Source-Priority and Scenario Policy
Version: 3.3
Date: 2026-08-27
Status: Implemented bounded policy; validation scope stated below
Surfaces: moira.julian.delta_t · moira.delta_t_physical.delta_t_hybrid
1. Governing product
Delta T is the total time-scale difference
Delta T = TT - UT1
in seconds. The public product is a total. A total Earth-rotation observation does not identify how much arose from the core, atmosphere, oceans, cryosphere, mantle, tides, or any other cause.
Moira therefore applies two rules:
- Source totals govern where an admitted source exists.
- Forecast policy remains visibly separate from source-backed history.
The model is deterministic and file-backed. It performs no network access and does not silently replace a missing admitted source with a weaker causal proxy.
2. Domain and source priority
The explicit physical-policy surface is admitted from decimal year -2000.0.
Requests below that HPIERS table domain raise ValueError; they are not
silently clamped to the first table row. The generic moira.julian.delta_t()
surface is broader and keeps its earlier-era extrapolation visible.
| Era | Mean policy | Evidence class |
|---|---|---|
Earlier than -2100 on generic delta_t() only |
Morrison-Stephenson/NASA-lineage polynomial and historical anchors on their declared source basis | Explicit extrapolation outside the physical surface |
-2100 to -2000 on generic delta_t() only |
One explicit linear 100-year C0 bridge from the earlier polynomial value to the first HPIERS row | Declared source-floor reconciliation; not an observation |
-2000 through the final distinct HPIERS knot before the aggregate table |
Stephenson-Morrison-Hohenkerk/HPIERS mean through moira.julian.delta_t() |
Published historical reconstruction on its raw DE430/LE430 source basis |
Final HPIERS knot to first aggregate representative epoch (currently 2015.0 to about 2015.456) |
One explicit linear C0 source bridge | Declared source-reconciliation policy |
Modern aggregate entries through their final representative epoch (currently about 2026.123) |
Higher-priority moira.julian.delta_t() aggregate totals |
Full-year and Jan–Apr means are materialized at the mean epoch of their first-of-month USNO samples, not at integer product labels |
After the final aggregate epoch through 2150 |
Boundary-anchored scenario defined in section 3 | Explicit extrapolation policy |
After 2150 |
Same mathematical scenario continued | Scenario extrapolation only; not an authority-validated forecast |
HPIERS states that its 1950–2016 values are half-yearly, while the authority's
HTML DATE display rounds those epochs to integers. The packaged artifact
restores the declared 0.5-year ordinal cadence before interpolation and
loader parity is tested against it. HPIERS states that those values belong with DE430/LE430 and its
lunar tidal acceleration of -25.85 arcsec/cy². Generic Delta T is a clock
product and cannot infer which ephemeris a downstream caller will use.
Consequently, delta_t() preserves the HPIERS source basis and performs no
ambient retargeting to DE441.
Moira retains the published source-to-target arithmetic as an explicit private helper:
c = -0.91072 * (n_DE441 - n_source) * ((year - 1955) / 100)^2
Delta T_target = Delta T_source + c
That helper is not called by generic delta_t(). A target-aware computation
may use it only after establishing both the source product and target ephemeris
identity. Moira's reader-backed SPK paths now establish that identity from the
opened kernel's coherent DAF summary labels, never from its filename. The
admitted mappings are DE430/LE430 at -25.85 arcsec/cy^2 and DE441/LE441 at
-25.936 arcsec/cy^2. Historical declared-basis composition fails closed for
an unmapped or conflicting kernel identity; direct EOP and aggregate-era clock
products remain numerically unchanged. NASA-canon comparison remains separately owned by
delta_t_nasa_canon(), including NASA's published month-midpoint decimal-year
convention and its own limited lunar-correction regime.
DeltaTPolicy(model="hybrid") remains the default layered time policy.
DeltaTPolicy(model="physical") exposes this bounded source-priority/scenario
surface explicitly. The word physical in the compatibility name does not
claim that historical totals have been causally decomposed.
3. Future mean scenario
Let the final aggregate representative epoch define a boundary vessel
Y0 = final aggregate representative epoch # currently about 2026.123
D0 = final aggregate Delta T
h = year - Y0 # years after the handoff
The post-handoff mean is
Delta T scenario(year) = D0 + 29.09*(h/100)^2
29.09 s/cy² is the declared sum of a +43.7 s/cy² tidal term (Morrison,
Stephenson, Hohenkerk, and Zawilski 2021, their published Delta-T
coefficient) and a −14.61 s/cy² GIA term (Shahvandi et al. 2024 GIA LOD
rate −0.80 ms/cy, converted with JULIAN_YEAR / 20). It is forecast
doctrine, not an observation and not a fitted decomposition of the
historical source total.
The construction preserves the admitted value at the handoff (C0). It does
not consume the slope of the final two aggregate epochs. That slope remains
a table diagnostic on the boundary vessel. The current final product is a
Jan–Apr 2026 partial mean; treating it as a century derivative would
extrapolate the present core-driven flattening. The right-hand derivative
at Y0 is therefore the parabola’s derivative, which is zero. C1 is not
claimed.
No climate or barystatic ice-melt term is included. Shahvandi et al. 2024
project a climate-induced LOD rate of about +1.33 ms/cy since 2000 and
up to +2.62 ms/cy by 2100 under high emissions. That process is omitted
from this clock by explicit decision, not because it is zero.
The scenario is useful for deterministic future computation, but Earth rotation remains unpredictable. No value after the current final aggregate epoch is described as observed merely because it is produced by the scenario. No value after 2150 is described as a validated forecast.
4. Compatibility breakdown
DeltaTBreakdown remains a stable public vessel:
year, total, secular, core, cryo, fluid, bridge, residual, era
Its fields obey
secular + core + cryo + fluid + bridge + residual == total
The historical field names do not override source truth:
totalis the admitted source total or future scenario mean.secularis the declared curvature baseline. It must not be read as a measured causal tidal/GIA component during the source-backed eras.core,cryo,fluid, andresidualare preserved for compatibility and are zero while their candidate datasets are quarantined.bridgeis the explicit reconciliation between the declared curvature baseline and the admitted total. In the future it carries the boundary value offsetD0 − REFERENCE_LODonly. It is arithmetic accounting, not a fitted physical cause.eraretains the compatibility categoriespre-1840,historical,measured, andfuture. These labels are not source-row provenance; in particular, the legacy wordmeasureddoes not certify every admitted row as a definitive observation.
The helper functions core_delta_t(), cryo_delta_t(), and
fluid_lowfreq() likewise remain callable but return zero. This is deliberate
quarantine, not missing-data fallback.
5. Why the proxy components are quarantined
IERS C04 annual LOD
moira/data/core_angular_momentum.txt contains annual means of total IERS
EOP C04 LOD. It is not a published core-angular-momentum inversion and cannot
lawfully be labelled as a core-only contribution. It remains packaged for
research reproducibility but is not consumed by the admitted mean.
GRACE/GRACE-FO derivative
moira/data/grace_lod_contribution.txt is a historical derived artifact. Its
generator divided integrated milliseconds by 86400 instead of 1000, an
exact factor-of-86.4 unit defect. Correcting that divisor would still not prove
the candidate C20-to-inertia-to-LOD derivation or a cryosphere-only
attribution. The artifact is therefore retained unchanged except for its
quarantine header and is not consumed at runtime.
AAM and OAM proxies
The packaged AAM and OAM series use different source quantities and units. Regression coefficients cannot turn them into independently identified causal Delta-T components. They remain diagnostic research data only.
Admission of any future component requires all of the following together:
- a named governing physical object and primary source;
- compatible units and an explicit derivation into Delta-T seconds;
- a declared integration constant and boundary policy;
- provenance, coverage, uncertainty, and transformation metadata;
- tests against source-owned fixtures and independently derived invariants.
6. Uncertainty
delta_t_hybrid_uncertainty(year) returns a scale in seconds:
- while HPIERS owns the mean it uses the table's quoted error column;
- from the explicit source bridge through the final aggregate epoch it uses a
0.06 smodern policy scale, covering the verified0.052808 smaximum daily residual against the bundled EOP snapshot; the aggregate table carries no row-level errors; - after the final aggregate epoch it uses the arithmetic policy sum below, not quadrature.
For h = year - Y0 > 0, q = h / 100, and theta = 0.1 / year:
sigma(year) = 0.06 s
+ 0.2 s/cy² * q²
+ 1.82625 s/cy² * q²
+ sigma_OU(h)
z = theta*h
u = 1 - exp(-z)
B = 2*z - 2*u - u²
sigma_OU(h) = (365.25 days/year / 1000 ms/s)
* (0.2379 ms/day/sqrt(year))
* sqrt(B / (2*theta³))
The implementation evaluates the small-z limit with a series expansion to
avoid cancellation. The O-U term is conditional on the declared theta = 0.1/year and
diffusion scale. Those stochastic coefficients do not have a complete
traceable calibration record in the module. The 0.2 s/cy² and
0.10 ms/cy figures are literature coefficient scales, not a complete
2100 error budget. The handoff value's source error and core-anomaly
persistence (the meaning of setting the linear term to zero) are not
propagated. Accordingly, the result is explicitly an uncalibrated
policy scale: it has no asserted 68-percent or other coverage
probability and is not a proof of independent causal errors. The stable
field name sigma is compatibility vocabulary, not a calibration claim.
These values are not assembled by treating the quarantined causal proxies as
independent random variables. DeltaTDistribution exposes a normal
approximation (year, mean, sigma) as a convenient computational vessel,
but normal tails are not claimed as observed Earth-rotation statistics. Its
pdf() and interval() methods are mathematical conveniences around the
caller-visible scale, not validated probability products.
7. Time-scale coherence
For a UTC instant with admitted EOP data, chart and transport metadata satisfy
delta_t_seconds = (jd_tt - jd_ut1) * 86400
The same TT/UT1 relation governs the planetary calculation for that chart.
jd_tt, jd_ut1, chart delta_t, and REST reduction metadata must therefore
describe one clock path rather than mixing an atomic UTC-to-TT conversion with
a separate annual forecast.
The bundled EOP record owns its admitted rows' UTC days. The packaged transformation did not retain the source observed/predicted flag, so those rows must not all be called measured or definitive observations. At each outer coverage boundary, the difference between the EOP value and the year model is fully applied for C0 continuity, then smoothly tapers to zero over one Julian year. It is never propagated as a constant correction into remote epochs. Across an internal EOP gap, only the two admitted boundary corrections are interpolated; the gap is not relabelled as observed. TT-to-UT1 conversion in an EOP segment is inverted directly in TT coordinates; outside coverage it solves the same continuous model surface iteratively.
Hybrid and physical JD transforms evaluate that year model on a private exact
proleptic-Gregorian coordinate: the elapsed fraction between consecutive
January 1 boundaries. This avoids the monthly steps and possible
non-injectivity that would result from using the public NASA-compatible
month-midpoint helper. decimal_year() and decimal_year_from_jd() retain the
NASA convention deliberately. No-hint NASA-canon TT/UT1 transforms use the
same continuous coordinate as the other JD transforms, while catalog
compatibility paths pass the published month-midpoint coordinate explicitly.
The raw NASA polynomial has small piecewise boundary jumps; the no-hint inverse
fails closed for their ambiguous or absent TT intervals rather than selecting
a silent branch.
The packaged leap-second authority begins on 1972-01-01. The lower-level
tai_minus_utc() and utc_to_tai() helpers separately implement the IAU SOFA
iauDat offset-and-drift segments from 1960-01-01 through 1971-12-31, then
the IERS Bulletin C steps. They reject earlier atomic conversion instead of
inventing a flat TAI-UTC = 10 s history.
That atomic-helper authority does not silently redefine the engine's historical civil-input convention. Before the final civil day of 1971, a timezone-normalized civil JD retains the established UT1-proxy interpretation, and TT is obtained from that same UT1 coordinate with the admitted Delta-T model. Over that final civil day, a monotonic smoothstep joins the proxy rule to the first atomic result. This removes the overlap that a hard switch would create; the private inverse solves the same handoff by bisection. This is explicit clock policy, not a reconstruction of pre-1960 UTC.
Private UT1-to-UTC display/serialization plumbing is also leap-safe inside EOP coverage. It inverts the within-day UT1-TAI affine relation and then applies the TAI-UTC offset effective at the civil instant. It does not map a full 86401-second UT1 segment onto a 86400-second UTC-coded day and therefore does not smear a positive leap across the preceding day. This helper changes no facade signature or REST schema.
No facade method name, chart request model, chart response field, or /v1
route path is changed by this coherence rule.
8. Data integrity and provenance
moira/data/delta_t_manifest.json records, for each packaged Delta-T or
Earth-rotation artifact:
- source URL and computational product;
- units and transformation lineage;
- retrieval timestamp when known;
- row count and coverage;
- SHA-256 checksum;
- admitted or quarantined runtime status;
- known semantic caveats.
Loaders reject non-finite, malformed, unordered, or otherwise invalid admitted data. The required HPIERS authority table fails closed when absent. For clock conversion, a wholly absent EOP file retains the documented year-model fallback; a present but malformed EOP file raises before any partial rows are cached. Quarantined artifacts are never activated merely because their files are present.
Generic Delta-T computation accepts finite years only in
[-100000, +100000]; the source-bounded physical surface additionally rejects
years below -2000. JD-aware time transforms accept finite JDs only in
[-40000000, +40000000]. These limits are computational representability
guards chosen for binary64 behavior, not scientific-validity, source-coverage,
or forecast-confidence claims.
The human-readable source and licensing account is in PROVENANCE.md.
9. Validation posture
The relevant evidence classes remain separate:
- source-table tests prove exact selection and interpolation of admitted rows;
- time-scale invariants prove TT/UT1/Delta-T coherence;
- boundary tests prove C0 value continuity at the source-owned final aggregate representative epoch, including synthetic source extension and contraction; they prove the right-hand slope is the parabola, not the table slope;
- EOP tests prove C0 first/last/gap handoffs, one-Julian-year outer tapers, direct TT-to-UT1 inversion, and leap-day-safe private UTC formatting;
- historical civil-clock tests prove the pre-1972 UT1-proxy policy and the monotonic final-day atomic UTC handoff at 1972-01-01, including its inverse;
- domain and non-finite tests prove explicit failure behavior;
- component-zero tests prove quarantined artifacts cannot affect the mean;
- future tests prove the declared scenario formula, not future astronomical truth.
Python/native agreement is not external Delta-T validation. Regression against
Moira's own delta_t() is not an independent IERS oracle. Forecast values are
not promoted to observations by passing deterministic tests.
10. Maintenance rule
When a new source total becomes admissible:
- preserve the source product, status, epoch, units, and uncertainty;
- update the packaged artifact and manifest together;
- extend the source-priority boundary only through admitted coverage;
- let the boundary vessel derive
Y0andD0directly from the final admitted row; do not add a second literal handoff year. The table slope of the final two rows remains a diagnostic and is not a scenario input; - rerun source, seam, time-scale, facade, and REST tests;
- update numerical validation artifacts whose baseline Delta-T changed.
Do not tune the scenario curvature to hide a source discrepancy. Diagnose inputs, time scales, source status, and boundary semantics first.
11. Primary references
- Stephenson, F. R., Morrison, L. V., and Hohenkerk, C. Y. (2016), Measurement of the Earth's rotation: 720 BC to AD 2015.
- Morrison, L. V., Stephenson, F. R., Hohenkerk, C. Y., and Zawilski, M.
(2021), Addendum 2020 to ‘Measurement of the Earth’s rotation: 720 BC
to AD 2015’, for the tidal Delta-T coefficient
43.7 ± 0.2 s/cy². This paper does not replace the packaged HPIERS 2016 mean table. - Shahvandi, M. K., Adhikari, S., Dumberry, M., Borsa, A., and Soja, B.
(2024), The increasingly dominant role of climate change on length of
day variations, DOI
10.1073/pnas.2406930121, for the GIA LOD rate−0.80 ± 0.10 ms/cyused in the future curvature. The paper’s climate ice-melt projection is not admitted into the default clock. - IERS/HPIERS, TT-UT and Earth rotation rate from 2000 BC to 2016 AD,
including the DE430/LE430
-25.85 arcsec/cy²product basis. - NASA GSFC, Secular Acceleration of the Moon, for the sign and scale of an explicitly requested source-to-lunar-ephemeris Delta-T correction and for the separate NASA-canon policy.
- JPL Horizons release history, version 4.80, for the DE441
-25.936 arcsec/cy²lunar tidal deceleration basis. This identifies a possible explicit target; it is not ambiently applied to generic Delta T. - IAU SOFA
iauDat, for the 1960-1971 UTC offset-and-drift segments used by the bounded UTC-to-TAI helper before the IERS leap-second era. - IERS Earth Orientation Parameters C04 and
finals2000Aproducts. - NASA/JPL PO.DAAC GRACE-FO documentation for TN-14 C20/C30 replacement data.
- Caron et al. (2018), DOI
10.1002/2017GL076644, for GIA model context.
These references govern their named products only. None independently proves the quarantined causal decomposition.