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['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': 1.5*(d['p1']-d['p0'])/d['h']-(d['v0']+d['v1'])/4, 'left_tangent': d['h']*d['v0'], 'right_tangent': d['h']*d['v0'], '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 right 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


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['h']*d['v0'], 'right_tangent': d['h']*d['v1'], 'left_acceleration': 6*(d['p1']-d['p0'])/d['h']-(4*d['v0']+2*d['v1']), '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)

meaning: Fixture-count band, not measured model difficulty

deps: stdlib

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['h']*d['v0'], 'right_tangent': d['h']*d['v1'], 'left_acceleration': 6*(d['p1']-d['p0'])/d['h']**2-(2*d['v0']+4*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 acceleration 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['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': 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+(4*d['v0']+2*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 right acceleration 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


evaluation_group: astro-orbital-phase-labels

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

A folded-orbit coordinate has period P>0, elapsed time t from periastron, and phase offset q in cycles. Phase is fractional cycle, cycle index is floor quotient, mean anomaly is phase times a full turn, and eclipse phase offsets are explicit. No orbital dynamics is solved. Output fields are defined by: phase = (d['t']/d['P']+d['q'])%1; cycle_index = int((d['t']/d['P']+d['q'])//1); mean_anomaly = 360*((d['t']/d['P']+d['q'])%1); phase_zero_epoch = d['epoch']-d['q']*d['P']; eclipse_phase = ((d['t']/d['P']+d['q'])-d['eclipse'])%1; phase_rate = 1/d['P']

split: open-access


evaluation_group: astro-orbital-phase-labels

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

A folded-orbit coordinate has period P>0, elapsed time t from periastron, and phase offset q in cycles. Phase is fractional cycle, cycle index is floor quotient, mean anomaly is phase times a full turn, and eclipse phase offsets are explicit. No orbital dynamics is solved. Output fields are defined by: phase = (d['t']/d['P']+d['q'])%1; cycle_index = int((d['t']/d['P']+d['q'])//1); mean_anomaly = 360*((d['t']/d['P']+d['q'])%1); phase_zero_epoch = d['epoch']-d['q']*d['P']; eclipse_phase = ((d['t']/d['P']+d['q'])-d['eclipse'])%1; phase_rate = 1/d['P']

split: open-access


evaluation_group: astro-orbital-phase-labels

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

A folded-orbit coordinate has period P>0, elapsed time t from periastron, and phase offset q in cycles. Phase is fractional cycle, cycle index is floor quotient, mean anomaly is phase times a full turn, and eclipse phase offsets are explicit. No orbital dynamics is solved. Output fields are defined by: phase = (d['t']/d['P']+d['q'])%1; cycle_index = int((d['t']/d['P']+d['q'])//1); mean_anomaly = 360*((d['t']/d['P']+d['q'])%1); phase_zero_epoch = d['epoch']-d['q']*d['P']; eclipse_phase = ((d['t']/d['P']+d['q'])-d['eclipse'])%1; phase_rate = 1/d['P']

split: open-access


evaluation_group: astro-orbital-phase-labels

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

A folded-orbit coordinate has period P>0, elapsed time t from periastron, and phase offset q in cycles. Phase is fractional cycle, cycle index is floor quotient, mean anomaly is phase times a full turn, and eclipse phase offsets are explicit. No orbital dynamics is solved. Output fields are defined by: phase = (d['t']/d['P']+d['q'])%1; cycle_index = int((d['t']/d['P']+d['q'])//1); mean_anomaly = 360*((d['t']/d['P']+d['q'])%1); phase_zero_epoch = d['epoch']-d['q']*d['P']; eclipse_phase = ((d['t']/d['P']+d['q'])-d['eclipse'])%1; phase_rate = 1/d['P']

split: open-access


evaluation_group: astro-orbital-phase-labels

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

A folded-orbit coordinate has period P>0, elapsed time t from periastron, and phase offset q in cycles. Phase is fractional cycle, cycle index is floor quotient, mean anomaly is phase times a full turn, and eclipse phase offsets are explicit. No orbital dynamics is solved. Output fields are defined by: phase = (d['t']/d['P']+d['q'])%1; cycle_index = int((d['t']/d['P']+d['q'])//1); mean_anomaly = 360*((d['t']/d['P']+d['q'])%1); phase_zero_epoch = d['epoch']-d['q']*d['P']; eclipse_phase = ((d['t']/d['P']+d['q'])-d['eclipse'])%1; phase_rate = 1/d['P']

split: open-access


evaluation_group: astro-orbital-phase-labels

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

A folded-orbit coordinate has period P>0, elapsed time t from periastron, and phase offset q in cycles. Phase is fractional cycle, cycle index is floor quotient, mean anomaly is phase times a full turn, and eclipse phase offsets are explicit. No orbital dynamics is solved. Output fields are defined by: phase = (d['t']/d['P']+d['q'])%1; cycle_index = int((d['t']/d['P']+d['q'])//1); mean_anomaly = 360*((d['t']/d['P']+d['q'])%1); phase_zero_epoch = d['epoch']-d['q']*d['P']; eclipse_phase = ((d['t']/d['P']+d['q'])-d['eclipse'])%1; phase_rate = 1/d['P']

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'carrington': (d['C']-d['s'])%360, 'stonyhurst_from_carrington': ((d['C']+d['s'])%360-d['C']+180)%360-180, 'image_east_offset': -d['west'], 'transported_feature': (d['C']+d['s']+d['r']*d['dt'])%360, 'transported_relative': (d['s']+(d['r']-d['rc'])*d['dt']+180)%360-180, 'central_meridian': (d['C']+d['rc']*d['dt'])%360}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 198, 'transported_relative': 22, 'central_meridian': 176}), ({'s': 20, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 10, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 38, 'transported_relative': 22, 'central_meridian': 16}), ({'s': -40, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 110, 'stonyhurst_from_carrington': -40, 'image_east_offset': -3, 'transported_feature': 138, 'transported_relative': -38, 'central_meridian': 176}), ({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 170, 'transported_relative': 20, 'central_meridian': 150}), ({'s': 20, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 146, 'transported_relative': 24, 'central_meridian': 122}), ({'s': 20, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 20, 'stonyhurst_from_carrington': 20, 'image_east_offset': 5, 'transported_feature': 48, 'transported_relative': 22, 'central_meridian': 26})], 2: [({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 199, 'transported_relative': 23, 'central_meridian': 176}), ({'s': 21, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 11, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 39, 'transported_relative': 23, 'central_meridian': 16}), ({'s': -39, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 111, 'stonyhurst_from_carrington': -39, 'image_east_offset': -3, 'transported_feature': 139, 'transported_relative': -37, 'central_meridian': 176}), ({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 171, 'transported_relative': 21, 'central_meridian': 150}), ({'s': 21, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 147, 'transported_relative': 25, 'central_meridian': 122}), ({'s': 21, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 21, 'stonyhurst_from_carrington': 21, 'image_east_offset': 5, 'transported_feature': 49, 'transported_relative': 23, 'central_meridian': 26})], 3: [({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 200, 'transported_relative': 24, 'central_meridian': 176}), ({'s': 22, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 12, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 40, 'transported_relative': 24, 'central_meridian': 16}), ({'s': -38, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 112, 'stonyhurst_from_carrington': -38, 'image_east_offset': -3, 'transported_feature': 140, 'transported_relative': -36, 'central_meridian': 176}), ({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 172, 'transported_relative': 22, 'central_meridian': 150}), ({'s': 22, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 148, 'transported_relative': 26, 'central_meridian': 122}), ({'s': 22, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 22, 'stonyhurst_from_carrington': 22, 'image_east_offset': 5, 'transported_feature': 50, 'transported_relative': 24, 'central_meridian': 26})], 4: [({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 201, 'transported_relative': 25, 'central_meridian': 176}), ({'s': 23, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 13, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 41, 'transported_relative': 25, 'central_meridian': 16}), ({'s': -37, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 113, 'stonyhurst_from_carrington': -37, 'image_east_offset': -3, 'transported_feature': 141, 'transported_relative': -35, 'central_meridian': 176}), ({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 173, 'transported_relative': 23, 'central_meridian': 150}), ({'s': 23, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 149, 'transported_relative': 27, 'central_meridian': 122}), ({'s': 23, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 23, 'stonyhurst_from_carrington': 23, 'image_east_offset': 5, 'transported_feature': 51, 'transported_relative': 25, 'central_meridian': 26})], 5: [({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 202, 'transported_relative': 26, 'central_meridian': 176}), ({'s': 24, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 14, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 42, 'transported_relative': 26, 'central_meridian': 16}), ({'s': -36, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 114, 'stonyhurst_from_carrington': -36, 'image_east_offset': -3, 'transported_feature': 142, 'transported_relative': -34, 'central_meridian': 176}), ({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 174, 'transported_relative': 24, 'central_meridian': 150}), ({'s': 24, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 150, 'transported_relative': 28, 'central_meridian': 122}), ({'s': 24, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 24, 'stonyhurst_from_carrington': 24, 'image_east_offset': 5, 'transported_feature': 52, 'transported_relative': 26, 'central_meridian': 26})]}
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-solar-longitude-conventions

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

N = 1
observations = []
def solve(d):
    return {'carrington': d['s']%360, 'stonyhurst_from_carrington': ((d['C']+d['s'])%360-d['C']+180)%360-180, 'image_east_offset': -d['west'], 'transported_feature': (d['C']+d['s']+d['r']*d['dt'])%360, 'transported_relative': (d['s']+(d['r']-d['rc'])*d['dt']+180)%360-180, 'central_meridian': (d['C']+d['rc']*d['dt'])%360}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 198, 'transported_relative': 22, 'central_meridian': 176}), ({'s': 20, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 10, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 38, 'transported_relative': 22, 'central_meridian': 16}), ({'s': -40, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 110, 'stonyhurst_from_carrington': -40, 'image_east_offset': -3, 'transported_feature': 138, 'transported_relative': -38, 'central_meridian': 176}), ({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 170, 'transported_relative': 20, 'central_meridian': 150}), ({'s': 20, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 146, 'transported_relative': 24, 'central_meridian': 122}), ({'s': 20, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 20, 'stonyhurst_from_carrington': 20, 'image_east_offset': 5, 'transported_feature': 48, 'transported_relative': 22, 'central_meridian': 26})], 2: [({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 199, 'transported_relative': 23, 'central_meridian': 176}), ({'s': 21, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 11, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 39, 'transported_relative': 23, 'central_meridian': 16}), ({'s': -39, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 111, 'stonyhurst_from_carrington': -39, 'image_east_offset': -3, 'transported_feature': 139, 'transported_relative': -37, 'central_meridian': 176}), ({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 171, 'transported_relative': 21, 'central_meridian': 150}), ({'s': 21, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 147, 'transported_relative': 25, 'central_meridian': 122}), ({'s': 21, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 21, 'stonyhurst_from_carrington': 21, 'image_east_offset': 5, 'transported_feature': 49, 'transported_relative': 23, 'central_meridian': 26})], 3: [({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 200, 'transported_relative': 24, 'central_meridian': 176}), ({'s': 22, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 12, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 40, 'transported_relative': 24, 'central_meridian': 16}), ({'s': -38, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 112, 'stonyhurst_from_carrington': -38, 'image_east_offset': -3, 'transported_feature': 140, 'transported_relative': -36, 'central_meridian': 176}), ({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 172, 'transported_relative': 22, 'central_meridian': 150}), ({'s': 22, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 148, 'transported_relative': 26, 'central_meridian': 122}), ({'s': 22, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 22, 'stonyhurst_from_carrington': 22, 'image_east_offset': 5, 'transported_feature': 50, 'transported_relative': 24, 'central_meridian': 26})], 4: [({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 201, 'transported_relative': 25, 'central_meridian': 176}), ({'s': 23, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 13, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 41, 'transported_relative': 25, 'central_meridian': 16}), ({'s': -37, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 113, 'stonyhurst_from_carrington': -37, 'image_east_offset': -3, 'transported_feature': 141, 'transported_relative': -35, 'central_meridian': 176}), ({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 173, 'transported_relative': 23, 'central_meridian': 150}), ({'s': 23, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 149, 'transported_relative': 27, 'central_meridian': 122}), ({'s': 23, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 23, 'stonyhurst_from_carrington': 23, 'image_east_offset': 5, 'transported_feature': 51, 'transported_relative': 25, 'central_meridian': 26})], 5: [({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 202, 'transported_relative': 26, 'central_meridian': 176}), ({'s': 24, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 14, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 42, 'transported_relative': 26, 'central_meridian': 16}), ({'s': -36, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 114, 'stonyhurst_from_carrington': -36, 'image_east_offset': -3, 'transported_feature': 142, 'transported_relative': -34, 'central_meridian': 176}), ({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 174, 'transported_relative': 24, 'central_meridian': 150}), ({'s': 24, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 150, 'transported_relative': 28, 'central_meridian': 122}), ({'s': 24, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 24, 'stonyhurst_from_carrington': 24, 'image_east_offset': 5, 'transported_feature': 52, 'transported_relative': 26, 'central_meridian': 26})]}
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 carrington while other fields remain valid.

A reduced solar adapter stores Stonyhurst longitude s relative to central meridian C. Carrington longitude is C+s modulo a turn. A west-positive disk offset is supplied separately; rotation transport over dt uses rates r for feature and rc for central meridian. Angles are model degrees. Output fields are defined by: carrington = (d['C']+d['s'])%360; stonyhurst_from_carrington = ((d['C']+d['s'])%360-d['C']+180)%360-180; image_east_offset = -d['west']; transported_feature = (d['C']+d['s']+d['r']*d['dt'])%360; transported_relative = (d['s']+(d['r']-d['rc'])*d['dt']+180)%360-180; central_meridian = (d['C']+d['rc']*d['dt'])%360

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'carrington': (d['C']+d['s'])%360, 'stonyhurst_from_carrington': (d['C']+d['s'])%360-d['C'], 'image_east_offset': -d['west'], 'transported_feature': (d['C']+d['s']+d['r']*d['dt'])%360, 'transported_relative': (d['s']+(d['r']-d['rc'])*d['dt']+180)%360-180, 'central_meridian': (d['C']+d['rc']*d['dt'])%360}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 198, 'transported_relative': 22, 'central_meridian': 176}), ({'s': 20, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 10, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 38, 'transported_relative': 22, 'central_meridian': 16}), ({'s': -40, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 110, 'stonyhurst_from_carrington': -40, 'image_east_offset': -3, 'transported_feature': 138, 'transported_relative': -38, 'central_meridian': 176}), ({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 170, 'transported_relative': 20, 'central_meridian': 150}), ({'s': 20, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 146, 'transported_relative': 24, 'central_meridian': 122}), ({'s': 20, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 20, 'stonyhurst_from_carrington': 20, 'image_east_offset': 5, 'transported_feature': 48, 'transported_relative': 22, 'central_meridian': 26})], 2: [({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 199, 'transported_relative': 23, 'central_meridian': 176}), ({'s': 21, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 11, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 39, 'transported_relative': 23, 'central_meridian': 16}), ({'s': -39, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 111, 'stonyhurst_from_carrington': -39, 'image_east_offset': -3, 'transported_feature': 139, 'transported_relative': -37, 'central_meridian': 176}), ({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 171, 'transported_relative': 21, 'central_meridian': 150}), ({'s': 21, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 147, 'transported_relative': 25, 'central_meridian': 122}), ({'s': 21, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 21, 'stonyhurst_from_carrington': 21, 'image_east_offset': 5, 'transported_feature': 49, 'transported_relative': 23, 'central_meridian': 26})], 3: [({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 200, 'transported_relative': 24, 'central_meridian': 176}), ({'s': 22, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 12, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 40, 'transported_relative': 24, 'central_meridian': 16}), ({'s': -38, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 112, 'stonyhurst_from_carrington': -38, 'image_east_offset': -3, 'transported_feature': 140, 'transported_relative': -36, 'central_meridian': 176}), ({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 172, 'transported_relative': 22, 'central_meridian': 150}), ({'s': 22, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 148, 'transported_relative': 26, 'central_meridian': 122}), ({'s': 22, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 22, 'stonyhurst_from_carrington': 22, 'image_east_offset': 5, 'transported_feature': 50, 'transported_relative': 24, 'central_meridian': 26})], 4: [({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 201, 'transported_relative': 25, 'central_meridian': 176}), ({'s': 23, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 13, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 41, 'transported_relative': 25, 'central_meridian': 16}), ({'s': -37, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 113, 'stonyhurst_from_carrington': -37, 'image_east_offset': -3, 'transported_feature': 141, 'transported_relative': -35, 'central_meridian': 176}), ({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 173, 'transported_relative': 23, 'central_meridian': 150}), ({'s': 23, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 149, 'transported_relative': 27, 'central_meridian': 122}), ({'s': 23, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 23, 'stonyhurst_from_carrington': 23, 'image_east_offset': 5, 'transported_feature': 51, 'transported_relative': 25, 'central_meridian': 26})], 5: [({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 202, 'transported_relative': 26, 'central_meridian': 176}), ({'s': 24, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 14, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 42, 'transported_relative': 26, 'central_meridian': 16}), ({'s': -36, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 114, 'stonyhurst_from_carrington': -36, 'image_east_offset': -3, 'transported_feature': 142, 'transported_relative': -34, 'central_meridian': 176}), ({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 174, 'transported_relative': 24, 'central_meridian': 150}), ({'s': 24, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 150, 'transported_relative': 28, 'central_meridian': 122}), ({'s': 24, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 24, 'stonyhurst_from_carrington': 24, 'image_east_offset': 5, 'transported_feature': 52, 'transported_relative': 26, 'central_meridian': 26})]}
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-solar-longitude-conventions

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

