FA-56051 / Astronomical coordinate conventions / Open access
Pulsar dispersion coordinate: Dedispersion shifts low-frequency arrival times later · case 01
The adapter reports an incorrect dedispersed time while other fields remain valid.
ROOT CAUSE
Dedispersion shifts low-frequency arrival times later. Faulty expression: d['t']+d['K']*d['D']*(1/d['f']**2-1/d['r']**2)
VERIFIED REPAIR
Preserve the declared model convention at this site: d['t']-d['K']*d['D']*(1/d['f']**2-1/d['r']**2)
Unsuccessful approach: A partial convention repair still uses d['t']-d['K']*d['D']/d['f']**2
Case contract
A stipulated cold-plasma timing adapter has constant K, dispersion measure D, positive radio frequency f, positive reference frequency r, channel width w and timestamp t. Delay relative to infinite frequency is K*D/f**2. Finite-reference dedispersion subtracts the difference of inverse squares. Output fields are defined by: infinite_delay = d['K']*d['D']/d['f']**2; reference_delay = d['K']*d['D']*(1/d['f']**2-1/d['r']**2); dedispersed_time = d['t']-d['K']*d['D']*(1/d['f']**2-1/d['r']**2); frequency_slope = -2*d['K']*d['D']/d['f']**3; channel_smearing = abs(2*d['K']*d['D']*d['w']/d['f']**3); infinite_time = d['t']-d['K']*d['D']/d['f']**2
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 {'infinite_delay': d['K']*d['D']/d['f']**2, 'reference_delay': d['K']*d['D']*(1/d['f']**2-1/d['r']**2), 'dedispersed_time': d['t']+d['K']*d['D']*(1/d['f']**2-1/d['r']**2), 'frequency_slope': -2*d['K']*d['D']/d['f']**3, 'channel_smearing': abs(2*d['K']*d['D']*d['w']/d['f']**3), 'infinite_time': d['t']-d['K']*d['D']/d['f']**2}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'K': 4, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 3.0, 'reference_delay': 2.25, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'channel_smearing': 3.0, 'infinite_time': 97.0}), ({'t': 100, 'K': 4, 'D': 3, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 0.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'channel_smearing': 0.375, 'infinite_time': 99.25}), ({'t': 100, 'K': 4, 'D': 0, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 0.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': 0.0, 'channel_smearing': 0.0, 'infinite_time': 100.0}), ({'t': 100, 'K': 4, 'D': 3, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.1875, 'reference_delay': -2.8125, 'dedispersed_time': 102.8125, 'frequency_slope': -0.046875, 'channel_smearing': 0.046875, 'infinite_time': 99.8125}), ({'t': 100, 'K': 1, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 0.75, 'reference_delay': 0.5625, 'dedispersed_time': 99.4375, 'frequency_slope': -0.75, 'channel_smearing': 0.75, 'infinite_time': 99.25}), ({'t': 100, 'K': 4, 'D': 3, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 0.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'channel_smearing': 0.75, 'infinite_time': 99.25})], 2: [({'t': 100, 'K': 4, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 4.0, 'reference_delay': 3.0, 'dedispersed_time': 97.0, 'frequency_slope': -4.0, 'channel_smearing': 4.0, 'infinite_time': 96.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.5, 'channel_smearing': 0.5, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 1, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.75, 'dedispersed_time': 99.25, 'frequency_slope': -1.0, 'channel_smearing': 1.0, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.25, 'reference_delay': -3.75, 'dedispersed_time': 103.75, 'frequency_slope': -0.0625, 'channel_smearing': 0.0625, 'infinite_time': 99.75}), ({'t': 100, 'K': 1, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.75, 'dedispersed_time': 99.25, 'frequency_slope': -1.0, 'channel_smearing': 1.0, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.5, 'channel_smearing': 1.0, 'infinite_time': 99.0})], 3: [({'t': 100, 'K': 4, 'D': 5, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 5.0, 'reference_delay': 3.75, 'dedispersed_time': 96.25, 'frequency_slope': -5.0, 'channel_smearing': 5.0, 'infinite_time': 95.0}), ({'t': 100, 'K': 4, 'D': 5, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.25, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.625, 'channel_smearing': 0.625, 'infinite_time': 98.75}), ({'t': 100, 'K': 4, 'D': 2, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 2.0, 'reference_delay': 1.5, 'dedispersed_time': 98.5, 'frequency_slope': -2.0, 'channel_smearing': 2.0, 'infinite_time': 98.0}), ({'t': 100, 'K': 4, 'D': 5, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.3125, 'reference_delay': -4.6875, 'dedispersed_time': 104.6875, 'frequency_slope': -0.078125, 'channel_smearing': 0.078125, 'infinite_time': 99.6875}), ({'t': 100, 'K': 1, 'D': 5, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.25, 'reference_delay': 0.9375, 'dedispersed_time': 99.0625, 'frequency_slope': -1.25, 'channel_smearing': 1.25, 'infinite_time': 98.75}), ({'t': 100, 'K': 4, 'D': 5, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.25, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.625, 'channel_smearing': 1.25, 'infinite_time': 98.75})], 4: [({'t': 100, 'K': 4, 'D': 6, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 6.0, 'reference_delay': 4.5, 'dedispersed_time': 95.5, 'frequency_slope': -6.0, 'channel_smearing': 6.0, 'infinite_time': 94.0}), ({'t': 100, 'K': 4, 'D': 6, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.5, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.75, 'channel_smearing': 0.75, 'infinite_time': 98.5}), ({'t': 100, 'K': 4, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 3.0, 'reference_delay': 2.25, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'channel_smearing': 3.0, 'infinite_time': 97.0}), ({'t': 100, 'K': 4, 'D': 6, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.375, 'reference_delay': -5.625, 'dedispersed_time': 105.625, 'frequency_slope': -0.09375, 'channel_smearing': 0.09375, 'infinite_time': 99.625}), ({'t': 100, 'K': 1, 'D': 6, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.5, 'reference_delay': 1.125, 'dedispersed_time': 98.875, 'frequency_slope': -1.5, 'channel_smearing': 1.5, 'infinite_time': 98.5}), ({'t': 100, 'K': 4, 'D': 6, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.5, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.75, 'channel_smearing': 1.5, 'infinite_time': 98.5})], 5: [({'t': 100, 'K': 4, 'D': 7, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 7.0, 'reference_delay': 5.25, 'dedispersed_time': 94.75, 'frequency_slope': -7.0, 'channel_smearing': 7.0, 'infinite_time': 93.0}), ({'t': 100, 'K': 4, 'D': 7, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.875, 'channel_smearing': 0.875, 'infinite_time': 98.25}), ({'t': 100, 'K': 4, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 4.0, 'reference_delay': 3.0, 'dedispersed_time': 97.0, 'frequency_slope': -4.0, 'channel_smearing': 4.0, 'infinite_time': 96.0}), ({'t': 100, 'K': 4, 'D': 7, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.4375, 'reference_delay': -6.5625, 'dedispersed_time': 106.5625, 'frequency_slope': -0.109375, 'channel_smearing': 0.109375, 'infinite_time': 99.5625}), ({'t': 100, 'K': 1, 'D': 7, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.75, 'reference_delay': 1.3125, 'dedispersed_time': 98.6875, 'frequency_slope': -1.75, 'channel_smearing': 1.75, 'infinite_time': 98.25}), ({'t': 100, 'K': 4, 'D': 7, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.875, 'channel_smearing': 1.75, 'infinite_time': 98.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| astronomical fixture 0 | {'channel_smearing': 3.0, 'dedispersed_time': 102.25, 'frequency_slope': -3.0, 'infinite_delay': 3.0, 'infinite_time': 97.0, 'reference_delay': 2.25} | {'channel_smearing': 3.0, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'infinite_delay': 3.0, 'infinite_time': 97.0, 'reference_delay': 2.25} | Failed |
| astronomical fixture 1 | {'channel_smearing': 0.375, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.0} | {'channel_smearing': 0.375, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.0} | Passed |
| astronomical fixture 2 | {'channel_smearing': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': 0.0, 'infinite_delay': 0.0, 'infinite_time': 100.0, 'reference_delay': 0.0} | {'channel_smearing': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': 0.0, 'infinite_delay': 0.0, 'infinite_time': 100.0, 'reference_delay': 0.0} | Passed |
| astronomical fixture 3 | {'channel_smearing': 0.046875, 'dedispersed_time': 97.1875, 'frequency_slope': -0.046875, 'infinite_delay': 0.1875, 'infinite_time': 99.8125, 'reference_delay': -2.8125} | {'channel_smearing': 0.046875, 'dedispersed_time': 102.8125, 'frequency_slope': -0.046875, 'infinite_delay': 0.1875, 'infinite_time': 99.8125, 'reference_delay': -2.8125} | Failed |
| astronomical fixture 4 | {'channel_smearing': 0.75, 'dedispersed_time': 100.5625, 'frequency_slope': -0.75, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.5625} | {'channel_smearing': 0.75, 'dedispersed_time': 99.4375, 'frequency_slope': -0.75, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.5625} | Failed |
| astronomical fixture 5 | {'channel_smearing': 0.75, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.0} | {'channel_smearing': 0.75, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.0} | Passed |
SHA-256 / bd794e37c0bd6e7d9bac8659ae6954a2575882eb7b03015b79407a97886c80be
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'infinite_delay': d['K']*d['D']/d['f']**2, 'reference_delay': d['K']*d['D']*(1/d['f']**2-1/d['r']**2), 'dedispersed_time': d['t']-d['K']*d['D']/d['f']**2, 'frequency_slope': -2*d['K']*d['D']/d['f']**3, 'channel_smearing': abs(2*d['K']*d['D']*d['w']/d['f']**3), 'infinite_time': d['t']-d['K']*d['D']/d['f']**2}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'K': 4, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 3.0, 'reference_delay': 2.25, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'channel_smearing': 3.0, 'infinite_time': 97.0}), ({'t': 100, 'K': 4, 'D': 3, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 0.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'channel_smearing': 0.375, 'infinite_time': 99.25}), ({'t': 100, 'K': 4, 'D': 0, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 0.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': 0.0, 'channel_smearing': 0.0, 'infinite_time': 100.0}), ({'t': 100, 'K': 4, 'D': 3, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.1875, 'reference_delay': -2.8125, 'dedispersed_time': 102.8125, 'frequency_slope': -0.046875, 'channel_smearing': 0.046875, 'infinite_time': 99.8125}), ({'t': 100, 'K': 1, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 0.75, 'reference_delay': 0.5625, 'dedispersed_time': 99.4375, 'frequency_slope': -0.75, 'channel_smearing': 0.75, 'infinite_time': 99.25}), ({'t': 100, 'K': 4, 'D': 3, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 0.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'channel_smearing': 0.75, 'infinite_time': 99.25})], 2: [({'t': 100, 'K': 4, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 4.0, 'reference_delay': 3.0, 'dedispersed_time': 97.0, 'frequency_slope': -4.0, 'channel_smearing': 4.0, 'infinite_time': 96.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.5, 'channel_smearing': 0.5, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 1, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.75, 'dedispersed_time': 99.25, 'frequency_slope': -1.0, 'channel_smearing': 1.0, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.25, 'reference_delay': -3.75, 'dedispersed_time': 103.75, 'frequency_slope': -0.0625, 'channel_smearing': 0.0625, 'infinite_time': 99.75}), ({'t': 100, 'K': 1, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.75, 'dedispersed_time': 99.25, 'frequency_slope': -1.0, 'channel_smearing': 1.0, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.5, 'channel_smearing': 1.0, 'infinite_time': 99.0})], 3: [({'t': 100, 'K': 4, 'D': 5, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 5.0, 'reference_delay': 3.75, 'dedispersed_time': 96.25, 'frequency_slope': -5.0, 'channel_smearing': 5.0, 'infinite_time': 95.0}), ({'t': 100, 'K': 4, 'D': 5, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.25, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.625, 'channel_smearing': 0.625, 'infinite_time': 98.75}), ({'t': 100, 'K': 4, 'D': 2, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 2.0, 'reference_delay': 1.5, 'dedispersed_time': 98.5, 'frequency_slope': -2.0, 'channel_smearing': 2.0, 'infinite_time': 98.0}), ({'t': 100, 'K': 4, 'D': 5, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.3125, 'reference_delay': -4.6875, 'dedispersed_time': 104.6875, 'frequency_slope': -0.078125, 'channel_smearing': 0.078125, 'infinite_time': 99.6875}), ({'t': 100, 'K': 1, 'D': 5, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.25, 'reference_delay': 0.9375, 'dedispersed_time': 99.0625, 'frequency_slope': -1.25, 'channel_smearing': 1.25, 'infinite_time': 98.75}), ({'t': 100, 'K': 4, 'D': 5, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.25, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.625, 'channel_smearing': 1.25, 'infinite_time': 98.75})], 4: [({'t': 100, 'K': 4, 'D': 6, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 6.0, 'reference_delay': 4.5, 'dedispersed_time': 95.5, 'frequency_slope': -6.0, 'channel_smearing': 6.0, 'infinite_time': 94.0}), ({'t': 100, 'K': 4, 'D': 6, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.5, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.75, 'channel_smearing': 0.75, 'infinite_time': 98.5}), ({'t': 100, 'K': 4, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 3.0, 'reference_delay': 2.25, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'channel_smearing': 3.0, 'infinite_time': 97.0}), ({'t': 100, 'K': 4, 'D': 6, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.375, 'reference_delay': -5.625, 'dedispersed_time': 105.625, 'frequency_slope': -0.09375, 'channel_smearing': 0.09375, 'infinite_time': 99.625}), ({'t': 100, 'K': 1, 'D': 6, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.5, 'reference_delay': 1.125, 'dedispersed_time': 98.875, 'frequency_slope': -1.5, 'channel_smearing': 1.5, 'infinite_time': 98.5}), ({'t': 100, 'K': 4, 'D': 6, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.5, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.75, 'channel_smearing': 1.5, 'infinite_time': 98.5})], 5: [({'t': 100, 'K': 4, 'D': 7, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 7.0, 'reference_delay': 5.25, 'dedispersed_time': 94.75, 'frequency_slope': -7.0, 'channel_smearing': 7.0, 'infinite_time': 93.0}), ({'t': 100, 'K': 4, 'D': 7, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.875, 'channel_smearing': 0.875, 'infinite_time': 98.25}), ({'t': 100, 'K': 4, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 4.0, 'reference_delay': 3.0, 'dedispersed_time': 97.0, 'frequency_slope': -4.0, 'channel_smearing': 4.0, 'infinite_time': 96.0}), ({'t': 100, 'K': 4, 'D': 7, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.4375, 'reference_delay': -6.5625, 'dedispersed_time': 106.5625, 'frequency_slope': -0.109375, 'channel_smearing': 0.109375, 'infinite_time': 99.5625}), ({'t': 100, 'K': 1, 'D': 7, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.75, 'reference_delay': 1.3125, 'dedispersed_time': 98.6875, 'frequency_slope': -1.75, 'channel_smearing': 1.75, 'infinite_time': 98.25}), ({'t': 100, 'K': 4, 'D': 7, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.875, 'channel_smearing': 1.75, 'infinite_time': 98.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| astronomical fixture 0 | {'channel_smearing': 3.0, 'dedispersed_time': 97.0, 'frequency_slope': -3.0, 'infinite_delay': 3.0, 'infinite_time': 97.0, 'reference_delay': 2.25} | {'channel_smearing': 3.0, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'infinite_delay': 3.0, 'infinite_time': 97.0, 'reference_delay': 2.25} | Failed |
| astronomical fixture 1 | {'channel_smearing': 0.375, 'dedispersed_time': 99.25, 'frequency_slope': -0.375, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.0} | {'channel_smearing': 0.375, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.0} | Failed |
| astronomical fixture 2 | {'channel_smearing': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': 0.0, 'infinite_delay': 0.0, 'infinite_time': 100.0, 'reference_delay': 0.0} | {'channel_smearing': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': 0.0, 'infinite_delay': 0.0, 'infinite_time': 100.0, 'reference_delay': 0.0} | Passed |
| astronomical fixture 3 | {'channel_smearing': 0.046875, 'dedispersed_time': 99.8125, 'frequency_slope': -0.046875, 'infinite_delay': 0.1875, 'infinite_time': 99.8125, 'reference_delay': -2.8125} | {'channel_smearing': 0.046875, 'dedispersed_time': 102.8125, 'frequency_slope': -0.046875, 'infinite_delay': 0.1875, 'infinite_time': 99.8125, 'reference_delay': -2.8125} | Failed |
| astronomical fixture 4 | {'channel_smearing': 0.75, 'dedispersed_time': 99.25, 'frequency_slope': -0.75, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.5625} | {'channel_smearing': 0.75, 'dedispersed_time': 99.4375, 'frequency_slope': -0.75, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.5625} | Failed |
| astronomical fixture 5 | {'channel_smearing': 0.75, 'dedispersed_time': 99.25, 'frequency_slope': -0.375, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.0} | {'channel_smearing': 0.75, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.0} | Failed |
SHA-256 / 1adda1071a76c196ed70eabc2359e8ec5110aaeeab0bf99f925010d1e4f5441c
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'infinite_delay': d['K']*d['D']/d['f']**2, 'reference_delay': d['K']*d['D']*(1/d['f']**2-1/d['r']**2), 'dedispersed_time': d['t']-d['K']*d['D']*(1/d['f']**2-1/d['r']**2), 'frequency_slope': -2*d['K']*d['D']/d['f']**3, 'channel_smearing': abs(2*d['K']*d['D']*d['w']/d['f']**3), 'infinite_time': d['t']-d['K']*d['D']/d['f']**2}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'K': 4, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 3.0, 'reference_delay': 2.25, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'channel_smearing': 3.0, 'infinite_time': 97.0}), ({'t': 100, 'K': 4, 'D': 3, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 0.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'channel_smearing': 0.375, 'infinite_time': 99.25}), ({'t': 100, 'K': 4, 'D': 0, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 0.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': 0.0, 'channel_smearing': 0.0, 'infinite_time': 100.0}), ({'t': 100, 'K': 4, 'D': 3, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.1875, 'reference_delay': -2.8125, 'dedispersed_time': 102.8125, 'frequency_slope': -0.046875, 'channel_smearing': 0.046875, 'infinite_time': 99.8125}), ({'t': 100, 'K': 1, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 0.75, 'reference_delay': 0.5625, 'dedispersed_time': 99.4375, 'frequency_slope': -0.75, 'channel_smearing': 0.75, 'infinite_time': 99.25}), ({'t': 100, 'K': 4, 'D': 3, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 0.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'channel_smearing': 0.75, 'infinite_time': 99.25})], 2: [({'t': 100, 'K': 4, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 4.0, 'reference_delay': 3.0, 'dedispersed_time': 97.0, 'frequency_slope': -4.0, 'channel_smearing': 4.0, 'infinite_time': 96.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.5, 'channel_smearing': 0.5, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 1, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.75, 'dedispersed_time': 99.25, 'frequency_slope': -1.0, 'channel_smearing': 1.0, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.25, 'reference_delay': -3.75, 'dedispersed_time': 103.75, 'frequency_slope': -0.0625, 'channel_smearing': 0.0625, 'infinite_time': 99.75}), ({'t': 100, 'K': 1, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.0, 'reference_delay': 0.75, 'dedispersed_time': 99.25, 'frequency_slope': -1.0, 'channel_smearing': 1.0, 'infinite_time': 99.0}), ({'t': 100, 'K': 4, 'D': 4, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.0, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.5, 'channel_smearing': 1.0, 'infinite_time': 99.0})], 3: [({'t': 100, 'K': 4, 'D': 5, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 5.0, 'reference_delay': 3.75, 'dedispersed_time': 96.25, 'frequency_slope': -5.0, 'channel_smearing': 5.0, 'infinite_time': 95.0}), ({'t': 100, 'K': 4, 'D': 5, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.25, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.625, 'channel_smearing': 0.625, 'infinite_time': 98.75}), ({'t': 100, 'K': 4, 'D': 2, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 2.0, 'reference_delay': 1.5, 'dedispersed_time': 98.5, 'frequency_slope': -2.0, 'channel_smearing': 2.0, 'infinite_time': 98.0}), ({'t': 100, 'K': 4, 'D': 5, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.3125, 'reference_delay': -4.6875, 'dedispersed_time': 104.6875, 'frequency_slope': -0.078125, 'channel_smearing': 0.078125, 'infinite_time': 99.6875}), ({'t': 100, 'K': 1, 'D': 5, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.25, 'reference_delay': 0.9375, 'dedispersed_time': 99.0625, 'frequency_slope': -1.25, 'channel_smearing': 1.25, 'infinite_time': 98.75}), ({'t': 100, 'K': 4, 'D': 5, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.25, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.625, 'channel_smearing': 1.25, 'infinite_time': 98.75})], 4: [({'t': 100, 'K': 4, 'D': 6, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 6.0, 'reference_delay': 4.5, 'dedispersed_time': 95.5, 'frequency_slope': -6.0, 'channel_smearing': 6.0, 'infinite_time': 94.0}), ({'t': 100, 'K': 4, 'D': 6, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.5, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.75, 'channel_smearing': 0.75, 'infinite_time': 98.5}), ({'t': 100, 'K': 4, 'D': 3, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 3.0, 'reference_delay': 2.25, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'channel_smearing': 3.0, 'infinite_time': 97.0}), ({'t': 100, 'K': 4, 'D': 6, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.375, 'reference_delay': -5.625, 'dedispersed_time': 105.625, 'frequency_slope': -0.09375, 'channel_smearing': 0.09375, 'infinite_time': 99.625}), ({'t': 100, 'K': 1, 'D': 6, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.5, 'reference_delay': 1.125, 'dedispersed_time': 98.875, 'frequency_slope': -1.5, 'channel_smearing': 1.5, 'infinite_time': 98.5}), ({'t': 100, 'K': 4, 'D': 6, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.5, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.75, 'channel_smearing': 1.5, 'infinite_time': 98.5})], 5: [({'t': 100, 'K': 4, 'D': 7, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 7.0, 'reference_delay': 5.25, 'dedispersed_time': 94.75, 'frequency_slope': -7.0, 'channel_smearing': 7.0, 'infinite_time': 93.0}), ({'t': 100, 'K': 4, 'D': 7, 'f': 4, 'r': 4, 'w': 1}, {'infinite_delay': 1.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.875, 'channel_smearing': 0.875, 'infinite_time': 98.25}), ({'t': 100, 'K': 4, 'D': 4, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 4.0, 'reference_delay': 3.0, 'dedispersed_time': 97.0, 'frequency_slope': -4.0, 'channel_smearing': 4.0, 'infinite_time': 96.0}), ({'t': 100, 'K': 4, 'D': 7, 'f': 8, 'r': 2, 'w': 1}, {'infinite_delay': 0.4375, 'reference_delay': -6.5625, 'dedispersed_time': 106.5625, 'frequency_slope': -0.109375, 'channel_smearing': 0.109375, 'infinite_time': 99.5625}), ({'t': 100, 'K': 1, 'D': 7, 'f': 2, 'r': 4, 'w': 1}, {'infinite_delay': 1.75, 'reference_delay': 1.3125, 'dedispersed_time': 98.6875, 'frequency_slope': -1.75, 'channel_smearing': 1.75, 'infinite_time': 98.25}), ({'t': 100, 'K': 4, 'D': 7, 'f': 4, 'r': 4, 'w': 2}, {'infinite_delay': 1.75, 'reference_delay': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': -0.875, 'channel_smearing': 1.75, 'infinite_time': 98.25})]}
for i, (record, expected) in enumerate(fixtures[N]):
check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| astronomical fixture 0 | {'channel_smearing': 3.0, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'infinite_delay': 3.0, 'infinite_time': 97.0, 'reference_delay': 2.25} | {'channel_smearing': 3.0, 'dedispersed_time': 97.75, 'frequency_slope': -3.0, 'infinite_delay': 3.0, 'infinite_time': 97.0, 'reference_delay': 2.25} | Passed |
| astronomical fixture 1 | {'channel_smearing': 0.375, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.0} | {'channel_smearing': 0.375, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.0} | Passed |
| astronomical fixture 2 | {'channel_smearing': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': 0.0, 'infinite_delay': 0.0, 'infinite_time': 100.0, 'reference_delay': 0.0} | {'channel_smearing': 0.0, 'dedispersed_time': 100.0, 'frequency_slope': 0.0, 'infinite_delay': 0.0, 'infinite_time': 100.0, 'reference_delay': 0.0} | Passed |
| astronomical fixture 3 | {'channel_smearing': 0.046875, 'dedispersed_time': 102.8125, 'frequency_slope': -0.046875, 'infinite_delay': 0.1875, 'infinite_time': 99.8125, 'reference_delay': -2.8125} | {'channel_smearing': 0.046875, 'dedispersed_time': 102.8125, 'frequency_slope': -0.046875, 'infinite_delay': 0.1875, 'infinite_time': 99.8125, 'reference_delay': -2.8125} | Passed |
| astronomical fixture 4 | {'channel_smearing': 0.75, 'dedispersed_time': 99.4375, 'frequency_slope': -0.75, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.5625} | {'channel_smearing': 0.75, 'dedispersed_time': 99.4375, 'frequency_slope': -0.75, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.5625} | Passed |
| astronomical fixture 5 | {'channel_smearing': 0.75, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.0} | {'channel_smearing': 0.75, 'dedispersed_time': 100.0, 'frequency_slope': -0.375, 'infinite_delay': 0.75, 'infinite_time': 99.25, 'reference_delay': 0.0} | Passed |
SHA-256 / ac250a73cd869f5fe48bcc545a66914112fd66bd941b7c9c5a4c046744e75332
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.559192+00:00.
Case digest / beec45f70ebd1254c770a2069cd8c5ade4148cb90374f82cdc02cac4a39f27a0