broken_source:
"""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'], '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)

evaluation_group: astro-ephemeris-relative-state

source:
"""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)

prompt:
The adapter reports an incorrect observer velocity while other fields remain valid.

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']

split: open-access


broken_source:
"""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)

meaning: Fixture-count band, not measured model difficulty

deps: stdlib

evaluation_group: astro-ephemeris-relative-state

source:
"""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['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)

prompt:
The adapter reports an incorrect topocentric position while other fields remain valid.

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']

split: open-access


broken_source:
"""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)

evaluation_group: astro-ephemeris-relative-state

source:
"""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)

prompt:
The adapter reports an incorrect retarded target position while other fields remain valid.

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']

split: open-access


broken_source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'midpoint_position': (d['p0']+d['p1'])/2, 'midpoint_velocity': 1.5*(d['p1']-d['p0'])/d['h']-(d['v0']+d['v1'])/4, 'left_tangent': d['h']*d['v0'], 'right_tangent': d['h']*d['v1'], 'left_acceleration': 6*(d['p1']-d['p0'])/d['h']**2-(4*d['v0']+2*d['v1'])/d['h'], 'right_acceleration': -6*(d['p1']-d['p0'])/d['h']**2+(2*d['v0']+4*d['v1'])/d['h']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'p0': 4, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': 4.0, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 1.0, 'right_acceleration': 1.0}), ({'p0': 4, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': 6.0, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 6.0, 'right_acceleration': -6.0}), ({'p0': 4, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 11.5, 'midpoint_velocity': 22.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 76.0, 'right_acceleration': -68.0}), ({'p0': 20, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': -8.0, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.0, 'right_acceleration': 13.0}), ({'p0': 4, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 9.5, 'midpoint_velocity': 5.75, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 6.5, 'right_acceleration': -4.0}), ({'p0': 0, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': -1.0, 'midpoint_velocity': -2.0, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -10.0, 'right_acceleration': 14.0})], 2: [({'p0': 5, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': 3.625, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 0.625, 'right_acceleration': 1.375}), ({'p0': 5, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 12.5, 'midpoint_velocity': 5.625, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 5.625, 'right_acceleration': -5.625}), ({'p0': 5, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 12.0, 'midpoint_velocity': 20.5, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 70.0, 'right_acceleration': -62.0}), ({'p0': 21, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': -8.375, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.375, 'right_acceleration': 13.375}), ({'p0': 5, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': 5.375, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 6.125, 'right_acceleration': -3.625}), ({'p0': 1, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': -0.5, 'midpoint_velocity': -2.75, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -11.5, 'right_acceleration': 15.5})], 3: [({'p0': 6, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': 3.25, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 0.25, 'right_acceleration': 1.75}), ({'p0': 6, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 13.0, 'midpoint_velocity': 5.25, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 5.25, 'right_acceleration': -5.25}), ({'p0': 6, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 12.5, 'midpoint_velocity': 19.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 64.0, 'right_acceleration': -56.0}), ({'p0': 22, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': -8.75, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.75, 'right_acceleration': 13.75}), ({'p0': 6, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': 5.0, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.75, 'right_acceleration': -3.25}), ({'p0': 2, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 0.0, 'midpoint_velocity': -3.5, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -13.0, 'right_acceleration': 17.0})], 4: [({'p0': 7, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': 2.875, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -0.125, 'right_acceleration': 2.125}), ({'p0': 7, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 13.5, 'midpoint_velocity': 4.875, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 4.875, 'right_acceleration': -4.875}), ({'p0': 7, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 13.0, 'midpoint_velocity': 17.5, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 58.0, 'right_acceleration': -50.0}), ({'p0': 23, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': -9.125, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -12.125, 'right_acceleration': 14.125}), ({'p0': 7, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': 4.625, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.375, 'right_acceleration': -2.875}), ({'p0': 3, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 0.5, 'midpoint_velocity': -4.25, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -14.5, 'right_acceleration': 18.5})], 5: [({'p0': 8, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': 2.5, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -0.5, 'right_acceleration': 2.5}), ({'p0': 8, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 14.0, 'midpoint_velocity': 4.5, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 4.5, 'right_acceleration': -4.5}), ({'p0': 8, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 13.5, 'midpoint_velocity': 16.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 52.0, 'right_acceleration': -44.0}), ({'p0': 24, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': -9.5, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -12.5, 'right_acceleration': 14.5}), ({'p0': 8, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': 4.25, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.0, 'right_acceleration': -2.5}), ({'p0': 4, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 1.0, 'midpoint_velocity': -5.0, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -16.0, 'right_acceleration': 20.0})]}
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)

evaluation_group: astro-ephemeris-hermite-state

source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'midpoint_position': (d['p0']+d['p1'])/2+(d['v0']-d['v1'])/8, 'midpoint_velocity': 1.5*(d['p1']-d['p0'])/d['h']-(d['v0']+d['v1'])/4, 'left_tangent': d['h']*d['v0'], 'right_tangent': d['h']*d['v1'], 'left_acceleration': 6*(d['p1']-d['p0'])/d['h']**2-(4*d['v0']+2*d['v1'])/d['h'], 'right_acceleration': -6*(d['p1']-d['p0'])/d['h']**2+(2*d['v0']+4*d['v1'])/d['h']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'p0': 4, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': 4.0, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 1.0, 'right_acceleration': 1.0}), ({'p0': 4, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': 6.0, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 6.0, 'right_acceleration': -6.0}), ({'p0': 4, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 11.5, 'midpoint_velocity': 22.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 76.0, 'right_acceleration': -68.0}), ({'p0': 20, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': -8.0, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.0, 'right_acceleration': 13.0}), ({'p0': 4, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 9.5, 'midpoint_velocity': 5.75, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 6.5, 'right_acceleration': -4.0}), ({'p0': 0, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': -1.0, 'midpoint_velocity': -2.0, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -10.0, 'right_acceleration': 14.0})], 2: [({'p0': 5, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': 3.625, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 0.625, 'right_acceleration': 1.375}), ({'p0': 5, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 12.5, 'midpoint_velocity': 5.625, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 5.625, 'right_acceleration': -5.625}), ({'p0': 5, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 12.0, 'midpoint_velocity': 20.5, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 70.0, 'right_acceleration': -62.0}), ({'p0': 21, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': -8.375, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.375, 'right_acceleration': 13.375}), ({'p0': 5, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': 5.375, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 6.125, 'right_acceleration': -3.625}), ({'p0': 1, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': -0.5, 'midpoint_velocity': -2.75, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -11.5, 'right_acceleration': 15.5})], 3: [({'p0': 6, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': 3.25, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 0.25, 'right_acceleration': 1.75}), ({'p0': 6, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 13.0, 'midpoint_velocity': 5.25, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 5.25, 'right_acceleration': -5.25}), ({'p0': 6, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 12.5, 'midpoint_velocity': 19.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 64.0, 'right_acceleration': -56.0}), ({'p0': 22, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': -8.75, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.75, 'right_acceleration': 13.75}), ({'p0': 6, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': 5.0, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.75, 'right_acceleration': -3.25}), ({'p0': 2, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 0.0, 'midpoint_velocity': -3.5, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -13.0, 'right_acceleration': 17.0})], 4: [({'p0': 7, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': 2.875, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -0.125, 'right_acceleration': 2.125}), ({'p0': 7, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 13.5, 'midpoint_velocity': 4.875, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 4.875, 'right_acceleration': -4.875}), ({'p0': 7, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 13.0, 'midpoint_velocity': 17.5, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 58.0, 'right_acceleration': -50.0}), ({'p0': 23, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': -9.125, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -12.125, 'right_acceleration': 14.125}), ({'p0': 7, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': 4.625, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.375, 'right_acceleration': -2.875}), ({'p0': 3, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 0.5, 'midpoint_velocity': -4.25, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -14.5, 'right_acceleration': 18.5})], 5: [({'p0': 8, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': 2.5, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -0.5, 'right_acceleration': 2.5}), ({'p0': 8, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 14.0, 'midpoint_velocity': 4.5, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 4.5, 'right_acceleration': -4.5}), ({'p0': 8, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 13.5, 'midpoint_velocity': 16.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 52.0, 'right_acceleration': -44.0}), ({'p0': 24, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': -9.5, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -12.5, 'right_acceleration': 14.5}), ({'p0': 8, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': 4.25, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.0, 'right_acceleration': -2.5}), ({'p0': 4, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 1.0, 'midpoint_velocity': -5.0, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -16.0, 'right_acceleration': 20.0})]}
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)

prompt:
The adapter reports an incorrect midpoint position while other fields remain valid.

A bounded one-axis ephemeris interval provides endpoint positions p0,p1 and velocities v0,v1 across duration h. At midpoint, cubic Hermite value and derivative use time-scaled tangents. Also expose normalized endpoint tangents and acceleration endpoints as diagnostics. h is positive. Output fields are defined by: midpoint_position = (d['p0']+d['p1'])/2+d['h']*(d['v0']-d['v1'])/8; midpoint_velocity = 1.5*(d['p1']-d['p0'])/d['h']-(d['v0']+d['v1'])/4; left_tangent = d['h']*d['v0']; right_tangent = d['h']*d['v1']; left_acceleration = 6*(d['p1']-d['p0'])/d['h']**2-(4*d['v0']+2*d['v1'])/d['h']; right_acceleration = -6*(d['p1']-d['p0'])/d['h']**2+(2*d['v0']+4*d['v1'])/d['h']

split: open-access


broken_source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'midpoint_position': (d['p0']+d['p1'])/2+d['h']*(d['v0']-d['v1'])/8, 'midpoint_velocity': 1.5*(d['p1']-d['p0'])-(d['v0']+d['v1'])/4, 'left_tangent': d['h']*d['v0'], 'right_tangent': d['h']*d['v1'], 'left_acceleration': 6*(d['p1']-d['p0'])/d['h']**2-(4*d['v0']+2*d['v1'])/d['h'], 'right_acceleration': -6*(d['p1']-d['p0'])/d['h']**2+(2*d['v0']+4*d['v1'])/d['h']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'p0': 4, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': 4.0, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 1.0, 'right_acceleration': 1.0}), ({'p0': 4, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': 6.0, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 6.0, 'right_acceleration': -6.0}), ({'p0': 4, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 11.5, 'midpoint_velocity': 22.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 76.0, 'right_acceleration': -68.0}), ({'p0': 20, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': -8.0, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.0, 'right_acceleration': 13.0}), ({'p0': 4, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 9.5, 'midpoint_velocity': 5.75, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 6.5, 'right_acceleration': -4.0}), ({'p0': 0, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': -1.0, 'midpoint_velocity': -2.0, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -10.0, 'right_acceleration': 14.0})], 2: [({'p0': 5, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': 3.625, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 0.625, 'right_acceleration': 1.375}), ({'p0': 5, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 12.5, 'midpoint_velocity': 5.625, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 5.625, 'right_acceleration': -5.625}), ({'p0': 5, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 12.0, 'midpoint_velocity': 20.5, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 70.0, 'right_acceleration': -62.0}), ({'p0': 21, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': -8.375, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.375, 'right_acceleration': 13.375}), ({'p0': 5, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': 5.375, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 6.125, 'right_acceleration': -3.625}), ({'p0': 1, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': -0.5, 'midpoint_velocity': -2.75, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -11.5, 'right_acceleration': 15.5})], 3: [({'p0': 6, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': 3.25, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 0.25, 'right_acceleration': 1.75}), ({'p0': 6, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 13.0, 'midpoint_velocity': 5.25, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 5.25, 'right_acceleration': -5.25}), ({'p0': 6, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 12.5, 'midpoint_velocity': 19.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 64.0, 'right_acceleration': -56.0}), ({'p0': 22, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': -8.75, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.75, 'right_acceleration': 13.75}), ({'p0': 6, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': 5.0, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.75, 'right_acceleration': -3.25}), ({'p0': 2, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 0.0, 'midpoint_velocity': -3.5, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -13.0, 'right_acceleration': 17.0})], 4: [({'p0': 7, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': 2.875, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -0.125, 'right_acceleration': 2.125}), ({'p0': 7, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 13.5, 'midpoint_velocity': 4.875, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 4.875, 'right_acceleration': -4.875}), ({'p0': 7, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 13.0, 'midpoint_velocity': 17.5, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 58.0, 'right_acceleration': -50.0}), ({'p0': 23, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': -9.125, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -12.125, 'right_acceleration': 14.125}), ({'p0': 7, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': 4.625, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.375, 'right_acceleration': -2.875}), ({'p0': 3, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 0.5, 'midpoint_velocity': -4.25, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -14.5, 'right_acceleration': 18.5})], 5: [({'p0': 8, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': 2.5, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -0.5, 'right_acceleration': 2.5}), ({'p0': 8, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 14.0, 'midpoint_velocity': 4.5, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 4.5, 'right_acceleration': -4.5}), ({'p0': 8, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 13.5, 'midpoint_velocity': 16.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 52.0, 'right_acceleration': -44.0}), ({'p0': 24, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': -9.5, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -12.5, 'right_acceleration': 14.5}), ({'p0': 8, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': 4.25, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.0, 'right_acceleration': -2.5}), ({'p0': 4, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 1.0, 'midpoint_velocity': -5.0, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -16.0, 'right_acceleration': 20.0})]}
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)

evaluation_group: astro-ephemeris-hermite-state

source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'midpoint_position': (d['p0']+d['p1'])/2+d['h']*(d['v0']-d['v1'])/8, 'midpoint_velocity': (d['p1']-d['p0'])/d['h'], 'left_tangent': d['h']*d['v0'], 'right_tangent': d['h']*d['v1'], 'left_acceleration': 6*(d['p1']-d['p0'])/d['h']**2-(4*d['v0']+2*d['v1'])/d['h'], 'right_acceleration': -6*(d['p1']-d['p0'])/d['h']**2+(2*d['v0']+4*d['v1'])/d['h']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'p0': 4, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': 4.0, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 1.0, 'right_acceleration': 1.0}), ({'p0': 4, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': 6.0, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 6.0, 'right_acceleration': -6.0}), ({'p0': 4, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 11.5, 'midpoint_velocity': 22.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 76.0, 'right_acceleration': -68.0}), ({'p0': 20, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': -8.0, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.0, 'right_acceleration': 13.0}), ({'p0': 4, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 9.5, 'midpoint_velocity': 5.75, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 6.5, 'right_acceleration': -4.0}), ({'p0': 0, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': -1.0, 'midpoint_velocity': -2.0, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -10.0, 'right_acceleration': 14.0})], 2: [({'p0': 5, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': 3.625, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 0.625, 'right_acceleration': 1.375}), ({'p0': 5, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 12.5, 'midpoint_velocity': 5.625, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 5.625, 'right_acceleration': -5.625}), ({'p0': 5, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 12.0, 'midpoint_velocity': 20.5, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 70.0, 'right_acceleration': -62.0}), ({'p0': 21, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': -8.375, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.375, 'right_acceleration': 13.375}), ({'p0': 5, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': 5.375, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 6.125, 'right_acceleration': -3.625}), ({'p0': 1, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': -0.5, 'midpoint_velocity': -2.75, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -11.5, 'right_acceleration': 15.5})], 3: [({'p0': 6, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': 3.25, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 0.25, 'right_acceleration': 1.75}), ({'p0': 6, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 13.0, 'midpoint_velocity': 5.25, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 5.25, 'right_acceleration': -5.25}), ({'p0': 6, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 12.5, 'midpoint_velocity': 19.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 64.0, 'right_acceleration': -56.0}), ({'p0': 22, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': -8.75, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.75, 'right_acceleration': 13.75}), ({'p0': 6, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': 5.0, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.75, 'right_acceleration': -3.25}), ({'p0': 2, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 0.0, 'midpoint_velocity': -3.5, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -13.0, 'right_acceleration': 17.0})], 4: [({'p0': 7, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': 2.875, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -0.125, 'right_acceleration': 2.125}), ({'p0': 7, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 13.5, 'midpoint_velocity': 4.875, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 4.875, 'right_acceleration': -4.875}), ({'p0': 7, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 13.0, 'midpoint_velocity': 17.5, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 58.0, 'right_acceleration': -50.0}), ({'p0': 23, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': -9.125, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -12.125, 'right_acceleration': 14.125}), ({'p0': 7, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': 4.625, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.375, 'right_acceleration': -2.875}), ({'p0': 3, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 0.5, 'midpoint_velocity': -4.25, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -14.5, 'right_acceleration': 18.5})], 5: [({'p0': 8, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': 2.5, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -0.5, 'right_acceleration': 2.5}), ({'p0': 8, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 14.0, 'midpoint_velocity': 4.5, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 4.5, 'right_acceleration': -4.5}), ({'p0': 8, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 13.5, 'midpoint_velocity': 16.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 52.0, 'right_acceleration': -44.0}), ({'p0': 24, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': -9.5, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -12.5, 'right_acceleration': 14.5}), ({'p0': 8, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': 4.25, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.0, 'right_acceleration': -2.5}), ({'p0': 4, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 1.0, 'midpoint_velocity': -5.0, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -16.0, 'right_acceleration': 20.0})]}
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)

prompt:
The adapter reports an incorrect midpoint velocity while other fields remain valid.

A bounded one-axis ephemeris interval provides endpoint positions p0,p1 and velocities v0,v1 across duration h. At midpoint, cubic Hermite value and derivative use time-scaled tangents. Also expose normalized endpoint tangents and acceleration endpoints as diagnostics. h is positive. Output fields are defined by: midpoint_position = (d['p0']+d['p1'])/2+d['h']*(d['v0']-d['v1'])/8; midpoint_velocity = 1.5*(d['p1']-d['p0'])/d['h']-(d['v0']+d['v1'])/4; left_tangent = d['h']*d['v0']; right_tangent = d['h']*d['v1']; left_acceleration = 6*(d['p1']-d['p0'])/d['h']**2-(4*d['v0']+2*d['v1'])/d['h']; right_acceleration = -6*(d['p1']-d['p0'])/d['h']**2+(2*d['v0']+4*d['v1'])/d['h']

split: open-access


broken_source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'midpoint_position': (d['p0']+d['p1'])/2+d['h']*(d['v0']-d['v1'])/8, 'midpoint_velocity': 1.5*(d['p1']-d['p0'])/d['h']-(d['v0']+d['v1'])/4, 'left_tangent': d['v0'], 'right_tangent': d['h']*d['v1'], 'left_acceleration': 6*(d['p1']-d['p0'])/d['h']**2-(4*d['v0']+2*d['v1'])/d['h'], 'right_acceleration': -6*(d['p1']-d['p0'])/d['h']**2+(2*d['v0']+4*d['v1'])/d['h']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'p0': 4, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': 4.0, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 1.0, 'right_acceleration': 1.0}), ({'p0': 4, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': 6.0, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 6.0, 'right_acceleration': -6.0}), ({'p0': 4, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 11.5, 'midpoint_velocity': 22.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 76.0, 'right_acceleration': -68.0}), ({'p0': 20, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': -8.0, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.0, 'right_acceleration': 13.0}), ({'p0': 4, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 9.5, 'midpoint_velocity': 5.75, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 6.5, 'right_acceleration': -4.0}), ({'p0': 0, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': -1.0, 'midpoint_velocity': -2.0, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -10.0, 'right_acceleration': 14.0})], 2: [({'p0': 5, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': 3.625, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 0.625, 'right_acceleration': 1.375}), ({'p0': 5, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 12.5, 'midpoint_velocity': 5.625, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 5.625, 'right_acceleration': -5.625}), ({'p0': 5, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 12.0, 'midpoint_velocity': 20.5, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 70.0, 'right_acceleration': -62.0}), ({'p0': 21, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': -8.375, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.375, 'right_acceleration': 13.375}), ({'p0': 5, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': 5.375, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 6.125, 'right_acceleration': -3.625}), ({'p0': 1, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': -0.5, 'midpoint_velocity': -2.75, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -11.5, 'right_acceleration': 15.5})], 3: [({'p0': 6, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': 3.25, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 0.25, 'right_acceleration': 1.75}), ({'p0': 6, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 13.0, 'midpoint_velocity': 5.25, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 5.25, 'right_acceleration': -5.25}), ({'p0': 6, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 12.5, 'midpoint_velocity': 19.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 64.0, 'right_acceleration': -56.0}), ({'p0': 22, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': -8.75, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.75, 'right_acceleration': 13.75}), ({'p0': 6, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': 5.0, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.75, 'right_acceleration': -3.25}), ({'p0': 2, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 0.0, 'midpoint_velocity': -3.5, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -13.0, 'right_acceleration': 17.0})], 4: [({'p0': 7, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': 2.875, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -0.125, 'right_acceleration': 2.125}), ({'p0': 7, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 13.5, 'midpoint_velocity': 4.875, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 4.875, 'right_acceleration': -4.875}), ({'p0': 7, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 13.0, 'midpoint_velocity': 17.5, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 58.0, 'right_acceleration': -50.0}), ({'p0': 23, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': -9.125, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -12.125, 'right_acceleration': 14.125}), ({'p0': 7, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': 4.625, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.375, 'right_acceleration': -2.875}), ({'p0': 3, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 0.5, 'midpoint_velocity': -4.25, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -14.5, 'right_acceleration': 18.5})], 5: [({'p0': 8, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': 2.5, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -0.5, 'right_acceleration': 2.5}), ({'p0': 8, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 14.0, 'midpoint_velocity': 4.5, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 4.5, 'right_acceleration': -4.5}), ({'p0': 8, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 13.5, 'midpoint_velocity': 16.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 52.0, 'right_acceleration': -44.0}), ({'p0': 24, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': -9.5, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -12.5, 'right_acceleration': 14.5}), ({'p0': 8, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': 4.25, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.0, 'right_acceleration': -2.5}), ({'p0': 4, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 1.0, 'midpoint_velocity': -5.0, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -16.0, 'right_acceleration': 20.0})]}
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)

evaluation_group: astro-ephemeris-hermite-state

source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'midpoint_position': (d['p0']+d['p1'])/2+d['h']*(d['v0']-d['v1'])/8, 'midpoint_velocity': 1.5*(d['p1']-d['p0'])/d['h']-(d['v0']+d['v1'])/4, 'left_tangent': d['v0']/d['h'], 'right_tangent': d['h']*d['v1'], 'left_acceleration': 6*(d['p1']-d['p0'])/d['h']**2-(4*d['v0']+2*d['v1'])/d['h'], 'right_acceleration': -6*(d['p1']-d['p0'])/d['h']**2+(2*d['v0']+4*d['v1'])/d['h']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'p0': 4, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': 4.0, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 1.0, 'right_acceleration': 1.0}), ({'p0': 4, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': 6.0, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 6.0, 'right_acceleration': -6.0}), ({'p0': 4, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 11.5, 'midpoint_velocity': 22.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 76.0, 'right_acceleration': -68.0}), ({'p0': 20, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': -8.0, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.0, 'right_acceleration': 13.0}), ({'p0': 4, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 9.5, 'midpoint_velocity': 5.75, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 6.5, 'right_acceleration': -4.0}), ({'p0': 0, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': -1.0, 'midpoint_velocity': -2.0, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -10.0, 'right_acceleration': 14.0})], 2: [({'p0': 5, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': 3.625, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 0.625, 'right_acceleration': 1.375}), ({'p0': 5, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 12.5, 'midpoint_velocity': 5.625, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 5.625, 'right_acceleration': -5.625}), ({'p0': 5, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 12.0, 'midpoint_velocity': 20.5, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 70.0, 'right_acceleration': -62.0}), ({'p0': 21, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': -8.375, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.375, 'right_acceleration': 13.375}), ({'p0': 5, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 10.0, 'midpoint_velocity': 5.375, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 6.125, 'right_acceleration': -3.625}), ({'p0': 1, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': -0.5, 'midpoint_velocity': -2.75, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -11.5, 'right_acceleration': 15.5})], 3: [({'p0': 6, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': 3.25, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': 0.25, 'right_acceleration': 1.75}), ({'p0': 6, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 13.0, 'midpoint_velocity': 5.25, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 5.25, 'right_acceleration': -5.25}), ({'p0': 6, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 12.5, 'midpoint_velocity': 19.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 64.0, 'right_acceleration': -56.0}), ({'p0': 22, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': -8.75, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -11.75, 'right_acceleration': 13.75}), ({'p0': 6, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 10.5, 'midpoint_velocity': 5.0, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.75, 'right_acceleration': -3.25}), ({'p0': 2, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 0.0, 'midpoint_velocity': -3.5, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -13.0, 'right_acceleration': 17.0})], 4: [({'p0': 7, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': 2.875, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -0.125, 'right_acceleration': 2.125}), ({'p0': 7, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 13.5, 'midpoint_velocity': 4.875, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 4.875, 'right_acceleration': -4.875}), ({'p0': 7, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 13.0, 'midpoint_velocity': 17.5, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 58.0, 'right_acceleration': -50.0}), ({'p0': 23, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': -9.125, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -12.125, 'right_acceleration': 14.125}), ({'p0': 7, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 11.0, 'midpoint_velocity': 4.625, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.375, 'right_acceleration': -2.875}), ({'p0': 3, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 0.5, 'midpoint_velocity': -4.25, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -14.5, 'right_acceleration': 18.5})], 5: [({'p0': 8, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': 2.5, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -0.5, 'right_acceleration': 2.5}), ({'p0': 8, 'p1': 20, 'v0': 0, 'v1': 0, 'h': 4}, {'midpoint_position': 14.0, 'midpoint_velocity': 4.5, 'left_tangent': 0, 'right_tangent': 0, 'left_acceleration': 4.5, 'right_acceleration': -4.5}), ({'p0': 8, 'p1': 20, 'v0': 2, 'v1': 6, 'h': 1}, {'midpoint_position': 13.5, 'midpoint_velocity': 16.0, 'left_tangent': 2, 'right_tangent': 6, 'left_acceleration': 52.0, 'right_acceleration': -44.0}), ({'p0': 24, 'p1': 4, 'v0': 2, 'v1': 6, 'h': 4}, {'midpoint_position': 12.0, 'midpoint_velocity': -9.5, 'left_tangent': 8, 'right_tangent': 24, 'left_acceleration': -12.5, 'right_acceleration': 14.5}), ({'p0': 8, 'p1': 20, 'v0': -2, 'v1': 3, 'h': 4}, {'midpoint_position': 11.5, 'midpoint_velocity': 4.25, 'left_tangent': -8, 'right_tangent': 12, 'left_acceleration': 5.0, 'right_acceleration': -2.5}), ({'p0': 4, 'p1': 0, 'v0': 2, 'v1': 6, 'h': 2}, {'midpoint_position': 1.0, 'midpoint_velocity': -5.0, 'left_tangent': 4, 'right_tangent': 12, 'left_acceleration': -16.0, 'right_acceleration': 20.0})]}
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)

prompt:
The adapter reports an incorrect left tangent while other fields remain valid.

A bounded one-axis ephemeris interval provides endpoint positions p0,p1 and velocities v0,v1 across duration h. At midpoint, cubic Hermite value and derivative use time-scaled tangents. Also expose normalized endpoint tangents and acceleration endpoints as diagnostics. h is positive. Output fields are defined by: midpoint_position = (d['p0']+d['p1'])/2+d['h']*(d['v0']-d['v1'])/8; midpoint_velocity = 1.5*(d['p1']-d['p0'])/d['h']-(d['v0']+d['v1'])/4; left_tangent = d['h']*d['v0']; right_tangent = d['h']*d['v1']; left_acceleration = 6*(d['p1']-d['p0'])/d['h']**2-(4*d['v0']+2*d['v1'])/d['h']; right_acceleration = -6*(d['p1']-d['p0'])/d['h']**2+(2*d['v0']+4*d['v1'])/d['h']

split: open-access