N = 1
observations = []
def solve(d):
    return {'carrington': (d['C']+d['s'])%360, 'stonyhurst_from_carrington': ((d['C']+d['s'])%360+d['C']+180)%360-180, 'image_east_offset': -d['west'], 'transported_feature': (d['C']+d['s']+d['r']*d['dt'])%360, 'transported_relative': (d['s']+(d['r']-d['rc'])*d['dt']+180)%360-180, 'central_meridian': (d['C']+d['rc']*d['dt'])%360}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 198, 'transported_relative': 22, 'central_meridian': 176}), ({'s': 20, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 10, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 38, 'transported_relative': 22, 'central_meridian': 16}), ({'s': -40, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 110, 'stonyhurst_from_carrington': -40, 'image_east_offset': -3, 'transported_feature': 138, 'transported_relative': -38, 'central_meridian': 176}), ({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 170, 'transported_relative': 20, 'central_meridian': 150}), ({'s': 20, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 146, 'transported_relative': 24, 'central_meridian': 122}), ({'s': 20, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 20, 'stonyhurst_from_carrington': 20, 'image_east_offset': 5, 'transported_feature': 48, 'transported_relative': 22, 'central_meridian': 26})], 2: [({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 199, 'transported_relative': 23, 'central_meridian': 176}), ({'s': 21, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 11, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 39, 'transported_relative': 23, 'central_meridian': 16}), ({'s': -39, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 111, 'stonyhurst_from_carrington': -39, 'image_east_offset': -3, 'transported_feature': 139, 'transported_relative': -37, 'central_meridian': 176}), ({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 171, 'transported_relative': 21, 'central_meridian': 150}), ({'s': 21, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 147, 'transported_relative': 25, 'central_meridian': 122}), ({'s': 21, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 21, 'stonyhurst_from_carrington': 21, 'image_east_offset': 5, 'transported_feature': 49, 'transported_relative': 23, 'central_meridian': 26})], 3: [({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 200, 'transported_relative': 24, 'central_meridian': 176}), ({'s': 22, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 12, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 40, 'transported_relative': 24, 'central_meridian': 16}), ({'s': -38, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 112, 'stonyhurst_from_carrington': -38, 'image_east_offset': -3, 'transported_feature': 140, 'transported_relative': -36, 'central_meridian': 176}), ({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 172, 'transported_relative': 22, 'central_meridian': 150}), ({'s': 22, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 148, 'transported_relative': 26, 'central_meridian': 122}), ({'s': 22, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 22, 'stonyhurst_from_carrington': 22, 'image_east_offset': 5, 'transported_feature': 50, 'transported_relative': 24, 'central_meridian': 26})], 4: [({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 201, 'transported_relative': 25, 'central_meridian': 176}), ({'s': 23, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 13, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 41, 'transported_relative': 25, 'central_meridian': 16}), ({'s': -37, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 113, 'stonyhurst_from_carrington': -37, 'image_east_offset': -3, 'transported_feature': 141, 'transported_relative': -35, 'central_meridian': 176}), ({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 173, 'transported_relative': 23, 'central_meridian': 150}), ({'s': 23, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 149, 'transported_relative': 27, 'central_meridian': 122}), ({'s': 23, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 23, 'stonyhurst_from_carrington': 23, 'image_east_offset': 5, 'transported_feature': 51, 'transported_relative': 25, 'central_meridian': 26})], 5: [({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 202, 'transported_relative': 26, 'central_meridian': 176}), ({'s': 24, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 14, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 42, 'transported_relative': 26, 'central_meridian': 16}), ({'s': -36, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 114, 'stonyhurst_from_carrington': -36, 'image_east_offset': -3, 'transported_feature': 142, 'transported_relative': -34, 'central_meridian': 176}), ({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 174, 'transported_relative': 24, 'central_meridian': 150}), ({'s': 24, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 150, 'transported_relative': 28, 'central_meridian': 122}), ({'s': 24, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 24, 'stonyhurst_from_carrington': 24, 'image_east_offset': 5, 'transported_feature': 52, 'transported_relative': 26, 'central_meridian': 26})]}
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 stonyhurst from carrington while other fields remain valid.

