FAILURE MAP
← Case archive

FA-55871 / Astronomical coordinate conventions / Open access

Astrometric perspective transport: Perspective direction transport uses initial rather than propagated distance · case 01

The adapter reports an incorrect direction tangent while other fields remain valid.

Verified by executionVariant 1 · 6 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Perspective direction transport uses initial rather than propagated distance. Faulty expression: d['x']+d['u']*d['t']/d['r']

VERIFIED REPAIR

Preserve the declared model convention at this site: d['x']+d['u']*d['t']/(d['r']+d['v']*d['t'])

Unsuccessful approach: A partial convention repair still uses d['x']+d['u']*d['t']/(d['r']-d['v']*d['t'])

Case contract

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

Why this case matters

Catalog, detector, sky-coordinate, and spectroscopy adapters must preserve the association between numeric coordinates and their declared reference conventions.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'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)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'angular_rate': 0.10416666666666667, 'direction_tangent': 5.3, 'initial_angular_acceleration': -0.03, 'radial_distance': 24, 'radial_fraction': 0.2, 'tangential_displacement': 6}{'angular_rate': 0.10416666666666667, 'direction_tangent': 5.25, 'initial_angular_acceleration': -0.03, 'radial_distance': 24, 'radial_fraction': 0.2, 'tangential_displacement': 6}Failed
astronomical fixture 1{'angular_rate': 0.15, 'direction_tangent': 5.3, 'initial_angular_acceleration': 0.0, 'radial_distance': 20, 'radial_fraction': 0.0, 'tangential_displacement': 6}{'angular_rate': 0.15, 'direction_tangent': 5.3, 'initial_angular_acceleration': 0.0, 'radial_distance': 20, 'radial_fraction': 0.0, 'tangential_displacement': 6}Passed
astronomical fixture 2{'angular_rate': 0.15, 'direction_tangent': 5.0, 'initial_angular_acceleration': -0.03, 'radial_distance': 20, 'radial_fraction': 0.0, 'tangential_displacement': 0}{'angular_rate': 0.15, 'direction_tangent': 5.0, 'initial_angular_acceleration': -0.03, 'radial_distance': 20, 'radial_fraction': 0.0, 'tangential_displacement': 0}Passed
astronomical fixture 3{'angular_rate': 0.18518518518518517, 'direction_tangent': 4.85, 'initial_angular_acceleration': -0.03, 'radial_distance': 18, 'radial_fraction': -0.1, 'tangential_displacement': -3}{'angular_rate': 0.18518518518518517, 'direction_tangent': 4.833333333333333, 'initial_angular_acceleration': -0.03, 'radial_distance': 18, 'radial_fraction': -0.1, 'tangential_displacement': -3}Failed
astronomical fixture 4{'angular_rate': 0.18518518518518517, 'direction_tangent': 5.3, 'initial_angular_acceleration': 0.015, 'radial_distance': 18, 'radial_fraction': -0.1, 'tangential_displacement': 6}{'angular_rate': 0.18518518518518517, 'direction_tangent': 5.333333333333333, 'initial_angular_acceleration': 0.015, 'radial_distance': 18, 'radial_fraction': -0.1, 'tangential_displacement': 6}Failed
astronomical fixture 5{'angular_rate': 0.0, 'direction_tangent': 0.0, 'initial_angular_acceleration': 0.0, 'radial_distance': 24, 'radial_fraction': 0.2, 'tangential_displacement': 0}{'angular_rate': 0.0, 'direction_tangent': 0.0, 'initial_angular_acceleration': 0.0, 'radial_distance': 24, 'radial_fraction': 0.2, 'tangential_displacement': 0}Passed

SHA-256 / 6e7c2dfc99639e67dc5445ceb4a7cef3e82b1e93c6f6955b397d5f2898f2c256

2 / The unsuccessful fix

