FA-55346 / Astronomical coordinate conventions / Open access
Ephemeris relative state: Retarded barycentric target position is propagated with relative rather than target velocity · case 01
The adapter reports an incorrect retarded target position while other fields remain valid.
ROOT CAUSE
Retarded barycentric target position is propagated with relative rather than target velocity. Faulty expression: d['tx']+d['tv']*d['dt']
VERIFIED REPAIR
Preserve the declared model convention at this site: d['tx']-d['tv']*d['dt']
Unsuccessful approach: A partial convention repair still uses d['tx']-(d['tv']-d['cv'])*d['dt']
Case contract
A supplied ephemeris state for target T and center C is barycentric. Observer topocenter adds station displacement s and station velocity v to C. Output relative vectors use this explicit one-dimensional reduction; light-time iteration and relativity are outside scope. Output fields are defined by: geocentric_position = d['tx']-d['cx']; geocentric_velocity = d['tv']-d['cv']; observer_position = d['cx']+d['s']; observer_velocity = d['cv']+d['v']; topocentric_position = d['tx']-d['cx']-d['s']; retarded_target_position = d['tx']-d['tv']*d['dt']
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 {'geocentric_position': d['tx']-d['cx'], 'geocentric_velocity': d['tv']-d['cv'], 'observer_position': d['cx']+d['s'], 'observer_velocity': d['cv']+d['v'], 'topocentric_position': d['tx']-d['cx']-d['s'], 'retarded_target_position': d['tx']+d['tv']*d['dt']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'tx': 100, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 68, 'retarded_target_position': 52}), ({'tx': 100, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 70, 'retarded_target_position': 52}), ({'tx': 100, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 100, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 98, 'retarded_target_position': 52}), ({'tx': 30, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 0, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': -2, 'retarded_target_position': 18}), ({'tx': 100, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 74, 'retarded_target_position': 52}), ({'tx': 100, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 68, 'retarded_target_position': 100})], 2: [({'tx': 101, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 71, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 69, 'retarded_target_position': 53}), ({'tx': 101, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 71, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 71, 'retarded_target_position': 53}), ({'tx': 101, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 101, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 99, 'retarded_target_position': 53}), ({'tx': 31, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 1, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': -1, 'retarded_target_position': 19}), ({'tx': 101, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 71, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 75, 'retarded_target_position': 53}), ({'tx': 101, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 71, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 69, 'retarded_target_position': 101})], 3: [({'tx': 102, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 72, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 70, 'retarded_target_position': 54}), ({'tx': 102, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 72, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 72, 'retarded_target_position': 54}), ({'tx': 102, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 102, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 100, 'retarded_target_position': 54}), ({'tx': 32, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 2, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 0, 'retarded_target_position': 20}), ({'tx': 102, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 72, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 76, 'retarded_target_position': 54}), ({'tx': 102, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 72, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 70, 'retarded_target_position': 102})], 4: [({'tx': 103, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 73, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 71, 'retarded_target_position': 55}), ({'tx': 103, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 73, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 73, 'retarded_target_position': 55}), ({'tx': 103, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 103, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 101, 'retarded_target_position': 55}), ({'tx': 33, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 3, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 1, 'retarded_target_position': 21}), ({'tx': 103, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 73, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 77, 'retarded_target_position': 55}), ({'tx': 103, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 73, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 71, 'retarded_target_position': 103})], 5: [({'tx': 104, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 74, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 72, 'retarded_target_position': 56}), ({'tx': 104, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 74, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 74, 'retarded_target_position': 56}), ({'tx': 104, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 104, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 102, 'retarded_target_position': 56}), ({'tx': 34, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 4, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 2, 'retarded_target_position': 22}), ({'tx': 104, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 74, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 78, 'retarded_target_position': 56}), ({'tx': 104, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 74, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 72, 'retarded_target_position': 104})]}
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 | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 148, 'topocentric_position': 68} | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 52, 'topocentric_position': 68} | Failed |
| astronomical fixture 1 | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'retarded_target_position': 148, 'topocentric_position': 70} | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'retarded_target_position': 52, 'topocentric_position': 70} | Failed |
| astronomical fixture 2 | {'geocentric_position': 100, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'retarded_target_position': 148, 'topocentric_position': 98} | {'geocentric_position': 100, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'retarded_target_position': 52, 'topocentric_position': 98} | Failed |
| astronomical fixture 3 | {'geocentric_position': 0, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 42, 'topocentric_position': -2} | {'geocentric_position': 0, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 18, 'topocentric_position': -2} | Failed |
| astronomical fixture 4 | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'retarded_target_position': 148, 'topocentric_position': 74} | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'retarded_target_position': 52, 'topocentric_position': 74} | Failed |
| astronomical fixture 5 | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 100, 'topocentric_position': 68} | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 100, 'topocentric_position': 68} | Passed |
SHA-256 / 0e611d30fb4ba741f99f1edfdab2b5cbbf1eadd294e58d119e23882d3e1add04
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'geocentric_position': d['tx']-d['cx'], 'geocentric_velocity': d['tv']-d['cv'], 'observer_position': d['cx']+d['s'], 'observer_velocity': d['cv']+d['v'], 'topocentric_position': d['tx']-d['cx']-d['s'], 'retarded_target_position': d['tx']-(d['tv']-d['cv'])*d['dt']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'tx': 100, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 68, 'retarded_target_position': 52}), ({'tx': 100, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 70, 'retarded_target_position': 52}), ({'tx': 100, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 100, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 98, 'retarded_target_position': 52}), ({'tx': 30, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 0, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': -2, 'retarded_target_position': 18}), ({'tx': 100, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 74, 'retarded_target_position': 52}), ({'tx': 100, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 68, 'retarded_target_position': 100})], 2: [({'tx': 101, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 71, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 69, 'retarded_target_position': 53}), ({'tx': 101, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 71, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 71, 'retarded_target_position': 53}), ({'tx': 101, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 101, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 99, 'retarded_target_position': 53}), ({'tx': 31, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 1, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': -1, 'retarded_target_position': 19}), ({'tx': 101, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 71, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 75, 'retarded_target_position': 53}), ({'tx': 101, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 71, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 69, 'retarded_target_position': 101})], 3: [({'tx': 102, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 72, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 70, 'retarded_target_position': 54}), ({'tx': 102, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 72, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 72, 'retarded_target_position': 54}), ({'tx': 102, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 102, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 100, 'retarded_target_position': 54}), ({'tx': 32, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 2, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 0, 'retarded_target_position': 20}), ({'tx': 102, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 72, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 76, 'retarded_target_position': 54}), ({'tx': 102, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 72, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 70, 'retarded_target_position': 102})], 4: [({'tx': 103, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 73, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 71, 'retarded_target_position': 55}), ({'tx': 103, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 73, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 73, 'retarded_target_position': 55}), ({'tx': 103, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 103, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 101, 'retarded_target_position': 55}), ({'tx': 33, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 3, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 1, 'retarded_target_position': 21}), ({'tx': 103, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 73, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 77, 'retarded_target_position': 55}), ({'tx': 103, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 73, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 71, 'retarded_target_position': 103})], 5: [({'tx': 104, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 74, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 72, 'retarded_target_position': 56}), ({'tx': 104, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 74, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 74, 'retarded_target_position': 56}), ({'tx': 104, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 104, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 102, 'retarded_target_position': 56}), ({'tx': 34, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 4, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 2, 'retarded_target_position': 22}), ({'tx': 104, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 74, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 78, 'retarded_target_position': 56}), ({'tx': 104, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 74, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 72, 'retarded_target_position': 104})]}
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 | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 64, 'topocentric_position': 68} | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 52, 'topocentric_position': 68} | Failed |
| astronomical fixture 1 | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'retarded_target_position': 64, 'topocentric_position': 70} | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'retarded_target_position': 52, 'topocentric_position': 70} | Failed |
| astronomical fixture 2 | {'geocentric_position': 100, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'retarded_target_position': 52, 'topocentric_position': 98} | {'geocentric_position': 100, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'retarded_target_position': 52, 'topocentric_position': 98} | Passed |
| astronomical fixture 3 | {'geocentric_position': 0, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 30, 'topocentric_position': -2} | {'geocentric_position': 0, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 18, 'topocentric_position': -2} | Failed |
| astronomical fixture 4 | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'retarded_target_position': 64, 'topocentric_position': 74} | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'retarded_target_position': 52, 'topocentric_position': 74} | Failed |
| astronomical fixture 5 | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 100, 'topocentric_position': 68} | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 100, 'topocentric_position': 68} | Passed |
SHA-256 / 824f11b8f2f2128b566fed03d39d8e2b1d18c7e787c7d2bddad3a5f615ac00fc
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'geocentric_position': d['tx']-d['cx'], 'geocentric_velocity': d['tv']-d['cv'], 'observer_position': d['cx']+d['s'], 'observer_velocity': d['cv']+d['v'], 'topocentric_position': d['tx']-d['cx']-d['s'], 'retarded_target_position': d['tx']-d['tv']*d['dt']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'tx': 100, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 68, 'retarded_target_position': 52}), ({'tx': 100, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 70, 'retarded_target_position': 52}), ({'tx': 100, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 100, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 98, 'retarded_target_position': 52}), ({'tx': 30, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 0, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': -2, 'retarded_target_position': 18}), ({'tx': 100, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 74, 'retarded_target_position': 52}), ({'tx': 100, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 68, 'retarded_target_position': 100})], 2: [({'tx': 101, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 71, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 69, 'retarded_target_position': 53}), ({'tx': 101, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 71, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 71, 'retarded_target_position': 53}), ({'tx': 101, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 101, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 99, 'retarded_target_position': 53}), ({'tx': 31, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 1, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': -1, 'retarded_target_position': 19}), ({'tx': 101, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 71, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 75, 'retarded_target_position': 53}), ({'tx': 101, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 71, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 69, 'retarded_target_position': 101})], 3: [({'tx': 102, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 72, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 70, 'retarded_target_position': 54}), ({'tx': 102, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 72, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 72, 'retarded_target_position': 54}), ({'tx': 102, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 102, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 100, 'retarded_target_position': 54}), ({'tx': 32, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 2, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 0, 'retarded_target_position': 20}), ({'tx': 102, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 72, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 76, 'retarded_target_position': 54}), ({'tx': 102, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 72, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 70, 'retarded_target_position': 102})], 4: [({'tx': 103, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 73, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 71, 'retarded_target_position': 55}), ({'tx': 103, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 73, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 73, 'retarded_target_position': 55}), ({'tx': 103, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 103, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 101, 'retarded_target_position': 55}), ({'tx': 33, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 3, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 1, 'retarded_target_position': 21}), ({'tx': 103, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 73, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 77, 'retarded_target_position': 55}), ({'tx': 103, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 73, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 71, 'retarded_target_position': 103})], 5: [({'tx': 104, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 74, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 72, 'retarded_target_position': 56}), ({'tx': 104, 'tv': 12, 'cx': 30, 'cv': 3, 's': 0, 'v': 0, 'dt': 4}, {'geocentric_position': 74, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'topocentric_position': 74, 'retarded_target_position': 56}), ({'tx': 104, 'tv': 12, 'cx': 0, 'cv': 0, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 104, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'topocentric_position': 102, 'retarded_target_position': 56}), ({'tx': 34, 'tv': 3, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 4}, {'geocentric_position': 4, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 2, 'retarded_target_position': 22}), ({'tx': 104, 'tv': 12, 'cx': 30, 'cv': 3, 's': -4, 'v': -2, 'dt': 4}, {'geocentric_position': 74, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'topocentric_position': 78, 'retarded_target_position': 56}), ({'tx': 104, 'tv': 12, 'cx': 30, 'cv': 3, 's': 2, 'v': 1, 'dt': 0}, {'geocentric_position': 74, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'topocentric_position': 72, 'retarded_target_position': 104})]}
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 | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 52, 'topocentric_position': 68} | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 52, 'topocentric_position': 68} | Passed |
| astronomical fixture 1 | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'retarded_target_position': 52, 'topocentric_position': 70} | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 30, 'observer_velocity': 3, 'retarded_target_position': 52, 'topocentric_position': 70} | Passed |
| astronomical fixture 2 | {'geocentric_position': 100, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'retarded_target_position': 52, 'topocentric_position': 98} | {'geocentric_position': 100, 'geocentric_velocity': 12, 'observer_position': 2, 'observer_velocity': 1, 'retarded_target_position': 52, 'topocentric_position': 98} | Passed |
| astronomical fixture 3 | {'geocentric_position': 0, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 18, 'topocentric_position': -2} | {'geocentric_position': 0, 'geocentric_velocity': 0, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 18, 'topocentric_position': -2} | Passed |
| astronomical fixture 4 | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'retarded_target_position': 52, 'topocentric_position': 74} | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 26, 'observer_velocity': 1, 'retarded_target_position': 52, 'topocentric_position': 74} | Passed |
| astronomical fixture 5 | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 100, 'topocentric_position': 68} | {'geocentric_position': 70, 'geocentric_velocity': 9, 'observer_position': 32, 'observer_velocity': 4, 'retarded_target_position': 100, 'topocentric_position': 68} | Passed |
SHA-256 / cb63397cd0eae231c0b6019223cf7d2bf4d2aa96b8993ae8e86ac8b6a0cd6115
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:45:57.014398+00:00.
Case digest / 24f440704754ea07024429c728de9ea08046eae002373d4a9d40e5b6d4fe045d