FAILURE MAP
← Case archive

FA-55161 / Astronomical coordinate conventions / Open access

Interferometer channel uvw: A cycle-valued fringe rate receives a second spectral conversion · case 01

The adapter reports an incorrect time phase step while other fields remain valid.

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

ROOT CAUSE

A cycle-valued fringe rate receives a second spectral conversion. Faulty expression: d['rate']

VERIFIED REPAIR

Preserve the declared model convention at this site: d['rate']*d['dt']

Unsuccessful approach: A partial convention repair still uses d['rate']*d['f']*d['dt']

Case contract

A reduced visibility coordinate adapter supplies speed constant c, channel frequency f, reference frequency fr, physical baseline b, and delay tau. Wavelength uvw scales as b*f/c. Angular fringe rate is represented in cycles, not radians. Frequencies and c are positive. Output fields are defined by: channel_uvw = d['b']*d['f']/d['c']; physical_baseline = d['b']*d['f']/d['c']*d['c']/d['f']; phase_cycles = d['tau']*d['f']; channel_phase_step = d['tau']*d['df']; time_phase_step = d['rate']*d['dt']; frequency_jacobian = d['b']/d['c']

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 {'channel_uvw': d['b']*d['f']/d['c'], 'physical_baseline': d['b']*d['f']/d['c']*d['c']/d['f'], 'phase_cycles': d['tau']*d['f'], 'channel_phase_step': d['tau']*d['df'], 'time_phase_step': d['rate'], 'frequency_jacobian': d['b']/d['c']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'b': 12, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 6.0, 'physical_baseline': 12.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.75}), ({'b': 12, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 3.0, 'physical_baseline': 12.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.75}), ({'b': 0, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 0.0, 'physical_baseline': 0.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.0}), ({'b': -7, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -3.5, 'physical_baseline': -7.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.4375}), ({'b': 12, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 6.0, 'physical_baseline': 12.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.75}), ({'b': 12, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 12.0, 'physical_baseline': 12.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 1.5})], 2: [({'b': 13, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 6.5, 'physical_baseline': 13.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.8125}), ({'b': 13, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 3.25, 'physical_baseline': 13.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.8125}), ({'b': 1, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 0.5, 'physical_baseline': 1.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.0625}), ({'b': -6, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -3.0, 'physical_baseline': -6.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.375}), ({'b': 13, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 6.5, 'physical_baseline': 13.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.8125}), ({'b': 13, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 13.0, 'physical_baseline': 13.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 1.625})], 3: [({'b': 14, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 7.0, 'physical_baseline': 14.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.875}), ({'b': 14, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 3.5, 'physical_baseline': 14.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.875}), ({'b': 2, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 1.0, 'physical_baseline': 2.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.125}), ({'b': -5, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -2.5, 'physical_baseline': -5.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.3125}), ({'b': 14, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 7.0, 'physical_baseline': 14.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.875}), ({'b': 14, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 14.0, 'physical_baseline': 14.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 1.75})], 4: [({'b': 15, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 7.5, 'physical_baseline': 15.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.9375}), ({'b': 15, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 3.75, 'physical_baseline': 15.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.9375}), ({'b': 3, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 1.5, 'physical_baseline': 3.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.1875}), ({'b': -4, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -2.0, 'physical_baseline': -4.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.25}), ({'b': 15, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 7.5, 'physical_baseline': 15.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.9375}), ({'b': 15, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 15.0, 'physical_baseline': 15.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 1.875})], 5: [({'b': 16, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 8.0, 'physical_baseline': 16.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 1.0}), ({'b': 16, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 4.0, 'physical_baseline': 16.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 1.0}), ({'b': 4, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 2.0, 'physical_baseline': 4.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.25}), ({'b': -3, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -1.5, 'physical_baseline': -3.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.1875}), ({'b': 16, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 8.0, 'physical_baseline': 16.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 1.0}), ({'b': 16, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 16.0, 'physical_baseline': 16.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 2.0})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'channel_phase_step': 6, 'channel_uvw': 6.0, 'frequency_jacobian': 0.75, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 2}{'channel_phase_step': 6, 'channel_uvw': 6.0, 'frequency_jacobian': 0.75, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 10}Failed
astronomical fixture 1{'channel_phase_step': 6, 'channel_uvw': 3.0, 'frequency_jacobian': 0.75, 'phase_cycles': 8, 'physical_baseline': 12.0, 'time_phase_step': 2}{'channel_phase_step': 6, 'channel_uvw': 3.0, 'frequency_jacobian': 0.75, 'phase_cycles': 8, 'physical_baseline': 12.0, 'time_phase_step': 10}Failed
astronomical fixture 2{'channel_phase_step': 0, 'channel_uvw': 0.0, 'frequency_jacobian': 0.0, 'phase_cycles': 0, 'physical_baseline': 0.0, 'time_phase_step': 2}{'channel_phase_step': 0, 'channel_uvw': 0.0, 'frequency_jacobian': 0.0, 'phase_cycles': 0, 'physical_baseline': 0.0, 'time_phase_step': 10}Failed
astronomical fixture 3{'channel_phase_step': 6, 'channel_uvw': -3.5, 'frequency_jacobian': -0.4375, 'phase_cycles': 16, 'physical_baseline': -7.0, 'time_phase_step': -2}{'channel_phase_step': 6, 'channel_uvw': -3.5, 'frequency_jacobian': -0.4375, 'phase_cycles': 16, 'physical_baseline': -7.0, 'time_phase_step': -10}Failed
astronomical fixture 4{'channel_phase_step': 0, 'channel_uvw': 6.0, 'frequency_jacobian': 0.75, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 2}{'channel_phase_step': 0, 'channel_uvw': 6.0, 'frequency_jacobian': 0.75, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 10}Failed
astronomical fixture 5{'channel_phase_step': 6, 'channel_uvw': 12.0, 'frequency_jacobian': 1.5, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 2}{'channel_phase_step': 6, 'channel_uvw': 12.0, 'frequency_jacobian': 1.5, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 2}Passed

