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.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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