FA-55071 / Astronomical coordinate conventions / Open access
Echelle order coordinate: Extraction upper edge is detached from the dispersion-dependent order trace · case 01
The adapter reports an incorrect upper aperture while other fields remain valid.
ROOT CAUSE
Extraction upper edge is detached from the dispersion-dependent order trace. Faulty expression: d['t0']+d['h']
VERIFIED REPAIR
Preserve the declared model convention at this site: d['t0']+d['t1']*d['x']+d['h']
Unsuccessful approach: A partial convention repair still uses d['t0']+d['t1']*d['x']+2*d['h']
Case contract
A reduced echelle extractor uses detector x along dispersion and y across orders. The blaze coordinate is centered on bx, trace is t0+t1*x, order-normalized wavelength is k/m, and rectangular extraction bounds use half-height h about that trace. Orders m are positive. Output fields are defined by: trace_offset = d['y']-d['t0']-d['t1']*d['x']; blaze_coordinate = d['x']-d['bx']; order_wavelength = d['k']/d['m']; lower_aperture = d['t0']+d['t1']*d['x']-d['h']; upper_aperture = d['t0']+d['t1']*d['x']+d['h']; neighbor_trace = d['t0']+d['t1']*d['x']+d['pitch']
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 {'trace_offset': d['y']-d['t0']-d['t1']*d['x'], 'blaze_coordinate': d['x']-d['bx'], 'order_wavelength': d['k']/d['m'], 'lower_aperture': d['t0']+d['t1']*d['x']-d['h'], 'upper_aperture': d['t0']+d['h'], 'neighbor_trace': d['t0']+d['t1']*d['x']+d['pitch']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'x': 4, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -3, 'blaze_coordinate': 2, 'order_wavelength': 40.0, 'lower_aperture': 9, 'upper_aperture': 13, 'neighbor_trace': 16}), ({'x': 4, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 2, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 4, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -3, 'blaze_coordinate': 2, 'order_wavelength': 40.0, 'lower_aperture': 11, 'upper_aperture': 11, 'neighbor_trace': 16}), ({'x': 4, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -3, 'blaze_coordinate': 2, 'order_wavelength': 120.0, 'lower_aperture': 9, 'upper_aperture': 13, 'neighbor_trace': 16}), ({'x': 4, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -1, 'blaze_coordinate': 2, 'order_wavelength': 40.0, 'lower_aperture': -3, 'upper_aperture': 1, 'neighbor_trace': 4}), ({'x': 4, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -3, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': 9, 'upper_aperture': 13, 'neighbor_trace': 18})], 2: [({'x': 5, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -5, 'blaze_coordinate': 3, 'order_wavelength': 40.0, 'lower_aperture': 11, 'upper_aperture': 15, 'neighbor_trace': 18}), ({'x': 5, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 3, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 5, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -5, 'blaze_coordinate': 3, 'order_wavelength': 40.0, 'lower_aperture': 13, 'upper_aperture': 13, 'neighbor_trace': 18}), ({'x': 5, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -5, 'blaze_coordinate': 3, 'order_wavelength': 120.0, 'lower_aperture': 11, 'upper_aperture': 15, 'neighbor_trace': 18}), ({'x': 5, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 0, 'blaze_coordinate': 3, 'order_wavelength': 40.0, 'lower_aperture': -4, 'upper_aperture': 0, 'neighbor_trace': 3}), ({'x': 5, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -5, 'blaze_coordinate': 7, 'order_wavelength': 40.0, 'lower_aperture': 11, 'upper_aperture': 15, 'neighbor_trace': 20})], 3: [({'x': 6, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -7, 'blaze_coordinate': 4, 'order_wavelength': 40.0, 'lower_aperture': 13, 'upper_aperture': 17, 'neighbor_trace': 20}), ({'x': 6, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 4, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 6, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -7, 'blaze_coordinate': 4, 'order_wavelength': 40.0, 'lower_aperture': 15, 'upper_aperture': 15, 'neighbor_trace': 20}), ({'x': 6, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -7, 'blaze_coordinate': 4, 'order_wavelength': 120.0, 'lower_aperture': 13, 'upper_aperture': 17, 'neighbor_trace': 20}), ({'x': 6, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 1, 'blaze_coordinate': 4, 'order_wavelength': 40.0, 'lower_aperture': -5, 'upper_aperture': -1, 'neighbor_trace': 2}), ({'x': 6, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -7, 'blaze_coordinate': 8, 'order_wavelength': 40.0, 'lower_aperture': 13, 'upper_aperture': 17, 'neighbor_trace': 22})], 4: [({'x': 7, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -9, 'blaze_coordinate': 5, 'order_wavelength': 40.0, 'lower_aperture': 15, 'upper_aperture': 19, 'neighbor_trace': 22}), ({'x': 7, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 5, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 7, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -9, 'blaze_coordinate': 5, 'order_wavelength': 40.0, 'lower_aperture': 17, 'upper_aperture': 17, 'neighbor_trace': 22}), ({'x': 7, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -9, 'blaze_coordinate': 5, 'order_wavelength': 120.0, 'lower_aperture': 15, 'upper_aperture': 19, 'neighbor_trace': 22}), ({'x': 7, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 2, 'blaze_coordinate': 5, 'order_wavelength': 40.0, 'lower_aperture': -6, 'upper_aperture': -2, 'neighbor_trace': 1}), ({'x': 7, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -9, 'blaze_coordinate': 9, 'order_wavelength': 40.0, 'lower_aperture': 15, 'upper_aperture': 19, 'neighbor_trace': 24})], 5: [({'x': 8, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -11, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': 17, 'upper_aperture': 21, 'neighbor_trace': 24}), ({'x': 8, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 8, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -11, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': 19, 'upper_aperture': 19, 'neighbor_trace': 24}), ({'x': 8, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -11, 'blaze_coordinate': 6, 'order_wavelength': 120.0, 'lower_aperture': 17, 'upper_aperture': 21, 'neighbor_trace': 24}), ({'x': 8, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 3, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': -7, 'upper_aperture': -3, 'neighbor_trace': 0}), ({'x': 8, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -11, 'blaze_coordinate': 10, 'order_wavelength': 40.0, 'lower_aperture': 17, 'upper_aperture': 21, 'neighbor_trace': 26})]}
for i, (record, expected) in enumerate(fixtures[N]):
check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| astronomical fixture 0 | {'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 5} | {'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 13} | Failed |
| astronomical fixture 1 | {'blaze_coordinate': 2, 'lower_aperture': 1, 'neighbor_trace': 8, 'order_wavelength': 40.0, 'trace_offset': 5, 'upper_aperture': 5} | {'blaze_coordinate': 2, 'lower_aperture': 1, 'neighbor_trace': 8, 'order_wavelength': 40.0, 'trace_offset': 5, 'upper_aperture': 5} | Passed |
| astronomical fixture 2 | {'blaze_coordinate': 2, 'lower_aperture': 11, 'neighbor_trace': 16, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 3} | {'blaze_coordinate': 2, 'lower_aperture': 11, 'neighbor_trace': 16, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 11} | Failed |
| astronomical fixture 3 | {'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 120.0, 'trace_offset': -3, 'upper_aperture': 5} | {'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 120.0, 'trace_offset': -3, 'upper_aperture': 13} | Failed |
| astronomical fixture 4 | {'blaze_coordinate': 2, 'lower_aperture': -3, 'neighbor_trace': 4, 'order_wavelength': 40.0, 'trace_offset': -1, 'upper_aperture': 5} | {'blaze_coordinate': 2, 'lower_aperture': -3, 'neighbor_trace': 4, 'order_wavelength': 40.0, 'trace_offset': -1, 'upper_aperture': 1} | Failed |
| astronomical fixture 5 | {'blaze_coordinate': 6, 'lower_aperture': 9, 'neighbor_trace': 18, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 5} | {'blaze_coordinate': 6, 'lower_aperture': 9, 'neighbor_trace': 18, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 13} | Failed |
SHA-256 / b60d0ab53f6d62f1106790a2c98eb0019e60414daca1c71ac3dc3fb96fdaf895
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'trace_offset': d['y']-d['t0']-d['t1']*d['x'], 'blaze_coordinate': d['x']-d['bx'], 'order_wavelength': d['k']/d['m'], 'lower_aperture': d['t0']+d['t1']*d['x']-d['h'], 'upper_aperture': d['t0']+d['t1']*d['x']+2*d['h'], 'neighbor_trace': d['t0']+d['t1']*d['x']+d['pitch']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'x': 4, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -3, 'blaze_coordinate': 2, 'order_wavelength': 40.0, 'lower_aperture': 9, 'upper_aperture': 13, 'neighbor_trace': 16}), ({'x': 4, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 2, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 4, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -3, 'blaze_coordinate': 2, 'order_wavelength': 40.0, 'lower_aperture': 11, 'upper_aperture': 11, 'neighbor_trace': 16}), ({'x': 4, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -3, 'blaze_coordinate': 2, 'order_wavelength': 120.0, 'lower_aperture': 9, 'upper_aperture': 13, 'neighbor_trace': 16}), ({'x': 4, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -1, 'blaze_coordinate': 2, 'order_wavelength': 40.0, 'lower_aperture': -3, 'upper_aperture': 1, 'neighbor_trace': 4}), ({'x': 4, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -3, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': 9, 'upper_aperture': 13, 'neighbor_trace': 18})], 2: [({'x': 5, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -5, 'blaze_coordinate': 3, 'order_wavelength': 40.0, 'lower_aperture': 11, 'upper_aperture': 15, 'neighbor_trace': 18}), ({'x': 5, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 3, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 5, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -5, 'blaze_coordinate': 3, 'order_wavelength': 40.0, 'lower_aperture': 13, 'upper_aperture': 13, 'neighbor_trace': 18}), ({'x': 5, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -5, 'blaze_coordinate': 3, 'order_wavelength': 120.0, 'lower_aperture': 11, 'upper_aperture': 15, 'neighbor_trace': 18}), ({'x': 5, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 0, 'blaze_coordinate': 3, 'order_wavelength': 40.0, 'lower_aperture': -4, 'upper_aperture': 0, 'neighbor_trace': 3}), ({'x': 5, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -5, 'blaze_coordinate': 7, 'order_wavelength': 40.0, 'lower_aperture': 11, 'upper_aperture': 15, 'neighbor_trace': 20})], 3: [({'x': 6, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -7, 'blaze_coordinate': 4, 'order_wavelength': 40.0, 'lower_aperture': 13, 'upper_aperture': 17, 'neighbor_trace': 20}), ({'x': 6, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 4, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 6, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -7, 'blaze_coordinate': 4, 'order_wavelength': 40.0, 'lower_aperture': 15, 'upper_aperture': 15, 'neighbor_trace': 20}), ({'x': 6, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -7, 'blaze_coordinate': 4, 'order_wavelength': 120.0, 'lower_aperture': 13, 'upper_aperture': 17, 'neighbor_trace': 20}), ({'x': 6, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 1, 'blaze_coordinate': 4, 'order_wavelength': 40.0, 'lower_aperture': -5, 'upper_aperture': -1, 'neighbor_trace': 2}), ({'x': 6, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -7, 'blaze_coordinate': 8, 'order_wavelength': 40.0, 'lower_aperture': 13, 'upper_aperture': 17, 'neighbor_trace': 22})], 4: [({'x': 7, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -9, 'blaze_coordinate': 5, 'order_wavelength': 40.0, 'lower_aperture': 15, 'upper_aperture': 19, 'neighbor_trace': 22}), ({'x': 7, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 5, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 7, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -9, 'blaze_coordinate': 5, 'order_wavelength': 40.0, 'lower_aperture': 17, 'upper_aperture': 17, 'neighbor_trace': 22}), ({'x': 7, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -9, 'blaze_coordinate': 5, 'order_wavelength': 120.0, 'lower_aperture': 15, 'upper_aperture': 19, 'neighbor_trace': 22}), ({'x': 7, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 2, 'blaze_coordinate': 5, 'order_wavelength': 40.0, 'lower_aperture': -6, 'upper_aperture': -2, 'neighbor_trace': 1}), ({'x': 7, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -9, 'blaze_coordinate': 9, 'order_wavelength': 40.0, 'lower_aperture': 15, 'upper_aperture': 19, 'neighbor_trace': 24})], 5: [({'x': 8, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -11, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': 17, 'upper_aperture': 21, 'neighbor_trace': 24}), ({'x': 8, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 8, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -11, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': 19, 'upper_aperture': 19, 'neighbor_trace': 24}), ({'x': 8, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -11, 'blaze_coordinate': 6, 'order_wavelength': 120.0, 'lower_aperture': 17, 'upper_aperture': 21, 'neighbor_trace': 24}), ({'x': 8, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 3, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': -7, 'upper_aperture': -3, 'neighbor_trace': 0}), ({'x': 8, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -11, 'blaze_coordinate': 10, 'order_wavelength': 40.0, 'lower_aperture': 17, 'upper_aperture': 21, 'neighbor_trace': 26})]}
for i, (record, expected) in enumerate(fixtures[N]):
check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| astronomical fixture 0 | {'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 15} | {'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 13} | Failed |
| astronomical fixture 1 | {'blaze_coordinate': 2, 'lower_aperture': 1, 'neighbor_trace': 8, 'order_wavelength': 40.0, 'trace_offset': 5, 'upper_aperture': 7} | {'blaze_coordinate': 2, 'lower_aperture': 1, 'neighbor_trace': 8, 'order_wavelength': 40.0, 'trace_offset': 5, 'upper_aperture': 5} | Failed |
| astronomical fixture 2 | {'blaze_coordinate': 2, 'lower_aperture': 11, 'neighbor_trace': 16, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 11} | {'blaze_coordinate': 2, 'lower_aperture': 11, 'neighbor_trace': 16, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 11} | Passed |
| astronomical fixture 3 | {'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 120.0, 'trace_offset': -3, 'upper_aperture': 15} | {'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 120.0, 'trace_offset': -3, 'upper_aperture': 13} | Failed |
| astronomical fixture 4 | {'blaze_coordinate': 2, 'lower_aperture': -3, 'neighbor_trace': 4, 'order_wavelength': 40.0, 'trace_offset': -1, 'upper_aperture': 3} | {'blaze_coordinate': 2, 'lower_aperture': -3, 'neighbor_trace': 4, 'order_wavelength': 40.0, 'trace_offset': -1, 'upper_aperture': 1} | Failed |
| astronomical fixture 5 | {'blaze_coordinate': 6, 'lower_aperture': 9, 'neighbor_trace': 18, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 15} | {'blaze_coordinate': 6, 'lower_aperture': 9, 'neighbor_trace': 18, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 13} | Failed |
SHA-256 / 7131e18c0b186da56e37b60808ff410c390ab22e2799df8fb86125eb9dc0c2d0
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'trace_offset': d['y']-d['t0']-d['t1']*d['x'], 'blaze_coordinate': d['x']-d['bx'], 'order_wavelength': d['k']/d['m'], 'lower_aperture': d['t0']+d['t1']*d['x']-d['h'], 'upper_aperture': d['t0']+d['t1']*d['x']+d['h'], 'neighbor_trace': d['t0']+d['t1']*d['x']+d['pitch']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'x': 4, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -3, 'blaze_coordinate': 2, 'order_wavelength': 40.0, 'lower_aperture': 9, 'upper_aperture': 13, 'neighbor_trace': 16}), ({'x': 4, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 2, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 4, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -3, 'blaze_coordinate': 2, 'order_wavelength': 40.0, 'lower_aperture': 11, 'upper_aperture': 11, 'neighbor_trace': 16}), ({'x': 4, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -3, 'blaze_coordinate': 2, 'order_wavelength': 120.0, 'lower_aperture': 9, 'upper_aperture': 13, 'neighbor_trace': 16}), ({'x': 4, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -1, 'blaze_coordinate': 2, 'order_wavelength': 40.0, 'lower_aperture': -3, 'upper_aperture': 1, 'neighbor_trace': 4}), ({'x': 4, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -3, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': 9, 'upper_aperture': 13, 'neighbor_trace': 18})], 2: [({'x': 5, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -5, 'blaze_coordinate': 3, 'order_wavelength': 40.0, 'lower_aperture': 11, 'upper_aperture': 15, 'neighbor_trace': 18}), ({'x': 5, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 3, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 5, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -5, 'blaze_coordinate': 3, 'order_wavelength': 40.0, 'lower_aperture': 13, 'upper_aperture': 13, 'neighbor_trace': 18}), ({'x': 5, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -5, 'blaze_coordinate': 3, 'order_wavelength': 120.0, 'lower_aperture': 11, 'upper_aperture': 15, 'neighbor_trace': 18}), ({'x': 5, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 0, 'blaze_coordinate': 3, 'order_wavelength': 40.0, 'lower_aperture': -4, 'upper_aperture': 0, 'neighbor_trace': 3}), ({'x': 5, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -5, 'blaze_coordinate': 7, 'order_wavelength': 40.0, 'lower_aperture': 11, 'upper_aperture': 15, 'neighbor_trace': 20})], 3: [({'x': 6, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -7, 'blaze_coordinate': 4, 'order_wavelength': 40.0, 'lower_aperture': 13, 'upper_aperture': 17, 'neighbor_trace': 20}), ({'x': 6, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 4, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 6, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -7, 'blaze_coordinate': 4, 'order_wavelength': 40.0, 'lower_aperture': 15, 'upper_aperture': 15, 'neighbor_trace': 20}), ({'x': 6, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -7, 'blaze_coordinate': 4, 'order_wavelength': 120.0, 'lower_aperture': 13, 'upper_aperture': 17, 'neighbor_trace': 20}), ({'x': 6, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 1, 'blaze_coordinate': 4, 'order_wavelength': 40.0, 'lower_aperture': -5, 'upper_aperture': -1, 'neighbor_trace': 2}), ({'x': 6, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -7, 'blaze_coordinate': 8, 'order_wavelength': 40.0, 'lower_aperture': 13, 'upper_aperture': 17, 'neighbor_trace': 22})], 4: [({'x': 7, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -9, 'blaze_coordinate': 5, 'order_wavelength': 40.0, 'lower_aperture': 15, 'upper_aperture': 19, 'neighbor_trace': 22}), ({'x': 7, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 5, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 7, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -9, 'blaze_coordinate': 5, 'order_wavelength': 40.0, 'lower_aperture': 17, 'upper_aperture': 17, 'neighbor_trace': 22}), ({'x': 7, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -9, 'blaze_coordinate': 5, 'order_wavelength': 120.0, 'lower_aperture': 15, 'upper_aperture': 19, 'neighbor_trace': 22}), ({'x': 7, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 2, 'blaze_coordinate': 5, 'order_wavelength': 40.0, 'lower_aperture': -6, 'upper_aperture': -2, 'neighbor_trace': 1}), ({'x': 7, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -9, 'blaze_coordinate': 9, 'order_wavelength': 40.0, 'lower_aperture': 15, 'upper_aperture': 19, 'neighbor_trace': 24})], 5: [({'x': 8, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': -11, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': 17, 'upper_aperture': 21, 'neighbor_trace': 24}), ({'x': 8, 'y': 8, 'bx': 2, 't0': 3, 't1': 0, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 5, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': 1, 'upper_aperture': 5, 'neighbor_trace': 8}), ({'x': 8, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 0, 'pitch': 5}, {'trace_offset': -11, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': 19, 'upper_aperture': 19, 'neighbor_trace': 24}), ({'x': 8, 'y': 8, 'bx': 2, 't0': 3, 't1': 2, 'k': 120, 'm': 1, 'h': 2, 'pitch': 5}, {'trace_offset': -11, 'blaze_coordinate': 6, 'order_wavelength': 120.0, 'lower_aperture': 17, 'upper_aperture': 21, 'neighbor_trace': 24}), ({'x': 8, 'y': -2, 'bx': 2, 't0': 3, 't1': -1, 'k': 120, 'm': 3, 'h': 2, 'pitch': 5}, {'trace_offset': 3, 'blaze_coordinate': 6, 'order_wavelength': 40.0, 'lower_aperture': -7, 'upper_aperture': -3, 'neighbor_trace': 0}), ({'x': 8, 'y': 8, 'bx': -2, 't0': 3, 't1': 2, 'k': 120, 'm': 3, 'h': 2, 'pitch': 7}, {'trace_offset': -11, 'blaze_coordinate': 10, 'order_wavelength': 40.0, 'lower_aperture': 17, 'upper_aperture': 21, 'neighbor_trace': 26})]}
for i, (record, expected) in enumerate(fixtures[N]):
check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| astronomical fixture 0 | {'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 13} | {'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 13} | Passed |
| astronomical fixture 1 | {'blaze_coordinate': 2, 'lower_aperture': 1, 'neighbor_trace': 8, 'order_wavelength': 40.0, 'trace_offset': 5, 'upper_aperture': 5} | {'blaze_coordinate': 2, 'lower_aperture': 1, 'neighbor_trace': 8, 'order_wavelength': 40.0, 'trace_offset': 5, 'upper_aperture': 5} | Passed |
| astronomical fixture 2 | {'blaze_coordinate': 2, 'lower_aperture': 11, 'neighbor_trace': 16, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 11} | {'blaze_coordinate': 2, 'lower_aperture': 11, 'neighbor_trace': 16, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 11} | Passed |
| astronomical fixture 3 | {'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 120.0, 'trace_offset': -3, 'upper_aperture': 13} | {'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 120.0, 'trace_offset': -3, 'upper_aperture': 13} | Passed |
| astronomical fixture 4 | {'blaze_coordinate': 2, 'lower_aperture': -3, 'neighbor_trace': 4, 'order_wavelength': 40.0, 'trace_offset': -1, 'upper_aperture': 1} | {'blaze_coordinate': 2, 'lower_aperture': -3, 'neighbor_trace': 4, 'order_wavelength': 40.0, 'trace_offset': -1, 'upper_aperture': 1} | Passed |
| astronomical fixture 5 | {'blaze_coordinate': 6, 'lower_aperture': 9, 'neighbor_trace': 18, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 13} | {'blaze_coordinate': 6, 'lower_aperture': 9, 'neighbor_trace': 18, 'order_wavelength': 40.0, 'trace_offset': -3, 'upper_aperture': 13} | Passed |
SHA-256 / d3dcd2b989a717849347303175dc6a9cd7af9b4e7e218e5e500a1aa39c54912a
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:45:54.310045+00:00.
Case digest / f25061c72d35a97796f3bf3c951ca0bfcbfc9d928b928db5197d6fbe7f8be8c1