FAILURE MAP
← Case archive

FA-56196 / Astronomical coordinate conventions / Open access

Spectrograph grating coordinate: Littrow reference is evaluated at the observed diffraction direction · case 01

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

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

ROOT CAUSE

Littrow reference is evaluated at the observed diffraction direction. Faulty expression: d['g']*d['a']/d['m']

VERIFIED REPAIR

Preserve the declared model convention at this site: 2*d['g']*d['a']/d['m']

Unsuccessful approach: A partial convention repair still uses d['g']*(d['a']+d['b'])/d['m']

Case contract

A stipulated grating adapter supplies spacing g, signed sine of incidence a, signed sine of diffraction b, positive order m, focal length F, and separate calibration line wavelength line. Wavelength is g*(a+b)/m. A Littrow reference has b=a; supplied diffraction cosine c permits a local angular dispersion derivative. Output fields are defined by: wavelength = d['g']*(d['a']+d['b'])/d['m']; littrow_wavelength = 2*d['g']*d['a']/d['m']; angular_dispersion = d['g']*d['c']/d['m']; linear_dispersion = d['g']*d['c']/(d['m']*d['F']); inferred_diffraction_sine = d['m']*d['line']/d['g']-d['a']; next_order_wavelength = d['g']*(d['a']+d['b'])/(d['m']+1)

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 {'wavelength': d['g']*(d['a']+d['b'])/d['m'], 'littrow_wavelength': d['g']*d['a']/d['m'], 'angular_dispersion': d['g']*d['c']/d['m'], 'linear_dispersion': d['g']*d['c']/(d['m']*d['F']), 'inferred_diffraction_sine': d['m']*d['line']/d['g']-d['a'], 'next_order_wavelength': d['g']*(d['a']+d['b'])/(d['m']+1)}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'g': 120, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 30.0, 'littrow_wavelength': 40.0, 'angular_dispersion': 20.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': -0.25, 'next_order_wavelength': 22.5}), ({'g': 120, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.0, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': 0.25, 'next_order_wavelength': 7.5}), ({'g': 120, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.0, 'littrow_wavelength': 40.0, 'angular_dispersion': 20.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': -0.25, 'next_order_wavelength': 7.5}), ({'g': 120, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 90.0, 'littrow_wavelength': 120.0, 'angular_dispersion': 60.0, 'linear_dispersion': 6.0, 'inferred_diffraction_sine': -0.4166666666666667, 'next_order_wavelength': 45.0}), ({'g': 120, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.0, 'littrow_wavelength': 20.0, 'angular_dispersion': 20.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': 0.0, 'next_order_wavelength': 15.0}), ({'g': 120, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 30.0, 'littrow_wavelength': 40.0, 'angular_dispersion': 40.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': -0.25, 'next_order_wavelength': 22.5})], 2: [({'g': 121, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 30.25, 'littrow_wavelength': 40.333333333333336, 'angular_dispersion': 20.166666666666668, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': -0.25206611570247933, 'next_order_wavelength': 22.6875}), ({'g': 121, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.083333333333334, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.166666666666668, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': 0.24793388429752067, 'next_order_wavelength': 7.5625}), ({'g': 121, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.083333333333334, 'littrow_wavelength': 40.333333333333336, 'angular_dispersion': 20.166666666666668, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': -0.25206611570247933, 'next_order_wavelength': 7.5625}), ({'g': 121, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 90.75, 'littrow_wavelength': 121.0, 'angular_dispersion': 60.5, 'linear_dispersion': 6.05, 'inferred_diffraction_sine': -0.41735537190082644, 'next_order_wavelength': 45.375}), ({'g': 121, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.166666666666668, 'littrow_wavelength': 20.166666666666668, 'angular_dispersion': 20.166666666666668, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': -0.002066115702479332, 'next_order_wavelength': 15.125}), ({'g': 121, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 30.25, 'littrow_wavelength': 40.333333333333336, 'angular_dispersion': 40.333333333333336, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': -0.25206611570247933, 'next_order_wavelength': 22.6875})], 3: [({'g': 122, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 30.5, 'littrow_wavelength': 40.666666666666664, 'angular_dispersion': 20.333333333333332, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': -0.2540983606557377, 'next_order_wavelength': 22.875}), ({'g': 122, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.166666666666666, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.333333333333332, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': 0.2459016393442623, 'next_order_wavelength': 7.625}), ({'g': 122, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.166666666666666, 'littrow_wavelength': 40.666666666666664, 'angular_dispersion': 20.333333333333332, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': -0.2540983606557377, 'next_order_wavelength': 7.625}), ({'g': 122, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 91.5, 'littrow_wavelength': 122.0, 'angular_dispersion': 61.0, 'linear_dispersion': 6.1, 'inferred_diffraction_sine': -0.4180327868852459, 'next_order_wavelength': 45.75}), ({'g': 122, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.333333333333332, 'littrow_wavelength': 20.333333333333332, 'angular_dispersion': 20.333333333333332, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': -0.0040983606557377095, 'next_order_wavelength': 15.25}), ({'g': 122, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 30.5, 'littrow_wavelength': 40.666666666666664, 'angular_dispersion': 40.666666666666664, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': -0.2540983606557377, 'next_order_wavelength': 22.875})], 4: [({'g': 123, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 30.75, 'littrow_wavelength': 41.0, 'angular_dispersion': 20.5, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': -0.25609756097560976, 'next_order_wavelength': 23.0625}), ({'g': 123, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.25, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.5, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': 0.24390243902439024, 'next_order_wavelength': 7.6875}), ({'g': 123, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.25, 'littrow_wavelength': 41.0, 'angular_dispersion': 20.5, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': -0.25609756097560976, 'next_order_wavelength': 7.6875}), ({'g': 123, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 92.25, 'littrow_wavelength': 123.0, 'angular_dispersion': 61.5, 'linear_dispersion': 6.15, 'inferred_diffraction_sine': -0.4186991869918699, 'next_order_wavelength': 46.125}), ({'g': 123, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.5, 'littrow_wavelength': 20.5, 'angular_dispersion': 20.5, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': -0.0060975609756097615, 'next_order_wavelength': 15.375}), ({'g': 123, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 30.75, 'littrow_wavelength': 41.0, 'angular_dispersion': 41.0, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': -0.25609756097560976, 'next_order_wavelength': 23.0625})], 5: [({'g': 124, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 31.0, 'littrow_wavelength': 41.333333333333336, 'angular_dispersion': 20.666666666666668, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': -0.25806451612903225, 'next_order_wavelength': 23.25}), ({'g': 124, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.333333333333334, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.666666666666668, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': 0.24193548387096775, 'next_order_wavelength': 7.75}), ({'g': 124, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.333333333333334, 'littrow_wavelength': 41.333333333333336, 'angular_dispersion': 20.666666666666668, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': -0.25806451612903225, 'next_order_wavelength': 7.75}), ({'g': 124, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 93.0, 'littrow_wavelength': 124.0, 'angular_dispersion': 62.0, 'linear_dispersion': 6.2, 'inferred_diffraction_sine': -0.41935483870967744, 'next_order_wavelength': 46.5}), ({'g': 124, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.666666666666668, 'littrow_wavelength': 20.666666666666668, 'angular_dispersion': 20.666666666666668, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': -0.008064516129032251, 'next_order_wavelength': 15.5}), ({'g': 124, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 31.0, 'littrow_wavelength': 41.333333333333336, 'angular_dispersion': 41.333333333333336, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': -0.25806451612903225, 'next_order_wavelength': 23.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'angular_dispersion': 20.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 20.0, 'next_order_wavelength': 22.5, 'wavelength': 30.0}{'angular_dispersion': 20.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 40.0, 'next_order_wavelength': 22.5, 'wavelength': 30.0}Failed
astronomical fixture 1{'angular_dispersion': 20.0, 'inferred_diffraction_sine': 0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 0.0, 'next_order_wavelength': 7.5, 'wavelength': 10.0}{'angular_dispersion': 20.0, 'inferred_diffraction_sine': 0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 0.0, 'next_order_wavelength': 7.5, 'wavelength': 10.0}Passed
astronomical fixture 2{'angular_dispersion': 20.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 20.0, 'next_order_wavelength': 7.5, 'wavelength': 10.0}{'angular_dispersion': 20.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 40.0, 'next_order_wavelength': 7.5, 'wavelength': 10.0}Failed
astronomical fixture 3{'angular_dispersion': 60.0, 'inferred_diffraction_sine': -0.4166666666666667, 'linear_dispersion': 6.0, 'littrow_wavelength': 60.0, 'next_order_wavelength': 45.0, 'wavelength': 90.0}{'angular_dispersion': 60.0, 'inferred_diffraction_sine': -0.4166666666666667, 'linear_dispersion': 6.0, 'littrow_wavelength': 120.0, 'next_order_wavelength': 45.0, 'wavelength': 90.0}Failed
astronomical fixture 4{'angular_dispersion': 20.0, 'inferred_diffraction_sine': 0.0, 'linear_dispersion': 2.0, 'littrow_wavelength': 10.0, 'next_order_wavelength': 15.0, 'wavelength': 20.0}{'angular_dispersion': 20.0, 'inferred_diffraction_sine': 0.0, 'linear_dispersion': 2.0, 'littrow_wavelength': 20.0, 'next_order_wavelength': 15.0, 'wavelength': 20.0}Failed
astronomical fixture 5{'angular_dispersion': 40.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 20.0, 'next_order_wavelength': 22.5, 'wavelength': 30.0}{'angular_dispersion': 40.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 40.0, 'next_order_wavelength': 22.5, 'wavelength': 30.0}Failed

SHA-256 / a8d56b123cf4c4384a60a9c54c0ab8c3421d4ebc4db8d026fb033cfc56949073

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(d):
    return {'wavelength': d['g']*(d['a']+d['b'])/d['m'], 'littrow_wavelength': d['g']*(d['a']+d['b'])/d['m'], 'angular_dispersion': d['g']*d['c']/d['m'], 'linear_dispersion': d['g']*d['c']/(d['m']*d['F']), 'inferred_diffraction_sine': d['m']*d['line']/d['g']-d['a'], 'next_order_wavelength': d['g']*(d['a']+d['b'])/(d['m']+1)}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'g': 120, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 30.0, 'littrow_wavelength': 40.0, 'angular_dispersion': 20.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': -0.25, 'next_order_wavelength': 22.5}), ({'g': 120, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.0, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': 0.25, 'next_order_wavelength': 7.5}), ({'g': 120, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.0, 'littrow_wavelength': 40.0, 'angular_dispersion': 20.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': -0.25, 'next_order_wavelength': 7.5}), ({'g': 120, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 90.0, 'littrow_wavelength': 120.0, 'angular_dispersion': 60.0, 'linear_dispersion': 6.0, 'inferred_diffraction_sine': -0.4166666666666667, 'next_order_wavelength': 45.0}), ({'g': 120, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.0, 'littrow_wavelength': 20.0, 'angular_dispersion': 20.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': 0.0, 'next_order_wavelength': 15.0}), ({'g': 120, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 30.0, 'littrow_wavelength': 40.0, 'angular_dispersion': 40.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': -0.25, 'next_order_wavelength': 22.5})], 2: [({'g': 121, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 30.25, 'littrow_wavelength': 40.333333333333336, 'angular_dispersion': 20.166666666666668, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': -0.25206611570247933, 'next_order_wavelength': 22.6875}), ({'g': 121, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.083333333333334, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.166666666666668, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': 0.24793388429752067, 'next_order_wavelength': 7.5625}), ({'g': 121, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.083333333333334, 'littrow_wavelength': 40.333333333333336, 'angular_dispersion': 20.166666666666668, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': -0.25206611570247933, 'next_order_wavelength': 7.5625}), ({'g': 121, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 90.75, 'littrow_wavelength': 121.0, 'angular_dispersion': 60.5, 'linear_dispersion': 6.05, 'inferred_diffraction_sine': -0.41735537190082644, 'next_order_wavelength': 45.375}), ({'g': 121, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.166666666666668, 'littrow_wavelength': 20.166666666666668, 'angular_dispersion': 20.166666666666668, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': -0.002066115702479332, 'next_order_wavelength': 15.125}), ({'g': 121, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 30.25, 'littrow_wavelength': 40.333333333333336, 'angular_dispersion': 40.333333333333336, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': -0.25206611570247933, 'next_order_wavelength': 22.6875})], 3: [({'g': 122, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 30.5, 'littrow_wavelength': 40.666666666666664, 'angular_dispersion': 20.333333333333332, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': -0.2540983606557377, 'next_order_wavelength': 22.875}), ({'g': 122, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.166666666666666, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.333333333333332, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': 0.2459016393442623, 'next_order_wavelength': 7.625}), ({'g': 122, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.166666666666666, 'littrow_wavelength': 40.666666666666664, 'angular_dispersion': 20.333333333333332, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': -0.2540983606557377, 'next_order_wavelength': 7.625}), ({'g': 122, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 91.5, 'littrow_wavelength': 122.0, 'angular_dispersion': 61.0, 'linear_dispersion': 6.1, 'inferred_diffraction_sine': -0.4180327868852459, 'next_order_wavelength': 45.75}), ({'g': 122, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.333333333333332, 'littrow_wavelength': 20.333333333333332, 'angular_dispersion': 20.333333333333332, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': -0.0040983606557377095, 'next_order_wavelength': 15.25}), ({'g': 122, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 30.5, 'littrow_wavelength': 40.666666666666664, 'angular_dispersion': 40.666666666666664, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': -0.2540983606557377, 'next_order_wavelength': 22.875})], 4: [({'g': 123, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 30.75, 'littrow_wavelength': 41.0, 'angular_dispersion': 20.5, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': -0.25609756097560976, 'next_order_wavelength': 23.0625}), ({'g': 123, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.25, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.5, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': 0.24390243902439024, 'next_order_wavelength': 7.6875}), ({'g': 123, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.25, 'littrow_wavelength': 41.0, 'angular_dispersion': 20.5, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': -0.25609756097560976, 'next_order_wavelength': 7.6875}), ({'g': 123, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 92.25, 'littrow_wavelength': 123.0, 'angular_dispersion': 61.5, 'linear_dispersion': 6.15, 'inferred_diffraction_sine': -0.4186991869918699, 'next_order_wavelength': 46.125}), ({'g': 123, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.5, 'littrow_wavelength': 20.5, 'angular_dispersion': 20.5, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': -0.0060975609756097615, 'next_order_wavelength': 15.375}), ({'g': 123, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 30.75, 'littrow_wavelength': 41.0, 'angular_dispersion': 41.0, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': -0.25609756097560976, 'next_order_wavelength': 23.0625})], 5: [({'g': 124, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 31.0, 'littrow_wavelength': 41.333333333333336, 'angular_dispersion': 20.666666666666668, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': -0.25806451612903225, 'next_order_wavelength': 23.25}), ({'g': 124, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.333333333333334, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.666666666666668, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': 0.24193548387096775, 'next_order_wavelength': 7.75}), ({'g': 124, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.333333333333334, 'littrow_wavelength': 41.333333333333336, 'angular_dispersion': 20.666666666666668, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': -0.25806451612903225, 'next_order_wavelength': 7.75}), ({'g': 124, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 93.0, 'littrow_wavelength': 124.0, 'angular_dispersion': 62.0, 'linear_dispersion': 6.2, 'inferred_diffraction_sine': -0.41935483870967744, 'next_order_wavelength': 46.5}), ({'g': 124, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.666666666666668, 'littrow_wavelength': 20.666666666666668, 'angular_dispersion': 20.666666666666668, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': -0.008064516129032251, 'next_order_wavelength': 15.5}), ({'g': 124, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 31.0, 'littrow_wavelength': 41.333333333333336, 'angular_dispersion': 41.333333333333336, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': -0.25806451612903225, 'next_order_wavelength': 23.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'angular_dispersion': 20.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 30.0, 'next_order_wavelength': 22.5, 'wavelength': 30.0}{'angular_dispersion': 20.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 40.0, 'next_order_wavelength': 22.5, 'wavelength': 30.0}Failed
astronomical fixture 1{'angular_dispersion': 20.0, 'inferred_diffraction_sine': 0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 10.0, 'next_order_wavelength': 7.5, 'wavelength': 10.0}{'angular_dispersion': 20.0, 'inferred_diffraction_sine': 0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 0.0, 'next_order_wavelength': 7.5, 'wavelength': 10.0}Failed
astronomical fixture 2{'angular_dispersion': 20.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 10.0, 'next_order_wavelength': 7.5, 'wavelength': 10.0}{'angular_dispersion': 20.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 40.0, 'next_order_wavelength': 7.5, 'wavelength': 10.0}Failed
astronomical fixture 3{'angular_dispersion': 60.0, 'inferred_diffraction_sine': -0.4166666666666667, 'linear_dispersion': 6.0, 'littrow_wavelength': 90.0, 'next_order_wavelength': 45.0, 'wavelength': 90.0}{'angular_dispersion': 60.0, 'inferred_diffraction_sine': -0.4166666666666667, 'linear_dispersion': 6.0, 'littrow_wavelength': 120.0, 'next_order_wavelength': 45.0, 'wavelength': 90.0}Failed
astronomical fixture 4{'angular_dispersion': 20.0, 'inferred_diffraction_sine': 0.0, 'linear_dispersion': 2.0, 'littrow_wavelength': 20.0, 'next_order_wavelength': 15.0, 'wavelength': 20.0}{'angular_dispersion': 20.0, 'inferred_diffraction_sine': 0.0, 'linear_dispersion': 2.0, 'littrow_wavelength': 20.0, 'next_order_wavelength': 15.0, 'wavelength': 20.0}Passed
astronomical fixture 5{'angular_dispersion': 40.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 30.0, 'next_order_wavelength': 22.5, 'wavelength': 30.0}{'angular_dispersion': 40.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 40.0, 'next_order_wavelength': 22.5, 'wavelength': 30.0}Failed

SHA-256 / 193e9827116ca896378f6343f56b5ddd74d0a330b21e75ba2f09d11a05c38961

3 / The verified repair

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

N = 1
observations = []
def solve(d):
    return {'wavelength': d['g']*(d['a']+d['b'])/d['m'], 'littrow_wavelength': 2*d['g']*d['a']/d['m'], 'angular_dispersion': d['g']*d['c']/d['m'], 'linear_dispersion': d['g']*d['c']/(d['m']*d['F']), 'inferred_diffraction_sine': d['m']*d['line']/d['g']-d['a'], 'next_order_wavelength': d['g']*(d['a']+d['b'])/(d['m']+1)}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'g': 120, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 30.0, 'littrow_wavelength': 40.0, 'angular_dispersion': 20.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': -0.25, 'next_order_wavelength': 22.5}), ({'g': 120, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.0, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': 0.25, 'next_order_wavelength': 7.5}), ({'g': 120, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.0, 'littrow_wavelength': 40.0, 'angular_dispersion': 20.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': -0.25, 'next_order_wavelength': 7.5}), ({'g': 120, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 90.0, 'littrow_wavelength': 120.0, 'angular_dispersion': 60.0, 'linear_dispersion': 6.0, 'inferred_diffraction_sine': -0.4166666666666667, 'next_order_wavelength': 45.0}), ({'g': 120, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.0, 'littrow_wavelength': 20.0, 'angular_dispersion': 20.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': 0.0, 'next_order_wavelength': 15.0}), ({'g': 120, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 30.0, 'littrow_wavelength': 40.0, 'angular_dispersion': 40.0, 'linear_dispersion': 2.0, 'inferred_diffraction_sine': -0.25, 'next_order_wavelength': 22.5})], 2: [({'g': 121, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 30.25, 'littrow_wavelength': 40.333333333333336, 'angular_dispersion': 20.166666666666668, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': -0.25206611570247933, 'next_order_wavelength': 22.6875}), ({'g': 121, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.083333333333334, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.166666666666668, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': 0.24793388429752067, 'next_order_wavelength': 7.5625}), ({'g': 121, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.083333333333334, 'littrow_wavelength': 40.333333333333336, 'angular_dispersion': 20.166666666666668, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': -0.25206611570247933, 'next_order_wavelength': 7.5625}), ({'g': 121, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 90.75, 'littrow_wavelength': 121.0, 'angular_dispersion': 60.5, 'linear_dispersion': 6.05, 'inferred_diffraction_sine': -0.41735537190082644, 'next_order_wavelength': 45.375}), ({'g': 121, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.166666666666668, 'littrow_wavelength': 20.166666666666668, 'angular_dispersion': 20.166666666666668, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': -0.002066115702479332, 'next_order_wavelength': 15.125}), ({'g': 121, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 30.25, 'littrow_wavelength': 40.333333333333336, 'angular_dispersion': 40.333333333333336, 'linear_dispersion': 2.0166666666666666, 'inferred_diffraction_sine': -0.25206611570247933, 'next_order_wavelength': 22.6875})], 3: [({'g': 122, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 30.5, 'littrow_wavelength': 40.666666666666664, 'angular_dispersion': 20.333333333333332, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': -0.2540983606557377, 'next_order_wavelength': 22.875}), ({'g': 122, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.166666666666666, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.333333333333332, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': 0.2459016393442623, 'next_order_wavelength': 7.625}), ({'g': 122, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.166666666666666, 'littrow_wavelength': 40.666666666666664, 'angular_dispersion': 20.333333333333332, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': -0.2540983606557377, 'next_order_wavelength': 7.625}), ({'g': 122, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 91.5, 'littrow_wavelength': 122.0, 'angular_dispersion': 61.0, 'linear_dispersion': 6.1, 'inferred_diffraction_sine': -0.4180327868852459, 'next_order_wavelength': 45.75}), ({'g': 122, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.333333333333332, 'littrow_wavelength': 20.333333333333332, 'angular_dispersion': 20.333333333333332, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': -0.0040983606557377095, 'next_order_wavelength': 15.25}), ({'g': 122, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 30.5, 'littrow_wavelength': 40.666666666666664, 'angular_dispersion': 40.666666666666664, 'linear_dispersion': 2.033333333333333, 'inferred_diffraction_sine': -0.2540983606557377, 'next_order_wavelength': 22.875})], 4: [({'g': 123, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 30.75, 'littrow_wavelength': 41.0, 'angular_dispersion': 20.5, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': -0.25609756097560976, 'next_order_wavelength': 23.0625}), ({'g': 123, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.25, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.5, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': 0.24390243902439024, 'next_order_wavelength': 7.6875}), ({'g': 123, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.25, 'littrow_wavelength': 41.0, 'angular_dispersion': 20.5, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': -0.25609756097560976, 'next_order_wavelength': 7.6875}), ({'g': 123, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 92.25, 'littrow_wavelength': 123.0, 'angular_dispersion': 61.5, 'linear_dispersion': 6.15, 'inferred_diffraction_sine': -0.4186991869918699, 'next_order_wavelength': 46.125}), ({'g': 123, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.5, 'littrow_wavelength': 20.5, 'angular_dispersion': 20.5, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': -0.0060975609756097615, 'next_order_wavelength': 15.375}), ({'g': 123, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 30.75, 'littrow_wavelength': 41.0, 'angular_dispersion': 41.0, 'linear_dispersion': 2.05, 'inferred_diffraction_sine': -0.25609756097560976, 'next_order_wavelength': 23.0625})], 5: [({'g': 124, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 31.0, 'littrow_wavelength': 41.333333333333336, 'angular_dispersion': 20.666666666666668, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': -0.25806451612903225, 'next_order_wavelength': 23.25}), ({'g': 124, 'a': 0, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.333333333333334, 'littrow_wavelength': 0.0, 'angular_dispersion': 20.666666666666668, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': 0.24193548387096775, 'next_order_wavelength': 7.75}), ({'g': 124, 'a': 0.5, 'b': -0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 10.333333333333334, 'littrow_wavelength': 41.333333333333336, 'angular_dispersion': 20.666666666666668, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': -0.25806451612903225, 'next_order_wavelength': 7.75}), ({'g': 124, 'a': 0.5, 'b': 0.25, 'm': 1, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 93.0, 'littrow_wavelength': 124.0, 'angular_dispersion': 62.0, 'linear_dispersion': 6.2, 'inferred_diffraction_sine': -0.41935483870967744, 'next_order_wavelength': 46.5}), ({'g': 124, 'a': 0.25, 'b': 0.25, 'm': 3, 'F': 10, 'c': 0.5, 'line': 10}, {'wavelength': 20.666666666666668, 'littrow_wavelength': 20.666666666666668, 'angular_dispersion': 20.666666666666668, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': -0.008064516129032251, 'next_order_wavelength': 15.5}), ({'g': 124, 'a': 0.5, 'b': 0.25, 'm': 3, 'F': 20, 'c': 1, 'line': 10}, {'wavelength': 31.0, 'littrow_wavelength': 41.333333333333336, 'angular_dispersion': 41.333333333333336, 'linear_dispersion': 2.066666666666667, 'inferred_diffraction_sine': -0.25806451612903225, 'next_order_wavelength': 23.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'angular_dispersion': 20.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 40.0, 'next_order_wavelength': 22.5, 'wavelength': 30.0}{'angular_dispersion': 20.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 40.0, 'next_order_wavelength': 22.5, 'wavelength': 30.0}Passed
astronomical fixture 1{'angular_dispersion': 20.0, 'inferred_diffraction_sine': 0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 0.0, 'next_order_wavelength': 7.5, 'wavelength': 10.0}{'angular_dispersion': 20.0, 'inferred_diffraction_sine': 0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 0.0, 'next_order_wavelength': 7.5, 'wavelength': 10.0}Passed
astronomical fixture 2{'angular_dispersion': 20.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 40.0, 'next_order_wavelength': 7.5, 'wavelength': 10.0}{'angular_dispersion': 20.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 40.0, 'next_order_wavelength': 7.5, 'wavelength': 10.0}Passed
astronomical fixture 3{'angular_dispersion': 60.0, 'inferred_diffraction_sine': -0.4166666666666667, 'linear_dispersion': 6.0, 'littrow_wavelength': 120.0, 'next_order_wavelength': 45.0, 'wavelength': 90.0}{'angular_dispersion': 60.0, 'inferred_diffraction_sine': -0.4166666666666667, 'linear_dispersion': 6.0, 'littrow_wavelength': 120.0, 'next_order_wavelength': 45.0, 'wavelength': 90.0}Passed
astronomical fixture 4{'angular_dispersion': 20.0, 'inferred_diffraction_sine': 0.0, 'linear_dispersion': 2.0, 'littrow_wavelength': 20.0, 'next_order_wavelength': 15.0, 'wavelength': 20.0}{'angular_dispersion': 20.0, 'inferred_diffraction_sine': 0.0, 'linear_dispersion': 2.0, 'littrow_wavelength': 20.0, 'next_order_wavelength': 15.0, 'wavelength': 20.0}Passed
astronomical fixture 5{'angular_dispersion': 40.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 40.0, 'next_order_wavelength': 22.5, 'wavelength': 30.0}{'angular_dispersion': 40.0, 'inferred_diffraction_sine': -0.25, 'linear_dispersion': 2.0, 'littrow_wavelength': 40.0, 'next_order_wavelength': 22.5, 'wavelength': 30.0}Passed

SHA-256 / 9eaec25ec7e168fab3b9dbae5430bd8cd32af695896f1cdbdbeacfe26d534e5c

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

Case digest / 94b26df4e99675ed171c4bc1f4c90385075ade3693eab33a9e10b08485b26bbb