FA-55186 / Astronomical coordinate conventions / Open access
Phase center shift: Phase-center tangent latitude uses longitude displacement · case 01
The adapter reports an incorrect reference y while other fields remain valid.
ROOT CAUSE
Phase-center tangent latitude uses longitude displacement. Faulty expression: d['oldy']+d['l']
VERIFIED REPAIR
Preserve the declared model convention at this site: d['oldy']+d['m']
Unsuccessful approach: A partial convention repair still uses d['oldy']-d['m']
Case contract
A stipulated small-field interferometer phase-center update supplies old uvw u,v,w and direction differences l,m,nminus1. Delay cycles are u*l+v*m+w*nminus1. Visibility represented by phase cycles subtracts this delay; image tangent reference and phase provenance change together. Output fields are defined by: delay_cycles = d['u']*d['l']+d['v']*d['m']+d['w']*d['dn']; shifted_phase = d['phase']-d['u']*d['l']-d['v']*d['m']-d['w']*d['dn']; reference_x = d['oldx']+d['l']; reference_y = d['oldy']+d['m']; inverse_delay = -d['u']*d['l']-d['v']*d['m']-d['w']*d['dn']; line_of_sight_direction = 1+d['dn']
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 {'delay_cycles': d['u']*d['l']+d['v']*d['m']+d['w']*d['dn'], 'shifted_phase': d['phase']-d['u']*d['l']-d['v']*d['m']-d['w']*d['dn'], 'reference_x': d['oldx']+d['l'], 'reference_y': d['oldy']+d['l'], 'inverse_delay': -d['u']*d['l']-d['v']*d['m']-d['w']*d['dn'], 'line_of_sight_direction': 1+d['dn']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'u': 3, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 8, 'shifted_phase': 2, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -8, 'line_of_sight_direction': 2}), ({'u': 3, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 3, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 1, 'shifted_phase': 9, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -1, 'line_of_sight_direction': 2}), ({'u': 3, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -13, 'shifted_phase': 23, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 13, 'line_of_sight_direction': -1}), ({'u': 3, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 18, 'shifted_phase': -8, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -18, 'line_of_sight_direction': 2}), ({'u': 3, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 13, 'shifted_phase': -13, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -13, 'line_of_sight_direction': 2})], 2: [({'u': 4, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 10, 'shifted_phase': 0, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -10, 'line_of_sight_direction': 2}), ({'u': 4, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 4, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 3, 'shifted_phase': 7, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -3, 'line_of_sight_direction': 2}), ({'u': 4, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -11, 'shifted_phase': 21, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 11, 'line_of_sight_direction': -1}), ({'u': 4, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 15, 'shifted_phase': -5, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -15, 'line_of_sight_direction': 2}), ({'u': 4, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 15, 'shifted_phase': -15, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -15, 'line_of_sight_direction': 2})], 3: [({'u': 5, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 12, 'shifted_phase': -2, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -12, 'line_of_sight_direction': 2}), ({'u': 5, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 5, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 5, 'shifted_phase': 5, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -5, 'line_of_sight_direction': 2}), ({'u': 5, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -9, 'shifted_phase': 19, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 9, 'line_of_sight_direction': -1}), ({'u': 5, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 12, 'shifted_phase': -2, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -12, 'line_of_sight_direction': 2}), ({'u': 5, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 17, 'shifted_phase': -17, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -17, 'line_of_sight_direction': 2})], 4: [({'u': 6, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 14, 'shifted_phase': -4, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -14, 'line_of_sight_direction': 2}), ({'u': 6, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 6, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 7, 'shifted_phase': 3, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -7, 'line_of_sight_direction': 2}), ({'u': 6, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -7, 'shifted_phase': 17, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 7, 'line_of_sight_direction': -1}), ({'u': 6, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 9, 'shifted_phase': 1, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -9, 'line_of_sight_direction': 2}), ({'u': 6, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 19, 'shifted_phase': -19, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -19, 'line_of_sight_direction': 2})], 5: [({'u': 7, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 16, 'shifted_phase': -6, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -16, 'line_of_sight_direction': 2}), ({'u': 7, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 7, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 9, 'shifted_phase': 1, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -9, 'line_of_sight_direction': 2}), ({'u': 7, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -5, 'shifted_phase': 15, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 5, 'line_of_sight_direction': -1}), ({'u': 7, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 6, 'shifted_phase': 4, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -6, 'line_of_sight_direction': 2}), ({'u': 7, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 21, 'shifted_phase': -21, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -21, 'line_of_sight_direction': 2})]}
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 | {'delay_cycles': 8, 'inverse_delay': -8, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 32, 'shifted_phase': 2} | {'delay_cycles': 8, 'inverse_delay': -8, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': 2} | Failed |
| astronomical fixture 1 | {'delay_cycles': 0, 'inverse_delay': 0, 'line_of_sight_direction': 1, 'reference_x': 20, 'reference_y': 30, 'shifted_phase': 10} | {'delay_cycles': 0, 'inverse_delay': 0, 'line_of_sight_direction': 1, 'reference_x': 20, 'reference_y': 30, 'shifted_phase': 10} | Passed |
| astronomical fixture 2 | {'delay_cycles': 1, 'inverse_delay': -1, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 32, 'shifted_phase': 9} | {'delay_cycles': 1, 'inverse_delay': -1, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': 9} | Failed |
| astronomical fixture 3 | {'delay_cycles': -13, 'inverse_delay': 13, 'line_of_sight_direction': -1, 'reference_x': 22, 'reference_y': 32, 'shifted_phase': 23} | {'delay_cycles': -13, 'inverse_delay': 13, 'line_of_sight_direction': -1, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': 23} | Failed |
| astronomical fixture 4 | {'delay_cycles': 18, 'inverse_delay': -18, 'line_of_sight_direction': 2, 'reference_x': 17, 'reference_y': 27, 'shifted_phase': -8} | {'delay_cycles': 18, 'inverse_delay': -18, 'line_of_sight_direction': 2, 'reference_x': 17, 'reference_y': 34, 'shifted_phase': -8} | Failed |
| astronomical fixture 5 | {'delay_cycles': 13, 'inverse_delay': -13, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 32, 'shifted_phase': -13} | {'delay_cycles': 13, 'inverse_delay': -13, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': -13} | Failed |
SHA-256 / de7b9da28d0d40beefe3048ed03b05ef78b9459bd7f45fb4e3b60057755f7846
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'delay_cycles': d['u']*d['l']+d['v']*d['m']+d['w']*d['dn'], 'shifted_phase': d['phase']-d['u']*d['l']-d['v']*d['m']-d['w']*d['dn'], 'reference_x': d['oldx']+d['l'], 'reference_y': d['oldy']-d['m'], 'inverse_delay': -d['u']*d['l']-d['v']*d['m']-d['w']*d['dn'], 'line_of_sight_direction': 1+d['dn']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'u': 3, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 8, 'shifted_phase': 2, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -8, 'line_of_sight_direction': 2}), ({'u': 3, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 3, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 1, 'shifted_phase': 9, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -1, 'line_of_sight_direction': 2}), ({'u': 3, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -13, 'shifted_phase': 23, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 13, 'line_of_sight_direction': -1}), ({'u': 3, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 18, 'shifted_phase': -8, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -18, 'line_of_sight_direction': 2}), ({'u': 3, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 13, 'shifted_phase': -13, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -13, 'line_of_sight_direction': 2})], 2: [({'u': 4, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 10, 'shifted_phase': 0, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -10, 'line_of_sight_direction': 2}), ({'u': 4, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 4, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 3, 'shifted_phase': 7, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -3, 'line_of_sight_direction': 2}), ({'u': 4, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -11, 'shifted_phase': 21, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 11, 'line_of_sight_direction': -1}), ({'u': 4, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 15, 'shifted_phase': -5, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -15, 'line_of_sight_direction': 2}), ({'u': 4, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 15, 'shifted_phase': -15, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -15, 'line_of_sight_direction': 2})], 3: [({'u': 5, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 12, 'shifted_phase': -2, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -12, 'line_of_sight_direction': 2}), ({'u': 5, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 5, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 5, 'shifted_phase': 5, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -5, 'line_of_sight_direction': 2}), ({'u': 5, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -9, 'shifted_phase': 19, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 9, 'line_of_sight_direction': -1}), ({'u': 5, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 12, 'shifted_phase': -2, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -12, 'line_of_sight_direction': 2}), ({'u': 5, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 17, 'shifted_phase': -17, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -17, 'line_of_sight_direction': 2})], 4: [({'u': 6, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 14, 'shifted_phase': -4, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -14, 'line_of_sight_direction': 2}), ({'u': 6, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 6, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 7, 'shifted_phase': 3, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -7, 'line_of_sight_direction': 2}), ({'u': 6, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -7, 'shifted_phase': 17, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 7, 'line_of_sight_direction': -1}), ({'u': 6, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 9, 'shifted_phase': 1, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -9, 'line_of_sight_direction': 2}), ({'u': 6, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 19, 'shifted_phase': -19, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -19, 'line_of_sight_direction': 2})], 5: [({'u': 7, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 16, 'shifted_phase': -6, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -16, 'line_of_sight_direction': 2}), ({'u': 7, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 7, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 9, 'shifted_phase': 1, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -9, 'line_of_sight_direction': 2}), ({'u': 7, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -5, 'shifted_phase': 15, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 5, 'line_of_sight_direction': -1}), ({'u': 7, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 6, 'shifted_phase': 4, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -6, 'line_of_sight_direction': 2}), ({'u': 7, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 21, 'shifted_phase': -21, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -21, 'line_of_sight_direction': 2})]}
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 | {'delay_cycles': 8, 'inverse_delay': -8, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 31, 'shifted_phase': 2} | {'delay_cycles': 8, 'inverse_delay': -8, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': 2} | Failed |
| astronomical fixture 1 | {'delay_cycles': 0, 'inverse_delay': 0, 'line_of_sight_direction': 1, 'reference_x': 20, 'reference_y': 30, 'shifted_phase': 10} | {'delay_cycles': 0, 'inverse_delay': 0, 'line_of_sight_direction': 1, 'reference_x': 20, 'reference_y': 30, 'shifted_phase': 10} | Passed |
| astronomical fixture 2 | {'delay_cycles': 1, 'inverse_delay': -1, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 31, 'shifted_phase': 9} | {'delay_cycles': 1, 'inverse_delay': -1, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': 9} | Failed |
| astronomical fixture 3 | {'delay_cycles': -13, 'inverse_delay': 13, 'line_of_sight_direction': -1, 'reference_x': 22, 'reference_y': 31, 'shifted_phase': 23} | {'delay_cycles': -13, 'inverse_delay': 13, 'line_of_sight_direction': -1, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': 23} | Failed |
| astronomical fixture 4 | {'delay_cycles': 18, 'inverse_delay': -18, 'line_of_sight_direction': 2, 'reference_x': 17, 'reference_y': 26, 'shifted_phase': -8} | {'delay_cycles': 18, 'inverse_delay': -18, 'line_of_sight_direction': 2, 'reference_x': 17, 'reference_y': 34, 'shifted_phase': -8} | Failed |
| astronomical fixture 5 | {'delay_cycles': 13, 'inverse_delay': -13, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 31, 'shifted_phase': -13} | {'delay_cycles': 13, 'inverse_delay': -13, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': -13} | Failed |
SHA-256 / a5e38290df115c12670e23f1ec13de9437f6c4b8cb74022b6fd430aba4c6468e
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'delay_cycles': d['u']*d['l']+d['v']*d['m']+d['w']*d['dn'], 'shifted_phase': d['phase']-d['u']*d['l']-d['v']*d['m']-d['w']*d['dn'], 'reference_x': d['oldx']+d['l'], 'reference_y': d['oldy']+d['m'], 'inverse_delay': -d['u']*d['l']-d['v']*d['m']-d['w']*d['dn'], 'line_of_sight_direction': 1+d['dn']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'u': 3, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 8, 'shifted_phase': 2, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -8, 'line_of_sight_direction': 2}), ({'u': 3, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 3, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 1, 'shifted_phase': 9, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -1, 'line_of_sight_direction': 2}), ({'u': 3, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -13, 'shifted_phase': 23, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 13, 'line_of_sight_direction': -1}), ({'u': 3, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 18, 'shifted_phase': -8, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -18, 'line_of_sight_direction': 2}), ({'u': 3, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 13, 'shifted_phase': -13, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -13, 'line_of_sight_direction': 2})], 2: [({'u': 4, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 10, 'shifted_phase': 0, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -10, 'line_of_sight_direction': 2}), ({'u': 4, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 4, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 3, 'shifted_phase': 7, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -3, 'line_of_sight_direction': 2}), ({'u': 4, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -11, 'shifted_phase': 21, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 11, 'line_of_sight_direction': -1}), ({'u': 4, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 15, 'shifted_phase': -5, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -15, 'line_of_sight_direction': 2}), ({'u': 4, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 15, 'shifted_phase': -15, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -15, 'line_of_sight_direction': 2})], 3: [({'u': 5, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 12, 'shifted_phase': -2, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -12, 'line_of_sight_direction': 2}), ({'u': 5, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 5, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 5, 'shifted_phase': 5, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -5, 'line_of_sight_direction': 2}), ({'u': 5, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -9, 'shifted_phase': 19, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 9, 'line_of_sight_direction': -1}), ({'u': 5, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 12, 'shifted_phase': -2, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -12, 'line_of_sight_direction': 2}), ({'u': 5, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 17, 'shifted_phase': -17, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -17, 'line_of_sight_direction': 2})], 4: [({'u': 6, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 14, 'shifted_phase': -4, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -14, 'line_of_sight_direction': 2}), ({'u': 6, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 6, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 7, 'shifted_phase': 3, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -7, 'line_of_sight_direction': 2}), ({'u': 6, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -7, 'shifted_phase': 17, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 7, 'line_of_sight_direction': -1}), ({'u': 6, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 9, 'shifted_phase': 1, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -9, 'line_of_sight_direction': 2}), ({'u': 6, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 19, 'shifted_phase': -19, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -19, 'line_of_sight_direction': 2})], 5: [({'u': 7, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 16, 'shifted_phase': -6, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -16, 'line_of_sight_direction': 2}), ({'u': 7, 'v': 5, 'w': 7, 'l': 0, 'm': 0, 'dn': 0, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 0, 'shifted_phase': 10, 'reference_x': 20, 'reference_y': 30, 'inverse_delay': 0, 'line_of_sight_direction': 1}), ({'u': 7, 'v': 5, 'w': 0, 'l': 2, 'm': -1, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 9, 'shifted_phase': 1, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -9, 'line_of_sight_direction': 2}), ({'u': 7, 'v': 5, 'w': 7, 'l': 2, 'm': -1, 'dn': -2, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': -5, 'shifted_phase': 15, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': 5, 'line_of_sight_direction': -1}), ({'u': 7, 'v': 5, 'w': 7, 'l': -3, 'm': 4, 'dn': 1, 'phase': 10, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 6, 'shifted_phase': 4, 'reference_x': 17, 'reference_y': 34, 'inverse_delay': -6, 'line_of_sight_direction': 2}), ({'u': 7, 'v': 0, 'w': 7, 'l': 2, 'm': -1, 'dn': 1, 'phase': 0, 'oldx': 20, 'oldy': 30}, {'delay_cycles': 21, 'shifted_phase': -21, 'reference_x': 22, 'reference_y': 29, 'inverse_delay': -21, 'line_of_sight_direction': 2})]}
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 | {'delay_cycles': 8, 'inverse_delay': -8, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': 2} | {'delay_cycles': 8, 'inverse_delay': -8, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': 2} | Passed |
| astronomical fixture 1 | {'delay_cycles': 0, 'inverse_delay': 0, 'line_of_sight_direction': 1, 'reference_x': 20, 'reference_y': 30, 'shifted_phase': 10} | {'delay_cycles': 0, 'inverse_delay': 0, 'line_of_sight_direction': 1, 'reference_x': 20, 'reference_y': 30, 'shifted_phase': 10} | Passed |
| astronomical fixture 2 | {'delay_cycles': 1, 'inverse_delay': -1, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': 9} | {'delay_cycles': 1, 'inverse_delay': -1, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': 9} | Passed |
| astronomical fixture 3 | {'delay_cycles': -13, 'inverse_delay': 13, 'line_of_sight_direction': -1, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': 23} | {'delay_cycles': -13, 'inverse_delay': 13, 'line_of_sight_direction': -1, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': 23} | Passed |
| astronomical fixture 4 | {'delay_cycles': 18, 'inverse_delay': -18, 'line_of_sight_direction': 2, 'reference_x': 17, 'reference_y': 34, 'shifted_phase': -8} | {'delay_cycles': 18, 'inverse_delay': -18, 'line_of_sight_direction': 2, 'reference_x': 17, 'reference_y': 34, 'shifted_phase': -8} | Passed |
| astronomical fixture 5 | {'delay_cycles': 13, 'inverse_delay': -13, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': -13} | {'delay_cycles': 13, 'inverse_delay': -13, 'line_of_sight_direction': 2, 'reference_x': 22, 'reference_y': 29, 'shifted_phase': -13} | Passed |
SHA-256 / e58f8cac8580fcf6bdf205f02a24a14685b4b1738641f8a49478aef4bddc791e
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.430699+00:00.
Case digest / 907d7448ba91502332fcba5c2fd74703ea7a5b3033ca9fc3fb59e6b587015f18