SHA-256 / 05446e395ce30ff1a95cd1ecfe0d90221ee0c427c3bfdf3fb7c210ee89db320e

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(d):
    return {'channel_uvw': d['b']*d['f']/d['c'], 'physical_baseline': d['b']*d['f']/d['c']*d['c']/d['f'], 'phase_cycles': d['tau']*d['f'], 'channel_phase_step': d['tau']*d['df'], 'time_phase_step': d['rate']*d['f']*d['dt'], 'frequency_jacobian': d['b']/d['c']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'b': 12, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 6.0, 'physical_baseline': 12.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.75}), ({'b': 12, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 3.0, 'physical_baseline': 12.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.75}), ({'b': 0, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 0.0, 'physical_baseline': 0.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.0}), ({'b': -7, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -3.5, 'physical_baseline': -7.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.4375}), ({'b': 12, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 6.0, 'physical_baseline': 12.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.75}), ({'b': 12, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 12.0, 'physical_baseline': 12.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 1.5})], 2: [({'b': 13, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 6.5, 'physical_baseline': 13.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.8125}), ({'b': 13, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 3.25, 'physical_baseline': 13.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.8125}), ({'b': 1, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 0.5, 'physical_baseline': 1.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.0625}), ({'b': -6, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -3.0, 'physical_baseline': -6.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.375}), ({'b': 13, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 6.5, 'physical_baseline': 13.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.8125}), ({'b': 13, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 13.0, 'physical_baseline': 13.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 1.625})], 3: [({'b': 14, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 7.0, 'physical_baseline': 14.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.875}), ({'b': 14, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 3.5, 'physical_baseline': 14.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.875}), ({'b': 2, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 1.0, 'physical_baseline': 2.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.125}), ({'b': -5, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -2.5, 'physical_baseline': -5.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.3125}), ({'b': 14, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 7.0, 'physical_baseline': 14.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.875}), ({'b': 14, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 14.0, 'physical_baseline': 14.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 1.75})], 4: [({'b': 15, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 7.5, 'physical_baseline': 15.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.9375}), ({'b': 15, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 3.75, 'physical_baseline': 15.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.9375}), ({'b': 3, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 1.5, 'physical_baseline': 3.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.1875}), ({'b': -4, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -2.0, 'physical_baseline': -4.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.25}), ({'b': 15, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 7.5, 'physical_baseline': 15.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.9375}), ({'b': 15, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 15.0, 'physical_baseline': 15.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 1.875})], 5: [({'b': 16, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 8.0, 'physical_baseline': 16.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 1.0}), ({'b': 16, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 4.0, 'physical_baseline': 16.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 1.0}), ({'b': 4, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 2.0, 'physical_baseline': 4.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.25}), ({'b': -3, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -1.5, 'physical_baseline': -3.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.1875}), ({'b': 16, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 8.0, 'physical_baseline': 16.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 1.0}), ({'b': 16, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 16.0, 'physical_baseline': 16.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 2.0})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'channel_phase_step': 6, 'channel_uvw': 6.0, 'frequency_jacobian': 0.75, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 80}{'channel_phase_step': 6, 'channel_uvw': 6.0, 'frequency_jacobian': 0.75, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 10}Failed