A reduced solar adapter stores Stonyhurst longitude s relative to central meridian C. Carrington longitude is C+s modulo a turn. A west-positive disk offset is supplied separately; rotation transport over dt uses rates r for feature and rc for central meridian. Angles are model degrees. Output fields are defined by: carrington = (d['C']+d['s'])%360; stonyhurst_from_carrington = ((d['C']+d['s'])%360-d['C']+180)%360-180; image_east_offset = -d['west']; transported_feature = (d['C']+d['s']+d['r']*d['dt'])%360; transported_relative = (d['s']+(d['r']-d['rc'])*d['dt']+180)%360-180; central_meridian = (d['C']+d['rc']*d['dt'])%360

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'carrington': (d['C']+d['s'])%360, 'stonyhurst_from_carrington': ((d['C']+d['s'])%360-d['C']+180)%360-180, 'image_east_offset': d['west'], 'transported_feature': (d['C']+d['s']+d['r']*d['dt'])%360, 'transported_relative': (d['s']+(d['r']-d['rc'])*d['dt']+180)%360-180, 'central_meridian': (d['C']+d['rc']*d['dt'])%360}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 198, 'transported_relative': 22, 'central_meridian': 176}), ({'s': 20, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 10, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 38, 'transported_relative': 22, 'central_meridian': 16}), ({'s': -40, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 110, 'stonyhurst_from_carrington': -40, 'image_east_offset': -3, 'transported_feature': 138, 'transported_relative': -38, 'central_meridian': 176}), ({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 170, 'transported_relative': 20, 'central_meridian': 150}), ({'s': 20, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 146, 'transported_relative': 24, 'central_meridian': 122}), ({'s': 20, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 20, 'stonyhurst_from_carrington': 20, 'image_east_offset': 5, 'transported_feature': 48, 'transported_relative': 22, 'central_meridian': 26})], 2: [({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 199, 'transported_relative': 23, 'central_meridian': 176}), ({'s': 21, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 11, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 39, 'transported_relative': 23, 'central_meridian': 16}), ({'s': -39, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 111, 'stonyhurst_from_carrington': -39, 'image_east_offset': -3, 'transported_feature': 139, 'transported_relative': -37, 'central_meridian': 176}), ({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 171, 'transported_relative': 21, 'central_meridian': 150}), ({'s': 21, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 147, 'transported_relative': 25, 'central_meridian': 122}), ({'s': 21, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 21, 'stonyhurst_from_carrington': 21, 'image_east_offset': 5, 'transported_feature': 49, 'transported_relative': 23, 'central_meridian': 26})], 3: [({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 200, 'transported_relative': 24, 'central_meridian': 176}), ({'s': 22, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 12, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 40, 'transported_relative': 24, 'central_meridian': 16}), ({'s': -38, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 112, 'stonyhurst_from_carrington': -38, 'image_east_offset': -3, 'transported_feature': 140, 'transported_relative': -36, 'central_meridian': 176}), ({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 172, 'transported_relative': 22, 'central_meridian': 150}), ({'s': 22, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 148, 'transported_relative': 26, 'central_meridian': 122}), ({'s': 22, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 22, 'stonyhurst_from_carrington': 22, 'image_east_offset': 5, 'transported_feature': 50, 'transported_relative': 24, 'central_meridian': 26})], 4: [({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 201, 'transported_relative': 25, 'central_meridian': 176}), ({'s': 23, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 13, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 41, 'transported_relative': 25, 'central_meridian': 16}), ({'s': -37, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 113, 'stonyhurst_from_carrington': -37, 'image_east_offset': -3, 'transported_feature': 141, 'transported_relative': -35, 'central_meridian': 176}), ({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 173, 'transported_relative': 23, 'central_meridian': 150}), ({'s': 23, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 149, 'transported_relative': 27, 'central_meridian': 122}), ({'s': 23, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 23, 'stonyhurst_from_carrington': 23, 'image_east_offset': 5, 'transported_feature': 51, 'transported_relative': 25, 'central_meridian': 26})], 5: [({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 202, 'transported_relative': 26, 'central_meridian': 176}), ({'s': 24, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 14, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 42, 'transported_relative': 26, 'central_meridian': 16}), ({'s': -36, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 114, 'stonyhurst_from_carrington': -36, 'image_east_offset': -3, 'transported_feature': 142, 'transported_relative': -34, 'central_meridian': 176}), ({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 174, 'transported_relative': 24, 'central_meridian': 150}), ({'s': 24, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 150, 'transported_relative': 28, 'central_meridian': 122}), ({'s': 24, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 24, 'stonyhurst_from_carrington': 24, 'image_east_offset': 5, 'transported_feature': 52, 'transported_relative': 26, 'central_meridian': 26})]}
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-solar-longitude-conventions

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

