FA-55956 / Astronomical coordinate conventions / Open access
Fits split time reference: FITS TIMEZERO is added after rather than before time-unit conversion · case 01
The adapter reports an incorrect elapsed seconds while other fields remain valid.
ROOT CAUSE
FITS TIMEZERO is added after rather than before time-unit conversion. Faulty expression: d['x']*d['u']+d['z']
VERIFIED REPAIR
Preserve the declared model convention at this site: (d['x']+d['z'])*d['u']
Unsuccessful approach: A partial convention repair still uses d['x']+d['z']
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['f0']+(d['x']+d['z'])*d['u']/d['S'], 'elapsed_seconds': d['x']*d['u']+d['z'], '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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| astronomical fixture 0 | {'absolute_day': 50000.73, 'elapsed_seconds': 44, '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.48, 'elapsed_seconds': 44, '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.01, 'elapsed_seconds': -22, '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.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': 84, '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 / 5ef6d4b7566b1508d270708dcb6ae572b2907fc42e067bad61b5c4ebbbd14bca
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['z'])*d['u']/d['S'], 'elapsed_seconds': d['x']+d['z'], '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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| astronomical fixture 0 | {'absolute_day': 50000.73, 'elapsed_seconds': 24, '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': 20, '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': 24, '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.01, 'elapsed_seconds': -12, '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.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': 24, '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 / b5ac9b124fe774733f7fbe4155ff36ceef850cd825ec1ac093d0758cbc419f74
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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.657022+00:00.
Case digest / 40e7ece9a8cc7918e91d7e2b46fa26003d7b88dd0b306786770ac65bde41fbb6