Exit 1
"""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)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'angular_rate': 0.10416666666666667, 'direction_tangent': 5.375, 'initial_angular_acceleration': -0.03, 'radial_distance': 24, 'radial_fraction': 0.2, 'tangential_displacement': 6}{'angular_rate': 0.10416666666666667, 'direction_tangent': 5.25, 'initial_angular_acceleration': -0.03, 'radial_distance': 24, 'radial_fraction': 0.2, 'tangential_displacement': 6}Failed
astronomical fixture 1{'angular_rate': 0.15, 'direction_tangent': 5.3, 'initial_angular_acceleration': 0.0, 'radial_distance': 20, 'radial_fraction': 0.0, 'tangential_displacement': 6}{'angular_rate': 0.15, 'direction_tangent': 5.3, 'initial_angular_acceleration': 0.0, 'radial_distance': 20, 'radial_fraction': 0.0, 'tangential_displacement': 6}Passed
astronomical fixture 2{'angular_rate': 0.15, 'direction_tangent': 5.0, 'initial_angular_acceleration': -0.03, 'radial_distance': 20, 'radial_fraction': 0.0, 'tangential_displacement': 0}{'angular_rate': 0.15, 'direction_tangent': 5.0, 'initial_angular_acceleration': -0.03, 'radial_distance': 20, 'radial_fraction': 0.0, 'tangential_displacement': 0}Passed
astronomical fixture 3{'angular_rate': 0.18518518518518517, 'direction_tangent': 4.863636363636363, 'initial_angular_acceleration': -0.03, 'radial_distance': 18, 'radial_fraction': -0.1, 'tangential_displacement': -3}{'angular_rate': 0.18518518518518517, 'direction_tangent': 4.833333333333333, 'initial_angular_acceleration': -0.03, 'radial_distance': 18, 'radial_fraction': -0.1, 'tangential_displacement': -3}Failed
astronomical fixture 4{'angular_rate': 0.18518518518518517, 'direction_tangent': 5.2727272727272725, 'initial_angular_acceleration': 0.015, 'radial_distance': 18, 'radial_fraction': -0.1, 'tangential_displacement': 6}{'angular_rate': 0.18518518518518517, 'direction_tangent': 5.333333333333333, 'initial_angular_acceleration': 0.015, 'radial_distance': 18, 'radial_fraction': -0.1, 'tangential_displacement': 6}Failed
astronomical fixture 5{'angular_rate': 0.0, 'direction_tangent': 0.0, 'initial_angular_acceleration': 0.0, 'radial_distance': 24, 'radial_fraction': 0.2, 'tangential_displacement': 0}{'angular_rate': 0.0, 'direction_tangent': 0.0, 'initial_angular_acceleration': 0.0, 'radial_distance': 24, 'radial_fraction': 0.2, 'tangential_displacement': 0}Passed

SHA-256 / 7783a4bfd5a7c7a38ae85c9ec748df3299d520129d3dba90eeb6735aed2a5b17

3 / The verified repair

Exit 0
"""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)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'angular_rate': 0.10416666666666667, 'direction_tangent': 5.25, 'initial_angular_acceleration': -0.03, 'radial_distance': 24, 'radial_fraction': 0.2, 'tangential_displacement': 6}{'angular_rate': 0.10416666666666667, 'direction_tangent': 5.25, 'initial_angular_acceleration': -0.03, 'radial_distance': 24, 'radial_fraction': 0.2, 'tangential_displacement': 6}Passed
astronomical fixture 1{'angular_rate': 0.15, 'direction_tangent': 5.3, 'initial_angular_acceleration': 0.0, 'radial_distance': 20, 'radial_fraction': 0.0, 'tangential_displacement': 6}{'angular_rate': 0.15, 'direction_tangent': 5.3, 'initial_angular_acceleration': 0.0, 'radial_distance': 20, 'radial_fraction': 0.0, 'tangential_displacement': 6}Passed
astronomical fixture 2{'angular_rate': 0.15, 'direction_tangent': 5.0, 'initial_angular_acceleration': -0.03, 'radial_distance': 20, 'radial_fraction': 0.0, 'tangential_displacement': 0}{'angular_rate': 0.15, 'direction_tangent': 5.0, 'initial_angular_acceleration': -0.03, 'radial_distance': 20, 'radial_fraction': 0.0, 'tangential_displacement': 0}Passed
astronomical fixture 3{'angular_rate': 0.18518518518518517, 'direction_tangent': 4.833333333333333, 'initial_angular_acceleration': -0.03, 'radial_distance': 18, 'radial_fraction': -0.1, 'tangential_displacement': -3}{'angular_rate': 0.18518518518518517, 'direction_tangent': 4.833333333333333, 'initial_angular_acceleration': -0.03, 'radial_distance': 18, 'radial_fraction': -0.1, 'tangential_displacement': -3}Passed
astronomical fixture 4{'angular_rate': 0.18518518518518517, 'direction_tangent': 5.333333333333333, 'initial_angular_acceleration': 0.015, 'radial_distance': 18, 'radial_fraction': -0.1, 'tangential_displacement': 6}{'angular_rate': 0.18518518518518517, 'direction_tangent': 5.333333333333333, 'initial_angular_acceleration': 0.015, 'radial_distance': 18, 'radial_fraction': -0.1, 'tangential_displacement': 6}Passed
astronomical fixture 5{'angular_rate': 0.0, 'direction_tangent': 0.0, 'initial_angular_acceleration': 0.0, 'radial_distance': 24, 'radial_fraction': 0.2, 'tangential_displacement': 0}{'angular_rate': 0.0, 'direction_tangent': 0.0, 'initial_angular_acceleration': 0.0, 'radial_distance': 24, 'radial_fraction': 0.2, 'tangential_displacement': 0}Passed

SHA-256 / c224f34264b97b3924f7e7ea6602735cee62dd84c89d8c704d0dc41186ba7493

Verification & scope

Explicitly stipulated finite algebraic adapter; no standards conformance, physical accuracy, or production-library claim. Inputs are the documented finite valid model domain. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:46:01.802325+00:00.

Case digest / ddc77a6c2038b495f3bb622b4e727c786f9cd38cc5e4073b1d5ee31e4e61f39c