FA-55141 / Astronomical coordinate conventions / Open access
Interferometer channel uvw: Per-channel uvw stays scaled to the reference frequency · case 01
The adapter reports an incorrect channel uvw while other fields remain valid.
ROOT CAUSE
Per-channel uvw stays scaled to the reference frequency. Faulty expression: d['b']*d['fr']/d['c']
VERIFIED REPAIR
Preserve the declared model convention at this site: d['b']*d['f']/d['c']
Unsuccessful approach: A partial convention repair still uses d['b']*d['f']/d['fr']
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['fr']/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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| astronomical fixture 0 | {'channel_phase_step': 6, 'channel_uvw': 3.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} | 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': 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': -1.75, '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} | Failed |
| astronomical fixture 4 | {'channel_phase_step': 0, 'channel_uvw': 3.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} | Failed |
| astronomical fixture 5 | {'channel_phase_step': 6, 'channel_uvw': 6.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} | Failed |
SHA-256 / f5320b0bc6bc4998361185bda62129f95b70a2c898225f3b3e93ba54da8714bf
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['fr'], '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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| astronomical fixture 0 | {'channel_phase_step': 6, 'channel_uvw': 24.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} | Failed |
| astronomical fixture 1 | {'channel_phase_step': 6, 'channel_uvw': 12.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} | 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': 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': -14.0, '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} | Failed |
| astronomical fixture 4 | {'channel_phase_step': 0, 'channel_uvw': 24.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} | Failed |
| astronomical fixture 5 | {'channel_phase_step': 6, 'channel_uvw': 24.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} | Failed |
SHA-256 / c124728376ed8f8803a770cb50c41eb32a1612421dfd8101265bccca4016ef51
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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:54.988018+00:00.
Case digest / ec846a94f60c914850d927c7f5a90833a3f6eec086c2a8b76771a651ebf55d5d