FAILURE MAP
← Case archive

FA-55431 / Astronomical coordinate conventions / Open access

Solar longitude conventions: Relative solar longitude transport fails to remove central-meridian motion · case 01

The adapter reports an incorrect transported relative while other fields remain valid.

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

ROOT CAUSE

Relative solar longitude transport fails to remove central-meridian motion. Faulty expression: (d['s']+d['r']*d['dt']+180)%360-180

VERIFIED REPAIR

Preserve the declared model convention at this site: (d['s']+(d['r']-d['rc'])*d['dt']+180)%360-180

Unsuccessful approach: A partial convention repair still uses (d['s']+(d['rc']-d['r'])*d['dt']+180)%360-180

Case contract

A reduced solar adapter stores Stonyhurst longitude s relative to central meridian C. Carrington longitude is C+s modulo a turn. A west-positive disk offset is supplied separately; rotation transport over dt uses rates r for feature and rc for central meridian. Angles are model degrees. Output fields are defined by: carrington = (d['C']+d['s'])%360; stonyhurst_from_carrington = ((d['C']+d['s'])%360-d['C']+180)%360-180; image_east_offset = -d['west']; transported_feature = (d['C']+d['s']+d['r']*d['dt'])%360; transported_relative = (d['s']+(d['r']-d['rc'])*d['dt']+180)%360-180; central_meridian = (d['C']+d['rc']*d['dt'])%360

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 {'carrington': (d['C']+d['s'])%360, 'stonyhurst_from_carrington': ((d['C']+d['s'])%360-d['C']+180)%360-180, 'image_east_offset': -d['west'], 'transported_feature': (d['C']+d['s']+d['r']*d['dt'])%360, 'transported_relative': (d['s']+d['r']*d['dt']+180)%360-180, 'central_meridian': (d['C']+d['rc']*d['dt'])%360}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 198, 'transported_relative': 22, 'central_meridian': 176}), ({'s': 20, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 10, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 38, 'transported_relative': 22, 'central_meridian': 16}), ({'s': -40, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 110, 'stonyhurst_from_carrington': -40, 'image_east_offset': -3, 'transported_feature': 138, 'transported_relative': -38, 'central_meridian': 176}), ({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 170, 'transported_relative': 20, 'central_meridian': 150}), ({'s': 20, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 146, 'transported_relative': 24, 'central_meridian': 122}), ({'s': 20, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 20, 'stonyhurst_from_carrington': 20, 'image_east_offset': 5, 'transported_feature': 48, 'transported_relative': 22, 'central_meridian': 26})], 2: [({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 199, 'transported_relative': 23, 'central_meridian': 176}), ({'s': 21, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 11, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 39, 'transported_relative': 23, 'central_meridian': 16}), ({'s': -39, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 111, 'stonyhurst_from_carrington': -39, 'image_east_offset': -3, 'transported_feature': 139, 'transported_relative': -37, 'central_meridian': 176}), ({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 171, 'transported_relative': 21, 'central_meridian': 150}), ({'s': 21, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 147, 'transported_relative': 25, 'central_meridian': 122}), ({'s': 21, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 21, 'stonyhurst_from_carrington': 21, 'image_east_offset': 5, 'transported_feature': 49, 'transported_relative': 23, 'central_meridian': 26})], 3: [({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 200, 'transported_relative': 24, 'central_meridian': 176}), ({'s': 22, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 12, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 40, 'transported_relative': 24, 'central_meridian': 16}), ({'s': -38, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 112, 'stonyhurst_from_carrington': -38, 'image_east_offset': -3, 'transported_feature': 140, 'transported_relative': -36, 'central_meridian': 176}), ({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 172, 'transported_relative': 22, 'central_meridian': 150}), ({'s': 22, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 148, 'transported_relative': 26, 'central_meridian': 122}), ({'s': 22, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 22, 'stonyhurst_from_carrington': 22, 'image_east_offset': 5, 'transported_feature': 50, 'transported_relative': 24, 'central_meridian': 26})], 4: [({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 201, 'transported_relative': 25, 'central_meridian': 176}), ({'s': 23, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 13, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 41, 'transported_relative': 25, 'central_meridian': 16}), ({'s': -37, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 113, 'stonyhurst_from_carrington': -37, 'image_east_offset': -3, 'transported_feature': 141, 'transported_relative': -35, 'central_meridian': 176}), ({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 173, 'transported_relative': 23, 'central_meridian': 150}), ({'s': 23, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 149, 'transported_relative': 27, 'central_meridian': 122}), ({'s': 23, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 23, 'stonyhurst_from_carrington': 23, 'image_east_offset': 5, 'transported_feature': 51, 'transported_relative': 25, 'central_meridian': 26})], 5: [({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 202, 'transported_relative': 26, 'central_meridian': 176}), ({'s': 24, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 14, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 42, 'transported_relative': 26, 'central_meridian': 16}), ({'s': -36, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 114, 'stonyhurst_from_carrington': -36, 'image_east_offset': -3, 'transported_feature': 142, 'transported_relative': -34, 'central_meridian': 176}), ({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 174, 'transported_relative': 24, 'central_meridian': 150}), ({'s': 24, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 150, 'transported_relative': 28, 'central_meridian': 122}), ({'s': 24, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 24, 'stonyhurst_from_carrington': 24, 'image_east_offset': 5, 'transported_feature': 52, 'transported_relative': 26, 'central_meridian': 26})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'carrington': 170, 'central_meridian': 176, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 198, 'transported_relative': 48}{'carrington': 170, 'central_meridian': 176, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 198, 'transported_relative': 22}Failed
astronomical fixture 1{'carrington': 10, 'central_meridian': 16, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 38, 'transported_relative': 48}{'carrington': 10, 'central_meridian': 16, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 38, 'transported_relative': 22}Failed
astronomical fixture 2{'carrington': 110, 'central_meridian': 176, 'image_east_offset': -3, 'stonyhurst_from_carrington': -40, 'transported_feature': 138, 'transported_relative': -12}{'carrington': 110, 'central_meridian': 176, 'image_east_offset': -3, 'stonyhurst_from_carrington': -40, 'transported_feature': 138, 'transported_relative': -38}Failed
astronomical fixture 3{'carrington': 170, 'central_meridian': 150, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 170, 'transported_relative': 20}{'carrington': 170, 'central_meridian': 150, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 170, 'transported_relative': 20}Passed
astronomical fixture 4{'carrington': 170, 'central_meridian': 122, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 146, 'transported_relative': -4}{'carrington': 170, 'central_meridian': 122, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 146, 'transported_relative': 24}Failed
astronomical fixture 5{'carrington': 20, 'central_meridian': 26, 'image_east_offset': 5, 'stonyhurst_from_carrington': 20, 'transported_feature': 48, 'transported_relative': 48}{'carrington': 20, 'central_meridian': 26, 'image_east_offset': 5, 'stonyhurst_from_carrington': 20, 'transported_feature': 48, 'transported_relative': 22}Failed

