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

N = 1
observations = []
def solve(d):
    return {'roemer_delay': d['r']*d['n']/d['c'], 'arrival': d['t']+d['r']*d['n']/d['c']+d['E']+d['S'], 'topocentric_residual': d['r']*d['n']/d['c'], 'geocentric_arrival': d['t']+d['g']*d['n']/d['c']+d['E']+d['S'], 'observer_arrival': d['t']-d['r']*d['n']/d['c']-d['E']-d['S'], 'geometric_rate': d['n']/d['c']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 104.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 104.0, 'observer_arrival': 96.0, 'geometric_rate': 0.0}), ({'t': 100, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 104.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 101.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 104.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 99.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 100.5, 'observer_arrival': 101.0, 'geometric_rate': -0.25})], 2: [({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 105.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 105.0, 'observer_arrival': 97.0, 'geometric_rate': 0.0}), ({'t': 101, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 105.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 102.0, 'observer_arrival': 97.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 105.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 100.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 101.5, 'observer_arrival': 102.0, 'geometric_rate': -0.25})], 3: [({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 106.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 106.0, 'observer_arrival': 98.0, 'geometric_rate': 0.0}), ({'t': 102, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 104.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 106.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 103.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 106.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 101.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 102.5, 'observer_arrival': 103.0, 'geometric_rate': -0.25})], 4: [({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 107.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 107.0, 'observer_arrival': 99.0, 'geometric_rate': 0.0}), ({'t': 103, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 105.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 101.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 107.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 104.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 107.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 103.5, 'observer_arrival': 104.0, 'geometric_rate': -0.25})], 5: [({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 108.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 108.0, 'observer_arrival': 100.0, 'geometric_rate': 0.0}), ({'t': 104, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 106.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 102.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 108.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 104.5, 'observer_arrival': 105.0, 'geometric_rate': -0.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)

evaluation_group: astro-barycentric-arrival-corrections

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

N = 1
observations = []
def solve(d):
    return {'roemer_delay': d['r']*d['n']/d['c'], 'arrival': d['t']+d['r']*d['n']/d['c']+d['E']+d['S'], 'topocentric_residual': (d['r']+d['g'])*d['n']/d['c'], 'geocentric_arrival': d['t']+d['g']*d['n']/d['c']+d['E']+d['S'], 'observer_arrival': d['t']-d['r']*d['n']/d['c']-d['E']-d['S'], 'geometric_rate': d['n']/d['c']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 104.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 104.0, 'observer_arrival': 96.0, 'geometric_rate': 0.0}), ({'t': 100, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 104.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 101.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 104.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 99.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 100.5, 'observer_arrival': 101.0, 'geometric_rate': -0.25})], 2: [({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 105.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 105.0, 'observer_arrival': 97.0, 'geometric_rate': 0.0}), ({'t': 101, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 105.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 102.0, 'observer_arrival': 97.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 105.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 100.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 101.5, 'observer_arrival': 102.0, 'geometric_rate': -0.25})], 3: [({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 106.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 106.0, 'observer_arrival': 98.0, 'geometric_rate': 0.0}), ({'t': 102, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 104.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 106.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 103.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 106.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 101.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 102.5, 'observer_arrival': 103.0, 'geometric_rate': -0.25})], 4: [({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 107.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 107.0, 'observer_arrival': 99.0, 'geometric_rate': 0.0}), ({'t': 103, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 105.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 101.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 107.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 104.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 107.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 103.5, 'observer_arrival': 104.0, 'geometric_rate': -0.25})], 5: [({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 108.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 108.0, 'observer_arrival': 100.0, 'geometric_rate': 0.0}), ({'t': 104, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 106.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 102.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 108.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 104.5, 'observer_arrival': 105.0, 'geometric_rate': -0.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)

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

A supplied timing adapter has observer position r projected onto source direction n, speed c>0, Einstein delay E, Shapiro delay S, and geocenter projection g. Barycentric arrival is t+r*n/c+E+S. This model composes explicit corrections only and does not calculate ephemerides or relativistic delays. Output fields are defined by: roemer_delay = d['r']*d['n']/d['c']; arrival = d['t']+d['r']*d['n']/d['c']+d['E']+d['S']; topocentric_residual = (d['r']-d['g'])*d['n']/d['c']; geocentric_arrival = d['t']+d['g']*d['n']/d['c']+d['E']+d['S']; observer_arrival = d['t']-d['r']*d['n']/d['c']-d['E']-d['S']; geometric_rate = d['n']/d['c']

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'roemer_delay': d['r']*d['n']/d['c'], 'arrival': d['t']+d['r']*d['n']/d['c']+d['E']+d['S'], 'topocentric_residual': (d['r']-d['g'])*d['n']/d['c'], 'geocentric_arrival': d['t']+d['r']*d['n']/d['c']+d['E']+d['S'], 'observer_arrival': d['t']-d['r']*d['n']/d['c']-d['E']-d['S'], 'geometric_rate': d['n']/d['c']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 104.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 104.0, 'observer_arrival': 96.0, 'geometric_rate': 0.0}), ({'t': 100, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 104.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 101.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 104.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 99.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 100.5, 'observer_arrival': 101.0, 'geometric_rate': -0.25})], 2: [({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 105.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 105.0, 'observer_arrival': 97.0, 'geometric_rate': 0.0}), ({'t': 101, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 105.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 102.0, 'observer_arrival': 97.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 105.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 100.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 101.5, 'observer_arrival': 102.0, 'geometric_rate': -0.25})], 3: [({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 106.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 106.0, 'observer_arrival': 98.0, 'geometric_rate': 0.0}), ({'t': 102, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 104.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 106.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 103.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 106.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 101.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 102.5, 'observer_arrival': 103.0, 'geometric_rate': -0.25})], 4: [({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 107.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 107.0, 'observer_arrival': 99.0, 'geometric_rate': 0.0}), ({'t': 103, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 105.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 101.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 107.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 104.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 107.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 103.5, 'observer_arrival': 104.0, 'geometric_rate': -0.25})], 5: [({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 108.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 108.0, 'observer_arrival': 100.0, 'geometric_rate': 0.0}), ({'t': 104, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 106.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 102.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 108.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 104.5, 'observer_arrival': 105.0, 'geometric_rate': -0.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)

meaning: Fixture-count band, not measured model difficulty

deps: stdlib

evaluation_group: astro-barycentric-arrival-corrections

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

N = 1
observations = []
def solve(d):
    return {'roemer_delay': d['r']*d['n']/d['c'], 'arrival': d['t']+d['r']*d['n']/d['c']+d['E']+d['S'], 'topocentric_residual': (d['r']-d['g'])*d['n']/d['c'], 'geocentric_arrival': d['t']+d['g']*d['n']/d['c'], 'observer_arrival': d['t']-d['r']*d['n']/d['c']-d['E']-d['S'], 'geometric_rate': d['n']/d['c']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 104.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 104.0, 'observer_arrival': 96.0, 'geometric_rate': 0.0}), ({'t': 100, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 104.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 101.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 104.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 99.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 100.5, 'observer_arrival': 101.0, 'geometric_rate': -0.25})], 2: [({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 105.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 105.0, 'observer_arrival': 97.0, 'geometric_rate': 0.0}), ({'t': 101, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 105.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 102.0, 'observer_arrival': 97.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 105.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 100.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 101.5, 'observer_arrival': 102.0, 'geometric_rate': -0.25})], 3: [({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 106.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 106.0, 'observer_arrival': 98.0, 'geometric_rate': 0.0}), ({'t': 102, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 104.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 106.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 103.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 106.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 101.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 102.5, 'observer_arrival': 103.0, 'geometric_rate': -0.25})], 4: [({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 107.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 107.0, 'observer_arrival': 99.0, 'geometric_rate': 0.0}), ({'t': 103, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 105.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 101.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 107.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 104.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 107.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 103.5, 'observer_arrival': 104.0, 'geometric_rate': -0.25})], 5: [({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 108.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 108.0, 'observer_arrival': 100.0, 'geometric_rate': 0.0}), ({'t': 104, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 106.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 102.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 108.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 104.5, 'observer_arrival': 105.0, 'geometric_rate': -0.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)

prompt:
The adapter reports an incorrect geocentric arrival while other fields remain valid.

A supplied timing adapter has observer position r projected onto source direction n, speed c>0, Einstein delay E, Shapiro delay S, and geocenter projection g. Barycentric arrival is t+r*n/c+E+S. This model composes explicit corrections only and does not calculate ephemerides or relativistic delays. Output fields are defined by: roemer_delay = d['r']*d['n']/d['c']; arrival = d['t']+d['r']*d['n']/d['c']+d['E']+d['S']; topocentric_residual = (d['r']-d['g'])*d['n']/d['c']; geocentric_arrival = d['t']+d['g']*d['n']/d['c']+d['E']+d['S']; observer_arrival = d['t']-d['r']*d['n']/d['c']-d['E']-d['S']; geometric_rate = d['n']/d['c']

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'roemer_delay': d['r']*d['n']/d['c'], 'arrival': d['t']+d['r']*d['n']/d['c']+d['E']+d['S'], 'topocentric_residual': (d['r']-d['g'])*d['n']/d['c'], 'geocentric_arrival': d['t']+d['g']*d['n']/d['c']+d['E']+d['S'], 'observer_arrival': d['t']-d['r']*d['n']/d['c'], 'geometric_rate': d['n']/d['c']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 104.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 104.0, 'observer_arrival': 96.0, 'geometric_rate': 0.0}), ({'t': 100, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 104.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 101.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 104.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 99.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 100.5, 'observer_arrival': 101.0, 'geometric_rate': -0.25})], 2: [({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 105.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 105.0, 'observer_arrival': 97.0, 'geometric_rate': 0.0}), ({'t': 101, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 105.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 102.0, 'observer_arrival': 97.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 105.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 100.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 101.5, 'observer_arrival': 102.0, 'geometric_rate': -0.25})], 3: [({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 106.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 106.0, 'observer_arrival': 98.0, 'geometric_rate': 0.0}), ({'t': 102, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 104.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 106.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 103.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 106.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 101.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 102.5, 'observer_arrival': 103.0, 'geometric_rate': -0.25})], 4: [({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 107.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 107.0, 'observer_arrival': 99.0, 'geometric_rate': 0.0}), ({'t': 103, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 105.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 101.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 107.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 104.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 107.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 103.5, 'observer_arrival': 104.0, 'geometric_rate': -0.25})], 5: [({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 108.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 108.0, 'observer_arrival': 100.0, 'geometric_rate': 0.0}), ({'t': 104, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 106.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 102.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 108.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 104.5, 'observer_arrival': 105.0, 'geometric_rate': -0.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)

evaluation_group: astro-barycentric-arrival-corrections

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

N = 1
observations = []
def solve(d):
    return {'roemer_delay': d['r']*d['n']/d['c'], 'arrival': d['t']+d['r']*d['n']/d['c']+d['E']+d['S'], 'topocentric_residual': (d['r']-d['g'])*d['n']/d['c'], 'geocentric_arrival': d['t']+d['g']*d['n']/d['c']+d['E']+d['S'], 'observer_arrival': d['t']+d['r']*d['n']/d['c']-d['E']-d['S'], 'geometric_rate': d['n']/d['c']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 104.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 104.0, 'observer_arrival': 96.0, 'geometric_rate': 0.0}), ({'t': 100, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 104.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 101.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 104.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 99.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 100.5, 'observer_arrival': 101.0, 'geometric_rate': -0.25})], 2: [({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 105.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 105.0, 'observer_arrival': 97.0, 'geometric_rate': 0.0}), ({'t': 101, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 105.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 102.0, 'observer_arrival': 97.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 105.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 100.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 101.5, 'observer_arrival': 102.0, 'geometric_rate': -0.25})], 3: [({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 106.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 106.0, 'observer_arrival': 98.0, 'geometric_rate': 0.0}), ({'t': 102, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 104.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 106.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 103.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 106.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 101.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 102.5, 'observer_arrival': 103.0, 'geometric_rate': -0.25})], 4: [({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 107.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 107.0, 'observer_arrival': 99.0, 'geometric_rate': 0.0}), ({'t': 103, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 105.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 101.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 107.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 104.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 107.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 103.5, 'observer_arrival': 104.0, 'geometric_rate': -0.25})], 5: [({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 108.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 108.0, 'observer_arrival': 100.0, 'geometric_rate': 0.0}), ({'t': 104, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 106.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 102.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 108.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 104.5, 'observer_arrival': 105.0, 'geometric_rate': -0.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)

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

A supplied timing adapter has observer position r projected onto source direction n, speed c>0, Einstein delay E, Shapiro delay S, and geocenter projection g. Barycentric arrival is t+r*n/c+E+S. This model composes explicit corrections only and does not calculate ephemerides or relativistic delays. Output fields are defined by: roemer_delay = d['r']*d['n']/d['c']; arrival = d['t']+d['r']*d['n']/d['c']+d['E']+d['S']; topocentric_residual = (d['r']-d['g'])*d['n']/d['c']; geocentric_arrival = d['t']+d['g']*d['n']/d['c']+d['E']+d['S']; observer_arrival = d['t']-d['r']*d['n']/d['c']-d['E']-d['S']; geometric_rate = d['n']/d['c']

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'roemer_delay': d['r']*d['n']/d['c'], 'arrival': d['t']+d['r']*d['n']/d['c']+d['E']+d['S'], 'topocentric_residual': (d['r']-d['g'])*d['n']/d['c'], 'geocentric_arrival': d['t']+d['g']*d['n']/d['c']+d['E']+d['S'], 'observer_arrival': d['t']-d['r']*d['n']/d['c']-d['E']-d['S'], 'geometric_rate': d['r']*d['n']/d['c']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 104.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 104.0, 'observer_arrival': 96.0, 'geometric_rate': 0.0}), ({'t': 100, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 104.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 101.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 104.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 99.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 100.5, 'observer_arrival': 101.0, 'geometric_rate': -0.25})], 2: [({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 105.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 105.0, 'observer_arrival': 97.0, 'geometric_rate': 0.0}), ({'t': 101, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 105.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 102.0, 'observer_arrival': 97.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 105.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 100.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 101.5, 'observer_arrival': 102.0, 'geometric_rate': -0.25})], 3: [({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 106.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 106.0, 'observer_arrival': 98.0, 'geometric_rate': 0.0}), ({'t': 102, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 104.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 106.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 103.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 106.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 101.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 102.5, 'observer_arrival': 103.0, 'geometric_rate': -0.25})], 4: [({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 107.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 107.0, 'observer_arrival': 99.0, 'geometric_rate': 0.0}), ({'t': 103, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 105.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 101.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 107.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 104.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 107.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 103.5, 'observer_arrival': 104.0, 'geometric_rate': -0.25})], 5: [({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 108.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 108.0, 'observer_arrival': 100.0, 'geometric_rate': 0.0}), ({'t': 104, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 106.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 102.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 108.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 104.5, 'observer_arrival': 105.0, 'geometric_rate': -0.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)

evaluation_group: astro-barycentric-arrival-corrections

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

N = 1
observations = []
def solve(d):
    return {'roemer_delay': d['r']*d['n']/d['c'], 'arrival': d['t']+d['r']*d['n']/d['c']+d['E']+d['S'], 'topocentric_residual': (d['r']-d['g'])*d['n']/d['c'], 'geocentric_arrival': d['t']+d['g']*d['n']/d['c']+d['E']+d['S'], 'observer_arrival': d['t']-d['r']*d['n']/d['c']-d['E']-d['S'], 'geometric_rate': d['n']*d['c']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 104.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 104.0, 'observer_arrival': 96.0, 'geometric_rate': 0.0}), ({'t': 100, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 104.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 101.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 104.0, 'observer_arrival': 92.0, 'geometric_rate': 0.5}), ({'t': 100, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 99.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 100.5, 'observer_arrival': 101.0, 'geometric_rate': -0.25})], 2: [({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 105.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 105.0, 'observer_arrival': 97.0, 'geometric_rate': 0.0}), ({'t': 101, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 106.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 105.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 102.0, 'observer_arrival': 97.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 109.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 105.0, 'observer_arrival': 93.0, 'geometric_rate': 0.5}), ({'t': 101, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 100.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 101.5, 'observer_arrival': 102.0, 'geometric_rate': -0.25})], 3: [({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 106.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 106.0, 'observer_arrival': 98.0, 'geometric_rate': 0.0}), ({'t': 102, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 104.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 107.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 106.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 103.0, 'observer_arrival': 98.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 110.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 106.0, 'observer_arrival': 94.0, 'geometric_rate': 0.5}), ({'t': 102, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 101.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 102.5, 'observer_arrival': 103.0, 'geometric_rate': -0.25})], 4: [({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 107.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 107.0, 'observer_arrival': 99.0, 'geometric_rate': 0.0}), ({'t': 103, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 105.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 108.0, 'observer_arrival': 101.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 107.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 104.0, 'observer_arrival': 99.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 111.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 107.0, 'observer_arrival': 95.0, 'geometric_rate': 0.5}), ({'t': 103, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 102.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 103.5, 'observer_arrival': 104.0, 'geometric_rate': -0.25})], 5: [({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 0, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': 0.0, 'arrival': 108.0, 'topocentric_residual': 0.0, 'geocentric_arrival': 108.0, 'observer_arrival': 100.0, 'geometric_rate': 0.0}), ({'t': 104, 'r': -4, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 106.0, 'topocentric_residual': -3.0, 'geocentric_arrival': 109.0, 'observer_arrival': 102.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 0, 'S': 0, 'g': 2}, {'roemer_delay': 4.0, 'arrival': 108.0, 'topocentric_residual': 3.0, 'geocentric_arrival': 105.0, 'observer_arrival': 100.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': 2, 'c': 4, 'E': 3, 'S': 1, 'g': 0}, {'roemer_delay': 4.0, 'arrival': 112.0, 'topocentric_residual': 4.0, 'geocentric_arrival': 108.0, 'observer_arrival': 96.0, 'geometric_rate': 0.5}), ({'t': 104, 'r': 8, 'n': -1, 'c': 4, 'E': 3, 'S': -2, 'g': 2}, {'roemer_delay': -2.0, 'arrival': 103.0, 'topocentric_residual': -1.5, 'geocentric_arrival': 104.5, 'observer_arrival': 105.0, 'geometric_rate': -0.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)

prompt:
The adapter reports an incorrect geometric rate while other fields remain valid.

A supplied timing adapter has observer position r projected onto source direction n, speed c>0, Einstein delay E, Shapiro delay S, and geocenter projection g. Barycentric arrival is t+r*n/c+E+S. This model composes explicit corrections only and does not calculate ephemerides or relativistic delays. Output fields are defined by: roemer_delay = d['r']*d['n']/d['c']; arrival = d['t']+d['r']*d['n']/d['c']+d['E']+d['S']; topocentric_residual = (d['r']-d['g'])*d['n']/d['c']; geocentric_arrival = d['t']+d['g']*d['n']/d['c']+d['E']+d['S']; observer_arrival = d['t']-d['r']*d['n']/d['c']-d['E']-d['S']; geometric_rate = d['n']/d['c']

split: open-access


evaluation_group: astro-pulsar-phase-polynomial

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

A reduced pulsar timing model supplies elapsed barycentric time t, spin frequency f, first derivative fd, second derivative fdd, and phase zero p. Phase cycles are p+f*t+fd*t**2/2+fdd*t**3/6. Pulse numbering floors total phase, including negative epochs. Output fields are defined by: phase = d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6; frequency = d['f']+d['fd']*d['t']+d['fdd']*d['t']**2/2; frequency_derivative = d['fd']+d['fdd']*d['t']; pulse_number = int((d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)//1); folded_phase = (d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)%1; phase_residual = d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6

split: open-access


evaluation_group: astro-pulsar-phase-polynomial

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

A reduced pulsar timing model supplies elapsed barycentric time t, spin frequency f, first derivative fd, second derivative fdd, and phase zero p. Phase cycles are p+f*t+fd*t**2/2+fdd*t**3/6. Pulse numbering floors total phase, including negative epochs. Output fields are defined by: phase = d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6; frequency = d['f']+d['fd']*d['t']+d['fdd']*d['t']**2/2; frequency_derivative = d['fd']+d['fdd']*d['t']; pulse_number = int((d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)//1); folded_phase = (d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)%1; phase_residual = d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6

split: open-access


evaluation_group: astro-pulsar-phase-polynomial

prompt:
The adapter reports an incorrect frequency derivative while other fields remain valid.

A reduced pulsar timing model supplies elapsed barycentric time t, spin frequency f, first derivative fd, second derivative fdd, and phase zero p. Phase cycles are p+f*t+fd*t**2/2+fdd*t**3/6. Pulse numbering floors total phase, including negative epochs. Output fields are defined by: phase = d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6; frequency = d['f']+d['fd']*d['t']+d['fdd']*d['t']**2/2; frequency_derivative = d['fd']+d['fdd']*d['t']; pulse_number = int((d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)//1); folded_phase = (d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)%1; phase_residual = d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6

split: open-access


evaluation_group: astro-pulsar-phase-polynomial

prompt:
The adapter reports an incorrect pulse number while other fields remain valid.

A reduced pulsar timing model supplies elapsed barycentric time t, spin frequency f, first derivative fd, second derivative fdd, and phase zero p. Phase cycles are p+f*t+fd*t**2/2+fdd*t**3/6. Pulse numbering floors total phase, including negative epochs. Output fields are defined by: phase = d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6; frequency = d['f']+d['fd']*d['t']+d['fdd']*d['t']**2/2; frequency_derivative = d['fd']+d['fdd']*d['t']; pulse_number = int((d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)//1); folded_phase = (d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)%1; phase_residual = d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6

split: open-access


evaluation_group: astro-pulsar-phase-polynomial

prompt:
The adapter reports an incorrect folded phase while other fields remain valid.

A reduced pulsar timing model supplies elapsed barycentric time t, spin frequency f, first derivative fd, second derivative fdd, and phase zero p. Phase cycles are p+f*t+fd*t**2/2+fdd*t**3/6. Pulse numbering floors total phase, including negative epochs. Output fields are defined by: phase = d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6; frequency = d['f']+d['fd']*d['t']+d['fdd']*d['t']**2/2; frequency_derivative = d['fd']+d['fdd']*d['t']; pulse_number = int((d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)//1); folded_phase = (d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)%1; phase_residual = d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'phase': d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6, 'frequency': d['f']+d['fd']*d['t']+d['fdd']*d['t']**2/2, 'frequency_derivative': d['fd']+d['fdd']*d['t'], 'pulse_number': int((d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)//1), 'folded_phase': (d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)%1, 'phase_residual': d['p']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 3, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 19.75, 'frequency': 12.5, 'frequency_derivative': 5, 'pulse_number': 19, 'folded_phase': 0.75, 'phase_residual': 13.5}), ({'t': 0, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 2, 'pulse_number': 0, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': -9, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -58.25, 'frequency': 24.5, 'frequency_derivative': -7, 'pulse_number': -59, 'folded_phase': 0.75, 'phase_residual': -40.5}), ({'t': 3, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 6.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 6, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 3, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 15.0, 'frequency': 8.0, 'frequency_derivative': 2, 'pulse_number': 15, 'folded_phase': 0.0, 'phase_residual': 9.0}), ({'t': 3, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -2.25, 'frequency': -4.0, 'frequency_derivative': -2, 'pulse_number': -3, 'folded_phase': 0.75, 'phase_residual': -9.0})], 2: [({'t': 4, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 34.916666666666664, 'frequency': 18.0, 'frequency_derivative': 6, 'pulse_number': 34, 'folded_phase': 0.9166666666666643, 'phase_residual': 26.666666666666664}), ({'t': 1, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 3.4166666666666665, 'frequency': 4.5, 'frequency_derivative': 3, 'pulse_number': 3, 'folded_phase': 0.4166666666666665, 'phase_residual': 1.1666666666666667}), ({'t': -8, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -37.08333333333333, 'frequency': 18.0, 'frequency_derivative': -6, 'pulse_number': -38, 'folded_phase': 0.9166666666666714, 'phase_residual': -21.33333333333333}), ({'t': 4, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 8.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 8, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 4, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 24.0, 'frequency': 10.0, 'frequency_derivative': 2, 'pulse_number': 24, 'folded_phase': 0.0, 'phase_residual': 16.0}), ({'t': 4, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -7.25, 'frequency': -6.0, 'frequency_derivative': -2, 'pulse_number': -8, 'folded_phase': 0.75, 'phase_residual': -16.0})], 3: [({'t': 5, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 56.08333333333333, 'frequency': 24.5, 'frequency_derivative': 7, 'pulse_number': 56, 'folded_phase': 0.0833333333333286, 'phase_residual': 45.83333333333333}), ({'t': 2, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 9.583333333333334, 'frequency': 8.0, 'frequency_derivative': 4, 'pulse_number': 9, 'folded_phase': 0.5833333333333339, 'phase_residual': 5.333333333333333}), ({'t': -7, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -21.916666666666664, 'frequency': 12.5, 'frequency_derivative': -5, 'pulse_number': -22, 'folded_phase': 0.0833333333333357, 'phase_residual': -8.166666666666664}), ({'t': 5, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 10.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 10, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 5, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 35.0, 'frequency': 12.0, 'frequency_derivative': 2, 'pulse_number': 35, 'folded_phase': 0.0, 'phase_residual': 25.0}), ({'t': 5, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -14.25, 'frequency': -8.0, 'frequency_derivative': -2, 'pulse_number': -15, 'folded_phase': 0.75, 'phase_residual': -25.0})], 4: [({'t': 6, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 84.25, 'frequency': 32.0, 'frequency_derivative': 8, 'pulse_number': 84, 'folded_phase': 0.25, 'phase_residual': 72.0}), ({'t': 3, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 19.75, 'frequency': 12.5, 'frequency_derivative': 5, 'pulse_number': 19, 'folded_phase': 0.75, 'phase_residual': 13.5}), ({'t': -6, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -11.75, 'frequency': 8.0, 'frequency_derivative': -4, 'pulse_number': -12, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 6, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 12.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 12, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 6, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 48.0, 'frequency': 14.0, 'frequency_derivative': 2, 'pulse_number': 48, 'folded_phase': 0.0, 'phase_residual': 36.0}), ({'t': 6, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -23.25, 'frequency': -10.0, 'frequency_derivative': -2, 'pulse_number': -24, 'folded_phase': 0.75, 'phase_residual': -36.0})], 5: [({'t': 7, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 120.41666666666666, 'frequency': 40.5, 'frequency_derivative': 9, 'pulse_number': 120, 'folded_phase': 0.4166666666666572, 'phase_residual': 106.16666666666666}), ({'t': 4, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 34.916666666666664, 'frequency': 18.0, 'frequency_derivative': 6, 'pulse_number': 34, 'folded_phase': 0.9166666666666643, 'phase_residual': 26.666666666666664}), ({'t': -5, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -5.583333333333332, 'frequency': 4.5, 'frequency_derivative': -3, 'pulse_number': -6, 'folded_phase': 0.41666666666666785, 'phase_residual': 4.166666666666668}), ({'t': 7, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 14.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 14, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 7, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 63.0, 'frequency': 16.0, 'frequency_derivative': 2, 'pulse_number': 63, 'folded_phase': 0.0, 'phase_residual': 49.0}), ({'t': 7, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -34.25, 'frequency': -12.0, 'frequency_derivative': -2, 'pulse_number': -35, 'folded_phase': 0.75, 'phase_residual': -49.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-pulsar-phase-polynomial

prompt:
The adapter reports an incorrect phase residual while other fields remain valid.

A reduced pulsar timing model supplies elapsed barycentric time t, spin frequency f, first derivative fd, second derivative fdd, and phase zero p. Phase cycles are p+f*t+fd*t**2/2+fdd*t**3/6. Pulse numbering floors total phase, including negative epochs. Output fields are defined by: phase = d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6; frequency = d['f']+d['fd']*d['t']+d['fdd']*d['t']**2/2; frequency_derivative = d['fd']+d['fdd']*d['t']; pulse_number = int((d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)//1); folded_phase = (d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)%1; phase_residual = d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'infinite_delay': d['K']*d['D']/d['f'], 'reference_delay': d['K']*d['D']*(1/d['f']**2-1/d['r']**2), 'dedispersed_time': d['t']-d['K']*d['D']*(1/d['f']**2-1/d['r']**2), 'frequency_slope': -2*d['K']*d['D']/d['f']**3, 'channel_smearing': abs(2*d['K']*d['D']*d['w']/d['f']**3), 'infinite_time': d['t']-d['K']*d['D']/d['f']**2}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'K': 4, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 3.0, 'reference_delay': 2.25, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'channel_smearing': 3.0, 'infinite_time': 97.0}), ({'t': 100, 'K': 4, 'D': 3, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 0.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'channel_smearing': 0.375, 'infinite_time': 99.25}), ({'t': 100, 'K': 4, 'D': 0, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 0.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': 0.0, 'channel_smearing': 0.0, 'infinite_time': 100.0}), ({'t': 100, 'K': 4, 'D': 3, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.1875, 'reference_delay': -2.8125, 'dedispersed_time': 102.8125, 'frequency_slope': -0.046875, 'channel_smearing': 0.046875, 'infinite_time': 99.8125}), ({'t': 100, 'K': 1, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 0.75, 'reference_delay': 0.5625, 'dedispersed_time': 99.4375, 'frequency_slope': -0.75, 'channel_smearing': 0.75, 'infinite_time': 99.25}), ({'t': 100, 'K': 4, 'D': 3, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 0.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'channel_smearing': 0.75, 'infinite_time': 99.25})], 2: [({'t': 100, 'K': 4, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 4.0, 'reference_delay': 3.0, 'dedispersed_time': 97.0, 'frequency_slope': -4.0, 'channel_smearing': 4.0, 'infinite_time': 96.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.5, 'channel_smearing': 0.5, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 1, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.75, 'dedispersed_time': 99.25, 'frequency_slope': -1.0, 'channel_smearing': 1.0, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.25, 'reference_delay': -3.75, 'dedispersed_time': 103.75, 'frequency_slope': -0.0625, 'channel_smearing': 0.0625, 'infinite_time': 99.75}), ({'t': 100, 'K': 1, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.75, 'dedispersed_time': 99.25, 'frequency_slope': -1.0, 'channel_smearing': 1.0, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.5, 'channel_smearing': 1.0, 'infinite_time': 99.0})], 3: [({'t': 100, 'K': 4, 'D': 5, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 5.0, 'reference_delay': 3.75, 'dedispersed_time': 96.25, 'frequency_slope': -5.0, 'channel_smearing': 5.0, 'infinite_time': 95.0}), ({'t': 100, 'K': 4, 'D': 5, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.25, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.625, 'channel_smearing': 0.625, 'infinite_time': 98.75}), ({'t': 100, 'K': 4, 'D': 2, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 2.0, 'reference_delay': 1.5, 'dedispersed_time': 98.5, 'frequency_slope': -2.0, 'channel_smearing': 2.0, 'infinite_time': 98.0}), ({'t': 100, 'K': 4, 'D': 5, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.3125, 'reference_delay': -4.6875, 'dedispersed_time': 104.6875, 'frequency_slope': -0.078125, 'channel_smearing': 0.078125, 'infinite_time': 99.6875}), ({'t': 100, 'K': 1, 'D': 5, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.25, 'reference_delay': 0.9375, 'dedispersed_time': 99.0625, 'frequency_slope': -1.25, 'channel_smearing': 1.25, 'infinite_time': 98.75}), ({'t': 100, 'K': 4, 'D': 5, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.25, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.625, 'channel_smearing': 1.25, 'infinite_time': 98.75})], 4: [({'t': 100, 'K': 4, 'D': 6, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 6.0, 'reference_delay': 4.5, 'dedispersed_time': 95.5, 'frequency_slope': -6.0, 'channel_smearing': 6.0, 'infinite_time': 94.0}), ({'t': 100, 'K': 4, 'D': 6, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.5, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.75, 'channel_smearing': 0.75, 'infinite_time': 98.5}), ({'t': 100, 'K': 4, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 3.0, 'reference_delay': 2.25, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'channel_smearing': 3.0, 'infinite_time': 97.0}), ({'t': 100, 'K': 4, 'D': 6, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.375, 'reference_delay': -5.625, 'dedispersed_time': 105.625, 'frequency_slope': -0.09375, 'channel_smearing': 0.09375, 'infinite_time': 99.625}), ({'t': 100, 'K': 1, 'D': 6, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.5, 'reference_delay': 1.125, 'dedispersed_time': 98.875, 'frequency_slope': -1.5, 'channel_smearing': 1.5, 'infinite_time': 98.5}), ({'t': 100, 'K': 4, 'D': 6, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.5, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.75, 'channel_smearing': 1.5, 'infinite_time': 98.5})], 5: [({'t': 100, 'K': 4, 'D': 7, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 7.0, 'reference_delay': 5.25, 'dedispersed_time': 94.75, 'frequency_slope': -7.0, 'channel_smearing': 7.0, 'infinite_time': 93.0}), ({'t': 100, 'K': 4, 'D': 7, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.875, 'channel_smearing': 0.875, 'infinite_time': 98.25}), ({'t': 100, 'K': 4, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 4.0, 'reference_delay': 3.0, 'dedispersed_time': 97.0, 'frequency_slope': -4.0, 'channel_smearing': 4.0, 'infinite_time': 96.0}), ({'t': 100, 'K': 4, 'D': 7, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.4375, 'reference_delay': -6.5625, 'dedispersed_time': 106.5625, 'frequency_slope': -0.109375, 'channel_smearing': 0.109375, 'infinite_time': 99.5625}), ({'t': 100, 'K': 1, 'D': 7, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.75, 'reference_delay': 1.3125, 'dedispersed_time': 98.6875, 'frequency_slope': -1.75, 'channel_smearing': 1.75, 'infinite_time': 98.25}), ({'t': 100, 'K': 4, 'D': 7, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.875, 'channel_smearing': 1.75, 'infinite_time': 98.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)

evaluation_group: astro-pulsar-dispersion-coordinate

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

N = 1
observations = []
def solve(d):
    return {'infinite_delay': d['K']*d['D']*d['f']**2, 'reference_delay': d['K']*d['D']*(1/d['f']**2-1/d['r']**2), 'dedispersed_time': d['t']-d['K']*d['D']*(1/d['f']**2-1/d['r']**2), 'frequency_slope': -2*d['K']*d['D']/d['f']**3, 'channel_smearing': abs(2*d['K']*d['D']*d['w']/d['f']**3), 'infinite_time': d['t']-d['K']*d['D']/d['f']**2}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'K': 4, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 3.0, 'reference_delay': 2.25, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'channel_smearing': 3.0, 'infinite_time': 97.0}), ({'t': 100, 'K': 4, 'D': 3, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 0.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'channel_smearing': 0.375, 'infinite_time': 99.25}), ({'t': 100, 'K': 4, 'D': 0, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 0.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': 0.0, 'channel_smearing': 0.0, 'infinite_time': 100.0}), ({'t': 100, 'K': 4, 'D': 3, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.1875, 'reference_delay': -2.8125, 'dedispersed_time': 102.8125, 'frequency_slope': -0.046875, 'channel_smearing': 0.046875, 'infinite_time': 99.8125}), ({'t': 100, 'K': 1, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 0.75, 'reference_delay': 0.5625, 'dedispersed_time': 99.4375, 'frequency_slope': -0.75, 'channel_smearing': 0.75, 'infinite_time': 99.25}), ({'t': 100, 'K': 4, 'D': 3, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 0.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'channel_smearing': 0.75, 'infinite_time': 99.25})], 2: [({'t': 100, 'K': 4, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 4.0, 'reference_delay': 3.0, 'dedispersed_time': 97.0, 'frequency_slope': -4.0, 'channel_smearing': 4.0, 'infinite_time': 96.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.5, 'channel_smearing': 0.5, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 1, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.75, 'dedispersed_time': 99.25, 'frequency_slope': -1.0, 'channel_smearing': 1.0, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.25, 'reference_delay': -3.75, 'dedispersed_time': 103.75, 'frequency_slope': -0.0625, 'channel_smearing': 0.0625, 'infinite_time': 99.75}), ({'t': 100, 'K': 1, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.75, 'dedispersed_time': 99.25, 'frequency_slope': -1.0, 'channel_smearing': 1.0, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.5, 'channel_smearing': 1.0, 'infinite_time': 99.0})], 3: [({'t': 100, 'K': 4, 'D': 5, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 5.0, 'reference_delay': 3.75, 'dedispersed_time': 96.25, 'frequency_slope': -5.0, 'channel_smearing': 5.0, 'infinite_time': 95.0}), ({'t': 100, 'K': 4, 'D': 5, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.25, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.625, 'channel_smearing': 0.625, 'infinite_time': 98.75}), ({'t': 100, 'K': 4, 'D': 2, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 2.0, 'reference_delay': 1.5, 'dedispersed_time': 98.5, 'frequency_slope': -2.0, 'channel_smearing': 2.0, 'infinite_time': 98.0}), ({'t': 100, 'K': 4, 'D': 5, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.3125, 'reference_delay': -4.6875, 'dedispersed_time': 104.6875, 'frequency_slope': -0.078125, 'channel_smearing': 0.078125, 'infinite_time': 99.6875}), ({'t': 100, 'K': 1, 'D': 5, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.25, 'reference_delay': 0.9375, 'dedispersed_time': 99.0625, 'frequency_slope': -1.25, 'channel_smearing': 1.25, 'infinite_time': 98.75}), ({'t': 100, 'K': 4, 'D': 5, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.25, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.625, 'channel_smearing': 1.25, 'infinite_time': 98.75})], 4: [({'t': 100, 'K': 4, 'D': 6, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 6.0, 'reference_delay': 4.5, 'dedispersed_time': 95.5, 'frequency_slope': -6.0, 'channel_smearing': 6.0, 'infinite_time': 94.0}), ({'t': 100, 'K': 4, 'D': 6, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.5, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.75, 'channel_smearing': 0.75, 'infinite_time': 98.5}), ({'t': 100, 'K': 4, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 3.0, 'reference_delay': 2.25, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'channel_smearing': 3.0, 'infinite_time': 97.0}), ({'t': 100, 'K': 4, 'D': 6, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.375, 'reference_delay': -5.625, 'dedispersed_time': 105.625, 'frequency_slope': -0.09375, 'channel_smearing': 0.09375, 'infinite_time': 99.625}), ({'t': 100, 'K': 1, 'D': 6, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.5, 'reference_delay': 1.125, 'dedispersed_time': 98.875, 'frequency_slope': -1.5, 'channel_smearing': 1.5, 'infinite_time': 98.5}), ({'t': 100, 'K': 4, 'D': 6, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.5, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.75, 'channel_smearing': 1.5, 'infinite_time': 98.5})], 5: [({'t': 100, 'K': 4, 'D': 7, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 7.0, 'reference_delay': 5.25, 'dedispersed_time': 94.75, 'frequency_slope': -7.0, 'channel_smearing': 7.0, 'infinite_time': 93.0}), ({'t': 100, 'K': 4, 'D': 7, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.875, 'channel_smearing': 0.875, 'infinite_time': 98.25}), ({'t': 100, 'K': 4, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 4.0, 'reference_delay': 3.0, 'dedispersed_time': 97.0, 'frequency_slope': -4.0, 'channel_smearing': 4.0, 'infinite_time': 96.0}), ({'t': 100, 'K': 4, 'D': 7, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.4375, 'reference_delay': -6.5625, 'dedispersed_time': 106.5625, 'frequency_slope': -0.109375, 'channel_smearing': 0.109375, 'infinite_time': 99.5625}), ({'t': 100, 'K': 1, 'D': 7, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.75, 'reference_delay': 1.3125, 'dedispersed_time': 98.6875, 'frequency_slope': -1.75, 'channel_smearing': 1.75, 'infinite_time': 98.25}), ({'t': 100, 'K': 4, 'D': 7, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.875, 'channel_smearing': 1.75, 'infinite_time': 98.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)

prompt:
The adapter reports an incorrect infinite delay while other fields remain valid.

A stipulated cold-plasma timing adapter has constant K, dispersion measure D, positive radio frequency f, positive reference frequency r, channel width w and timestamp t. Delay relative to infinite frequency is K*D/f**2. Finite-reference dedispersion subtracts the difference of inverse squares. Output fields are defined by: infinite_delay = d['K']*d['D']/d['f']**2; reference_delay = d['K']*d['D']*(1/d['f']**2-1/d['r']**2); dedispersed_time = d['t']-d['K']*d['D']*(1/d['f']**2-1/d['r']**2); frequency_slope = -2*d['K']*d['D']/d['f']**3; channel_smearing = abs(2*d['K']*d['D']*d['w']/d['f']**3); infinite_time = d['t']-d['K']*d['D']/d['f']**2

split: open-access