FAILURE MAP
← Case archive

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.

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

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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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