SHA-256 / 9a47c6d82ea0170ef06605b5329c818a6508417325d64fefeaf7f5d7c7c1aa53

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'carrington': (d['C']+d['s'])%360, 'stonyhurst_from_carrington': ((d['C']+d['s'])%360-d['C']+180)%360-180, 'image_east_offset': -d['west'], 'transported_feature': (d['C']+d['s']+d['r']*d['dt'])%360, 'transported_relative': (d['s']+(d['rc']-d['r'])*d['dt']+180)%360-180, 'central_meridian': (d['C']+d['rc']*d['dt'])%360}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 198, 'transported_relative': 22, 'central_meridian': 176}), ({'s': 20, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 10, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 38, 'transported_relative': 22, 'central_meridian': 16}), ({'s': -40, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 110, 'stonyhurst_from_carrington': -40, 'image_east_offset': -3, 'transported_feature': 138, 'transported_relative': -38, 'central_meridian': 176}), ({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 170, 'transported_relative': 20, 'central_meridian': 150}), ({'s': 20, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 146, 'transported_relative': 24, 'central_meridian': 122}), ({'s': 20, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 20, 'stonyhurst_from_carrington': 20, 'image_east_offset': 5, 'transported_feature': 48, 'transported_relative': 22, 'central_meridian': 26})], 2: [({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 199, 'transported_relative': 23, 'central_meridian': 176}), ({'s': 21, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 11, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 39, 'transported_relative': 23, 'central_meridian': 16}), ({'s': -39, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 111, 'stonyhurst_from_carrington': -39, 'image_east_offset': -3, 'transported_feature': 139, 'transported_relative': -37, 'central_meridian': 176}), ({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 171, 'transported_relative': 21, 'central_meridian': 150}), ({'s': 21, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 147, 'transported_relative': 25, 'central_meridian': 122}), ({'s': 21, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 21, 'stonyhurst_from_carrington': 21, 'image_east_offset': 5, 'transported_feature': 49, 'transported_relative': 23, 'central_meridian': 26})], 3: [({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 200, 'transported_relative': 24, 'central_meridian': 176}), ({'s': 22, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 12, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 40, 'transported_relative': 24, 'central_meridian': 16}), ({'s': -38, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 112, 'stonyhurst_from_carrington': -38, 'image_east_offset': -3, 'transported_feature': 140, 'transported_relative': -36, 'central_meridian': 176}), ({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 172, 'transported_relative': 22, 'central_meridian': 150}), ({'s': 22, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 148, 'transported_relative': 26, 'central_meridian': 122}), ({'s': 22, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 22, 'stonyhurst_from_carrington': 22, 'image_east_offset': 5, 'transported_feature': 50, 'transported_relative': 24, 'central_meridian': 26})], 4: [({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 201, 'transported_relative': 25, 'central_meridian': 176}), ({'s': 23, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 13, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 41, 'transported_relative': 25, 'central_meridian': 16}), ({'s': -37, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 113, 'stonyhurst_from_carrington': -37, 'image_east_offset': -3, 'transported_feature': 141, 'transported_relative': -35, 'central_meridian': 176}), ({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 173, 'transported_relative': 23, 'central_meridian': 150}), ({'s': 23, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 149, 'transported_relative': 27, 'central_meridian': 122}), ({'s': 23, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 23, 'stonyhurst_from_carrington': 23, 'image_east_offset': 5, 'transported_feature': 51, 'transported_relative': 25, 'central_meridian': 26})], 5: [({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 202, 'transported_relative': 26, 'central_meridian': 176}), ({'s': 24, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 14, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 42, 'transported_relative': 26, 'central_meridian': 16}), ({'s': -36, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 114, 'stonyhurst_from_carrington': -36, 'image_east_offset': -3, 'transported_feature': 142, 'transported_relative': -34, 'central_meridian': 176}), ({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 174, 'transported_relative': 24, 'central_meridian': 150}), ({'s': 24, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 150, 'transported_relative': 28, 'central_meridian': 122}), ({'s': 24, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 24, 'stonyhurst_from_carrington': 24, 'image_east_offset': 5, 'transported_feature': 52, 'transported_relative': 26, 'central_meridian': 26})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'carrington': 170, 'central_meridian': 176, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 198, 'transported_relative': 18}{'carrington': 170, 'central_meridian': 176, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 198, 'transported_relative': 22}Failed
astronomical fixture 1{'carrington': 10, 'central_meridian': 16, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 38, 'transported_relative': 18}{'carrington': 10, 'central_meridian': 16, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 38, 'transported_relative': 22}Failed
astronomical fixture 2{'carrington': 110, 'central_meridian': 176, 'image_east_offset': -3, 'stonyhurst_from_carrington': -40, 'transported_feature': 138, 'transported_relative': -42}{'carrington': 110, 'central_meridian': 176, 'image_east_offset': -3, 'stonyhurst_from_carrington': -40, 'transported_feature': 138, 'transported_relative': -38}Failed
astronomical fixture 3{'carrington': 170, 'central_meridian': 150, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 170, 'transported_relative': 20}{'carrington': 170, 'central_meridian': 150, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 170, 'transported_relative': 20}Passed
astronomical fixture 4{'carrington': 170, 'central_meridian': 122, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 146, 'transported_relative': 16}{'carrington': 170, 'central_meridian': 122, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 146, 'transported_relative': 24}Failed
astronomical fixture 5{'carrington': 20, 'central_meridian': 26, 'image_east_offset': 5, 'stonyhurst_from_carrington': 20, 'transported_feature': 48, 'transported_relative': 18}{'carrington': 20, 'central_meridian': 26, 'image_east_offset': 5, 'stonyhurst_from_carrington': 20, 'transported_feature': 48, 'transported_relative': 22}Failed