astronomical fixture 1{'channel_phase_step': 6, 'channel_uvw': 3.0, 'frequency_jacobian': 0.75, 'phase_cycles': 8, 'physical_baseline': 12.0, 'time_phase_step': 40}{'channel_phase_step': 6, 'channel_uvw': 3.0, 'frequency_jacobian': 0.75, 'phase_cycles': 8, 'physical_baseline': 12.0, 'time_phase_step': 10}Failed
astronomical fixture 2{'channel_phase_step': 0, 'channel_uvw': 0.0, 'frequency_jacobian': 0.0, 'phase_cycles': 0, 'physical_baseline': 0.0, 'time_phase_step': 80}{'channel_phase_step': 0, 'channel_uvw': 0.0, 'frequency_jacobian': 0.0, 'phase_cycles': 0, 'physical_baseline': 0.0, 'time_phase_step': 10}Failed
astronomical fixture 3{'channel_phase_step': 6, 'channel_uvw': -3.5, 'frequency_jacobian': -0.4375, 'phase_cycles': 16, 'physical_baseline': -7.0, 'time_phase_step': -80}{'channel_phase_step': 6, 'channel_uvw': -3.5, 'frequency_jacobian': -0.4375, 'phase_cycles': 16, 'physical_baseline': -7.0, 'time_phase_step': -10}Failed
astronomical fixture 4{'channel_phase_step': 0, 'channel_uvw': 6.0, 'frequency_jacobian': 0.75, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 80}{'channel_phase_step': 0, 'channel_uvw': 6.0, 'frequency_jacobian': 0.75, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 10}Failed
astronomical fixture 5{'channel_phase_step': 6, 'channel_uvw': 12.0, 'frequency_jacobian': 1.5, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 16}{'channel_phase_step': 6, 'channel_uvw': 12.0, 'frequency_jacobian': 1.5, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 2}Failed

SHA-256 / e76d860a14c057a863fa206fc9fa3d5f9c75cf689cee407191549664db010b03

3 / The verified repair

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