N = 1
observations = []
def solve(d):
    return {'carrington': (d['C']+d['s'])%360, 'stonyhurst_from_carrington': ((d['C']+d['s'])%360-d['C']+180)%360-180, 'image_east_offset': abs(d['west']), 'transported_feature': (d['C']+d['s']+d['r']*d['dt'])%360, 'transported_relative': (d['s']+(d['r']-d['rc'])*d['dt']+180)%360-180, 'central_meridian': (d['C']+d['rc']*d['dt'])%360}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 198, 'transported_relative': 22, 'central_meridian': 176}), ({'s': 20, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 10, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 38, 'transported_relative': 22, 'central_meridian': 16}), ({'s': -40, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 110, 'stonyhurst_from_carrington': -40, 'image_east_offset': -3, 'transported_feature': 138, 'transported_relative': -38, 'central_meridian': 176}), ({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 170, 'transported_relative': 20, 'central_meridian': 150}), ({'s': 20, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 146, 'transported_relative': 24, 'central_meridian': 122}), ({'s': 20, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 20, 'stonyhurst_from_carrington': 20, 'image_east_offset': 5, 'transported_feature': 48, 'transported_relative': 22, 'central_meridian': 26})], 2: [({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 199, 'transported_relative': 23, 'central_meridian': 176}), ({'s': 21, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 11, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 39, 'transported_relative': 23, 'central_meridian': 16}), ({'s': -39, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 111, 'stonyhurst_from_carrington': -39, 'image_east_offset': -3, 'transported_feature': 139, 'transported_relative': -37, 'central_meridian': 176}), ({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 171, 'transported_relative': 21, 'central_meridian': 150}), ({'s': 21, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 147, 'transported_relative': 25, 'central_meridian': 122}), ({'s': 21, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 21, 'stonyhurst_from_carrington': 21, 'image_east_offset': 5, 'transported_feature': 49, 'transported_relative': 23, 'central_meridian': 26})], 3: [({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 200, 'transported_relative': 24, 'central_meridian': 176}), ({'s': 22, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 12, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 40, 'transported_relative': 24, 'central_meridian': 16}), ({'s': -38, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 112, 'stonyhurst_from_carrington': -38, 'image_east_offset': -3, 'transported_feature': 140, 'transported_relative': -36, 'central_meridian': 176}), ({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 172, 'transported_relative': 22, 'central_meridian': 150}), ({'s': 22, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 148, 'transported_relative': 26, 'central_meridian': 122}), ({'s': 22, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 22, 'stonyhurst_from_carrington': 22, 'image_east_offset': 5, 'transported_feature': 50, 'transported_relative': 24, 'central_meridian': 26})], 4: [({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 201, 'transported_relative': 25, 'central_meridian': 176}), ({'s': 23, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 13, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 41, 'transported_relative': 25, 'central_meridian': 16}), ({'s': -37, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 113, 'stonyhurst_from_carrington': -37, 'image_east_offset': -3, 'transported_feature': 141, 'transported_relative': -35, 'central_meridian': 176}), ({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 173, 'transported_relative': 23, 'central_meridian': 150}), ({'s': 23, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 149, 'transported_relative': 27, 'central_meridian': 122}), ({'s': 23, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 23, 'stonyhurst_from_carrington': 23, 'image_east_offset': 5, 'transported_feature': 51, 'transported_relative': 25, 'central_meridian': 26})], 5: [({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 202, 'transported_relative': 26, 'central_meridian': 176}), ({'s': 24, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 14, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 42, 'transported_relative': 26, 'central_meridian': 16}), ({'s': -36, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 114, 'stonyhurst_from_carrington': -36, 'image_east_offset': -3, 'transported_feature': 142, 'transported_relative': -34, 'central_meridian': 176}), ({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 174, 'transported_relative': 24, 'central_meridian': 150}), ({'s': 24, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 150, 'transported_relative': 28, 'central_meridian': 122}), ({'s': 24, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 24, 'stonyhurst_from_carrington': 24, 'image_east_offset': 5, 'transported_feature': 52, 'transported_relative': 26, 'central_meridian': 26})]}
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 image east offset while other fields remain valid.

A reduced solar adapter stores Stonyhurst longitude s relative to central meridian C. Carrington longitude is C+s modulo a turn. A west-positive disk offset is supplied separately; rotation transport over dt uses rates r for feature and rc for central meridian. Angles are model degrees. Output fields are defined by: carrington = (d['C']+d['s'])%360; stonyhurst_from_carrington = ((d['C']+d['s'])%360-d['C']+180)%360-180; image_east_offset = -d['west']; transported_feature = (d['C']+d['s']+d['r']*d['dt'])%360; transported_relative = (d['s']+(d['r']-d['rc'])*d['dt']+180)%360-180; central_meridian = (d['C']+d['rc']*d['dt'])%360

split: open-access