FAILURE MAP
← Case archive

FA-55951 / Astronomical coordinate conventions / Open access

Fits split time reference: FITS split time reference loses fractional reference or TIMEZERO · case 01

The adapter reports an incorrect absolute day while other fields remain valid.

Verified by executionVariant 1 · 6 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

FITS split time reference loses fractional reference or TIMEZERO. Faulty expression: d['d0']+(d['x']+d['z'])*d['u']/d['S']

VERIFIED REPAIR

Preserve the declared model convention at this site: d['d0']+d['f0']+(d['x']+d['z'])*d['u']/d['S']

Unsuccessful approach: A partial convention repair still uses d['d0']+d['f0']+d['x']*d['u']/d['S']

Case contract

A FITS-like time coordinate stores integer reference day d0, fractional reference f0, tick x in units u seconds, TIMEZERO z in the same units, and day length S. Output day is d0+f0+(x+z)*u/S; no calendar, leap-second, or time-scale conversion is inferred. Output fields are defined by: absolute_day = d['d0']+d['f0']+(d['x']+d['z'])*d['u']/d['S']; elapsed_seconds = (d['x']+d['z'])*d['u']; reference_seconds = d['f0']*d['S']; zero_day_offset = d['z']*d['u']/d['S']; relative_day = (d['x']+d['z'])*d['u']/d['S']; inverse_tick = ((d['x']-d['d0']-d['f0'])*d['S'])/d['u']-d['z']

Why this case matters

