broken_source:
"""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)

evaluation_group: astro-exposure-time-coordinate

source:
"""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)

prompt:
The adapter reports an incorrect reference time while other fields remain valid.

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']

split: open-access


broken_source:
"""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'], '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)

meaning: Fixture-count band, not measured model difficulty

deps: stdlib

evaluation_group: astro-exposure-time-coordinate

source:
"""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']+1)*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)

prompt:
The adapter reports an incorrect row start while other fields remain valid.

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']

split: open-access


broken_source:
"""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['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)

evaluation_group: astro-exposure-time-coordinate

source:
"""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'], '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)

prompt:
The adapter reports an incorrect row midpoint while other fields remain valid.

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']

split: open-access


broken_source:
"""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['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)

evaluation_group: astro-exposure-time-coordinate

source:
"""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)

prompt:
The adapter reports an incorrect shutter corrected while other fields remain valid.

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']

split: open-access


broken_source:
"""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['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)

evaluation_group: astro-exposure-time-coordinate

source:
"""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)

prompt:
The adapter reports an incorrect barycentric midpoint while other fields remain valid.

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']

split: open-access


broken_source:
"""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['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)

evaluation_group: astro-exposure-time-coordinate

source:
"""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['f']*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)

prompt:
The adapter reports an incorrect end time while other fields remain valid.

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']

split: open-access