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

N = 1
observations = []
def solve(d):
    return {'radial_distance': d['r']+d['v']*d['t'], 'tangential_displacement': d['u']*d['t'], 'direction_tangent': d['x']+d['u']*d['t']/d['r'], 'angular_rate': d['u']*d['r']/(d['r']+d['v']*d['t'])**2, 'radial_fraction': d['v']*d['t']/d['r'], 'initial_angular_acceleration': -2*d['u']*d['v']/d['r']**2}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'r': 20, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.10416666666666667, 'radial_fraction': 0.2, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 20, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': -3, 'direction_tangent': 4.833333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': 6, 'direction_tangent': 5.333333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': 0.015}), ({'r': 20, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.2, 'initial_angular_acceleration': 0.0})], 2: [({'r': 21, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 25, 'tangential_displacement': 6, 'direction_tangent': 5.24, 'angular_rate': 0.1008, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 21, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': -3, 'direction_tangent': 4.842105263157895, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': 6, 'direction_tangent': 5.315789473684211, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': 0.013605442176870748}), ({'r': 21, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 25, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': 0.0})], 3: [({'r': 22, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 26, 'tangential_displacement': 6, 'direction_tangent': 5.230769230769231, 'angular_rate': 0.09763313609467456, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 22, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': -3, 'direction_tangent': 4.85, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': 0.012396694214876033}), ({'r': 22, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 26, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': 0.0})], 4: [({'r': 23, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 27, 'tangential_displacement': 6, 'direction_tangent': 5.222222222222222, 'angular_rate': 0.09465020576131687, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 6, 'direction_tangent': 5.260869565217392, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 23, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': -3, 'direction_tangent': 4.857142857142857, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': 0.011342155009451797}), ({'r': 23, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 27, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': 0.0})], 5: [({'r': 24, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 28, 'tangential_displacement': 6, 'direction_tangent': 5.214285714285714, 'angular_rate': 0.09183673469387756, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 24, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': -3, 'direction_tangent': 4.863636363636363, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': 0.010416666666666666}), ({'r': 24, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 28, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': 0.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-astrometric-perspective-transport

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

N = 1
observations = []
def solve(d):
    return {'radial_distance': d['r']+d['v']*d['t'], 'tangential_displacement': d['u']*d['t'], 'direction_tangent': d['x']+d['u']*d['t']/(d['r']-d['v']*d['t']), 'angular_rate': d['u']*d['r']/(d['r']+d['v']*d['t'])**2, 'radial_fraction': d['v']*d['t']/d['r'], 'initial_angular_acceleration': -2*d['u']*d['v']/d['r']**2}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'r': 20, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.10416666666666667, 'radial_fraction': 0.2, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 20, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': -3, 'direction_tangent': 4.833333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': 6, 'direction_tangent': 5.333333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': 0.015}), ({'r': 20, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.2, 'initial_angular_acceleration': 0.0})], 2: [({'r': 21, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 25, 'tangential_displacement': 6, 'direction_tangent': 5.24, 'angular_rate': 0.1008, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 21, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': -3, 'direction_tangent': 4.842105263157895, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': 6, 'direction_tangent': 5.315789473684211, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': 0.013605442176870748}), ({'r': 21, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 25, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': 0.0})], 3: [({'r': 22, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 26, 'tangential_displacement': 6, 'direction_tangent': 5.230769230769231, 'angular_rate': 0.09763313609467456, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 22, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': -3, 'direction_tangent': 4.85, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': 0.012396694214876033}), ({'r': 22, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 26, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': 0.0})], 4: [({'r': 23, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 27, 'tangential_displacement': 6, 'direction_tangent': 5.222222222222222, 'angular_rate': 0.09465020576131687, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 6, 'direction_tangent': 5.260869565217392, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 23, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': -3, 'direction_tangent': 4.857142857142857, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': 0.011342155009451797}), ({'r': 23, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 27, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': 0.0})], 5: [({'r': 24, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 28, 'tangential_displacement': 6, 'direction_tangent': 5.214285714285714, 'angular_rate': 0.09183673469387756, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 24, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': -3, 'direction_tangent': 4.863636363636363, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': 0.010416666666666666}), ({'r': 24, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 28, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': 0.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 direction tangent while other fields remain valid.

A finite one-axis astrometric model has initial distance r>0, radial speed v, tangential speed u, elapsed t, and tangent origin x. New distance R=r+v*t remains positive for all fixtures. Direction tangent is x+u*t/R, and apparent angular rate is u*r/R**2; this is a rectilinear perspective model. Output fields are defined by: radial_distance = d['r']+d['v']*d['t']; tangential_displacement = d['u']*d['t']; direction_tangent = d['x']+d['u']*d['t']/(d['r']+d['v']*d['t']); angular_rate = d['u']*d['r']/(d['r']+d['v']*d['t'])**2; radial_fraction = d['v']*d['t']/d['r']; initial_angular_acceleration = -2*d['u']*d['v']/d['r']**2

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'radial_distance': d['r']+d['v']*d['t'], 'tangential_displacement': d['u']*d['t'], 'direction_tangent': d['x']+d['u']*d['t']/(d['r']+d['v']*d['t']), 'angular_rate': d['u']/(d['r']+d['v']*d['t']), 'radial_fraction': d['v']*d['t']/d['r'], 'initial_angular_acceleration': -2*d['u']*d['v']/d['r']**2}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'r': 20, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.10416666666666667, 'radial_fraction': 0.2, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 20, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': -3, 'direction_tangent': 4.833333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': 6, 'direction_tangent': 5.333333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': 0.015}), ({'r': 20, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.2, 'initial_angular_acceleration': 0.0})], 2: [({'r': 21, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 25, 'tangential_displacement': 6, 'direction_tangent': 5.24, 'angular_rate': 0.1008, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 21, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': -3, 'direction_tangent': 4.842105263157895, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': 6, 'direction_tangent': 5.315789473684211, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': 0.013605442176870748}), ({'r': 21, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 25, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': 0.0})], 3: [({'r': 22, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 26, 'tangential_displacement': 6, 'direction_tangent': 5.230769230769231, 'angular_rate': 0.09763313609467456, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 22, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': -3, 'direction_tangent': 4.85, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': 0.012396694214876033}), ({'r': 22, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 26, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': 0.0})], 4: [({'r': 23, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 27, 'tangential_displacement': 6, 'direction_tangent': 5.222222222222222, 'angular_rate': 0.09465020576131687, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 6, 'direction_tangent': 5.260869565217392, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 23, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': -3, 'direction_tangent': 4.857142857142857, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': 0.011342155009451797}), ({'r': 23, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 27, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': 0.0})], 5: [({'r': 24, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 28, 'tangential_displacement': 6, 'direction_tangent': 5.214285714285714, 'angular_rate': 0.09183673469387756, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 24, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': -3, 'direction_tangent': 4.863636363636363, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': 0.010416666666666666}), ({'r': 24, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 28, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': 0.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-astrometric-perspective-transport

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

N = 1
observations = []
def solve(d):
    return {'radial_distance': d['r']+d['v']*d['t'], 'tangential_displacement': d['u']*d['t'], 'direction_tangent': d['x']+d['u']*d['t']/(d['r']+d['v']*d['t']), 'angular_rate': d['u']/d['r'], 'radial_fraction': d['v']*d['t']/d['r'], 'initial_angular_acceleration': -2*d['u']*d['v']/d['r']**2}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'r': 20, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.10416666666666667, 'radial_fraction': 0.2, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 20, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': -3, 'direction_tangent': 4.833333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': 6, 'direction_tangent': 5.333333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': 0.015}), ({'r': 20, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.2, 'initial_angular_acceleration': 0.0})], 2: [({'r': 21, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 25, 'tangential_displacement': 6, 'direction_tangent': 5.24, 'angular_rate': 0.1008, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 21, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': -3, 'direction_tangent': 4.842105263157895, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': 6, 'direction_tangent': 5.315789473684211, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': 0.013605442176870748}), ({'r': 21, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 25, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': 0.0})], 3: [({'r': 22, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 26, 'tangential_displacement': 6, 'direction_tangent': 5.230769230769231, 'angular_rate': 0.09763313609467456, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 22, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': -3, 'direction_tangent': 4.85, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': 0.012396694214876033}), ({'r': 22, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 26, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': 0.0})], 4: [({'r': 23, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 27, 'tangential_displacement': 6, 'direction_tangent': 5.222222222222222, 'angular_rate': 0.09465020576131687, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 6, 'direction_tangent': 5.260869565217392, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 23, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': -3, 'direction_tangent': 4.857142857142857, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': 0.011342155009451797}), ({'r': 23, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 27, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': 0.0})], 5: [({'r': 24, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 28, 'tangential_displacement': 6, 'direction_tangent': 5.214285714285714, 'angular_rate': 0.09183673469387756, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 24, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': -3, 'direction_tangent': 4.863636363636363, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': 0.010416666666666666}), ({'r': 24, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 28, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': 0.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 angular rate while other fields remain valid.

A finite one-axis astrometric model has initial distance r>0, radial speed v, tangential speed u, elapsed t, and tangent origin x. New distance R=r+v*t remains positive for all fixtures. Direction tangent is x+u*t/R, and apparent angular rate is u*r/R**2; this is a rectilinear perspective model. Output fields are defined by: radial_distance = d['r']+d['v']*d['t']; tangential_displacement = d['u']*d['t']; direction_tangent = d['x']+d['u']*d['t']/(d['r']+d['v']*d['t']); angular_rate = d['u']*d['r']/(d['r']+d['v']*d['t'])**2; radial_fraction = d['v']*d['t']/d['r']; initial_angular_acceleration = -2*d['u']*d['v']/d['r']**2

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'radial_distance': d['r']+d['v']*d['t'], 'tangential_displacement': d['u']*d['t'], 'direction_tangent': d['x']+d['u']*d['t']/(d['r']+d['v']*d['t']), 'angular_rate': d['u']*d['r']/(d['r']+d['v']*d['t'])**2, 'radial_fraction': d['v']/d['r'], 'initial_angular_acceleration': -2*d['u']*d['v']/d['r']**2}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'r': 20, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.10416666666666667, 'radial_fraction': 0.2, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 20, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': -3, 'direction_tangent': 4.833333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': 6, 'direction_tangent': 5.333333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': 0.015}), ({'r': 20, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.2, 'initial_angular_acceleration': 0.0})], 2: [({'r': 21, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 25, 'tangential_displacement': 6, 'direction_tangent': 5.24, 'angular_rate': 0.1008, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 21, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': -3, 'direction_tangent': 4.842105263157895, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': 6, 'direction_tangent': 5.315789473684211, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': 0.013605442176870748}), ({'r': 21, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 25, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': 0.0})], 3: [({'r': 22, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 26, 'tangential_displacement': 6, 'direction_tangent': 5.230769230769231, 'angular_rate': 0.09763313609467456, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 22, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': -3, 'direction_tangent': 4.85, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': 0.012396694214876033}), ({'r': 22, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 26, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': 0.0})], 4: [({'r': 23, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 27, 'tangential_displacement': 6, 'direction_tangent': 5.222222222222222, 'angular_rate': 0.09465020576131687, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 6, 'direction_tangent': 5.260869565217392, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 23, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': -3, 'direction_tangent': 4.857142857142857, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': 0.011342155009451797}), ({'r': 23, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 27, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': 0.0})], 5: [({'r': 24, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 28, 'tangential_displacement': 6, 'direction_tangent': 5.214285714285714, 'angular_rate': 0.09183673469387756, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 24, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': -3, 'direction_tangent': 4.863636363636363, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': 0.010416666666666666}), ({'r': 24, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 28, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': 0.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-astrometric-perspective-transport

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

N = 1
observations = []
def solve(d):
    return {'radial_distance': d['r']+d['v']*d['t'], 'tangential_displacement': d['u']*d['t'], 'direction_tangent': d['x']+d['u']*d['t']/(d['r']+d['v']*d['t']), 'angular_rate': d['u']*d['r']/(d['r']+d['v']*d['t'])**2, 'radial_fraction': d['v']*d['t']/(d['r']+d['v']*d['t']), 'initial_angular_acceleration': -2*d['u']*d['v']/d['r']**2}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'r': 20, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.10416666666666667, 'radial_fraction': 0.2, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 20, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': -3, 'direction_tangent': 4.833333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': 6, 'direction_tangent': 5.333333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': 0.015}), ({'r': 20, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.2, 'initial_angular_acceleration': 0.0})], 2: [({'r': 21, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 25, 'tangential_displacement': 6, 'direction_tangent': 5.24, 'angular_rate': 0.1008, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 21, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': -3, 'direction_tangent': 4.842105263157895, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': 6, 'direction_tangent': 5.315789473684211, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': 0.013605442176870748}), ({'r': 21, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 25, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': 0.0})], 3: [({'r': 22, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 26, 'tangential_displacement': 6, 'direction_tangent': 5.230769230769231, 'angular_rate': 0.09763313609467456, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 22, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': -3, 'direction_tangent': 4.85, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': 0.012396694214876033}), ({'r': 22, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 26, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': 0.0})], 4: [({'r': 23, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 27, 'tangential_displacement': 6, 'direction_tangent': 5.222222222222222, 'angular_rate': 0.09465020576131687, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 6, 'direction_tangent': 5.260869565217392, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 23, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': -3, 'direction_tangent': 4.857142857142857, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': 0.011342155009451797}), ({'r': 23, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 27, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': 0.0})], 5: [({'r': 24, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 28, 'tangential_displacement': 6, 'direction_tangent': 5.214285714285714, 'angular_rate': 0.09183673469387756, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 24, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': -3, 'direction_tangent': 4.863636363636363, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': 0.010416666666666666}), ({'r': 24, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 28, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': 0.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 radial fraction while other fields remain valid.

A finite one-axis astrometric model has initial distance r>0, radial speed v, tangential speed u, elapsed t, and tangent origin x. New distance R=r+v*t remains positive for all fixtures. Direction tangent is x+u*t/R, and apparent angular rate is u*r/R**2; this is a rectilinear perspective model. Output fields are defined by: radial_distance = d['r']+d['v']*d['t']; tangential_displacement = d['u']*d['t']; direction_tangent = d['x']+d['u']*d['t']/(d['r']+d['v']*d['t']); angular_rate = d['u']*d['r']/(d['r']+d['v']*d['t'])**2; radial_fraction = d['v']*d['t']/d['r']; initial_angular_acceleration = -2*d['u']*d['v']/d['r']**2

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'radial_distance': d['r']+d['v']*d['t'], 'tangential_displacement': d['u']*d['t'], 'direction_tangent': d['x']+d['u']*d['t']/(d['r']+d['v']*d['t']), 'angular_rate': d['u']*d['r']/(d['r']+d['v']*d['t'])**2, 'radial_fraction': d['v']*d['t']/d['r'], 'initial_angular_acceleration': -d['u']*d['v']/d['r']**2}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'r': 20, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.10416666666666667, 'radial_fraction': 0.2, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 20, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': -3, 'direction_tangent': 4.833333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': 6, 'direction_tangent': 5.333333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': 0.015}), ({'r': 20, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.2, 'initial_angular_acceleration': 0.0})], 2: [({'r': 21, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 25, 'tangential_displacement': 6, 'direction_tangent': 5.24, 'angular_rate': 0.1008, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 21, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': -3, 'direction_tangent': 4.842105263157895, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': 6, 'direction_tangent': 5.315789473684211, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': 0.013605442176870748}), ({'r': 21, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 25, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': 0.0})], 3: [({'r': 22, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 26, 'tangential_displacement': 6, 'direction_tangent': 5.230769230769231, 'angular_rate': 0.09763313609467456, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 22, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': -3, 'direction_tangent': 4.85, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': 0.012396694214876033}), ({'r': 22, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 26, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': 0.0})], 4: [({'r': 23, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 27, 'tangential_displacement': 6, 'direction_tangent': 5.222222222222222, 'angular_rate': 0.09465020576131687, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 6, 'direction_tangent': 5.260869565217392, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 23, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': -3, 'direction_tangent': 4.857142857142857, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': 0.011342155009451797}), ({'r': 23, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 27, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': 0.0})], 5: [({'r': 24, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 28, 'tangential_displacement': 6, 'direction_tangent': 5.214285714285714, 'angular_rate': 0.09183673469387756, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 24, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': -3, 'direction_tangent': 4.863636363636363, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': 0.010416666666666666}), ({'r': 24, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 28, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': 0.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-astrometric-perspective-transport

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

N = 1
observations = []
def solve(d):
    return {'radial_distance': d['r']+d['v']*d['t'], 'tangential_displacement': d['u']*d['t'], 'direction_tangent': d['x']+d['u']*d['t']/(d['r']+d['v']*d['t']), 'angular_rate': d['u']*d['r']/(d['r']+d['v']*d['t'])**2, 'radial_fraction': d['v']*d['t']/d['r'], 'initial_angular_acceleration': 2*d['u']*d['v']/d['r']**2}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'r': 20, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.10416666666666667, 'radial_fraction': 0.2, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 20, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.15, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': -3, 'direction_tangent': 4.833333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': -0.03}), ({'r': 20, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 18, 'tangential_displacement': 6, 'direction_tangent': 5.333333333333333, 'angular_rate': 0.18518518518518517, 'radial_fraction': -0.1, 'initial_angular_acceleration': 0.015}), ({'r': 20, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.2, 'initial_angular_acceleration': 0.0})], 2: [({'r': 21, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 25, 'tangential_displacement': 6, 'direction_tangent': 5.24, 'angular_rate': 0.1008, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 21, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.14285714285714285, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': -3, 'direction_tangent': 4.842105263157895, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': -0.027210884353741496}), ({'r': 21, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 19, 'tangential_displacement': 6, 'direction_tangent': 5.315789473684211, 'angular_rate': 0.1745152354570637, 'radial_fraction': -0.09523809523809523, 'initial_angular_acceleration': 0.013605442176870748}), ({'r': 21, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 25, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.19047619047619047, 'initial_angular_acceleration': 0.0})], 3: [({'r': 22, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 26, 'tangential_displacement': 6, 'direction_tangent': 5.230769230769231, 'angular_rate': 0.09763313609467456, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 22, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13636363636363635, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': -3, 'direction_tangent': 4.85, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': -0.024793388429752067}), ({'r': 22, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 20, 'tangential_displacement': 6, 'direction_tangent': 5.3, 'angular_rate': 0.165, 'radial_fraction': -0.09090909090909091, 'initial_angular_acceleration': 0.012396694214876033}), ({'r': 22, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 26, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.18181818181818182, 'initial_angular_acceleration': 0.0})], 4: [({'r': 23, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 27, 'tangential_displacement': 6, 'direction_tangent': 5.222222222222222, 'angular_rate': 0.09465020576131687, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 6, 'direction_tangent': 5.260869565217392, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 23, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 23, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.13043478260869565, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': -3, 'direction_tangent': 4.857142857142857, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': -0.022684310018903593}), ({'r': 23, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 21, 'tangential_displacement': 6, 'direction_tangent': 5.285714285714286, 'angular_rate': 0.1564625850340136, 'radial_fraction': -0.08695652173913043, 'initial_angular_acceleration': 0.011342155009451797}), ({'r': 23, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 27, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.17391304347826086, 'initial_angular_acceleration': 0.0})], 5: [({'r': 24, 'v': 2, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 28, 'tangential_displacement': 6, 'direction_tangent': 5.214285714285714, 'angular_rate': 0.09183673469387756, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 0, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 6, 'direction_tangent': 5.25, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': 0.0}), ({'r': 24, 'v': 2, 'u': 3, 't': 0, 'x': 5}, {'radial_distance': 24, 'tangential_displacement': 0, 'direction_tangent': 5.0, 'angular_rate': 0.125, 'radial_fraction': 0.0, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': 2, 'u': 3, 't': -1, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': -3, 'direction_tangent': 4.863636363636363, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': -0.020833333333333332}), ({'r': 24, 'v': -1, 'u': 3, 't': 2, 'x': 5}, {'radial_distance': 22, 'tangential_displacement': 6, 'direction_tangent': 5.2727272727272725, 'angular_rate': 0.1487603305785124, 'radial_fraction': -0.08333333333333333, 'initial_angular_acceleration': 0.010416666666666666}), ({'r': 24, 'v': 2, 'u': 0, 't': 2, 'x': 0}, {'radial_distance': 28, 'tangential_displacement': 0, 'direction_tangent': 0.0, 'angular_rate': 0.0, 'radial_fraction': 0.16666666666666666, 'initial_angular_acceleration': 0.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 initial angular acceleration while other fields remain valid.

A finite one-axis astrometric model has initial distance r>0, radial speed v, tangential speed u, elapsed t, and tangent origin x. New distance R=r+v*t remains positive for all fixtures. Direction tangent is x+u*t/R, and apparent angular rate is u*r/R**2; this is a rectilinear perspective model. Output fields are defined by: radial_distance = d['r']+d['v']*d['t']; tangential_displacement = d['u']*d['t']; direction_tangent = d['x']+d['u']*d['t']/(d['r']+d['v']*d['t']); angular_rate = d['u']*d['r']/(d['r']+d['v']*d['t'])**2; radial_fraction = d['v']*d['t']/d['r']; initial_angular_acceleration = -2*d['u']*d['v']/d['r']**2

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'global_pixel': d['f']*d['o']+d['p'], 'parent_local': d['p']//4, 'child_local': 4*d['p']+d['k'], 'descendant_first': d['p']*4**d['depth'], 'descendant_stop': (d['p']+1)*4**d['depth'], 'face_count': 12*4**d['o']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'o': 2, 'p': 5, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 53, 'parent_local': 1, 'child_local': 22, 'descendant_first': 80, 'descendant_stop': 96, 'face_count': 192}), ({'o': 2, 'p': 0, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 0, 'parent_local': 0, 'child_local': 0, 'descendant_first': 0, 'descendant_stop': 16, 'face_count': 192}), ({'o': 2, 'p': 5, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 181, 'parent_local': 1, 'child_local': 23, 'descendant_first': 80, 'descendant_stop': 96, 'face_count': 192}), ({'o': 2, 'p': 5, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 53, 'parent_local': 1, 'child_local': 22, 'descendant_first': 5, 'descendant_stop': 6, 'face_count': 192}), ({'o': 2, 'p': 2, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 18, 'parent_local': 0, 'child_local': 10, 'descendant_first': 32, 'descendant_stop': 48, 'face_count': 192}), ({'o': 3, 'p': 20, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 212, 'parent_local': 5, 'child_local': 82, 'descendant_first': 80, 'descendant_stop': 84, 'face_count': 768})], 2: [({'o': 2, 'p': 6, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 54, 'parent_local': 1, 'child_local': 26, 'descendant_first': 96, 'descendant_stop': 112, 'face_count': 192}), ({'o': 2, 'p': 1, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 1, 'parent_local': 0, 'child_local': 4, 'descendant_first': 16, 'descendant_stop': 32, 'face_count': 192}), ({'o': 2, 'p': 6, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 182, 'parent_local': 1, 'child_local': 27, 'descendant_first': 96, 'descendant_stop': 112, 'face_count': 192}), ({'o': 2, 'p': 6, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 54, 'parent_local': 1, 'child_local': 26, 'descendant_first': 6, 'descendant_stop': 7, 'face_count': 192}), ({'o': 2, 'p': 3, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 19, 'parent_local': 0, 'child_local': 14, 'descendant_first': 48, 'descendant_stop': 64, 'face_count': 192}), ({'o': 3, 'p': 21, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 213, 'parent_local': 5, 'child_local': 86, 'descendant_first': 84, 'descendant_stop': 88, 'face_count': 768})], 3: [({'o': 2, 'p': 7, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 55, 'parent_local': 1, 'child_local': 30, 'descendant_first': 112, 'descendant_stop': 128, 'face_count': 192}), ({'o': 2, 'p': 2, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 2, 'parent_local': 0, 'child_local': 8, 'descendant_first': 32, 'descendant_stop': 48, 'face_count': 192}), ({'o': 2, 'p': 7, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 183, 'parent_local': 1, 'child_local': 31, 'descendant_first': 112, 'descendant_stop': 128, 'face_count': 192}), ({'o': 2, 'p': 7, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 55, 'parent_local': 1, 'child_local': 30, 'descendant_first': 7, 'descendant_stop': 8, 'face_count': 192}), ({'o': 2, 'p': 4, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 20, 'parent_local': 1, 'child_local': 18, 'descendant_first': 64, 'descendant_stop': 80, 'face_count': 192}), ({'o': 3, 'p': 22, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 214, 'parent_local': 5, 'child_local': 90, 'descendant_first': 88, 'descendant_stop': 92, 'face_count': 768})], 4: [({'o': 2, 'p': 8, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 56, 'parent_local': 2, 'child_local': 34, 'descendant_first': 128, 'descendant_stop': 144, 'face_count': 192}), ({'o': 2, 'p': 3, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 3, 'parent_local': 0, 'child_local': 12, 'descendant_first': 48, 'descendant_stop': 64, 'face_count': 192}), ({'o': 2, 'p': 8, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 184, 'parent_local': 2, 'child_local': 35, 'descendant_first': 128, 'descendant_stop': 144, 'face_count': 192}), ({'o': 2, 'p': 8, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 56, 'parent_local': 2, 'child_local': 34, 'descendant_first': 8, 'descendant_stop': 9, 'face_count': 192}), ({'o': 2, 'p': 5, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 21, 'parent_local': 1, 'child_local': 22, 'descendant_first': 80, 'descendant_stop': 96, 'face_count': 192}), ({'o': 3, 'p': 23, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 215, 'parent_local': 5, 'child_local': 94, 'descendant_first': 92, 'descendant_stop': 96, 'face_count': 768})], 5: [({'o': 2, 'p': 9, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 57, 'parent_local': 2, 'child_local': 38, 'descendant_first': 144, 'descendant_stop': 160, 'face_count': 192}), ({'o': 2, 'p': 4, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 4, 'parent_local': 1, 'child_local': 16, 'descendant_first': 64, 'descendant_stop': 80, 'face_count': 192}), ({'o': 2, 'p': 9, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 185, 'parent_local': 2, 'child_local': 39, 'descendant_first': 144, 'descendant_stop': 160, 'face_count': 192}), ({'o': 2, 'p': 9, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 57, 'parent_local': 2, 'child_local': 38, 'descendant_first': 9, 'descendant_stop': 10, 'face_count': 192}), ({'o': 2, 'p': 6, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 22, 'parent_local': 1, 'child_local': 26, 'descendant_first': 96, 'descendant_stop': 112, 'face_count': 192}), ({'o': 3, 'p': 24, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 216, 'parent_local': 6, 'child_local': 98, 'descendant_first': 96, 'descendant_stop': 100, 'face_count': 768})]}
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-nested-sky-cell-address

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

N = 1
observations = []
def solve(d):
    return {'global_pixel': d['f']*4**(d['o']+1)+d['p'], 'parent_local': d['p']//4, 'child_local': 4*d['p']+d['k'], 'descendant_first': d['p']*4**d['depth'], 'descendant_stop': (d['p']+1)*4**d['depth'], 'face_count': 12*4**d['o']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'o': 2, 'p': 5, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 53, 'parent_local': 1, 'child_local': 22, 'descendant_first': 80, 'descendant_stop': 96, 'face_count': 192}), ({'o': 2, 'p': 0, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 0, 'parent_local': 0, 'child_local': 0, 'descendant_first': 0, 'descendant_stop': 16, 'face_count': 192}), ({'o': 2, 'p': 5, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 181, 'parent_local': 1, 'child_local': 23, 'descendant_first': 80, 'descendant_stop': 96, 'face_count': 192}), ({'o': 2, 'p': 5, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 53, 'parent_local': 1, 'child_local': 22, 'descendant_first': 5, 'descendant_stop': 6, 'face_count': 192}), ({'o': 2, 'p': 2, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 18, 'parent_local': 0, 'child_local': 10, 'descendant_first': 32, 'descendant_stop': 48, 'face_count': 192}), ({'o': 3, 'p': 20, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 212, 'parent_local': 5, 'child_local': 82, 'descendant_first': 80, 'descendant_stop': 84, 'face_count': 768})], 2: [({'o': 2, 'p': 6, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 54, 'parent_local': 1, 'child_local': 26, 'descendant_first': 96, 'descendant_stop': 112, 'face_count': 192}), ({'o': 2, 'p': 1, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 1, 'parent_local': 0, 'child_local': 4, 'descendant_first': 16, 'descendant_stop': 32, 'face_count': 192}), ({'o': 2, 'p': 6, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 182, 'parent_local': 1, 'child_local': 27, 'descendant_first': 96, 'descendant_stop': 112, 'face_count': 192}), ({'o': 2, 'p': 6, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 54, 'parent_local': 1, 'child_local': 26, 'descendant_first': 6, 'descendant_stop': 7, 'face_count': 192}), ({'o': 2, 'p': 3, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 19, 'parent_local': 0, 'child_local': 14, 'descendant_first': 48, 'descendant_stop': 64, 'face_count': 192}), ({'o': 3, 'p': 21, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 213, 'parent_local': 5, 'child_local': 86, 'descendant_first': 84, 'descendant_stop': 88, 'face_count': 768})], 3: [({'o': 2, 'p': 7, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 55, 'parent_local': 1, 'child_local': 30, 'descendant_first': 112, 'descendant_stop': 128, 'face_count': 192}), ({'o': 2, 'p': 2, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 2, 'parent_local': 0, 'child_local': 8, 'descendant_first': 32, 'descendant_stop': 48, 'face_count': 192}), ({'o': 2, 'p': 7, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 183, 'parent_local': 1, 'child_local': 31, 'descendant_first': 112, 'descendant_stop': 128, 'face_count': 192}), ({'o': 2, 'p': 7, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 55, 'parent_local': 1, 'child_local': 30, 'descendant_first': 7, 'descendant_stop': 8, 'face_count': 192}), ({'o': 2, 'p': 4, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 20, 'parent_local': 1, 'child_local': 18, 'descendant_first': 64, 'descendant_stop': 80, 'face_count': 192}), ({'o': 3, 'p': 22, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 214, 'parent_local': 5, 'child_local': 90, 'descendant_first': 88, 'descendant_stop': 92, 'face_count': 768})], 4: [({'o': 2, 'p': 8, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 56, 'parent_local': 2, 'child_local': 34, 'descendant_first': 128, 'descendant_stop': 144, 'face_count': 192}), ({'o': 2, 'p': 3, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 3, 'parent_local': 0, 'child_local': 12, 'descendant_first': 48, 'descendant_stop': 64, 'face_count': 192}), ({'o': 2, 'p': 8, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 184, 'parent_local': 2, 'child_local': 35, 'descendant_first': 128, 'descendant_stop': 144, 'face_count': 192}), ({'o': 2, 'p': 8, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 56, 'parent_local': 2, 'child_local': 34, 'descendant_first': 8, 'descendant_stop': 9, 'face_count': 192}), ({'o': 2, 'p': 5, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 21, 'parent_local': 1, 'child_local': 22, 'descendant_first': 80, 'descendant_stop': 96, 'face_count': 192}), ({'o': 3, 'p': 23, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 215, 'parent_local': 5, 'child_local': 94, 'descendant_first': 92, 'descendant_stop': 96, 'face_count': 768})], 5: [({'o': 2, 'p': 9, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 57, 'parent_local': 2, 'child_local': 38, 'descendant_first': 144, 'descendant_stop': 160, 'face_count': 192}), ({'o': 2, 'p': 4, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 4, 'parent_local': 1, 'child_local': 16, 'descendant_first': 64, 'descendant_stop': 80, 'face_count': 192}), ({'o': 2, 'p': 9, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 185, 'parent_local': 2, 'child_local': 39, 'descendant_first': 144, 'descendant_stop': 160, 'face_count': 192}), ({'o': 2, 'p': 9, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 57, 'parent_local': 2, 'child_local': 38, 'descendant_first': 9, 'descendant_stop': 10, 'face_count': 192}), ({'o': 2, 'p': 6, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 22, 'parent_local': 1, 'child_local': 26, 'descendant_first': 96, 'descendant_stop': 112, 'face_count': 192}), ({'o': 3, 'p': 24, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 216, 'parent_local': 6, 'child_local': 98, 'descendant_first': 96, 'descendant_stop': 100, 'face_count': 768})]}
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 global pixel while other fields remain valid.

A stipulated hierarchical sky tessellation has 12 base faces and four nested children per cell. At order o a face has 4**o pixels. p is the local pixel index, f the face, k the child digit. Parent and descendant ranges are nested indexing operations; no geometric HEALPix projection is implemented. Output fields are defined by: global_pixel = d['f']*4**d['o']+d['p']; parent_local = d['p']//4; child_local = 4*d['p']+d['k']; descendant_first = d['p']*4**d['depth']; descendant_stop = (d['p']+1)*4**d['depth']; face_count = 12*4**d['o']

split: open-access


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

N = 1
observations = []
def solve(d):
    return {'global_pixel': d['f']*4**d['o']+d['p'], 'parent_local': d['p']//2, 'child_local': 4*d['p']+d['k'], 'descendant_first': d['p']*4**d['depth'], 'descendant_stop': (d['p']+1)*4**d['depth'], 'face_count': 12*4**d['o']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'o': 2, 'p': 5, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 53, 'parent_local': 1, 'child_local': 22, 'descendant_first': 80, 'descendant_stop': 96, 'face_count': 192}), ({'o': 2, 'p': 0, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 0, 'parent_local': 0, 'child_local': 0, 'descendant_first': 0, 'descendant_stop': 16, 'face_count': 192}), ({'o': 2, 'p': 5, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 181, 'parent_local': 1, 'child_local': 23, 'descendant_first': 80, 'descendant_stop': 96, 'face_count': 192}), ({'o': 2, 'p': 5, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 53, 'parent_local': 1, 'child_local': 22, 'descendant_first': 5, 'descendant_stop': 6, 'face_count': 192}), ({'o': 2, 'p': 2, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 18, 'parent_local': 0, 'child_local': 10, 'descendant_first': 32, 'descendant_stop': 48, 'face_count': 192}), ({'o': 3, 'p': 20, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 212, 'parent_local': 5, 'child_local': 82, 'descendant_first': 80, 'descendant_stop': 84, 'face_count': 768})], 2: [({'o': 2, 'p': 6, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 54, 'parent_local': 1, 'child_local': 26, 'descendant_first': 96, 'descendant_stop': 112, 'face_count': 192}), ({'o': 2, 'p': 1, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 1, 'parent_local': 0, 'child_local': 4, 'descendant_first': 16, 'descendant_stop': 32, 'face_count': 192}), ({'o': 2, 'p': 6, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 182, 'parent_local': 1, 'child_local': 27, 'descendant_first': 96, 'descendant_stop': 112, 'face_count': 192}), ({'o': 2, 'p': 6, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 54, 'parent_local': 1, 'child_local': 26, 'descendant_first': 6, 'descendant_stop': 7, 'face_count': 192}), ({'o': 2, 'p': 3, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 19, 'parent_local': 0, 'child_local': 14, 'descendant_first': 48, 'descendant_stop': 64, 'face_count': 192}), ({'o': 3, 'p': 21, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 213, 'parent_local': 5, 'child_local': 86, 'descendant_first': 84, 'descendant_stop': 88, 'face_count': 768})], 3: [({'o': 2, 'p': 7, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 55, 'parent_local': 1, 'child_local': 30, 'descendant_first': 112, 'descendant_stop': 128, 'face_count': 192}), ({'o': 2, 'p': 2, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 2, 'parent_local': 0, 'child_local': 8, 'descendant_first': 32, 'descendant_stop': 48, 'face_count': 192}), ({'o': 2, 'p': 7, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 183, 'parent_local': 1, 'child_local': 31, 'descendant_first': 112, 'descendant_stop': 128, 'face_count': 192}), ({'o': 2, 'p': 7, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 55, 'parent_local': 1, 'child_local': 30, 'descendant_first': 7, 'descendant_stop': 8, 'face_count': 192}), ({'o': 2, 'p': 4, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 20, 'parent_local': 1, 'child_local': 18, 'descendant_first': 64, 'descendant_stop': 80, 'face_count': 192}), ({'o': 3, 'p': 22, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 214, 'parent_local': 5, 'child_local': 90, 'descendant_first': 88, 'descendant_stop': 92, 'face_count': 768})], 4: [({'o': 2, 'p': 8, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 56, 'parent_local': 2, 'child_local': 34, 'descendant_first': 128, 'descendant_stop': 144, 'face_count': 192}), ({'o': 2, 'p': 3, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 3, 'parent_local': 0, 'child_local': 12, 'descendant_first': 48, 'descendant_stop': 64, 'face_count': 192}), ({'o': 2, 'p': 8, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 184, 'parent_local': 2, 'child_local': 35, 'descendant_first': 128, 'descendant_stop': 144, 'face_count': 192}), ({'o': 2, 'p': 8, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 56, 'parent_local': 2, 'child_local': 34, 'descendant_first': 8, 'descendant_stop': 9, 'face_count': 192}), ({'o': 2, 'p': 5, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 21, 'parent_local': 1, 'child_local': 22, 'descendant_first': 80, 'descendant_stop': 96, 'face_count': 192}), ({'o': 3, 'p': 23, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 215, 'parent_local': 5, 'child_local': 94, 'descendant_first': 92, 'descendant_stop': 96, 'face_count': 768})], 5: [({'o': 2, 'p': 9, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 57, 'parent_local': 2, 'child_local': 38, 'descendant_first': 144, 'descendant_stop': 160, 'face_count': 192}), ({'o': 2, 'p': 4, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 4, 'parent_local': 1, 'child_local': 16, 'descendant_first': 64, 'descendant_stop': 80, 'face_count': 192}), ({'o': 2, 'p': 9, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 185, 'parent_local': 2, 'child_local': 39, 'descendant_first': 144, 'descendant_stop': 160, 'face_count': 192}), ({'o': 2, 'p': 9, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 57, 'parent_local': 2, 'child_local': 38, 'descendant_first': 9, 'descendant_stop': 10, 'face_count': 192}), ({'o': 2, 'p': 6, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 22, 'parent_local': 1, 'child_local': 26, 'descendant_first': 96, 'descendant_stop': 112, 'face_count': 192}), ({'o': 3, 'p': 24, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 216, 'parent_local': 6, 'child_local': 98, 'descendant_first': 96, 'descendant_stop': 100, 'face_count': 768})]}
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-nested-sky-cell-address

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

N = 1
observations = []
def solve(d):
    return {'global_pixel': d['f']*4**d['o']+d['p'], 'parent_local': d['p']%4, 'child_local': 4*d['p']+d['k'], 'descendant_first': d['p']*4**d['depth'], 'descendant_stop': (d['p']+1)*4**d['depth'], 'face_count': 12*4**d['o']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'o': 2, 'p': 5, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 53, 'parent_local': 1, 'child_local': 22, 'descendant_first': 80, 'descendant_stop': 96, 'face_count': 192}), ({'o': 2, 'p': 0, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 0, 'parent_local': 0, 'child_local': 0, 'descendant_first': 0, 'descendant_stop': 16, 'face_count': 192}), ({'o': 2, 'p': 5, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 181, 'parent_local': 1, 'child_local': 23, 'descendant_first': 80, 'descendant_stop': 96, 'face_count': 192}), ({'o': 2, 'p': 5, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 53, 'parent_local': 1, 'child_local': 22, 'descendant_first': 5, 'descendant_stop': 6, 'face_count': 192}), ({'o': 2, 'p': 2, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 18, 'parent_local': 0, 'child_local': 10, 'descendant_first': 32, 'descendant_stop': 48, 'face_count': 192}), ({'o': 3, 'p': 20, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 212, 'parent_local': 5, 'child_local': 82, 'descendant_first': 80, 'descendant_stop': 84, 'face_count': 768})], 2: [({'o': 2, 'p': 6, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 54, 'parent_local': 1, 'child_local': 26, 'descendant_first': 96, 'descendant_stop': 112, 'face_count': 192}), ({'o': 2, 'p': 1, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 1, 'parent_local': 0, 'child_local': 4, 'descendant_first': 16, 'descendant_stop': 32, 'face_count': 192}), ({'o': 2, 'p': 6, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 182, 'parent_local': 1, 'child_local': 27, 'descendant_first': 96, 'descendant_stop': 112, 'face_count': 192}), ({'o': 2, 'p': 6, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 54, 'parent_local': 1, 'child_local': 26, 'descendant_first': 6, 'descendant_stop': 7, 'face_count': 192}), ({'o': 2, 'p': 3, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 19, 'parent_local': 0, 'child_local': 14, 'descendant_first': 48, 'descendant_stop': 64, 'face_count': 192}), ({'o': 3, 'p': 21, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 213, 'parent_local': 5, 'child_local': 86, 'descendant_first': 84, 'descendant_stop': 88, 'face_count': 768})], 3: [({'o': 2, 'p': 7, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 55, 'parent_local': 1, 'child_local': 30, 'descendant_first': 112, 'descendant_stop': 128, 'face_count': 192}), ({'o': 2, 'p': 2, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 2, 'parent_local': 0, 'child_local': 8, 'descendant_first': 32, 'descendant_stop': 48, 'face_count': 192}), ({'o': 2, 'p': 7, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 183, 'parent_local': 1, 'child_local': 31, 'descendant_first': 112, 'descendant_stop': 128, 'face_count': 192}), ({'o': 2, 'p': 7, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 55, 'parent_local': 1, 'child_local': 30, 'descendant_first': 7, 'descendant_stop': 8, 'face_count': 192}), ({'o': 2, 'p': 4, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 20, 'parent_local': 1, 'child_local': 18, 'descendant_first': 64, 'descendant_stop': 80, 'face_count': 192}), ({'o': 3, 'p': 22, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 214, 'parent_local': 5, 'child_local': 90, 'descendant_first': 88, 'descendant_stop': 92, 'face_count': 768})], 4: [({'o': 2, 'p': 8, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 56, 'parent_local': 2, 'child_local': 34, 'descendant_first': 128, 'descendant_stop': 144, 'face_count': 192}), ({'o': 2, 'p': 3, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 3, 'parent_local': 0, 'child_local': 12, 'descendant_first': 48, 'descendant_stop': 64, 'face_count': 192}), ({'o': 2, 'p': 8, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 184, 'parent_local': 2, 'child_local': 35, 'descendant_first': 128, 'descendant_stop': 144, 'face_count': 192}), ({'o': 2, 'p': 8, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 56, 'parent_local': 2, 'child_local': 34, 'descendant_first': 8, 'descendant_stop': 9, 'face_count': 192}), ({'o': 2, 'p': 5, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 21, 'parent_local': 1, 'child_local': 22, 'descendant_first': 80, 'descendant_stop': 96, 'face_count': 192}), ({'o': 3, 'p': 23, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 215, 'parent_local': 5, 'child_local': 94, 'descendant_first': 92, 'descendant_stop': 96, 'face_count': 768})], 5: [({'o': 2, 'p': 9, 'f': 3, 'k': 2, 'depth': 2}, {'global_pixel': 57, 'parent_local': 2, 'child_local': 38, 'descendant_first': 144, 'descendant_stop': 160, 'face_count': 192}), ({'o': 2, 'p': 4, 'f': 0, 'k': 0, 'depth': 2}, {'global_pixel': 4, 'parent_local': 1, 'child_local': 16, 'descendant_first': 64, 'descendant_stop': 80, 'face_count': 192}), ({'o': 2, 'p': 9, 'f': 11, 'k': 3, 'depth': 2}, {'global_pixel': 185, 'parent_local': 2, 'child_local': 39, 'descendant_first': 144, 'descendant_stop': 160, 'face_count': 192}), ({'o': 2, 'p': 9, 'f': 3, 'k': 2, 'depth': 0}, {'global_pixel': 57, 'parent_local': 2, 'child_local': 38, 'descendant_first': 9, 'descendant_stop': 10, 'face_count': 192}), ({'o': 2, 'p': 6, 'f': 1, 'k': 2, 'depth': 2}, {'global_pixel': 22, 'parent_local': 1, 'child_local': 26, 'descendant_first': 96, 'descendant_stop': 112, 'face_count': 192}), ({'o': 3, 'p': 24, 'f': 3, 'k': 2, 'depth': 1}, {'global_pixel': 216, 'parent_local': 6, 'child_local': 98, 'descendant_first': 96, 'descendant_stop': 100, 'face_count': 768})]}
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 parent local while other fields remain valid.

A stipulated hierarchical sky tessellation has 12 base faces and four nested children per cell. At order o a face has 4**o pixels. p is the local pixel index, f the face, k the child digit. Parent and descendant ranges are nested indexing operations; no geometric HEALPix projection is implemented. Output fields are defined by: global_pixel = d['f']*4**d['o']+d['p']; parent_local = d['p']//4; child_local = 4*d['p']+d['k']; descendant_first = d['p']*4**d['depth']; descendant_stop = (d['p']+1)*4**d['depth']; face_count = 12*4**d['o']

split: open-access