FA-54926 / Astronomical coordinate conventions / Open access
Spectral axis reversal: Reversed spectral extraction bounds are not reordered inclusively · case 01
The adapter reports an incorrect interval while other fields remain valid.
ROOT CAUSE
Reversed spectral extraction bounds are not reordered inclusively. Faulty expression: [d['L']+1-d['lo'],d['L']+1-d['hi']]
VERIFIED REPAIR
Preserve the declared model convention at this site: [d['L']+1-d['hi'],d['L']+1-d['lo']]
Unsuccessful approach: A partial convention repair still uses [d['L']-d['hi'],d['L']-d['lo']]
Case contract
Reverse a finite spectral pixel axis of length L using one-based pixel labels. Reference pixel, edge pixel coordinates, dispersion coefficients, and velocity-increment metadata must describe the same physical samples. Quadratic coefficient is unchanged under reversal about the reference. Output fields are defined by: reference = d['L']+1-d['r']; pixel = d['L']+1-d['p']; increment = -d['step']; quadratic = d['q']; velocity_increment = -d['vel']; interval = [d['L']+1-d['hi'],d['L']+1-d['lo']]
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': d['L']+1-d['r'], 'pixel': d['L']+1-d['p'], 'increment': -d['step'], 'quadratic': d['q'], 'velocity_increment': -d['vel'], 'interval': [d['L']+1-d['lo'],d['L']+1-d['hi']]}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'L': 20, 'r': 6, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 15, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 1, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': 1, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 6, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 15, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 6, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 15, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 20, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 1, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 6, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 7, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})], 2: [({'L': 20, 'r': 7, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 14, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 2, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': 0, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 7, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 14, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 7, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 14, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 21, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 0, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 7, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 6, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})], 3: [({'L': 20, 'r': 8, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 13, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 3, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': -1, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 8, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 13, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 8, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 13, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 22, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': -1, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 8, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 5, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})], 4: [({'L': 20, 'r': 9, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 12, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 4, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': -2, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 9, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 12, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 9, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 12, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 23, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': -2, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 9, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 4, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})], 5: [({'L': 20, 'r': 10, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 11, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 5, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': -3, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 10, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 11, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 10, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 11, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 24, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': -3, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 10, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 3, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})]}
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 | {'increment': -2, 'interval': [19, 12], 'pixel': 18, 'quadratic': 3, 'reference': 15, 'velocity_increment': -5} | {'increment': -2, 'interval': [12, 19], 'pixel': 18, 'quadratic': 3, 'reference': 15, 'velocity_increment': -5} | Failed |
| astronomical fixture 1 | {'increment': -2, 'interval': [1, 1], 'pixel': 1, 'quadratic': 3, 'reference': 1, 'velocity_increment': -5} | {'increment': -2, 'interval': [1, 1], 'pixel': 1, 'quadratic': 3, 'reference': 1, 'velocity_increment': -5} | Passed |
| astronomical fixture 2 | {'increment': 3, 'interval': [19, 12], 'pixel': 18, 'quadratic': 3, 'reference': 15, 'velocity_increment': 7} | {'increment': 3, 'interval': [12, 19], 'pixel': 18, 'quadratic': 3, 'reference': 15, 'velocity_increment': 7} | Failed |
| astronomical fixture 3 | {'increment': -2, 'interval': [19, 12], 'pixel': 18, 'quadratic': 0, 'reference': 15, 'velocity_increment': -5} | {'increment': -2, 'interval': [12, 19], 'pixel': 18, 'quadratic': 0, 'reference': 15, 'velocity_increment': -5} | Failed |
| astronomical fixture 4 | {'increment': -2, 'interval': [19, 12], 'pixel': 1, 'quadratic': 3, 'reference': 1, 'velocity_increment': -5} | {'increment': -2, 'interval': [12, 19], 'pixel': 1, 'quadratic': 3, 'reference': 1, 'velocity_increment': -5} | Failed |
| astronomical fixture 5 | {'increment': -2, 'interval': [10, 9], 'pixel': 10, 'quadratic': 3, 'reference': 7, 'velocity_increment': -5} | {'increment': -2, 'interval': [9, 10], 'pixel': 10, 'quadratic': 3, 'reference': 7, 'velocity_increment': -5} | Failed |
SHA-256 / fdb2568338ad2cbd3f26923910f232c86e4ef19e9d1e379fa5d9dabd0d619f23
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'reference': d['L']+1-d['r'], 'pixel': d['L']+1-d['p'], 'increment': -d['step'], 'quadratic': d['q'], 'velocity_increment': -d['vel'], 'interval': [d['L']-d['hi'],d['L']-d['lo']]}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'L': 20, 'r': 6, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 15, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 1, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': 1, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 6, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 15, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 6, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 15, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 20, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 1, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 6, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 7, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})], 2: [({'L': 20, 'r': 7, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 14, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 2, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': 0, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 7, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 14, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 7, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 14, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 21, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 0, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 7, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 6, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})], 3: [({'L': 20, 'r': 8, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 13, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 3, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': -1, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 8, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 13, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 8, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 13, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 22, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': -1, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 8, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 5, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})], 4: [({'L': 20, 'r': 9, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 12, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 4, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': -2, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 9, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 12, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 9, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 12, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 23, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': -2, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 9, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 4, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})], 5: [({'L': 20, 'r': 10, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 11, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 5, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': -3, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 10, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 11, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 10, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 11, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 24, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': -3, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 10, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 3, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})]}
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 | {'increment': -2, 'interval': [11, 18], 'pixel': 18, 'quadratic': 3, 'reference': 15, 'velocity_increment': -5} | {'increment': -2, 'interval': [12, 19], 'pixel': 18, 'quadratic': 3, 'reference': 15, 'velocity_increment': -5} | Failed |
| astronomical fixture 1 | {'increment': -2, 'interval': [0, 0], 'pixel': 1, 'quadratic': 3, 'reference': 1, 'velocity_increment': -5} | {'increment': -2, 'interval': [1, 1], 'pixel': 1, 'quadratic': 3, 'reference': 1, 'velocity_increment': -5} | Failed |
| astronomical fixture 2 | {'increment': 3, 'interval': [11, 18], 'pixel': 18, 'quadratic': 3, 'reference': 15, 'velocity_increment': 7} | {'increment': 3, 'interval': [12, 19], 'pixel': 18, 'quadratic': 3, 'reference': 15, 'velocity_increment': 7} | Failed |
| astronomical fixture 3 | {'increment': -2, 'interval': [11, 18], 'pixel': 18, 'quadratic': 0, 'reference': 15, 'velocity_increment': -5} | {'increment': -2, 'interval': [12, 19], 'pixel': 18, 'quadratic': 0, 'reference': 15, 'velocity_increment': -5} | Failed |
| astronomical fixture 4 | {'increment': -2, 'interval': [11, 18], 'pixel': 1, 'quadratic': 3, 'reference': 1, 'velocity_increment': -5} | {'increment': -2, 'interval': [12, 19], 'pixel': 1, 'quadratic': 3, 'reference': 1, 'velocity_increment': -5} | Failed |
| astronomical fixture 5 | {'increment': -2, 'interval': [8, 9], 'pixel': 10, 'quadratic': 3, 'reference': 7, 'velocity_increment': -5} | {'increment': -2, 'interval': [9, 10], 'pixel': 10, 'quadratic': 3, 'reference': 7, 'velocity_increment': -5} | Failed |
SHA-256 / 1b176955bba05467d3c240d33c01ce45f6756b325d555bbcc45914ce45cf6c35
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
return {'reference': d['L']+1-d['r'], 'pixel': d['L']+1-d['p'], 'increment': -d['step'], 'quadratic': d['q'], 'velocity_increment': -d['vel'], 'interval': [d['L']+1-d['hi'],d['L']+1-d['lo']]}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'L': 20, 'r': 6, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 15, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 1, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': 1, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 6, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 15, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 6, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 15, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 20, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 1, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 6, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 7, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})], 2: [({'L': 20, 'r': 7, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 14, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 2, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': 0, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 7, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 14, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 7, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 14, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 21, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 0, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 7, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 6, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})], 3: [({'L': 20, 'r': 8, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 13, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 3, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': -1, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 8, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 13, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 8, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 13, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 22, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': -1, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 8, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 5, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})], 4: [({'L': 20, 'r': 9, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 12, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 4, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': -2, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 9, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 12, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 9, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 12, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 23, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': -2, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 9, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 4, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})], 5: [({'L': 20, 'r': 10, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 11, 'pixel': 18, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 1, 'r': 5, 'p': 1, 'step': 2, 'q': 3, 'vel': 5, 'lo': 1, 'hi': 1}, {'reference': -3, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [1, 1]}), ({'L': 20, 'r': 10, 'p': 3, 'step': -3, 'q': 3, 'vel': -7, 'lo': 2, 'hi': 9}, {'reference': 11, 'pixel': 18, 'increment': 3, 'quadratic': 3, 'velocity_increment': 7, 'interval': [12, 19]}), ({'L': 20, 'r': 10, 'p': 3, 'step': 2, 'q': 0, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': 11, 'pixel': 18, 'increment': -2, 'quadratic': 0, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 20, 'r': 24, 'p': 20, 'step': 2, 'q': 3, 'vel': 5, 'lo': 2, 'hi': 9}, {'reference': -3, 'pixel': 1, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [12, 19]}), ({'L': 12, 'r': 10, 'p': 3, 'step': 2, 'q': 3, 'vel': 5, 'lo': 3, 'hi': 4}, {'reference': 3, 'pixel': 10, 'increment': -2, 'quadratic': 3, 'velocity_increment': -5, 'interval': [9, 10]})]}
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 | {'increment': -2, 'interval': [12, 19], 'pixel': 18, 'quadratic': 3, 'reference': 15, 'velocity_increment': -5} | {'increment': -2, 'interval': [12, 19], 'pixel': 18, 'quadratic': 3, 'reference': 15, 'velocity_increment': -5} | Passed |
| astronomical fixture 1 | {'increment': -2, 'interval': [1, 1], 'pixel': 1, 'quadratic': 3, 'reference': 1, 'velocity_increment': -5} | {'increment': -2, 'interval': [1, 1], 'pixel': 1, 'quadratic': 3, 'reference': 1, 'velocity_increment': -5} | Passed |
| astronomical fixture 2 | {'increment': 3, 'interval': [12, 19], 'pixel': 18, 'quadratic': 3, 'reference': 15, 'velocity_increment': 7} | {'increment': 3, 'interval': [12, 19], 'pixel': 18, 'quadratic': 3, 'reference': 15, 'velocity_increment': 7} | Passed |
| astronomical fixture 3 | {'increment': -2, 'interval': [12, 19], 'pixel': 18, 'quadratic': 0, 'reference': 15, 'velocity_increment': -5} | {'increment': -2, 'interval': [12, 19], 'pixel': 18, 'quadratic': 0, 'reference': 15, 'velocity_increment': -5} | Passed |
| astronomical fixture 4 | {'increment': -2, 'interval': [12, 19], 'pixel': 1, 'quadratic': 3, 'reference': 1, 'velocity_increment': -5} | {'increment': -2, 'interval': [12, 19], 'pixel': 1, 'quadratic': 3, 'reference': 1, 'velocity_increment': -5} | Passed |
| astronomical fixture 5 | {'increment': -2, 'interval': [9, 10], 'pixel': 10, 'quadratic': 3, 'reference': 7, 'velocity_increment': -5} | {'increment': -2, 'interval': [9, 10], 'pixel': 10, 'quadratic': 3, 'reference': 7, 'velocity_increment': -5} | Passed |
SHA-256 / a0841846db538b4f3df3a1cf25898170ba4f1d6c1f624e6b7df1ba31ebf36db5
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:45:52.864565+00:00.
Case digest / 408a174fb3de723a172ed9ec949adbbbcdb38c223fef87d22184cccdbcd28415