FA-55681 / Astronomical coordinate conventions / Open access
Exposure time coordinate: Exposure reference fraction is ignored in favor of midpoint convention · case 01
The adapter reports an incorrect reference time while other fields remain valid.
ROOT CAUSE
Exposure reference fraction is ignored in favor of midpoint convention. Faulty expression: d['t']+d['e']/2
VERIFIED REPAIR
Preserve the declared model convention at this site: d['t']+d['f']*d['e']
Unsuccessful approach: A partial convention repair still uses d['t']+d['f']
Case contract
A detector exposure starts at t with integration duration e. Row y has rolling delay y*r; shutter traversal adds y*s. A barycentric timestamp offset b is supplied in the same model ticks. FITS-like fractional exposure reference f selects start f=0, midpoint f=0.5, or end f=1. Output fields are defined by: reference_time = d['t']+d['f']*d['e']; row_start = d['t']+d['y']*d['r']; row_midpoint = d['t']+d['y']*d['r']+d['e']/2; shutter_corrected = d['t']+d['f']*d['e']+d['y']*d['s']; barycentric_midpoint = d['t']+d['e']/2+d['b']; end_time = d['t']+d['y']*d['r']+d['e']
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 {'reference_time': d['t']+d['e']/2, 'row_start': d['t']+d['y']*d['r'], 'row_midpoint': d['t']+d['y']*d['r']+d['e']/2, 'shutter_corrected': d['t']+d['f']*d['e']+d['y']*d['s'], 'barycentric_midpoint': d['t']+d['e']/2+d['b'], 'end_time': d['t']+d['y']*d['r']+d['e']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 100, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 103, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 110, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 113, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 100, 'row_midpoint': 105.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 109.0, 'end_time': 110}), ({'t': 100, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 100, 'row_midpoint': 105.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 109.0, 'end_time': 110}), ({'t': 100, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 102.0, 'row_start': 106, 'row_midpoint': 108.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 99.0, 'end_time': 110})], 2: [({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 101, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 104, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 111, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 114, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 101, 'row_midpoint': 106.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 110.0, 'end_time': 111}), ({'t': 101, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 101, 'row_midpoint': 106.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 110.0, 'end_time': 111}), ({'t': 101, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 103.0, 'row_start': 107, 'row_midpoint': 109.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 100.0, 'end_time': 111})], 3: [({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 110.0, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 102, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 105, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 112, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 115, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 102, 'row_midpoint': 107.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 111.0, 'end_time': 112}), ({'t': 102, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 102, 'row_midpoint': 107.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 111.0, 'end_time': 112}), ({'t': 102, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 104.0, 'row_start': 108, 'row_midpoint': 110.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 101.0, 'end_time': 112})], 4: [({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 111.0, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 103, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 106, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 113, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 116, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 103, 'row_midpoint': 108.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 112.0, 'end_time': 113}), ({'t': 103, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 103, 'row_midpoint': 108.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 112.0, 'end_time': 113}), ({'t': 103, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 109, 'row_midpoint': 111.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 102.0, 'end_time': 113})], 5: [({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 112.0, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 104, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 107, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 114, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 117, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 104, 'row_midpoint': 109.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 113.0, 'end_time': 114}), ({'t': 104, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 104, 'row_midpoint': 109.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 113.0, 'end_time': 114}), ({'t': 104, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 110, 'row_midpoint': 112.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 103.0, 'end_time': 114})]}
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 | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 108.0} | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 108.0} | Passed |
| astronomical fixture 1 | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 103} | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 100, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 103} | Failed |
| astronomical fixture 2 | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 113} | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 110, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 113} | Failed |
| astronomical fixture 3 | {'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0} | {'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0} | Passed |
| astronomical fixture 4 | {'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0} | {'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0} | Passed |
| astronomical fixture 5 | {'barycentric_midpoint': 99.0, 'end_time': 110, 'reference_time': 102.0, 'row_midpoint': 108.0, 'row_start': 106, 'shutter_corrected': 105.0} | {'barycentric_midpoint': 99.0, 'end_time': 110, 'reference_time': 102.0, 'row_midpoint': 108.0, 'row_start': 106, 'shutter_corrected': 105.0} | Passed |
SHA-256 / fcfd17275905dd3be683524a135e4afad53a09aa21282fe7e84e44f0811dafd0
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'reference_time': d['t']+d['f'], 'row_start': d['t']+d['y']*d['r'], 'row_midpoint': d['t']+d['y']*d['r']+d['e']/2, 'shutter_corrected': d['t']+d['f']*d['e']+d['y']*d['s'], 'barycentric_midpoint': d['t']+d['e']/2+d['b'], 'end_time': d['t']+d['y']*d['r']+d['e']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 100, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 103, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 110, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 113, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 100, 'row_midpoint': 105.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 109.0, 'end_time': 110}), ({'t': 100, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 100, 'row_midpoint': 105.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 109.0, 'end_time': 110}), ({'t': 100, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 102.0, 'row_start': 106, 'row_midpoint': 108.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 99.0, 'end_time': 110})], 2: [({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 101, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 104, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 111, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 114, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 101, 'row_midpoint': 106.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 110.0, 'end_time': 111}), ({'t': 101, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 101, 'row_midpoint': 106.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 110.0, 'end_time': 111}), ({'t': 101, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 103.0, 'row_start': 107, 'row_midpoint': 109.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 100.0, 'end_time': 111})], 3: [({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 110.0, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 102, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 105, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 112, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 115, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 102, 'row_midpoint': 107.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 111.0, 'end_time': 112}), ({'t': 102, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 102, 'row_midpoint': 107.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 111.0, 'end_time': 112}), ({'t': 102, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 104.0, 'row_start': 108, 'row_midpoint': 110.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 101.0, 'end_time': 112})], 4: [({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 111.0, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 103, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 106, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 113, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 116, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 103, 'row_midpoint': 108.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 112.0, 'end_time': 113}), ({'t': 103, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 103, 'row_midpoint': 108.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 112.0, 'end_time': 113}), ({'t': 103, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 109, 'row_midpoint': 111.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 102.0, 'end_time': 113})], 5: [({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 112.0, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 104, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 107, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 114, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 117, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 104, 'row_midpoint': 109.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 113.0, 'end_time': 114}), ({'t': 104, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 104, 'row_midpoint': 109.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 113.0, 'end_time': 114}), ({'t': 104, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 110, 'row_midpoint': 112.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 103.0, 'end_time': 114})]}
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 | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 100.5, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 108.0} | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 108.0} | Failed |
| astronomical fixture 1 | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 100, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 103} | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 100, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 103} | Passed |
| astronomical fixture 2 | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 101, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 113} | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 110, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 113} | Failed |
| astronomical fixture 3 | {'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 100.5, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0} | {'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0} | Failed |
| astronomical fixture 4 | {'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 100.5, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0} | {'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0} | Failed |
| astronomical fixture 5 | {'barycentric_midpoint': 99.0, 'end_time': 110, 'reference_time': 100.5, 'row_midpoint': 108.0, 'row_start': 106, 'shutter_corrected': 105.0} | {'barycentric_midpoint': 99.0, 'end_time': 110, 'reference_time': 102.0, 'row_midpoint': 108.0, 'row_start': 106, 'shutter_corrected': 105.0} | Failed |
SHA-256 / ca7f844dfc3715d4b5f2326428c73c7550bf796a07b822761daeb5195e448f0d
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'reference_time': d['t']+d['f']*d['e'], 'row_start': d['t']+d['y']*d['r'], 'row_midpoint': d['t']+d['y']*d['r']+d['e']/2, 'shutter_corrected': d['t']+d['f']*d['e']+d['y']*d['s'], 'barycentric_midpoint': d['t']+d['e']/2+d['b'], 'end_time': d['t']+d['y']*d['r']+d['e']}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 100, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 103, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 110, 'row_start': 106, 'row_midpoint': 111.0, 'shutter_corrected': 113, 'barycentric_midpoint': 109.0, 'end_time': 116}), ({'t': 100, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 100, 'row_midpoint': 105.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 109.0, 'end_time': 110}), ({'t': 100, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 100, 'row_midpoint': 105.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 109.0, 'end_time': 110}), ({'t': 100, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 102.0, 'row_start': 106, 'row_midpoint': 108.0, 'shutter_corrected': 105.0, 'barycentric_midpoint': 99.0, 'end_time': 110})], 2: [({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 101, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 104, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 111, 'row_start': 107, 'row_midpoint': 112.0, 'shutter_corrected': 114, 'barycentric_midpoint': 110.0, 'end_time': 117}), ({'t': 101, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 101, 'row_midpoint': 106.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 110.0, 'end_time': 111}), ({'t': 101, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 101, 'row_midpoint': 106.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 110.0, 'end_time': 111}), ({'t': 101, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 103.0, 'row_start': 107, 'row_midpoint': 109.0, 'shutter_corrected': 106.0, 'barycentric_midpoint': 100.0, 'end_time': 111})], 3: [({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 110.0, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 102, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 105, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 112, 'row_start': 108, 'row_midpoint': 113.0, 'shutter_corrected': 115, 'barycentric_midpoint': 111.0, 'end_time': 118}), ({'t': 102, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 102, 'row_midpoint': 107.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 111.0, 'end_time': 112}), ({'t': 102, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 107.0, 'row_start': 102, 'row_midpoint': 107.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 111.0, 'end_time': 112}), ({'t': 102, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 104.0, 'row_start': 108, 'row_midpoint': 110.0, 'shutter_corrected': 107.0, 'barycentric_midpoint': 101.0, 'end_time': 112})], 4: [({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 111.0, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 103, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 106, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 113, 'row_start': 109, 'row_midpoint': 114.0, 'shutter_corrected': 116, 'barycentric_midpoint': 112.0, 'end_time': 119}), ({'t': 103, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 103, 'row_midpoint': 108.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 112.0, 'end_time': 113}), ({'t': 103, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 108.0, 'row_start': 103, 'row_midpoint': 108.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 112.0, 'end_time': 113}), ({'t': 103, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 105.0, 'row_start': 109, 'row_midpoint': 111.0, 'shutter_corrected': 108.0, 'barycentric_midpoint': 102.0, 'end_time': 113})], 5: [({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 112.0, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 0}, {'reference_time': 104, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 107, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 3, 'r': 2, 's': 1, 'b': 4, 'f': 1}, {'reference_time': 114, 'row_start': 110, 'row_midpoint': 115.0, 'shutter_corrected': 117, 'barycentric_midpoint': 113.0, 'end_time': 120}), ({'t': 104, 'e': 10, 'y': 0, 'r': 2, 's': 1, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 104, 'row_midpoint': 109.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 113.0, 'end_time': 114}), ({'t': 104, 'e': 10, 'y': 3, 'r': 0, 's': 0, 'b': 4, 'f': 0.5}, {'reference_time': 109.0, 'row_start': 104, 'row_midpoint': 109.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 113.0, 'end_time': 114}), ({'t': 104, 'e': 4, 'y': 3, 'r': 2, 's': 1, 'b': -3, 'f': 0.5}, {'reference_time': 106.0, 'row_start': 110, 'row_midpoint': 112.0, 'shutter_corrected': 109.0, 'barycentric_midpoint': 103.0, 'end_time': 114})]}
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 | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 108.0} | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 105.0, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 108.0} | Passed |
| astronomical fixture 1 | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 100, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 103} | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 100, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 103} | Passed |
| astronomical fixture 2 | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 110, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 113} | {'barycentric_midpoint': 109.0, 'end_time': 116, 'reference_time': 110, 'row_midpoint': 111.0, 'row_start': 106, 'shutter_corrected': 113} | Passed |
| astronomical fixture 3 | {'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0} | {'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0} | Passed |
| astronomical fixture 4 | {'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0} | {'barycentric_midpoint': 109.0, 'end_time': 110, 'reference_time': 105.0, 'row_midpoint': 105.0, 'row_start': 100, 'shutter_corrected': 105.0} | Passed |
| astronomical fixture 5 | {'barycentric_midpoint': 99.0, 'end_time': 110, 'reference_time': 102.0, 'row_midpoint': 108.0, 'row_start': 106, 'shutter_corrected': 105.0} | {'barycentric_midpoint': 99.0, 'end_time': 110, 'reference_time': 102.0, 'row_midpoint': 108.0, 'row_start': 106, 'shutter_corrected': 105.0} | Passed |
SHA-256 / 7b9a6620dc80b4ca587682b33dda3df4965dee8d43e52d7c04753a0a52d8b17e
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:00.111613+00:00.
Case digest / 118fe4d7df32fac15170190d609d5dc52437ab9e2c495f76e5596db89e23bf59