Catalog, detector, sky-coordinate, and spectroscopy adapters must preserve the association between numeric coordinates and their declared reference conventions.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'absolute_day': d['d0']+(d['x']+d['z'])*d['u']/d['S'], 'elapsed_seconds': (d['x']+d['z'])*d['u'], 'reference_seconds': d['f0']*d['S'], 'zero_day_offset': d['z']*d['u']/d['S'], 'relative_day': (d['x']+d['z'])*d['u']/d['S'], 'inverse_tick': ((d['x']-d['d0']-d['f0'])*d['S'])/d['u']-d['z']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'d0': 50000, 'f0': 0.25, 'x': 20, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.73, 'elapsed_seconds': 48, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.48, 'inverse_tick': -2499016.5}), ({'d0': 50000, 'f0': 0.25, 'x': 20, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.65, 'elapsed_seconds': 40, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.4, 'inverse_tick': -2499012.5}), ({'d0': 50000, 'f0': 0, 'x': 20, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.48, 'elapsed_seconds': 48, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.48, 'inverse_tick': -2499004.0}), ({'d0': 50000, 'f0': 0.25, 'x': -10, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.01, 'elapsed_seconds': -24, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.24, 'inverse_tick': -2500510.5}), ({'d0': 50000, 'f0': 0.25, 'x': 20, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.49, 'elapsed_seconds': 24, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.24, 'inverse_tick': -4998029.0}), ({'d0': 50000, 'f0': 0.75, 'x': 20, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.71, 'elapsed_seconds': 96, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 0.96, 'inverse_tick': -1249522.75})], 2: [({'d0': 50000, 'f0': 0.25, 'x': 21, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.75, 'elapsed_seconds': 50, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.5, 'inverse_tick': -2498966.5}), ({'d0': 50000, 'f0': 0.25, 'x': 21, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.67, 'elapsed_seconds': 42, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.42, 'inverse_tick': -2498962.5}), ({'d0': 50000, 'f0': 0, 'x': 21, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.5, 'elapsed_seconds': 50, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.5, 'inverse_tick': -2498954.0}), ({'d0': 50000, 'f0': 0.25, 'x': -9, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.03, 'elapsed_seconds': -22, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.22, 'inverse_tick': -2500460.5}), ({'d0': 50000, 'f0': 0.25, 'x': 21, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.5, 'elapsed_seconds': 25, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.25, 'inverse_tick': -4997929.0}), ({'d0': 50000, 'f0': 0.75, 'x': 21, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.75, 'elapsed_seconds': 100, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 1.0, 'inverse_tick': -1249497.75})], 3: [({'d0': 50000, 'f0': 0.25, 'x': 22, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.77, 'elapsed_seconds': 52, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.52, 'inverse_tick': -2498916.5}), ({'d0': 50000, 'f0': 0.25, 'x': 22, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.69, 'elapsed_seconds': 44, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.44, 'inverse_tick': -2498912.5}), ({'d0': 50000, 'f0': 0, 'x': 22, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.52, 'elapsed_seconds': 52, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.52, 'inverse_tick': -2498904.0}), ({'d0': 50000, 'f0': 0.25, 'x': -8, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.05, 'elapsed_seconds': -20, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.2, 'inverse_tick': -2500410.5}), ({'d0': 50000, 'f0': 0.25, 'x': 22, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.51, 'elapsed_seconds': 26, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.26, 'inverse_tick': -4997829.0}), ({'d0': 50000, 'f0': 0.75, 'x': 22, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.79, 'elapsed_seconds': 104, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 1.04, 'inverse_tick': -1249472.75})], 4: [({'d0': 50000, 'f0': 0.25, 'x': 23, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.79, 'elapsed_seconds': 54, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.54, 'inverse_tick': -2498866.5}), ({'d0': 50000, 'f0': 0.25, 'x': 23, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.71, 'elapsed_seconds': 46, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.46, 'inverse_tick': -2498862.5}), ({'d0': 50000, 'f0': 0, 'x': 23, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.54, 'elapsed_seconds': 54, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.54, 'inverse_tick': -2498854.0}), ({'d0': 50000, 'f0': 0.25, 'x': -7, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.07, 'elapsed_seconds': -18, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.18, 'inverse_tick': -2500360.5}), ({'d0': 50000, 'f0': 0.25, 'x': 23, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.52, 'elapsed_seconds': 27, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.27, 'inverse_tick': -4997729.0}), ({'d0': 50000, 'f0': 0.75, 'x': 23, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.83, 'elapsed_seconds': 108, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 1.08, 'inverse_tick': -1249447.75})], 5: [({'d0': 50000, 'f0': 0.25, 'x': 24, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.81, 'elapsed_seconds': 56, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.56, 'inverse_tick': -2498816.5}), ({'d0': 50000, 'f0': 0.25, 'x': 24, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.73, 'elapsed_seconds': 48, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.48, 'inverse_tick': -2498812.5}), ({'d0': 50000, 'f0': 0, 'x': 24, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.56, 'elapsed_seconds': 56, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.56, 'inverse_tick': -2498804.0}), ({'d0': 50000, 'f0': 0.25, 'x': -6, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.09, 'elapsed_seconds': -16, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.16, 'inverse_tick': -2500310.5}), ({'d0': 50000, 'f0': 0.25, 'x': 24, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.53, 'elapsed_seconds': 28, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.28, 'inverse_tick': -4997629.0}), ({'d0': 50000, 'f0': 0.75, 'x': 24, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.87, 'elapsed_seconds': 112, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 1.12, 'inverse_tick': -1249422.75})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'absolute_day': 50000.48, 'elapsed_seconds': 48, 'inverse_tick': -2499016.5, 'reference_seconds': 25.0, 'relative_day': 0.48, 'zero_day_offset': 0.08}{'absolute_day': 50000.73, 'elapsed_seconds': 48, 'inverse_tick': -2499016.5, 'reference_seconds': 25.0, 'relative_day': 0.48, 'zero_day_offset': 0.08}Failed
astronomical fixture 1{'absolute_day': 50000.4, 'elapsed_seconds': 40, 'inverse_tick': -2499012.5, 'reference_seconds': 25.0, 'relative_day': 0.4, 'zero_day_offset': 0.0}{'absolute_day': 50000.65, 'elapsed_seconds': 40, 'inverse_tick': -2499012.5, 'reference_seconds': 25.0, 'relative_day': 0.4, 'zero_day_offset': 0.0}Failed
astronomical fixture 2{'absolute_day': 50000.48, 'elapsed_seconds': 48, 'inverse_tick': -2499004.0, 'reference_seconds': 0, 'relative_day': 0.48, 'zero_day_offset': 0.08}{'absolute_day': 50000.48, 'elapsed_seconds': 48, 'inverse_tick': -2499004.0, 'reference_seconds': 0, 'relative_day': 0.48, 'zero_day_offset': 0.08}Passed
astronomical fixture 3{'absolute_day': 49999.76, 'elapsed_seconds': -24, 'inverse_tick': -2500510.5, 'reference_seconds': 25.0, 'relative_day': -0.24, 'zero_day_offset': -0.04}{'absolute_day': 50000.01, 'elapsed_seconds': -24, 'inverse_tick': -2500510.5, 'reference_seconds': 25.0, 'relative_day': -0.24, 'zero_day_offset': -0.04}Failed
astronomical fixture 4{'absolute_day': 50000.24, 'elapsed_seconds': 24, 'inverse_tick': -4998029.0, 'reference_seconds': 25.0, 'relative_day': 0.24, 'zero_day_offset': 0.04}{'absolute_day': 50000.49, 'elapsed_seconds': 24, 'inverse_tick': -4998029.0, 'reference_seconds': 25.0, 'relative_day': 0.24, 'zero_day_offset': 0.04}Failed
astronomical fixture 5{'absolute_day': 50000.96, 'elapsed_seconds': 96, 'inverse_tick': -1249522.75, 'reference_seconds': 75.0, 'relative_day': 0.96, 'zero_day_offset': 0.16}{'absolute_day': 50001.71, 'elapsed_seconds': 96, 'inverse_tick': -1249522.75, 'reference_seconds': 75.0, 'relative_day': 0.96, 'zero_day_offset': 0.16}Failed

