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

evaluation_group: astro-solar-longitude-conventions

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

prompt:
The adapter reports an incorrect transported feature while other fields remain valid.

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

split: open-access


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

meaning: Fixture-count band, not measured model difficulty

deps: stdlib

evaluation_group: astro-solar-longitude-conventions

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

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

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

split: open-access


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

evaluation_group: astro-solar-longitude-conventions

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

prompt:
The adapter reports an incorrect central meridian while other fields remain valid.

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

split: open-access


broken_source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'helioprojective_east': d['a']*(d['c']*d['dx']+d['s']*d['dy']), 'helioprojective_north': d['a']*(d['s']*d['dx']+d['c']*d['dy']), 'angular_radius': d['R']/d['D'], 'normalized_east': d['a']*(d['c']*d['dx']-d['s']*d['dy'])*d['D']/d['R'], 'normalized_north': d['a']*(d['s']*d['dx']+d['c']*d['dy'])*d['D']/d['R'], 'disk_pixel_radius': abs(d['R']/d['D']/d['a'])}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 6, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 15.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 6, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 15.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -6, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -15.0, 'disk_pixel_radius': 0.2}), ({'dx': 0, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 0, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 0.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 6, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 6.0, 'disk_pixel_radius': 0.5}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -6, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -15.0, 'disk_pixel_radius': 0.2})], 2: [({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 8, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 20.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 8, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 20.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -8, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -20.0, 'disk_pixel_radius': 0.2}), ({'dx': 1, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 2, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 5.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 8, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 8.0, 'disk_pixel_radius': 0.5}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -8, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -20.0, 'disk_pixel_radius': 0.2})], 3: [({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 10, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -25.0, 'disk_pixel_radius': 0.2}), ({'dx': 2, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 4, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 10.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 10, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 10.0, 'disk_pixel_radius': 0.5}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -25.0, 'disk_pixel_radius': 0.2})], 4: [({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 12, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 30.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 12, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 30.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -12, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -30.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 6, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 15.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 12, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 12.0, 'disk_pixel_radius': 0.5}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -12, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -30.0, 'disk_pixel_radius': 0.2})], 5: [({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 14, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 35.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 14, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 35.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -14, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -35.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 8, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 20.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 14, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 14.0, 'disk_pixel_radius': 0.5}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -14, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -35.0, 'disk_pixel_radius': 0.2})]}
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-solar-disk-image-basis

source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'helioprojective_east': d['c']*d['dx']-d['s']*d['dy'], 'helioprojective_north': d['a']*(d['s']*d['dx']+d['c']*d['dy']), 'angular_radius': d['R']/d['D'], 'normalized_east': d['a']*(d['c']*d['dx']-d['s']*d['dy'])*d['D']/d['R'], 'normalized_north': d['a']*(d['s']*d['dx']+d['c']*d['dy'])*d['D']/d['R'], 'disk_pixel_radius': abs(d['R']/d['D']/d['a'])}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 6, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 15.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 6, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 15.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -6, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -15.0, 'disk_pixel_radius': 0.2}), ({'dx': 0, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 0, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 0.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 6, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 6.0, 'disk_pixel_radius': 0.5}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -6, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -15.0, 'disk_pixel_radius': 0.2})], 2: [({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 8, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 20.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 8, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 20.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -8, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -20.0, 'disk_pixel_radius': 0.2}), ({'dx': 1, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 2, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 5.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 8, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 8.0, 'disk_pixel_radius': 0.5}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -8, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -20.0, 'disk_pixel_radius': 0.2})], 3: [({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 10, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -25.0, 'disk_pixel_radius': 0.2}), ({'dx': 2, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 4, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 10.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 10, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 10.0, 'disk_pixel_radius': 0.5}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -25.0, 'disk_pixel_radius': 0.2})], 4: [({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 12, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 30.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 12, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 30.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -12, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -30.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 6, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 15.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 12, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 12.0, 'disk_pixel_radius': 0.5}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -12, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -30.0, 'disk_pixel_radius': 0.2})], 5: [({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 14, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 35.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 14, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 35.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -14, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -35.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 8, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 20.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 14, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 14.0, 'disk_pixel_radius': 0.5}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -14, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -35.0, 'disk_pixel_radius': 0.2})]}
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 helioprojective east while other fields remain valid.