SHA-256 / fdc89880d0592c93f275f9483c90e4a658b48478cc2c306e062fd2b45fdc5f30

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'carrington': (d['C']+d['s'])%360, 'stonyhurst_from_carrington': ((d['C']+d['s'])%360-d['C']+180)%360-180, 'image_east_offset': -d['west'], 'transported_feature': (d['C']+d['s']+d['r']*d['dt'])%360, 'transported_relative': (d['s']+(d['r']-d['rc'])*d['dt']+180)%360-180, 'central_meridian': (d['C']+d['rc']*d['dt'])%360}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 198, 'transported_relative': 22, 'central_meridian': 176}), ({'s': 20, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 10, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 38, 'transported_relative': 22, 'central_meridian': 16}), ({'s': -40, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 110, 'stonyhurst_from_carrington': -40, 'image_east_offset': -3, 'transported_feature': 138, 'transported_relative': -38, 'central_meridian': 176}), ({'s': 20, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 170, 'transported_relative': 20, 'central_meridian': 150}), ({'s': 20, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 170, 'stonyhurst_from_carrington': 20, 'image_east_offset': -3, 'transported_feature': 146, 'transported_relative': 24, 'central_meridian': 122}), ({'s': 20, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 20, 'stonyhurst_from_carrington': 20, 'image_east_offset': 5, 'transported_feature': 48, 'transported_relative': 22, 'central_meridian': 26})], 2: [({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 199, 'transported_relative': 23, 'central_meridian': 176}), ({'s': 21, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 11, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 39, 'transported_relative': 23, 'central_meridian': 16}), ({'s': -39, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 111, 'stonyhurst_from_carrington': -39, 'image_east_offset': -3, 'transported_feature': 139, 'transported_relative': -37, 'central_meridian': 176}), ({'s': 21, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 171, 'transported_relative': 21, 'central_meridian': 150}), ({'s': 21, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 171, 'stonyhurst_from_carrington': 21, 'image_east_offset': -3, 'transported_feature': 147, 'transported_relative': 25, 'central_meridian': 122}), ({'s': 21, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 21, 'stonyhurst_from_carrington': 21, 'image_east_offset': 5, 'transported_feature': 49, 'transported_relative': 23, 'central_meridian': 26})], 3: [({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 200, 'transported_relative': 24, 'central_meridian': 176}), ({'s': 22, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 12, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 40, 'transported_relative': 24, 'central_meridian': 16}), ({'s': -38, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 112, 'stonyhurst_from_carrington': -38, 'image_east_offset': -3, 'transported_feature': 140, 'transported_relative': -36, 'central_meridian': 176}), ({'s': 22, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 172, 'transported_relative': 22, 'central_meridian': 150}), ({'s': 22, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 172, 'stonyhurst_from_carrington': 22, 'image_east_offset': -3, 'transported_feature': 148, 'transported_relative': 26, 'central_meridian': 122}), ({'s': 22, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 22, 'stonyhurst_from_carrington': 22, 'image_east_offset': 5, 'transported_feature': 50, 'transported_relative': 24, 'central_meridian': 26})], 4: [({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 201, 'transported_relative': 25, 'central_meridian': 176}), ({'s': 23, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 13, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 41, 'transported_relative': 25, 'central_meridian': 16}), ({'s': -37, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 113, 'stonyhurst_from_carrington': -37, 'image_east_offset': -3, 'transported_feature': 141, 'transported_relative': -35, 'central_meridian': 176}), ({'s': 23, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 173, 'transported_relative': 23, 'central_meridian': 150}), ({'s': 23, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 173, 'stonyhurst_from_carrington': 23, 'image_east_offset': -3, 'transported_feature': 149, 'transported_relative': 27, 'central_meridian': 122}), ({'s': 23, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 23, 'stonyhurst_from_carrington': 23, 'image_east_offset': 5, 'transported_feature': 51, 'transported_relative': 25, 'central_meridian': 26})], 5: [({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 202, 'transported_relative': 26, 'central_meridian': 176}), ({'s': 24, 'C': 350, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 14, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 42, 'transported_relative': 26, 'central_meridian': 16}), ({'s': -36, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 114, 'stonyhurst_from_carrington': -36, 'image_east_offset': -3, 'transported_feature': 142, 'transported_relative': -34, 'central_meridian': 176}), ({'s': 24, 'C': 150, 'west': 3, 'r': 14, 'rc': 13, 'dt': 0}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 174, 'transported_relative': 24, 'central_meridian': 150}), ({'s': 24, 'C': 150, 'west': 3, 'r': 12, 'rc': 14, 'dt': -2}, {'carrington': 174, 'stonyhurst_from_carrington': 24, 'image_east_offset': -3, 'transported_feature': 150, 'transported_relative': 28, 'central_meridian': 122}), ({'s': 24, 'C': 0, 'west': -5, 'r': 14, 'rc': 13, 'dt': 2}, {'carrington': 24, 'stonyhurst_from_carrington': 24, 'image_east_offset': 5, 'transported_feature': 52, 'transported_relative': 26, 'central_meridian': 26})]}
for i, (record, expected) in enumerate(fixtures[N]):
    check('astronomical fixture %s' % i, solve(record), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
astronomical fixture 0{'carrington': 170, 'central_meridian': 176, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 198, 'transported_relative': 22}{'carrington': 170, 'central_meridian': 176, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 198, 'transported_relative': 22}Passed
astronomical fixture 1{'carrington': 10, 'central_meridian': 16, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 38, 'transported_relative': 22}{'carrington': 10, 'central_meridian': 16, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 38, 'transported_relative': 22}Passed
astronomical fixture 2{'carrington': 110, 'central_meridian': 176, 'image_east_offset': -3, 'stonyhurst_from_carrington': -40, 'transported_feature': 138, 'transported_relative': -38}{'carrington': 110, 'central_meridian': 176, 'image_east_offset': -3, 'stonyhurst_from_carrington': -40, 'transported_feature': 138, 'transported_relative': -38}Passed
astronomical fixture 3{'carrington': 170, 'central_meridian': 150, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 170, 'transported_relative': 20}{'carrington': 170, 'central_meridian': 150, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 170, 'transported_relative': 20}Passed
astronomical fixture 4{'carrington': 170, 'central_meridian': 122, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 146, 'transported_relative': 24}{'carrington': 170, 'central_meridian': 122, 'image_east_offset': -3, 'stonyhurst_from_carrington': 20, 'transported_feature': 146, 'transported_relative': 24}Passed
astronomical fixture 5{'carrington': 20, 'central_meridian': 26, 'image_east_offset': 5, 'stonyhurst_from_carrington': 20, 'transported_feature': 48, 'transported_relative': 22}{'carrington': 20, 'central_meridian': 26, 'image_east_offset': 5, 'stonyhurst_from_carrington': 20, 'transported_feature': 48, 'transported_relative': 22}Passed

SHA-256 / 80f1601ed750d804aa0498ff34464c36a9df4dd0aeab4687a132d76727f7720d

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:57.876254+00:00.

Case digest / cfc28a9b78414389b3ceffd3306f8521091fc68cd0ce6fc2fda65fda59b0e64c