SHA-256 / 933fc58700c25dc34df4c044e79c6ecfe10d70622d899f5eff97ec15d88156aa

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'absolute_day': d['d0']+d['f0']+d['x']*d['u']/d['S'], 'elapsed_seconds': (d['x']+d['z'])*d['u'], 'reference_seconds': d['f0']*d['S'], 'zero_day_offset': d['z']*d['u']/d['S'], 'relative_day': (d['x']+d['z'])*d['u']/d['S'], 'inverse_tick': ((d['x']-d['d0']-d['f0'])*d['S'])/d['u']-d['z']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'d0': 50000, 'f0': 0.25, 'x': 20, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.73, 'elapsed_seconds': 48, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.48, 'inverse_tick': -2499016.5}), ({'d0': 50000, 'f0': 0.25, 'x': 20, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.65, 'elapsed_seconds': 40, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.4, 'inverse_tick': -2499012.5}), ({'d0': 50000, 'f0': 0, 'x': 20, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.48, 'elapsed_seconds': 48, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.48, 'inverse_tick': -2499004.0}), ({'d0': 50000, 'f0': 0.25, 'x': -10, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.01, 'elapsed_seconds': -24, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.24, 'inverse_tick': -2500510.5}), ({'d0': 50000, 'f0': 0.25, 'x': 20, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.49, 'elapsed_seconds': 24, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.24, 'inverse_tick': -4998029.0}), ({'d0': 50000, 'f0': 0.75, 'x': 20, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.71, 'elapsed_seconds': 96, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 0.96, 'inverse_tick': -1249522.75})], 2: [({'d0': 50000, 'f0': 0.25, 'x': 21, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.75, 'elapsed_seconds': 50, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.5, 'inverse_tick': -2498966.5}), ({'d0': 50000, 'f0': 0.25, 'x': 21, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.67, 'elapsed_seconds': 42, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.42, 'inverse_tick': -2498962.5}), ({'d0': 50000, 'f0': 0, 'x': 21, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.5, 'elapsed_seconds': 50, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.5, 'inverse_tick': -2498954.0}), ({'d0': 50000, 'f0': 0.25, 'x': -9, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.03, 'elapsed_seconds': -22, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.22, 'inverse_tick': -2500460.5}), ({'d0': 50000, 'f0': 0.25, 'x': 21, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.5, 'elapsed_seconds': 25, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.25, 'inverse_tick': -4997929.0}), ({'d0': 50000, 'f0': 0.75, 'x': 21, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.75, 'elapsed_seconds': 100, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 1.0, 'inverse_tick': -1249497.75})], 3: [({'d0': 50000, 'f0': 0.25, 'x': 22, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.77, 'elapsed_seconds': 52, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.52, 'inverse_tick': -2498916.5}), ({'d0': 50000, 'f0': 0.25, 'x': 22, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.69, 'elapsed_seconds': 44, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.44, 'inverse_tick': -2498912.5}), ({'d0': 50000, 'f0': 0, 'x': 22, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.52, 'elapsed_seconds': 52, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.52, 'inverse_tick': -2498904.0}), ({'d0': 50000, 'f0': 0.25, 'x': -8, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.05, 'elapsed_seconds': -20, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.2, 'inverse_tick': -2500410.5}), ({'d0': 50000, 'f0': 0.25, 'x': 22, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.51, 'elapsed_seconds': 26, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.26, 'inverse_tick': -4997829.0}), ({'d0': 50000, 'f0': 0.75, 'x': 22, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.79, 'elapsed_seconds': 104, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 1.04, 'inverse_tick': -1249472.75})], 4: [({'d0': 50000, 'f0': 0.25, 'x': 23, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.79, 'elapsed_seconds': 54, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.54, 'inverse_tick': -2498866.5}), ({'d0': 50000, 'f0': 0.25, 'x': 23, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.71, 'elapsed_seconds': 46, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.46, 'inverse_tick': -2498862.5}), ({'d0': 50000, 'f0': 0, 'x': 23, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.54, 'elapsed_seconds': 54, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.54, 'inverse_tick': -2498854.0}), ({'d0': 50000, 'f0': 0.25, 'x': -7, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.07, 'elapsed_seconds': -18, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.18, 'inverse_tick': -2500360.5}), ({'d0': 50000, 'f0': 0.25, 'x': 23, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.52, 'elapsed_seconds': 27, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.27, 'inverse_tick': -4997729.0}), ({'d0': 50000, 'f0': 0.75, 'x': 23, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.83, 'elapsed_seconds': 108, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 1.08, 'inverse_tick': -1249447.75})], 5: [({'d0': 50000, 'f0': 0.25, 'x': 24, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.81, 'elapsed_seconds': 56, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.56, 'inverse_tick': -2498816.5}), ({'d0': 50000, 'f0': 0.25, 'x': 24, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.73, 'elapsed_seconds': 48, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.48, 'inverse_tick': -2498812.5}), ({'d0': 50000, 'f0': 0, 'x': 24, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.56, 'elapsed_seconds': 56, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.56, 'inverse_tick': -2498804.0}), ({'d0': 50000, 'f0': 0.25, 'x': -6, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.09, 'elapsed_seconds': -16, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.16, 'inverse_tick': -2500310.5}), ({'d0': 50000, 'f0': 0.25, 'x': 24, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.53, 'elapsed_seconds': 28, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.28, 'inverse_tick': -4997629.0}), ({'d0': 50000, 'f0': 0.75, 'x': 24, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.87, 'elapsed_seconds': 112, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 1.12, 'inverse_tick': -1249422.75})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'absolute_day': 50000.65, 'elapsed_seconds': 48, 'inverse_tick': -2499016.5, 'reference_seconds': 25.0, 'relative_day': 0.48, 'zero_day_offset': 0.08}{'absolute_day': 50000.73, 'elapsed_seconds': 48, 'inverse_tick': -2499016.5, 'reference_seconds': 25.0, 'relative_day': 0.48, 'zero_day_offset': 0.08}Failed
astronomical fixture 1{'absolute_day': 50000.65, 'elapsed_seconds': 40, 'inverse_tick': -2499012.5, 'reference_seconds': 25.0, 'relative_day': 0.4, 'zero_day_offset': 0.0}{'absolute_day': 50000.65, 'elapsed_seconds': 40, 'inverse_tick': -2499012.5, 'reference_seconds': 25.0, 'relative_day': 0.4, 'zero_day_offset': 0.0}Passed
astronomical fixture 2{'absolute_day': 50000.4, 'elapsed_seconds': 48, 'inverse_tick': -2499004.0, 'reference_seconds': 0, 'relative_day': 0.48, 'zero_day_offset': 0.08}{'absolute_day': 50000.48, 'elapsed_seconds': 48, 'inverse_tick': -2499004.0, 'reference_seconds': 0, 'relative_day': 0.48, 'zero_day_offset': 0.08}Failed
astronomical fixture 3{'absolute_day': 50000.05, 'elapsed_seconds': -24, 'inverse_tick': -2500510.5, 'reference_seconds': 25.0, 'relative_day': -0.24, 'zero_day_offset': -0.04}{'absolute_day': 50000.01, 'elapsed_seconds': -24, 'inverse_tick': -2500510.5, 'reference_seconds': 25.0, 'relative_day': -0.24, 'zero_day_offset': -0.04}Failed
astronomical fixture 4{'absolute_day': 50000.45, 'elapsed_seconds': 24, 'inverse_tick': -4998029.0, 'reference_seconds': 25.0, 'relative_day': 0.24, 'zero_day_offset': 0.04}{'absolute_day': 50000.49, 'elapsed_seconds': 24, 'inverse_tick': -4998029.0, 'reference_seconds': 25.0, 'relative_day': 0.24, 'zero_day_offset': 0.04}Failed
astronomical fixture 5{'absolute_day': 50001.55, 'elapsed_seconds': 96, 'inverse_tick': -1249522.75, 'reference_seconds': 75.0, 'relative_day': 0.96, 'zero_day_offset': 0.16}{'absolute_day': 50001.71, 'elapsed_seconds': 96, 'inverse_tick': -1249522.75, 'reference_seconds': 75.0, 'relative_day': 0.96, 'zero_day_offset': 0.16}Failed