A solar disk image supplies pixel displacements dx,dy, angular plate scale a, observer distance D, solar radius R, and exact supplied sine/cosine c,s of a position angle. Helioprojective east/north is the image rotation; normalized disk coordinates divide by angular radius R/D. Values are reduced linear-angle units. Output fields are defined by: helioprojective_east = d['a']*(d['c']*d['dx']-d['s']*d['dy']); helioprojective_north = d['a']*(d['s']*d['dx']+d['c']*d['dy']); angular_radius = d['R']/d['D']; normalized_east = d['a']*(d['c']*d['dx']-d['s']*d['dy'])*d['D']/d['R']; normalized_north = d['a']*(d['s']*d['dx']+d['c']*d['dy'])*d['D']/d['R']; disk_pixel_radius = abs(d['R']/d['D']/d['a'])

split: open-access


broken_source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'helioprojective_east': d['a']*(d['c']*d['dx']-d['s']*d['dy']), 'helioprojective_north': d['a']*(-d['s']*d['dx']+d['c']*d['dy']), 'angular_radius': d['R']/d['D'], 'normalized_east': d['a']*(d['c']*d['dx']-d['s']*d['dy'])*d['D']/d['R'], 'normalized_north': d['a']*(d['s']*d['dx']+d['c']*d['dy'])*d['D']/d['R'], 'disk_pixel_radius': abs(d['R']/d['D']/d['a'])}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 6, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 15.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 6, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 15.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -6, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -15.0, 'disk_pixel_radius': 0.2}), ({'dx': 0, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 0, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 0.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 6, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 6.0, 'disk_pixel_radius': 0.5}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -6, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -15.0, 'disk_pixel_radius': 0.2})], 2: [({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 8, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 20.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 8, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 20.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -8, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -20.0, 'disk_pixel_radius': 0.2}), ({'dx': 1, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 2, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 5.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 8, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 8.0, 'disk_pixel_radius': 0.5}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -8, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -20.0, 'disk_pixel_radius': 0.2})], 3: [({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 10, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -25.0, 'disk_pixel_radius': 0.2}), ({'dx': 2, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 4, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 10.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 10, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 10.0, 'disk_pixel_radius': 0.5}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -25.0, 'disk_pixel_radius': 0.2})], 4: [({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 12, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 30.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 12, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 30.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -12, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -30.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 6, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 15.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 12, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 12.0, 'disk_pixel_radius': 0.5}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -12, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -30.0, 'disk_pixel_radius': 0.2})], 5: [({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 14, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 35.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 14, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 35.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -14, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -35.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 8, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 20.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 14, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 14.0, 'disk_pixel_radius': 0.5}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -14, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -35.0, 'disk_pixel_radius': 0.2})]}
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-solar-disk-image-basis

