FA-56036 / Astronomical coordinate conventions / Open access
Pulsar phase polynomial: Spin-down phase residual is confused with a frequency residual · case 01
The adapter reports an incorrect phase residual while other fields remain valid.
ROOT CAUSE
Spin-down phase residual is confused with a frequency residual. Faulty expression: d['p']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6
VERIFIED REPAIR
Preserve the declared model convention at this site: d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6
Unsuccessful approach: A partial convention repair still uses d['fd']*d['t']+d['fdd']*d['t']**2/2
Case contract
A reduced pulsar timing model supplies elapsed barycentric time t, spin frequency f, first derivative fd, second derivative fdd, and phase zero p. Phase cycles are p+f*t+fd*t**2/2+fdd*t**3/6. Pulse numbering floors total phase, including negative epochs. Output fields are defined by: phase = d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6; frequency = d['f']+d['fd']*d['t']+d['fdd']*d['t']**2/2; frequency_derivative = d['fd']+d['fdd']*d['t']; pulse_number = int((d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)//1); folded_phase = (d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)%1; phase_residual = d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6
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 {'phase': d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6, 'frequency': d['f']+d['fd']*d['t']+d['fdd']*d['t']**2/2, 'frequency_derivative': d['fd']+d['fdd']*d['t'], 'pulse_number': int((d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)//1), 'folded_phase': (d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)%1, 'phase_residual': d['p']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 3, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 19.75, 'frequency': 12.5, 'frequency_derivative': 5, 'pulse_number': 19, 'folded_phase': 0.75, 'phase_residual': 13.5}), ({'t': 0, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 2, 'pulse_number': 0, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': -9, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -58.25, 'frequency': 24.5, 'frequency_derivative': -7, 'pulse_number': -59, 'folded_phase': 0.75, 'phase_residual': -40.5}), ({'t': 3, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 6.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 6, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 3, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 15.0, 'frequency': 8.0, 'frequency_derivative': 2, 'pulse_number': 15, 'folded_phase': 0.0, 'phase_residual': 9.0}), ({'t': 3, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -2.25, 'frequency': -4.0, 'frequency_derivative': -2, 'pulse_number': -3, 'folded_phase': 0.75, 'phase_residual': -9.0})], 2: [({'t': 4, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 34.916666666666664, 'frequency': 18.0, 'frequency_derivative': 6, 'pulse_number': 34, 'folded_phase': 0.9166666666666643, 'phase_residual': 26.666666666666664}), ({'t': 1, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 3.4166666666666665, 'frequency': 4.5, 'frequency_derivative': 3, 'pulse_number': 3, 'folded_phase': 0.4166666666666665, 'phase_residual': 1.1666666666666667}), ({'t': -8, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -37.08333333333333, 'frequency': 18.0, 'frequency_derivative': -6, 'pulse_number': -38, 'folded_phase': 0.9166666666666714, 'phase_residual': -21.33333333333333}), ({'t': 4, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 8.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 8, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 4, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 24.0, 'frequency': 10.0, 'frequency_derivative': 2, 'pulse_number': 24, 'folded_phase': 0.0, 'phase_residual': 16.0}), ({'t': 4, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -7.25, 'frequency': -6.0, 'frequency_derivative': -2, 'pulse_number': -8, 'folded_phase': 0.75, 'phase_residual': -16.0})], 3: [({'t': 5, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 56.08333333333333, 'frequency': 24.5, 'frequency_derivative': 7, 'pulse_number': 56, 'folded_phase': 0.0833333333333286, 'phase_residual': 45.83333333333333}), ({'t': 2, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 9.583333333333334, 'frequency': 8.0, 'frequency_derivative': 4, 'pulse_number': 9, 'folded_phase': 0.5833333333333339, 'phase_residual': 5.333333333333333}), ({'t': -7, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -21.916666666666664, 'frequency': 12.5, 'frequency_derivative': -5, 'pulse_number': -22, 'folded_phase': 0.0833333333333357, 'phase_residual': -8.166666666666664}), ({'t': 5, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 10.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 10, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 5, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 35.0, 'frequency': 12.0, 'frequency_derivative': 2, 'pulse_number': 35, 'folded_phase': 0.0, 'phase_residual': 25.0}), ({'t': 5, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -14.25, 'frequency': -8.0, 'frequency_derivative': -2, 'pulse_number': -15, 'folded_phase': 0.75, 'phase_residual': -25.0})], 4: [({'t': 6, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 84.25, 'frequency': 32.0, 'frequency_derivative': 8, 'pulse_number': 84, 'folded_phase': 0.25, 'phase_residual': 72.0}), ({'t': 3, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 19.75, 'frequency': 12.5, 'frequency_derivative': 5, 'pulse_number': 19, 'folded_phase': 0.75, 'phase_residual': 13.5}), ({'t': -6, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -11.75, 'frequency': 8.0, 'frequency_derivative': -4, 'pulse_number': -12, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 6, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 12.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 12, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 6, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 48.0, 'frequency': 14.0, 'frequency_derivative': 2, 'pulse_number': 48, 'folded_phase': 0.0, 'phase_residual': 36.0}), ({'t': 6, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -23.25, 'frequency': -10.0, 'frequency_derivative': -2, 'pulse_number': -24, 'folded_phase': 0.75, 'phase_residual': -36.0})], 5: [({'t': 7, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 120.41666666666666, 'frequency': 40.5, 'frequency_derivative': 9, 'pulse_number': 120, 'folded_phase': 0.4166666666666572, 'phase_residual': 106.16666666666666}), ({'t': 4, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 34.916666666666664, 'frequency': 18.0, 'frequency_derivative': 6, 'pulse_number': 34, 'folded_phase': 0.9166666666666643, 'phase_residual': 26.666666666666664}), ({'t': -5, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -5.583333333333332, 'frequency': 4.5, 'frequency_derivative': -3, 'pulse_number': -6, 'folded_phase': 0.41666666666666785, 'phase_residual': 4.166666666666668}), ({'t': 7, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 14.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 14, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 7, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 63.0, 'frequency': 16.0, 'frequency_derivative': 2, 'pulse_number': 63, 'folded_phase': 0.0, 'phase_residual': 49.0}), ({'t': 7, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -34.25, 'frequency': -12.0, 'frequency_derivative': -2, 'pulse_number': -35, 'folded_phase': 0.75, 'phase_residual': -49.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 | {'folded_phase': 0.75, 'frequency': 12.5, 'frequency_derivative': 5, 'phase': 19.75, 'phase_residual': 13.75, 'pulse_number': 19} | {'folded_phase': 0.75, 'frequency': 12.5, 'frequency_derivative': 5, 'phase': 19.75, 'phase_residual': 13.5, 'pulse_number': 19} | Failed |
| astronomical fixture 1 | {'folded_phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 2, 'phase': 0.25, 'phase_residual': 0.25, 'pulse_number': 0} | {'folded_phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 2, 'phase': 0.25, 'phase_residual': 0.0, 'pulse_number': 0} | Failed |
| astronomical fixture 2 | {'folded_phase': 0.75, 'frequency': 24.5, 'frequency_derivative': -7, 'phase': -58.25, 'phase_residual': -40.25, 'pulse_number': -59} | {'folded_phase': 0.75, 'frequency': 24.5, 'frequency_derivative': -7, 'phase': -58.25, 'phase_residual': -40.5, 'pulse_number': -59} | Failed |
| astronomical fixture 3 | {'folded_phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 0, 'phase': 6.25, 'phase_residual': 0.25, 'pulse_number': 6} | {'folded_phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 0, 'phase': 6.25, 'phase_residual': 0.0, 'pulse_number': 6} | Failed |
| astronomical fixture 4 | {'folded_phase': 0.0, 'frequency': 8.0, 'frequency_derivative': 2, 'phase': 15.0, 'phase_residual': 9.0, 'pulse_number': 15} | {'folded_phase': 0.0, 'frequency': 8.0, 'frequency_derivative': 2, 'phase': 15.0, 'phase_residual': 9.0, 'pulse_number': 15} | Passed |
| astronomical fixture 5 | {'folded_phase': 0.75, 'frequency': -4.0, 'frequency_derivative': -2, 'phase': -2.25, 'phase_residual': -8.25, 'pulse_number': -3} | {'folded_phase': 0.75, 'frequency': -4.0, 'frequency_derivative': -2, 'phase': -2.25, 'phase_residual': -9.0, 'pulse_number': -3} | Failed |
SHA-256 / 1420d5e40b2f812726b3df487e3aaef81dffcc7a1905588648e489b35124c21c
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'phase': d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6, 'frequency': d['f']+d['fd']*d['t']+d['fdd']*d['t']**2/2, 'frequency_derivative': d['fd']+d['fdd']*d['t'], 'pulse_number': int((d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)//1), 'folded_phase': (d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)%1, 'phase_residual': d['fd']*d['t']+d['fdd']*d['t']**2/2}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 3, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 19.75, 'frequency': 12.5, 'frequency_derivative': 5, 'pulse_number': 19, 'folded_phase': 0.75, 'phase_residual': 13.5}), ({'t': 0, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 2, 'pulse_number': 0, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': -9, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -58.25, 'frequency': 24.5, 'frequency_derivative': -7, 'pulse_number': -59, 'folded_phase': 0.75, 'phase_residual': -40.5}), ({'t': 3, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 6.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 6, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 3, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 15.0, 'frequency': 8.0, 'frequency_derivative': 2, 'pulse_number': 15, 'folded_phase': 0.0, 'phase_residual': 9.0}), ({'t': 3, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -2.25, 'frequency': -4.0, 'frequency_derivative': -2, 'pulse_number': -3, 'folded_phase': 0.75, 'phase_residual': -9.0})], 2: [({'t': 4, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 34.916666666666664, 'frequency': 18.0, 'frequency_derivative': 6, 'pulse_number': 34, 'folded_phase': 0.9166666666666643, 'phase_residual': 26.666666666666664}), ({'t': 1, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 3.4166666666666665, 'frequency': 4.5, 'frequency_derivative': 3, 'pulse_number': 3, 'folded_phase': 0.4166666666666665, 'phase_residual': 1.1666666666666667}), ({'t': -8, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -37.08333333333333, 'frequency': 18.0, 'frequency_derivative': -6, 'pulse_number': -38, 'folded_phase': 0.9166666666666714, 'phase_residual': -21.33333333333333}), ({'t': 4, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 8.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 8, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 4, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 24.0, 'frequency': 10.0, 'frequency_derivative': 2, 'pulse_number': 24, 'folded_phase': 0.0, 'phase_residual': 16.0}), ({'t': 4, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -7.25, 'frequency': -6.0, 'frequency_derivative': -2, 'pulse_number': -8, 'folded_phase': 0.75, 'phase_residual': -16.0})], 3: [({'t': 5, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 56.08333333333333, 'frequency': 24.5, 'frequency_derivative': 7, 'pulse_number': 56, 'folded_phase': 0.0833333333333286, 'phase_residual': 45.83333333333333}), ({'t': 2, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 9.583333333333334, 'frequency': 8.0, 'frequency_derivative': 4, 'pulse_number': 9, 'folded_phase': 0.5833333333333339, 'phase_residual': 5.333333333333333}), ({'t': -7, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -21.916666666666664, 'frequency': 12.5, 'frequency_derivative': -5, 'pulse_number': -22, 'folded_phase': 0.0833333333333357, 'phase_residual': -8.166666666666664}), ({'t': 5, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 10.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 10, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 5, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 35.0, 'frequency': 12.0, 'frequency_derivative': 2, 'pulse_number': 35, 'folded_phase': 0.0, 'phase_residual': 25.0}), ({'t': 5, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -14.25, 'frequency': -8.0, 'frequency_derivative': -2, 'pulse_number': -15, 'folded_phase': 0.75, 'phase_residual': -25.0})], 4: [({'t': 6, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 84.25, 'frequency': 32.0, 'frequency_derivative': 8, 'pulse_number': 84, 'folded_phase': 0.25, 'phase_residual': 72.0}), ({'t': 3, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 19.75, 'frequency': 12.5, 'frequency_derivative': 5, 'pulse_number': 19, 'folded_phase': 0.75, 'phase_residual': 13.5}), ({'t': -6, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -11.75, 'frequency': 8.0, 'frequency_derivative': -4, 'pulse_number': -12, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 6, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 12.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 12, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 6, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 48.0, 'frequency': 14.0, 'frequency_derivative': 2, 'pulse_number': 48, 'folded_phase': 0.0, 'phase_residual': 36.0}), ({'t': 6, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -23.25, 'frequency': -10.0, 'frequency_derivative': -2, 'pulse_number': -24, 'folded_phase': 0.75, 'phase_residual': -36.0})], 5: [({'t': 7, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 120.41666666666666, 'frequency': 40.5, 'frequency_derivative': 9, 'pulse_number': 120, 'folded_phase': 0.4166666666666572, 'phase_residual': 106.16666666666666}), ({'t': 4, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 34.916666666666664, 'frequency': 18.0, 'frequency_derivative': 6, 'pulse_number': 34, 'folded_phase': 0.9166666666666643, 'phase_residual': 26.666666666666664}), ({'t': -5, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -5.583333333333332, 'frequency': 4.5, 'frequency_derivative': -3, 'pulse_number': -6, 'folded_phase': 0.41666666666666785, 'phase_residual': 4.166666666666668}), ({'t': 7, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 14.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 14, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 7, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 63.0, 'frequency': 16.0, 'frequency_derivative': 2, 'pulse_number': 63, 'folded_phase': 0.0, 'phase_residual': 49.0}), ({'t': 7, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -34.25, 'frequency': -12.0, 'frequency_derivative': -2, 'pulse_number': -35, 'folded_phase': 0.75, 'phase_residual': -49.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 | {'folded_phase': 0.75, 'frequency': 12.5, 'frequency_derivative': 5, 'phase': 19.75, 'phase_residual': 10.5, 'pulse_number': 19} | {'folded_phase': 0.75, 'frequency': 12.5, 'frequency_derivative': 5, 'phase': 19.75, 'phase_residual': 13.5, 'pulse_number': 19} | Failed |
| astronomical fixture 1 | {'folded_phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 2, 'phase': 0.25, 'phase_residual': 0.0, 'pulse_number': 0} | {'folded_phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 2, 'phase': 0.25, 'phase_residual': 0.0, 'pulse_number': 0} | Passed |
| astronomical fixture 2 | {'folded_phase': 0.75, 'frequency': 24.5, 'frequency_derivative': -7, 'phase': -58.25, 'phase_residual': 22.5, 'pulse_number': -59} | {'folded_phase': 0.75, 'frequency': 24.5, 'frequency_derivative': -7, 'phase': -58.25, 'phase_residual': -40.5, 'pulse_number': -59} | Failed |
| astronomical fixture 3 | {'folded_phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 0, 'phase': 6.25, 'phase_residual': 0.0, 'pulse_number': 6} | {'folded_phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 0, 'phase': 6.25, 'phase_residual': 0.0, 'pulse_number': 6} | Passed |
| astronomical fixture 4 | {'folded_phase': 0.0, 'frequency': 8.0, 'frequency_derivative': 2, 'phase': 15.0, 'phase_residual': 6.0, 'pulse_number': 15} | {'folded_phase': 0.0, 'frequency': 8.0, 'frequency_derivative': 2, 'phase': 15.0, 'phase_residual': 9.0, 'pulse_number': 15} | Failed |
| astronomical fixture 5 | {'folded_phase': 0.75, 'frequency': -4.0, 'frequency_derivative': -2, 'phase': -2.25, 'phase_residual': -6.0, 'pulse_number': -3} | {'folded_phase': 0.75, 'frequency': -4.0, 'frequency_derivative': -2, 'phase': -2.25, 'phase_residual': -9.0, 'pulse_number': -3} | Failed |
SHA-256 / 49b6ec0dedbb5d0bb728b25c540a2577e18c7da8d16b483d609c406f9fcd1d73
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'phase': d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6, 'frequency': d['f']+d['fd']*d['t']+d['fdd']*d['t']**2/2, 'frequency_derivative': d['fd']+d['fdd']*d['t'], 'pulse_number': int((d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)//1), 'folded_phase': (d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)%1, 'phase_residual': d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 3, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 19.75, 'frequency': 12.5, 'frequency_derivative': 5, 'pulse_number': 19, 'folded_phase': 0.75, 'phase_residual': 13.5}), ({'t': 0, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 2, 'pulse_number': 0, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': -9, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -58.25, 'frequency': 24.5, 'frequency_derivative': -7, 'pulse_number': -59, 'folded_phase': 0.75, 'phase_residual': -40.5}), ({'t': 3, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 6.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 6, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 3, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 15.0, 'frequency': 8.0, 'frequency_derivative': 2, 'pulse_number': 15, 'folded_phase': 0.0, 'phase_residual': 9.0}), ({'t': 3, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -2.25, 'frequency': -4.0, 'frequency_derivative': -2, 'pulse_number': -3, 'folded_phase': 0.75, 'phase_residual': -9.0})], 2: [({'t': 4, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 34.916666666666664, 'frequency': 18.0, 'frequency_derivative': 6, 'pulse_number': 34, 'folded_phase': 0.9166666666666643, 'phase_residual': 26.666666666666664}), ({'t': 1, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 3.4166666666666665, 'frequency': 4.5, 'frequency_derivative': 3, 'pulse_number': 3, 'folded_phase': 0.4166666666666665, 'phase_residual': 1.1666666666666667}), ({'t': -8, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -37.08333333333333, 'frequency': 18.0, 'frequency_derivative': -6, 'pulse_number': -38, 'folded_phase': 0.9166666666666714, 'phase_residual': -21.33333333333333}), ({'t': 4, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 8.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 8, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 4, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 24.0, 'frequency': 10.0, 'frequency_derivative': 2, 'pulse_number': 24, 'folded_phase': 0.0, 'phase_residual': 16.0}), ({'t': 4, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -7.25, 'frequency': -6.0, 'frequency_derivative': -2, 'pulse_number': -8, 'folded_phase': 0.75, 'phase_residual': -16.0})], 3: [({'t': 5, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 56.08333333333333, 'frequency': 24.5, 'frequency_derivative': 7, 'pulse_number': 56, 'folded_phase': 0.0833333333333286, 'phase_residual': 45.83333333333333}), ({'t': 2, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 9.583333333333334, 'frequency': 8.0, 'frequency_derivative': 4, 'pulse_number': 9, 'folded_phase': 0.5833333333333339, 'phase_residual': 5.333333333333333}), ({'t': -7, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -21.916666666666664, 'frequency': 12.5, 'frequency_derivative': -5, 'pulse_number': -22, 'folded_phase': 0.0833333333333357, 'phase_residual': -8.166666666666664}), ({'t': 5, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 10.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 10, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 5, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 35.0, 'frequency': 12.0, 'frequency_derivative': 2, 'pulse_number': 35, 'folded_phase': 0.0, 'phase_residual': 25.0}), ({'t': 5, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -14.25, 'frequency': -8.0, 'frequency_derivative': -2, 'pulse_number': -15, 'folded_phase': 0.75, 'phase_residual': -25.0})], 4: [({'t': 6, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 84.25, 'frequency': 32.0, 'frequency_derivative': 8, 'pulse_number': 84, 'folded_phase': 0.25, 'phase_residual': 72.0}), ({'t': 3, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 19.75, 'frequency': 12.5, 'frequency_derivative': 5, 'pulse_number': 19, 'folded_phase': 0.75, 'phase_residual': 13.5}), ({'t': -6, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -11.75, 'frequency': 8.0, 'frequency_derivative': -4, 'pulse_number': -12, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 6, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 12.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 12, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 6, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 48.0, 'frequency': 14.0, 'frequency_derivative': 2, 'pulse_number': 48, 'folded_phase': 0.0, 'phase_residual': 36.0}), ({'t': 6, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -23.25, 'frequency': -10.0, 'frequency_derivative': -2, 'pulse_number': -24, 'folded_phase': 0.75, 'phase_residual': -36.0})], 5: [({'t': 7, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 120.41666666666666, 'frequency': 40.5, 'frequency_derivative': 9, 'pulse_number': 120, 'folded_phase': 0.4166666666666572, 'phase_residual': 106.16666666666666}), ({'t': 4, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': 34.916666666666664, 'frequency': 18.0, 'frequency_derivative': 6, 'pulse_number': 34, 'folded_phase': 0.9166666666666643, 'phase_residual': 26.666666666666664}), ({'t': -5, 'f': 2, 'fd': 2, 'fdd': 1, 'p': 0.25}, {'phase': -5.583333333333332, 'frequency': 4.5, 'frequency_derivative': -3, 'pulse_number': -6, 'folded_phase': 0.41666666666666785, 'phase_residual': 4.166666666666668}), ({'t': 7, 'f': 2, 'fd': 0, 'fdd': 0, 'p': 0.25}, {'phase': 14.25, 'frequency': 2.0, 'frequency_derivative': 0, 'pulse_number': 14, 'folded_phase': 0.25, 'phase_residual': 0.0}), ({'t': 7, 'f': 2, 'fd': 2, 'fdd': 0, 'p': 0}, {'phase': 63.0, 'frequency': 16.0, 'frequency_derivative': 2, 'pulse_number': 63, 'folded_phase': 0.0, 'phase_residual': 49.0}), ({'t': 7, 'f': 2, 'fd': -2, 'fdd': 0, 'p': 0.75}, {'phase': -34.25, 'frequency': -12.0, 'frequency_derivative': -2, 'pulse_number': -35, 'folded_phase': 0.75, 'phase_residual': -49.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 | {'folded_phase': 0.75, 'frequency': 12.5, 'frequency_derivative': 5, 'phase': 19.75, 'phase_residual': 13.5, 'pulse_number': 19} | {'folded_phase': 0.75, 'frequency': 12.5, 'frequency_derivative': 5, 'phase': 19.75, 'phase_residual': 13.5, 'pulse_number': 19} | Passed |
| astronomical fixture 1 | {'folded_phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 2, 'phase': 0.25, 'phase_residual': 0.0, 'pulse_number': 0} | {'folded_phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 2, 'phase': 0.25, 'phase_residual': 0.0, 'pulse_number': 0} | Passed |
| astronomical fixture 2 | {'folded_phase': 0.75, 'frequency': 24.5, 'frequency_derivative': -7, 'phase': -58.25, 'phase_residual': -40.5, 'pulse_number': -59} | {'folded_phase': 0.75, 'frequency': 24.5, 'frequency_derivative': -7, 'phase': -58.25, 'phase_residual': -40.5, 'pulse_number': -59} | Passed |
| astronomical fixture 3 | {'folded_phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 0, 'phase': 6.25, 'phase_residual': 0.0, 'pulse_number': 6} | {'folded_phase': 0.25, 'frequency': 2.0, 'frequency_derivative': 0, 'phase': 6.25, 'phase_residual': 0.0, 'pulse_number': 6} | Passed |
| astronomical fixture 4 | {'folded_phase': 0.0, 'frequency': 8.0, 'frequency_derivative': 2, 'phase': 15.0, 'phase_residual': 9.0, 'pulse_number': 15} | {'folded_phase': 0.0, 'frequency': 8.0, 'frequency_derivative': 2, 'phase': 15.0, 'phase_residual': 9.0, 'pulse_number': 15} | Passed |
| astronomical fixture 5 | {'folded_phase': 0.75, 'frequency': -4.0, 'frequency_derivative': -2, 'phase': -2.25, 'phase_residual': -9.0, 'pulse_number': -3} | {'folded_phase': 0.75, 'frequency': -4.0, 'frequency_derivative': -2, 'phase': -2.25, 'phase_residual': -9.0, 'pulse_number': -3} | Passed |
SHA-256 / 96d489eb89d1f7053defd62f9aad708f88b96d31eb565e44340b8020f7353071
Verification & scope
Explicitly stipulated finite algebraic adapter; no standards conformance, physical accuracy, or production-library claim. Inputs are the documented finite valid model domain. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:46:03.356647+00:00.
Case digest / 90dabdd45f2001d3f162e9cf33b9df753e340f09cf0b0771b5f907cb283c50a3