SHA-256 / 46f77ae91615da854def062afa3c92efa9b3ddc9227877049cada69af211fc8c

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'absolute_day': d['d0']+d['f0']+(d['x']+d['z'])*d['u']/d['S'], 'elapsed_seconds': (d['x']+d['z'])*d['u'], 'reference_seconds': d['f0']*d['S'], 'zero_day_offset': d['z']*d['u']/d['S'], 'relative_day': (d['x']+d['z'])*d['u']/d['S'], 'inverse_tick': ((d['x']-d['d0']-d['f0'])*d['S'])/d['u']-d['z']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'d0': 50000, 'f0': 0.25, 'x': 20, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.73, 'elapsed_seconds': 48, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.48, 'inverse_tick': -2499016.5}), ({'d0': 50000, 'f0': 0.25, 'x': 20, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.65, 'elapsed_seconds': 40, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.4, 'inverse_tick': -2499012.5}), ({'d0': 50000, 'f0': 0, 'x': 20, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.48, 'elapsed_seconds': 48, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.48, 'inverse_tick': -2499004.0}), ({'d0': 50000, 'f0': 0.25, 'x': -10, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.01, 'elapsed_seconds': -24, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.24, 'inverse_tick': -2500510.5}), ({'d0': 50000, 'f0': 0.25, 'x': 20, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.49, 'elapsed_seconds': 24, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.24, 'inverse_tick': -4998029.0}), ({'d0': 50000, 'f0': 0.75, 'x': 20, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.71, 'elapsed_seconds': 96, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 0.96, 'inverse_tick': -1249522.75})], 2: [({'d0': 50000, 'f0': 0.25, 'x': 21, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.75, 'elapsed_seconds': 50, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.5, 'inverse_tick': -2498966.5}), ({'d0': 50000, 'f0': 0.25, 'x': 21, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.67, 'elapsed_seconds': 42, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.42, 'inverse_tick': -2498962.5}), ({'d0': 50000, 'f0': 0, 'x': 21, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.5, 'elapsed_seconds': 50, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.5, 'inverse_tick': -2498954.0}), ({'d0': 50000, 'f0': 0.25, 'x': -9, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.03, 'elapsed_seconds': -22, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.22, 'inverse_tick': -2500460.5}), ({'d0': 50000, 'f0': 0.25, 'x': 21, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.5, 'elapsed_seconds': 25, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.25, 'inverse_tick': -4997929.0}), ({'d0': 50000, 'f0': 0.75, 'x': 21, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.75, 'elapsed_seconds': 100, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 1.0, 'inverse_tick': -1249497.75})], 3: [({'d0': 50000, 'f0': 0.25, 'x': 22, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.77, 'elapsed_seconds': 52, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.52, 'inverse_tick': -2498916.5}), ({'d0': 50000, 'f0': 0.25, 'x': 22, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.69, 'elapsed_seconds': 44, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.44, 'inverse_tick': -2498912.5}), ({'d0': 50000, 'f0': 0, 'x': 22, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.52, 'elapsed_seconds': 52, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.52, 'inverse_tick': -2498904.0}), ({'d0': 50000, 'f0': 0.25, 'x': -8, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.05, 'elapsed_seconds': -20, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.2, 'inverse_tick': -2500410.5}), ({'d0': 50000, 'f0': 0.25, 'x': 22, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.51, 'elapsed_seconds': 26, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.26, 'inverse_tick': -4997829.0}), ({'d0': 50000, 'f0': 0.75, 'x': 22, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.79, 'elapsed_seconds': 104, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 1.04, 'inverse_tick': -1249472.75})], 4: [({'d0': 50000, 'f0': 0.25, 'x': 23, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.79, 'elapsed_seconds': 54, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.54, 'inverse_tick': -2498866.5}), ({'d0': 50000, 'f0': 0.25, 'x': 23, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.71, 'elapsed_seconds': 46, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.46, 'inverse_tick': -2498862.5}), ({'d0': 50000, 'f0': 0, 'x': 23, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.54, 'elapsed_seconds': 54, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.54, 'inverse_tick': -2498854.0}), ({'d0': 50000, 'f0': 0.25, 'x': -7, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.07, 'elapsed_seconds': -18, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.18, 'inverse_tick': -2500360.5}), ({'d0': 50000, 'f0': 0.25, 'x': 23, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.52, 'elapsed_seconds': 27, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.27, 'inverse_tick': -4997729.0}), ({'d0': 50000, 'f0': 0.75, 'x': 23, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.83, 'elapsed_seconds': 108, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 1.08, 'inverse_tick': -1249447.75})], 5: [({'d0': 50000, 'f0': 0.25, 'x': 24, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.81, 'elapsed_seconds': 56, 'reference_seconds': 25.0, 'zero_day_offset': 0.08, 'relative_day': 0.56, 'inverse_tick': -2498816.5}), ({'d0': 50000, 'f0': 0.25, 'x': 24, 'z': 0, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.73, 'elapsed_seconds': 48, 'reference_seconds': 25.0, 'zero_day_offset': 0.0, 'relative_day': 0.48, 'inverse_tick': -2498812.5}), ({'d0': 50000, 'f0': 0, 'x': 24, 'z': 4, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.56, 'elapsed_seconds': 56, 'reference_seconds': 0, 'zero_day_offset': 0.08, 'relative_day': 0.56, 'inverse_tick': -2498804.0}), ({'d0': 50000, 'f0': 0.25, 'x': -6, 'z': -2, 'u': 2, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.09, 'elapsed_seconds': -16, 'reference_seconds': 25.0, 'zero_day_offset': -0.04, 'relative_day': -0.16, 'inverse_tick': -2500310.5}), ({'d0': 50000, 'f0': 0.25, 'x': 24, 'z': 4, 'u': 1, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50000.53, 'elapsed_seconds': 28, 'reference_seconds': 25.0, 'zero_day_offset': 0.04, 'relative_day': 0.28, 'inverse_tick': -4997629.0}), ({'d0': 50000, 'f0': 0.75, 'x': 24, 'z': 4, 'u': 4, 'S': 100, 'refpos': 'TOPOCENTER'}, {'absolute_day': 50001.87, 'elapsed_seconds': 112, 'reference_seconds': 75.0, 'zero_day_offset': 0.16, 'relative_day': 1.12, 'inverse_tick': -1249422.75})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'absolute_day': 50000.73, 'elapsed_seconds': 48, 'inverse_tick': -2499016.5, 'reference_seconds': 25.0, 'relative_day': 0.48, 'zero_day_offset': 0.08}{'absolute_day': 50000.73, 'elapsed_seconds': 48, 'inverse_tick': -2499016.5, 'reference_seconds': 25.0, 'relative_day': 0.48, 'zero_day_offset': 0.08}Passed
astronomical fixture 1{'absolute_day': 50000.65, 'elapsed_seconds': 40, 'inverse_tick': -2499012.5, 'reference_seconds': 25.0, 'relative_day': 0.4, 'zero_day_offset': 0.0}{'absolute_day': 50000.65, 'elapsed_seconds': 40, 'inverse_tick': -2499012.5, 'reference_seconds': 25.0, 'relative_day': 0.4, 'zero_day_offset': 0.0}Passed
astronomical fixture 2{'absolute_day': 50000.48, 'elapsed_seconds': 48, 'inverse_tick': -2499004.0, 'reference_seconds': 0, 'relative_day': 0.48, 'zero_day_offset': 0.08}{'absolute_day': 50000.48, 'elapsed_seconds': 48, 'inverse_tick': -2499004.0, 'reference_seconds': 0, 'relative_day': 0.48, 'zero_day_offset': 0.08}Passed
astronomical fixture 3{'absolute_day': 50000.01, 'elapsed_seconds': -24, 'inverse_tick': -2500510.5, 'reference_seconds': 25.0, 'relative_day': -0.24, 'zero_day_offset': -0.04}{'absolute_day': 50000.01, 'elapsed_seconds': -24, 'inverse_tick': -2500510.5, 'reference_seconds': 25.0, 'relative_day': -0.24, 'zero_day_offset': -0.04}Passed
astronomical fixture 4{'absolute_day': 50000.49, 'elapsed_seconds': 24, 'inverse_tick': -4998029.0, 'reference_seconds': 25.0, 'relative_day': 0.24, 'zero_day_offset': 0.04}{'absolute_day': 50000.49, 'elapsed_seconds': 24, 'inverse_tick': -4998029.0, 'reference_seconds': 25.0, 'relative_day': 0.24, 'zero_day_offset': 0.04}Passed
astronomical fixture 5{'absolute_day': 50001.71, 'elapsed_seconds': 96, 'inverse_tick': -1249522.75, 'reference_seconds': 75.0, 'relative_day': 0.96, 'zero_day_offset': 0.16}{'absolute_day': 50001.71, 'elapsed_seconds': 96, 'inverse_tick': -1249522.75, 'reference_seconds': 75.0, 'relative_day': 0.96, 'zero_day_offset': 0.16}Passed

SHA-256 / c734b278c13628011882d0ae3c3b7d2234e3f0479f35936bc2faab032bba1833

Verification & scope

Explicitly stipulated finite algebraic adapter; no standards conformance, physical accuracy, or production-library claim. Inputs are the documented finite valid model domain. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:46:02.613833+00:00.

Case digest / 36f54133b594a44a2dff9cf46886301cbbd2911349a5743871b0d8a8c4a668ed