source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'helioprojective_east': d['a']*(d['c']*d['dx']-d['s']*d['dy']), 'helioprojective_north': d['a']*(d['s']*d['dy']+d['c']*d['dx']), 'angular_radius': d['R']/d['D'], 'normalized_east': d['a']*(d['c']*d['dx']-d['s']*d['dy'])*d['D']/d['R'], 'normalized_north': d['a']*(d['s']*d['dx']+d['c']*d['dy'])*d['D']/d['R'], 'disk_pixel_radius': abs(d['R']/d['D']/d['a'])}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 6, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 15.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 6, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 15.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -6, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -15.0, 'disk_pixel_radius': 0.2}), ({'dx': 0, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 0, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 0.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 6, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 6.0, 'disk_pixel_radius': 0.5}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -6, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -15.0, 'disk_pixel_radius': 0.2})], 2: [({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 8, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 20.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 8, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 20.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -8, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -20.0, 'disk_pixel_radius': 0.2}), ({'dx': 1, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 2, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 5.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 8, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 8.0, 'disk_pixel_radius': 0.5}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -8, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -20.0, 'disk_pixel_radius': 0.2})], 3: [({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 10, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -25.0, 'disk_pixel_radius': 0.2}), ({'dx': 2, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 4, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 10.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 10, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 10.0, 'disk_pixel_radius': 0.5}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -25.0, 'disk_pixel_radius': 0.2})], 4: [({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 12, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 30.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 12, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 30.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -12, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -30.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 6, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 15.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 12, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 12.0, 'disk_pixel_radius': 0.5}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -12, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -30.0, 'disk_pixel_radius': 0.2})], 5: [({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 14, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 35.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 14, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 35.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -14, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -35.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 8, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 20.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 14, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 14.0, 'disk_pixel_radius': 0.5}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -14, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -35.0, 'disk_pixel_radius': 0.2})]}
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 helioprojective north while other fields remain valid.

A solar disk image supplies pixel displacements dx,dy, angular plate scale a, observer distance D, solar radius R, and exact supplied sine/cosine c,s of a position angle. Helioprojective east/north is the image rotation; normalized disk coordinates divide by angular radius R/D. Values are reduced linear-angle units. Output fields are defined by: helioprojective_east = d['a']*(d['c']*d['dx']-d['s']*d['dy']); helioprojective_north = d['a']*(d['s']*d['dx']+d['c']*d['dy']); angular_radius = d['R']/d['D']; normalized_east = d['a']*(d['c']*d['dx']-d['s']*d['dy'])*d['D']/d['R']; normalized_north = d['a']*(d['s']*d['dx']+d['c']*d['dy'])*d['D']/d['R']; disk_pixel_radius = abs(d['R']/d['D']/d['a'])

split: open-access


broken_source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'helioprojective_east': d['a']*(d['c']*d['dx']-d['s']*d['dy']), 'helioprojective_north': d['a']*(d['s']*d['dx']+d['c']*d['dy']), 'angular_radius': d['D']/d['R'], 'normalized_east': d['a']*(d['c']*d['dx']-d['s']*d['dy'])*d['D']/d['R'], 'normalized_north': d['a']*(d['s']*d['dx']+d['c']*d['dy'])*d['D']/d['R'], 'disk_pixel_radius': abs(d['R']/d['D']/d['a'])}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 6, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 15.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 6, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 15.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -6, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -15.0, 'disk_pixel_radius': 0.2}), ({'dx': 0, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 0, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 0.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 6, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 6.0, 'disk_pixel_radius': 0.5}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -6, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -15.0, 'disk_pixel_radius': 0.2})], 2: [({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 8, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 20.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 8, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 20.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -8, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -20.0, 'disk_pixel_radius': 0.2}), ({'dx': 1, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 2, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 5.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 8, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 8.0, 'disk_pixel_radius': 0.5}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -8, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -20.0, 'disk_pixel_radius': 0.2})], 3: [({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 10, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -25.0, 'disk_pixel_radius': 0.2}), ({'dx': 2, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 4, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 10.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 10, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 10.0, 'disk_pixel_radius': 0.5}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -25.0, 'disk_pixel_radius': 0.2})], 4: [({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 12, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 30.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 12, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 30.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -12, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -30.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 6, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 15.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 12, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 12.0, 'disk_pixel_radius': 0.5}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -12, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -30.0, 'disk_pixel_radius': 0.2})], 5: [({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 14, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 35.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 14, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 35.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -14, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -35.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 8, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 20.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 14, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 14.0, 'disk_pixel_radius': 0.5}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -14, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -35.0, 'disk_pixel_radius': 0.2})]}
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-solar-disk-image-basis

