FAILURE MAP
← Case archive

FA-55061 / Astronomical coordinate conventions / Open access

Echelle order coordinate: Echelle order labeling applies multiplication rather than reciprocal order scaling · case 01

The adapter reports an incorrect order wavelength while other fields remain valid.

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

ROOT CAUSE

Echelle order labeling applies multiplication rather than reciprocal order scaling. Faulty expression: d['k']*d['m']

VERIFIED REPAIR

Preserve the declared model convention at this site: d['k']/d['m']

Unsuccessful approach: A partial convention repair still uses d['k']/(d['m']+1)

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['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 fixtureActualExpectedOutcome
astronomical fixture 0{'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 360, '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}Failed
astronomical fixture 1{'blaze_coordinate': 2, 'lower_aperture': 1, 'neighbor_trace': 8, 'order_wavelength': 360, '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}Failed
astronomical fixture 2{'blaze_coordinate': 2, 'lower_aperture': 11, 'neighbor_trace': 16, 'order_wavelength': 360, '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}Failed
astronomical fixture 3{'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 120, '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': 360, '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}Failed
astronomical fixture 5{'blaze_coordinate': 6, 'lower_aperture': 9, 'neighbor_trace': 18, 'order_wavelength': 360, '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}Failed

SHA-256 / 4b08847bd9500023d8ebb790ed896aea7ccb5c0586a320dac76d6efc1e96aa4b

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']+1), '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 fixtureActualExpectedOutcome
astronomical fixture 0{'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 30.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}Failed
astronomical fixture 1{'blaze_coordinate': 2, 'lower_aperture': 1, 'neighbor_trace': 8, 'order_wavelength': 30.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}Failed
astronomical fixture 2{'blaze_coordinate': 2, 'lower_aperture': 11, 'neighbor_trace': 16, 'order_wavelength': 30.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}Failed
astronomical fixture 3{'blaze_coordinate': 2, 'lower_aperture': 9, 'neighbor_trace': 16, 'order_wavelength': 60.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}Failed
astronomical fixture 4{'blaze_coordinate': 2, 'lower_aperture': -3, 'neighbor_trace': 4, 'order_wavelength': 30.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}Failed
astronomical fixture 5{'blaze_coordinate': 6, 'lower_aperture': 9, 'neighbor_trace': 18, 'order_wavelength': 30.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}Failed

SHA-256 / 64bb45c97efff3aa60dd24cb5f1c288fc0d63399201f79c5607b72b8104f1583

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 fixtureActualExpectedOutcome
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.147832+00:00.

Case digest / f0fab72b41dd5b489d2641413410352e4f49ddfdce90fb2b82f08be4b28f3f99