N = 1
observations = []
def solve(d):
    return {'channel_uvw': d['b']*d['f']/d['c'], 'physical_baseline': d['b']*d['f']/d['c']*d['c']/d['f'], 'phase_cycles': d['tau']*d['f'], 'channel_phase_step': d['tau']*d['df'], 'time_phase_step': d['rate']*d['dt'], 'frequency_jacobian': d['b']/d['c']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'b': 12, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 6.0, 'physical_baseline': 12.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.75}), ({'b': 12, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 3.0, 'physical_baseline': 12.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.75}), ({'b': 0, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 0.0, 'physical_baseline': 0.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.0}), ({'b': -7, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -3.5, 'physical_baseline': -7.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.4375}), ({'b': 12, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 6.0, 'physical_baseline': 12.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.75}), ({'b': 12, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 12.0, 'physical_baseline': 12.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 1.5})], 2: [({'b': 13, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 6.5, 'physical_baseline': 13.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.8125}), ({'b': 13, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 3.25, 'physical_baseline': 13.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.8125}), ({'b': 1, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 0.5, 'physical_baseline': 1.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.0625}), ({'b': -6, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -3.0, 'physical_baseline': -6.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.375}), ({'b': 13, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 6.5, 'physical_baseline': 13.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.8125}), ({'b': 13, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 13.0, 'physical_baseline': 13.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 1.625})], 3: [({'b': 14, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 7.0, 'physical_baseline': 14.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.875}), ({'b': 14, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 3.5, 'physical_baseline': 14.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.875}), ({'b': 2, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 1.0, 'physical_baseline': 2.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.125}), ({'b': -5, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -2.5, 'physical_baseline': -5.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.3125}), ({'b': 14, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 7.0, 'physical_baseline': 14.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.875}), ({'b': 14, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 14.0, 'physical_baseline': 14.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 1.75})], 4: [({'b': 15, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 7.5, 'physical_baseline': 15.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.9375}), ({'b': 15, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 3.75, 'physical_baseline': 15.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 0.9375}), ({'b': 3, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 1.5, 'physical_baseline': 3.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.1875}), ({'b': -4, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -2.0, 'physical_baseline': -4.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.25}), ({'b': 15, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 7.5, 'physical_baseline': 15.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.9375}), ({'b': 15, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 15.0, 'physical_baseline': 15.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 1.875})], 5: [({'b': 16, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 8.0, 'physical_baseline': 16.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 1.0}), ({'b': 16, 'f': 4, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 4.0, 'physical_baseline': 16.0, 'phase_cycles': 8, 'channel_phase_step': 6, 'time_phase_step': 10, 'frequency_jacobian': 1.0}), ({'b': 4, 'f': 8, 'fr': 4, 'c': 16, 'tau': 0, 'df': 3, 'dt': 5, 'rate': 2}, {'channel_uvw': 2.0, 'physical_baseline': 4.0, 'phase_cycles': 0, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 0.25}), ({'b': -3, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 3, 'dt': 5, 'rate': -2}, {'channel_uvw': -1.5, 'physical_baseline': -3.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': -10, 'frequency_jacobian': -0.1875}), ({'b': 16, 'f': 8, 'fr': 4, 'c': 16, 'tau': 2, 'df': 0, 'dt': 5, 'rate': 2}, {'channel_uvw': 8.0, 'physical_baseline': 16.0, 'phase_cycles': 16, 'channel_phase_step': 0, 'time_phase_step': 10, 'frequency_jacobian': 1.0}), ({'b': 16, 'f': 8, 'fr': 4, 'c': 8, 'tau': 2, 'df': 3, 'dt': 1, 'rate': 2}, {'channel_uvw': 16.0, 'physical_baseline': 16.0, 'phase_cycles': 16, 'channel_phase_step': 6, 'time_phase_step': 2, 'frequency_jacobian': 2.0})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'channel_phase_step': 6, 'channel_uvw': 6.0, 'frequency_jacobian': 0.75, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 10}{'channel_phase_step': 6, 'channel_uvw': 6.0, 'frequency_jacobian': 0.75, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 10}Passed
astronomical fixture 1{'channel_phase_step': 6, 'channel_uvw': 3.0, 'frequency_jacobian': 0.75, 'phase_cycles': 8, 'physical_baseline': 12.0, 'time_phase_step': 10}{'channel_phase_step': 6, 'channel_uvw': 3.0, 'frequency_jacobian': 0.75, 'phase_cycles': 8, 'physical_baseline': 12.0, 'time_phase_step': 10}Passed
astronomical fixture 2{'channel_phase_step': 0, 'channel_uvw': 0.0, 'frequency_jacobian': 0.0, 'phase_cycles': 0, 'physical_baseline': 0.0, 'time_phase_step': 10}{'channel_phase_step': 0, 'channel_uvw': 0.0, 'frequency_jacobian': 0.0, 'phase_cycles': 0, 'physical_baseline': 0.0, 'time_phase_step': 10}Passed
astronomical fixture 3{'channel_phase_step': 6, 'channel_uvw': -3.5, 'frequency_jacobian': -0.4375, 'phase_cycles': 16, 'physical_baseline': -7.0, 'time_phase_step': -10}{'channel_phase_step': 6, 'channel_uvw': -3.5, 'frequency_jacobian': -0.4375, 'phase_cycles': 16, 'physical_baseline': -7.0, 'time_phase_step': -10}Passed
astronomical fixture 4{'channel_phase_step': 0, 'channel_uvw': 6.0, 'frequency_jacobian': 0.75, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 10}{'channel_phase_step': 0, 'channel_uvw': 6.0, 'frequency_jacobian': 0.75, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 10}Passed
astronomical fixture 5{'channel_phase_step': 6, 'channel_uvw': 12.0, 'frequency_jacobian': 1.5, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 2}{'channel_phase_step': 6, 'channel_uvw': 12.0, 'frequency_jacobian': 1.5, 'phase_cycles': 16, 'physical_baseline': 12.0, 'time_phase_step': 2}Passed

SHA-256 / 4891c61a67754e856486613e65860b5bea170209e211b38c8dbe39f41170b62c

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

Case digest / d7978e1371ebafa0dd61a301587a6ce9491ac34d427c60cb08db32904506add3