source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(d):
    return {'helioprojective_east': d['a']*(d['c']*d['dx']-d['s']*d['dy']), 'helioprojective_north': d['a']*(d['s']*d['dx']+d['c']*d['dy']), 'angular_radius': d['R'], 'normalized_east': d['a']*(d['c']*d['dx']-d['s']*d['dy'])*d['D']/d['R'], 'normalized_north': d['a']*(d['s']*d['dx']+d['c']*d['dy'])*d['D']/d['R'], 'disk_pixel_radius': abs(d['R']/d['D']/d['a'])}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 6, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 15.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 6, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 15.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -6, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -15.0, 'disk_pixel_radius': 0.2}), ({'dx': 0, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 0, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 0.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 6, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 6.0, 'disk_pixel_radius': 0.5}), ({'dx': 3, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -6, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -15.0, 'disk_pixel_radius': 0.2})], 2: [({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 8, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 20.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 8, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 20.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -8, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -20.0, 'disk_pixel_radius': 0.2}), ({'dx': 1, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 2, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 5.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 8, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 8.0, 'disk_pixel_radius': 0.5}), ({'dx': 4, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -8, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -20.0, 'disk_pixel_radius': 0.2})], 3: [({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 10, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -25.0, 'disk_pixel_radius': 0.2}), ({'dx': 2, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 4, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 10.0, 'disk_pixel_radius': 0.2}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 10, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 10.0, 'disk_pixel_radius': 0.5}), ({'dx': 5, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -10, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -25.0, 'disk_pixel_radius': 0.2})], 4: [({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 12, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 30.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 12, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 30.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -12, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -30.0, 'disk_pixel_radius': 0.2}), ({'dx': 3, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 6, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 15.0, 'disk_pixel_radius': 0.2}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 12, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 12.0, 'disk_pixel_radius': 0.5}), ({'dx': 6, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -12, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -30.0, 'disk_pixel_radius': 0.2})], 5: [({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 14, 'angular_radius': 0.4, 'normalized_east': -25.0, 'normalized_north': 35.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 1, 's': 0}, {'helioprojective_east': 14, 'helioprojective_north': 10, 'angular_radius': 0.4, 'normalized_east': 35.0, 'normalized_north': 25.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': -2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 10, 'helioprojective_north': -14, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -35.0, 'disk_pixel_radius': 0.2}), ({'dx': 4, 'dy': 0, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': 0, 'helioprojective_north': 8, 'angular_radius': 0.4, 'normalized_east': 0.0, 'normalized_north': 20.0, 'disk_pixel_radius': 0.2}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 4, 'R': 4, 'c': 0, 's': 1}, {'helioprojective_east': -10, 'helioprojective_north': 14, 'angular_radius': 1.0, 'normalized_east': -10.0, 'normalized_north': 14.0, 'disk_pixel_radius': 0.5}), ({'dx': 7, 'dy': 5, 'a': 2, 'D': 10, 'R': 4, 'c': 0, 's': -1}, {'helioprojective_east': 10, 'helioprojective_north': -14, 'angular_radius': 0.4, 'normalized_east': 25.0, 'normalized_north': -35.0, 'disk_pixel_radius': 0.2})]}
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 angular radius while other fields remain valid.

A solar disk image supplies pixel displacements dx,dy, angular plate scale a, observer distance D, solar radius R, and exact supplied sine/cosine c,s of a position angle. Helioprojective east/north is the image rotation; normalized disk coordinates divide by angular radius R/D. Values are reduced linear-angle units. Output fields are defined by: helioprojective_east = d['a']*(d['c']*d['dx']-d['s']*d['dy']); helioprojective_north = d['a']*(d['s']*d['dx']+d['c']*d['dy']); angular_radius = d['R']/d['D']; normalized_east = d['a']*(d['c']*d['dx']-d['s']*d['dy'])*d['D']/d['R']; normalized_north = d['a']*(d['s']*d['dx']+d['c']*d['dy'])*d['D']/d['R']; disk_pixel_radius = abs(d['R']/d['D']/d['a'])

split: open-access