FA-56026 / Astronomical coordinate conventions / Open access
Pulsar phase polynomial: Pre-reference pulsar pulse numbering truncates negative total phase · case 01
The adapter reports an incorrect pulse number while other fields remain valid.
ROOT CAUSE
Pre-reference pulsar pulse numbering truncates negative total phase. Faulty expression: int(d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)
VERIFIED REPAIR
Preserve the declared model convention at this site: int((d['p']+d['f']*d['t']+d['fd']*d['t']**2/2+d['fdd']*d['t']**3/6)//1)
Unsuccessful approach: A partial convention repair still uses int((d['f']*d['t'])//1)
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), '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': -58} | {'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': 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': -2} | {'folded_phase': 0.75, 'frequency': -4.0, 'frequency_derivative': -2, 'phase': -2.25, 'phase_residual': -9.0, 'pulse_number': -3} | Failed |
SHA-256 / 184da7eb0edcc66e16261666057891701ae7bf1239424fca3ea3306205eab7fa
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['f']*d['t'])//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': 6} | {'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': -40.5, 'pulse_number': -18} | {'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': 9.0, 'pulse_number': 6} | {'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': -9.0, 'pulse_number': 6} | {'folded_phase': 0.75, 'frequency': -4.0, 'frequency_derivative': -2, 'phase': -2.25, 'phase_residual': -9.0, 'pulse_number': -3} | Failed |
SHA-256 / 7b60b9bb04e45f669440a9f8f9c4a8ddccd5b443e02a2a071fd82f0d9d14e0f6
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.341617+00:00.
Case digest / 9066f6a0c3ce08a0b3130cd0d0a54fbc3eefb0b81ee6e3ff95c0a0383bf9a869