FA-56006 / Astronomical coordinate conventions / Open access
Barycentric arrival corrections: Observer-position timing Jacobian is replaced by the total geometric delay · case 01
The adapter reports an incorrect geometric rate while other fields remain valid.
ROOT CAUSE
Observer-position timing Jacobian is replaced by the total geometric delay. Faulty expression: d['r']*d['n']/d['c']
VERIFIED REPAIR
Preserve the declared model convention at this site: d['n']/d['c']
Unsuccessful approach: A partial convention repair still uses d['n']*d['c']
Case contract
A supplied timing adapter has observer position r projected onto source direction n, speed c>0, Einstein delay E, Shapiro delay S, and geocenter projection g. Barycentric arrival is t+r*n/c+E+S. This model composes explicit corrections only and does not calculate ephemerides or relativistic delays. Output fields are defined by: roemer_delay = d['r']*d['n']/d['c']; arrival = d['t']+d['r']*d['n']/d['c']+d['E']+d['S']; topocentric_residual = (d['r']-d['g'])*d['n']/d['c']; geocentric_arrival = d['t']+d['g']*d['n']/d['c']+d['E']+d['S']; observer_arrival = d['t']-d['r']*d['n']/d['c']-d['E']-d['S']; geometric_rate = d['n']/d['c']
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 {'roemer_delay': d['r']*d['n']/d['c'], 'arrival': d['t']+d['r']*d['n']/d['c']+d['E']+d['S'], 'topocentric_residual': (d['r']-d['g'])*d['n']/d['c'], 'geocentric_arrival': d['t']+d['g']*d['n']/d['c']+d['E']+d['S'], 'observer_arrival': d['t']-d['r']*d['n']/d['c']-d['E']-d['S'], 'geometric_rate': d['r']*d['n']/d['c']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 104.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 104.0, 'observer_arrival': 96.0, 'geometric_rate': 0.0}), ({'t': 100, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 104.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 101.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 104.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 99.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 100.5, 'observer_arrival': 101.0, 'geometric_rate': -0.25})], 2: [({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 105.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 105.0, 'observer_arrival': 97.0, 'geometric_rate': 0.0}), ({'t': 101, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 105.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 102.0, 'observer_arrival': 97.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 105.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 100.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 101.5, 'observer_arrival': 102.0, 'geometric_rate': -0.25})], 3: [({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 106.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 106.0, 'observer_arrival': 98.0, 'geometric_rate': 0.0}), ({'t': 102, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 104.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 106.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 103.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 106.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 101.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 102.5, 'observer_arrival': 103.0, 'geometric_rate': -0.25})], 4: [({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 107.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 107.0, 'observer_arrival': 99.0, 'geometric_rate': 0.0}), ({'t': 103, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 105.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 101.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 107.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 104.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 107.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 103.5, 'observer_arrival': 104.0, 'geometric_rate': -0.25})], 5: [({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 108.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 108.0, 'observer_arrival': 100.0, 'geometric_rate': 0.0}), ({'t': 104, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 106.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 102.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 108.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 104.5, 'observer_arrival': 105.0, 'geometric_rate': -0.25})]}
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 | {'arrival': 108.0, 'geocentric_arrival': 105.0, 'geometric_rate': 4.0, 'observer_arrival': 92.0, 'roemer_delay': 4.0, 'topocentric_residual': 3.0} | {'arrival': 108.0, 'geocentric_arrival': 105.0, 'geometric_rate': 0.5, 'observer_arrival': 92.0, 'roemer_delay': 4.0, 'topocentric_residual': 3.0} | Failed |
| astronomical fixture 1 | {'arrival': 104.0, 'geocentric_arrival': 104.0, 'geometric_rate': 0.0, 'observer_arrival': 96.0, 'roemer_delay': 0.0, 'topocentric_residual': 0.0} | {'arrival': 104.0, 'geocentric_arrival': 104.0, 'geometric_rate': 0.0, 'observer_arrival': 96.0, 'roemer_delay': 0.0, 'topocentric_residual': 0.0} | Passed |
| astronomical fixture 2 | {'arrival': 102.0, 'geocentric_arrival': 105.0, 'geometric_rate': -2.0, 'observer_arrival': 98.0, 'roemer_delay': -2.0, 'topocentric_residual': -3.0} | {'arrival': 102.0, 'geocentric_arrival': 105.0, 'geometric_rate': 0.5, 'observer_arrival': 98.0, 'roemer_delay': -2.0, 'topocentric_residual': -3.0} | Failed |
| astronomical fixture 3 | {'arrival': 104.0, 'geocentric_arrival': 101.0, 'geometric_rate': 4.0, 'observer_arrival': 96.0, 'roemer_delay': 4.0, 'topocentric_residual': 3.0} | {'arrival': 104.0, 'geocentric_arrival': 101.0, 'geometric_rate': 0.5, 'observer_arrival': 96.0, 'roemer_delay': 4.0, 'topocentric_residual': 3.0} | Failed |
| astronomical fixture 4 | {'arrival': 108.0, 'geocentric_arrival': 104.0, 'geometric_rate': 4.0, 'observer_arrival': 92.0, 'roemer_delay': 4.0, 'topocentric_residual': 4.0} | {'arrival': 108.0, 'geocentric_arrival': 104.0, 'geometric_rate': 0.5, 'observer_arrival': 92.0, 'roemer_delay': 4.0, 'topocentric_residual': 4.0} | Failed |
| astronomical fixture 5 | {'arrival': 99.0, 'geocentric_arrival': 100.5, 'geometric_rate': -2.0, 'observer_arrival': 101.0, 'roemer_delay': -2.0, 'topocentric_residual': -1.5} | {'arrival': 99.0, 'geocentric_arrival': 100.5, 'geometric_rate': -0.25, 'observer_arrival': 101.0, 'roemer_delay': -2.0, 'topocentric_residual': -1.5} | Failed |
SHA-256 / 38db41cc582d071ef56378a5a4f54a3fe938258df0b2eaac63f5a9e53bc1aabc
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'roemer_delay': d['r']*d['n']/d['c'], 'arrival': d['t']+d['r']*d['n']/d['c']+d['E']+d['S'], 'topocentric_residual': (d['r']-d['g'])*d['n']/d['c'], 'geocentric_arrival': d['t']+d['g']*d['n']/d['c']+d['E']+d['S'], 'observer_arrival': d['t']-d['r']*d['n']/d['c']-d['E']-d['S'], 'geometric_rate': d['n']*d['c']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 104.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 104.0, 'observer_arrival': 96.0, 'geometric_rate': 0.0}), ({'t': 100, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 104.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 101.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 104.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 99.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 100.5, 'observer_arrival': 101.0, 'geometric_rate': -0.25})], 2: [({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 105.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 105.0, 'observer_arrival': 97.0, 'geometric_rate': 0.0}), ({'t': 101, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 105.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 102.0, 'observer_arrival': 97.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 105.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 100.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 101.5, 'observer_arrival': 102.0, 'geometric_rate': -0.25})], 3: [({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 106.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 106.0, 'observer_arrival': 98.0, 'geometric_rate': 0.0}), ({'t': 102, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 104.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 106.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 103.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 106.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 101.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 102.5, 'observer_arrival': 103.0, 'geometric_rate': -0.25})], 4: [({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 107.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 107.0, 'observer_arrival': 99.0, 'geometric_rate': 0.0}), ({'t': 103, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 105.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 101.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 107.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 104.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 107.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 103.5, 'observer_arrival': 104.0, 'geometric_rate': -0.25})], 5: [({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 108.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 108.0, 'observer_arrival': 100.0, 'geometric_rate': 0.0}), ({'t': 104, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 106.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 102.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 108.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 104.5, 'observer_arrival': 105.0, 'geometric_rate': -0.25})]}
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 | {'arrival': 108.0, 'geocentric_arrival': 105.0, 'geometric_rate': 8, 'observer_arrival': 92.0, 'roemer_delay': 4.0, 'topocentric_residual': 3.0} | {'arrival': 108.0, 'geocentric_arrival': 105.0, 'geometric_rate': 0.5, 'observer_arrival': 92.0, 'roemer_delay': 4.0, 'topocentric_residual': 3.0} | Failed |
| astronomical fixture 1 | {'arrival': 104.0, 'geocentric_arrival': 104.0, 'geometric_rate': 0, 'observer_arrival': 96.0, 'roemer_delay': 0.0, 'topocentric_residual': 0.0} | {'arrival': 104.0, 'geocentric_arrival': 104.0, 'geometric_rate': 0.0, 'observer_arrival': 96.0, 'roemer_delay': 0.0, 'topocentric_residual': 0.0} | Passed |
| astronomical fixture 2 | {'arrival': 102.0, 'geocentric_arrival': 105.0, 'geometric_rate': 8, 'observer_arrival': 98.0, 'roemer_delay': -2.0, 'topocentric_residual': -3.0} | {'arrival': 102.0, 'geocentric_arrival': 105.0, 'geometric_rate': 0.5, 'observer_arrival': 98.0, 'roemer_delay': -2.0, 'topocentric_residual': -3.0} | Failed |
| astronomical fixture 3 | {'arrival': 104.0, 'geocentric_arrival': 101.0, 'geometric_rate': 8, 'observer_arrival': 96.0, 'roemer_delay': 4.0, 'topocentric_residual': 3.0} | {'arrival': 104.0, 'geocentric_arrival': 101.0, 'geometric_rate': 0.5, 'observer_arrival': 96.0, 'roemer_delay': 4.0, 'topocentric_residual': 3.0} | Failed |
| astronomical fixture 4 | {'arrival': 108.0, 'geocentric_arrival': 104.0, 'geometric_rate': 8, 'observer_arrival': 92.0, 'roemer_delay': 4.0, 'topocentric_residual': 4.0} | {'arrival': 108.0, 'geocentric_arrival': 104.0, 'geometric_rate': 0.5, 'observer_arrival': 92.0, 'roemer_delay': 4.0, 'topocentric_residual': 4.0} | Failed |
| astronomical fixture 5 | {'arrival': 99.0, 'geocentric_arrival': 100.5, 'geometric_rate': -4, 'observer_arrival': 101.0, 'roemer_delay': -2.0, 'topocentric_residual': -1.5} | {'arrival': 99.0, 'geocentric_arrival': 100.5, 'geometric_rate': -0.25, 'observer_arrival': 101.0, 'roemer_delay': -2.0, 'topocentric_residual': -1.5} | Failed |
SHA-256 / cc1e4f629e16058ad4e2812c79255bed3f3e39ed7b3b4fc04e2a4c728639dad6
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'roemer_delay': d['r']*d['n']/d['c'], 'arrival': d['t']+d['r']*d['n']/d['c']+d['E']+d['S'], 'topocentric_residual': (d['r']-d['g'])*d['n']/d['c'], 'geocentric_arrival': d['t']+d['g']*d['n']/d['c']+d['E']+d['S'], 'observer_arrival': d['t']-d['r']*d['n']/d['c']-d['E']-d['S'], 'geometric_rate': d['n']/d['c']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 104.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 104.0, 'observer_arrival': 96.0, 'geometric_rate': 0.0}), ({'t': 100, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 104.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 101.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 104.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 99.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 100.5, 'observer_arrival': 101.0, 'geometric_rate': -0.25})], 2: [({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 105.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 105.0, 'observer_arrival': 97.0, 'geometric_rate': 0.0}), ({'t': 101, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 105.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 102.0, 'observer_arrival': 97.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 105.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 100.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 101.5, 'observer_arrival': 102.0, 'geometric_rate': -0.25})], 3: [({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 106.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 106.0, 'observer_arrival': 98.0, 'geometric_rate': 0.0}), ({'t': 102, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 104.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 106.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 103.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 106.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 101.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 102.5, 'observer_arrival': 103.0, 'geometric_rate': -0.25})], 4: [({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 107.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 107.0, 'observer_arrival': 99.0, 'geometric_rate': 0.0}), ({'t': 103, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 105.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 101.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 107.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 104.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 107.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 103.5, 'observer_arrival': 104.0, 'geometric_rate': -0.25})], 5: [({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 108.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 108.0, 'observer_arrival': 100.0, 'geometric_rate': 0.0}), ({'t': 104, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 106.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 102.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 108.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 104.5, 'observer_arrival': 105.0, 'geometric_rate': -0.25})]}
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 | {'arrival': 108.0, 'geocentric_arrival': 105.0, 'geometric_rate': 0.5, 'observer_arrival': 92.0, 'roemer_delay': 4.0, 'topocentric_residual': 3.0} | {'arrival': 108.0, 'geocentric_arrival': 105.0, 'geometric_rate': 0.5, 'observer_arrival': 92.0, 'roemer_delay': 4.0, 'topocentric_residual': 3.0} | Passed |
| astronomical fixture 1 | {'arrival': 104.0, 'geocentric_arrival': 104.0, 'geometric_rate': 0.0, 'observer_arrival': 96.0, 'roemer_delay': 0.0, 'topocentric_residual': 0.0} | {'arrival': 104.0, 'geocentric_arrival': 104.0, 'geometric_rate': 0.0, 'observer_arrival': 96.0, 'roemer_delay': 0.0, 'topocentric_residual': 0.0} | Passed |
| astronomical fixture 2 | {'arrival': 102.0, 'geocentric_arrival': 105.0, 'geometric_rate': 0.5, 'observer_arrival': 98.0, 'roemer_delay': -2.0, 'topocentric_residual': -3.0} | {'arrival': 102.0, 'geocentric_arrival': 105.0, 'geometric_rate': 0.5, 'observer_arrival': 98.0, 'roemer_delay': -2.0, 'topocentric_residual': -3.0} | Passed |
| astronomical fixture 3 | {'arrival': 104.0, 'geocentric_arrival': 101.0, 'geometric_rate': 0.5, 'observer_arrival': 96.0, 'roemer_delay': 4.0, 'topocentric_residual': 3.0} | {'arrival': 104.0, 'geocentric_arrival': 101.0, 'geometric_rate': 0.5, 'observer_arrival': 96.0, 'roemer_delay': 4.0, 'topocentric_residual': 3.0} | Passed |
| astronomical fixture 4 | {'arrival': 108.0, 'geocentric_arrival': 104.0, 'geometric_rate': 0.5, 'observer_arrival': 92.0, 'roemer_delay': 4.0, 'topocentric_residual': 4.0} | {'arrival': 108.0, 'geocentric_arrival': 104.0, 'geometric_rate': 0.5, 'observer_arrival': 92.0, 'roemer_delay': 4.0, 'topocentric_residual': 4.0} | Passed |
| astronomical fixture 5 | {'arrival': 99.0, 'geocentric_arrival': 100.5, 'geometric_rate': -0.25, 'observer_arrival': 101.0, 'roemer_delay': -2.0, 'topocentric_residual': -1.5} | {'arrival': 99.0, 'geocentric_arrival': 100.5, 'geometric_rate': -0.25, 'observer_arrival': 101.0, 'roemer_delay': -2.0, 'topocentric_residual': -1.5} | Passed |
SHA-256 / 3cde7a29cc29a9f3fed7ffc3ff964599f6c72778c1ae2a23675ae71f2add134f
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:03.074236+00:00.
Case digest / 52c7525f26f020f4739b047f03e8b7690d63cf4bf0bc7d4a95ca298dd9c5f18e