FA-79111 / Image orientation metadata / Open access
Baking a transposed photo keeps the stored dimension tags · case 01
Tag-5 and tag-7 photos report landscape pixel dimensions after being baked to portrait.
ROOT CAUSE
Dimension tags are exchanged only for the pure rotations 6 and 8.
VERIFIED REPAIR
Exchange dimension and resolution tags for every orientation 5 through 8.
Unsuccessful approach: A strict > 5 test still misses the transpose tag 5.
Case contract
After pixels have been baked upright, rewrite the metadata dictionary. When the (valid) Orientation is 5..8, exchange PixelXDimension/PixelYDimension, ImageWidth/ImageLength and XResolution/YResolution, moving a lone member of a pair to its partner key. Invalid or missing Orientation values mean no swap. Orientation is set to 1 only if the key exists; XMP:Orientation, if present, becomes the string "1"; ThumbOrientation is removed because the thumbnail is regenerated. Return sorted [key, value] pairs.
Why this case matters
Camera, phone and scanner images carry an orientation hint separately from the stored pixels; galleries, thumbnailers, editors and upload pipelines must interpret it consistently or photos appear sideways, mirrored or doubly rotated.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(meta):
m = dict(meta)
t = m.get('Orientation', 1)
if t not in (1, 2, 3, 4, 5, 6, 7, 8):
t = 1
if t in (6, 8):
for a, b in (('PixelXDimension', 'PixelYDimension'), ('ImageWidth', 'ImageLength'), ('XResolution', 'YResolution')):
va, vb = m.pop(a, None), m.pop(b, None)
if vb is not None:
m[a] = vb
if va is not None:
m[b] = va
if 'Orientation' in m:
m['Orientation'] = 1
if 'XMP:Orientation' in m:
m['XMP:Orientation'] = '1'
m.pop('ThumbOrientation', None)
return [[k, m[k]] for k in sorted(m)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[{'Orientation': 5, 'PixelXDimension': 3085, 'PixelYDimension': 271, 'XResolution': 264, 'YResolution': 241, 'XMP:Orientation': '1', 'Make': 'Acme'}, [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 271], ['PixelYDimension', 3085], ['XMP:Orientation', '1'], ['XResolution', 241], ['YResolution', 264]]], [{'Orientation': 5, 'PixelYDimension': 399, 'ImageLength': 3126, 'XResolution': 194, 'YResolution': 247, 'XMP:Orientation': '1', 'Make': 'Acme'}, [['ImageWidth', 3126], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 399], ['XMP:Orientation', '1'], ['XResolution', 247], ['YResolution', 194]]], [{'Orientation': 2, 'PixelXDimension': 3483, 'PixelYDimension': 682, 'ImageWidth': 1196, 'ImageLength': 620, 'XMP:Orientation': '6', 'ThumbOrientation': 6}, [['ImageLength', 620], ['ImageWidth', 1196], ['Orientation', 1], ['PixelXDimension', 3483], ['PixelYDimension', 682], ['XMP:Orientation', '1']]], [{'PixelXDimension': 3713, 'PixelYDimension': 3107, 'ImageWidth': 3378, 'ImageLength': 411, 'YResolution': 121}, [['ImageLength', 411], ['ImageWidth', 3378], ['PixelXDimension', 3713], ['PixelYDimension', 3107], ['YResolution', 121]]], [{'PixelXDimension': 3102, 'PixelYDimension': 263, 'ImageWidth': 1654, 'ImageLength': 2684}, [['ImageLength', 2684], ['ImageWidth', 1654], ['PixelXDimension', 3102], ['PixelYDimension', 263]]], [{'Orientation': 0, 'ImageWidth': 4760, 'ImageLength': 4173, 'XResolution': 182, 'Make': 'Acme'}, [['ImageLength', 4173], ['ImageWidth', 4760], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 182]]], [{'Orientation': 8, 'PixelXDimension': 3494, 'PixelYDimension': 3689, 'ImageLength': 3230, 'XResolution': 115, 'XMP:Orientation': '6', 'ThumbOrientation': 1, 'Make': 'Acme'}, [['ImageWidth', 3230], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3689], ['PixelYDimension', 3494], ['XMP:Orientation', '1'], ['YResolution', 115]]], [{'Orientation': 7, 'PixelXDimension': 2873, 'PixelYDimension': 1191, 'ImageWidth': 2585, 'ImageLength': 4554}, [['ImageLength', 2585], ['ImageWidth', 4554], ['Orientation', 1], ['PixelXDimension', 1191], ['PixelYDimension', 2873]]]], [[{'Orientation': 7, 'PixelXDimension': 692, 'PixelYDimension': 4405, 'ImageWidth': 4045, 'ImageLength': 1814, 'XResolution': 327, 'YResolution': 215}, [['ImageLength', 4045], ['ImageWidth', 1814], ['Orientation', 1], ['PixelXDimension', 4405], ['PixelYDimension', 692], ['XResolution', 215], ['YResolution', 327]]], [{'Orientation': 5, 'ImageLength': 631}, [['ImageWidth', 631], ['Orientation', 1]]], [{'Orientation': 5, 'PixelXDimension': 1942, 'PixelYDimension': 3465, 'ImageWidth': 2311, 'ImageLength': 1274, 'XResolution': 348, 'YResolution': 400, 'ThumbOrientation': 6}, [['ImageLength', 2311], ['ImageWidth', 1274], ['Orientation', 1], ['PixelXDimension', 3465], ['PixelYDimension', 1942], ['XResolution', 400], ['YResolution', 348]]], [{'PixelXDimension': 611, 'PixelYDimension': 1679, 'ImageWidth': 4933, 'ImageLength': 565, 'XMP:Orientation': '1', 'ThumbOrientation': 6, 'Make': 'Acme'}, [['ImageLength', 565], ['ImageWidth', 4933], ['Make', 'Acme'], ['PixelXDimension', 611], ['PixelYDimension', 1679], ['XMP:Orientation', '1']]], [{'Orientation': 0, 'PixelYDimension': 4669, 'ImageWidth': 1458, 'ImageLength': 3813, 'XResolution': 143, 'YResolution': 303}, [['ImageLength', 3813], ['ImageWidth', 1458], ['Orientation', 1], ['PixelYDimension', 4669], ['XResolution', 143], ['YResolution', 303]]], [{'Orientation': 9, 'PixelXDimension': 1450, 'PixelYDimension': 714, 'ImageWidth': 3388, 'ImageLength': 3368, 'YResolution': 224, 'ThumbOrientation': 8, 'Make': 'Acme'}, [['ImageLength', 3368], ['ImageWidth', 3388], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 1450], ['PixelYDimension', 714], ['YResolution', 224]]], [{'PixelXDimension': 2501, 'ImageWidth': 4285, 'ImageLength': 4215, 'XResolution': 212, 'YResolution': 316, 'XMP:Orientation': '1', 'ThumbOrientation': 8}, [['ImageLength', 4215], ['ImageWidth', 4285], ['PixelXDimension', 2501], ['XMP:Orientation', '1'], ['XResolution', 212], ['YResolution', 316]]], [{'Orientation': 5, 'PixelXDimension': 3884, 'PixelYDimension': 595, 'ImageWidth': 537, 'ImageLength': 3701, 'XResolution': 241, 'YResolution': 324}, [['ImageLength', 537], ['ImageWidth', 3701], ['Orientation', 1], ['PixelXDimension', 595], ['PixelYDimension', 3884], ['XResolution', 324], ['YResolution', 241]]]], [[{'Orientation': 7, 'PixelXDimension': 3388, 'PixelYDimension': 4213, 'ImageWidth': 1704}, [['ImageLength', 1704], ['Orientation', 1], ['PixelXDimension', 4213], ['PixelYDimension', 3388]]], [{'Orientation': 5, 'PixelYDimension': 3841, 'ImageWidth': 4299, 'ThumbOrientation': 1, 'Make': 'Acme'}, [['ImageLength', 4299], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3841]]], [{'Orientation': 5, 'PixelXDimension': 4630, 'PixelYDimension': 3429, 'ImageWidth': 2850, 'XResolution': 300, 'YResolution': 94}, [['ImageLength', 2850], ['Orientation', 1], ['PixelXDimension', 3429], ['PixelYDimension', 4630], ['XResolution', 94], ['YResolution', 300]]], [{'Orientation': 1, 'PixelYDimension': 4637, 'ImageWidth': 844, 'ImageLength': 4281, 'XResolution': 123, 'XMP:Orientation': '1'}, [['ImageLength', 4281], ['ImageWidth', 844], ['Orientation', 1], ['PixelYDimension', 4637], ['XMP:Orientation', '1'], ['XResolution', 123]]], [{'Orientation': 9, 'PixelXDimension': 2099, 'PixelYDimension': 2710, 'XResolution': 330, 'YResolution': 270, 'Make': 'Acme'}, [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 2099], ['PixelYDimension', 2710], ['XResolution', 330], ['YResolution', 270]]], [{'Orientation': 8, 'PixelXDimension': 4471, 'PixelYDimension': 854, 'ImageWidth': 4083, 'ImageLength': 2109}, [['ImageLength', 4083], ['ImageWidth', 2109], ['Orientation', 1], ['PixelXDimension', 854], ['PixelYDimension', 4471]]], [{'Orientation': 6, 'PixelYDimension': 2320, 'ImageWidth': 4268, 'ImageLength': 4198, 'XResolution': 376, 'YResolution': 302, 'ThumbOrientation': 1}, [['ImageLength', 4268], ['ImageWidth', 4198], ['Orientation', 1], ['PixelXDimension', 2320], ['XResolution', 302], ['YResolution', 376]]], [{'Orientation': 5, 'PixelXDimension': 3958, 'PixelYDimension': 4449, 'ImageLength': 2850, 'XResolution': 243, 'YResolution': 171, 'XMP:Orientation': '8'}, [['ImageWidth', 2850], ['Orientation', 1], ['PixelXDimension', 4449], ['PixelYDimension', 3958], ['XMP:Orientation', '1'], ['XResolution', 171], ['YResolution', 243]]]], [[{'Orientation': 5, 'ImageWidth': 2748, 'YResolution': 177, 'XMP:Orientation': '3'}, [['ImageLength', 2748], ['Orientation', 1], ['XMP:Orientation', '1'], ['XResolution', 177]]], [{'Orientation': 5, 'PixelXDimension': 4104, 'PixelYDimension': 2711, 'ImageWidth': 409, 'ImageLength': 3239, 'YResolution': 300, 'ThumbOrientation': 6}, [['ImageLength', 409], ['ImageWidth', 3239], ['Orientation', 1], ['PixelXDimension', 2711], ['PixelYDimension', 4104], ['XResolution', 300]]], [{'Orientation': 2, 'PixelXDimension': 4921, 'PixelYDimension': 3995, 'ImageWidth': 1616, 'XResolution': 341, 'XMP:Orientation': '6'}, [['ImageWidth', 1616], ['Orientation', 1], ['PixelXDimension', 4921], ['PixelYDimension', 3995], ['XMP:Orientation', '1'], ['XResolution', 341]]], [{'PixelXDimension': 1405, 'PixelYDimension': 3697, 'ImageWidth': 3644, 'ImageLength': 3874, 'YResolution': 207, 'XMP:Orientation': '1'}, [['ImageLength', 3874], ['ImageWidth', 3644], ['PixelXDimension', 1405], ['PixelYDimension', 3697], ['XMP:Orientation', '1'], ['YResolution', 207]]], [{'Orientation': 8, 'ImageWidth': 4397, 'ImageLength': 4112, 'XResolution': 282, 'ThumbOrientation': 8, 'Make': 'Acme'}, [['ImageLength', 4397], ['ImageWidth', 4112], ['Make', 'Acme'], ['Orientation', 1], ['YResolution', 282]]], [{'Orientation': 6, 'PixelXDimension': 2290, 'ImageWidth': 1257, 'ImageLength': 2949, 'XResolution': 142, 'YResolution': 251, 'XMP:Orientation': '8'}, [['ImageLength', 1257], ['ImageWidth', 2949], ['Orientation', 1], ['PixelYDimension', 2290], ['XMP:Orientation', '1'], ['XResolution', 251], ['YResolution', 142]]], [{'Orientation': 3, 'PixelXDimension': 317, 'PixelYDimension': 1770, 'ImageWidth': 3506, 'XResolution': 328, 'YResolution': 264}, [['ImageWidth', 3506], ['Orientation', 1], ['PixelXDimension', 317], ['PixelYDimension', 1770], ['XResolution', 328], ['YResolution', 264]]], [{'Orientation': 5, 'ImageWidth': 4453, 'ImageLength': 2889, 'XResolution': 346, 'YResolution': 99, 'Make': 'Acme'}, [['ImageLength', 4453], ['ImageWidth', 2889], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 99], ['YResolution', 346]]]], [[{'Orientation': 5, 'PixelXDimension': 4580, 'XResolution': 206, 'YResolution': 392, 'XMP:Orientation': '8'}, [['Orientation', 1], ['PixelYDimension', 4580], ['XMP:Orientation', '1'], ['XResolution', 392], ['YResolution', 206]]], [{'Orientation': 5, 'PixelXDimension': 2631, 'PixelYDimension': 811, 'ImageLength': 4347, 'XResolution': 306, 'YResolution': 141, 'XMP:Orientation': '3'}, [['ImageWidth', 4347], ['Orientation', 1], ['PixelXDimension', 811], ['PixelYDimension', 2631], ['XMP:Orientation', '1'], ['XResolution', 141], ['YResolution', 306]]], [{'Orientation': 5, 'PixelXDimension': 1756, 'PixelYDimension': 1545, 'ImageWidth': 2249, 'ThumbOrientation': 6}, [['ImageLength', 2249], ['Orientation', 1], ['PixelXDimension', 1545], ['PixelYDimension', 1756]]], [{'Orientation': 2, 'PixelXDimension': 2531, 'PixelYDimension': 3008, 'ImageWidth': 4056, 'YResolution': 253}, [['ImageWidth', 4056], ['Orientation', 1], ['PixelXDimension', 2531], ['PixelYDimension', 3008], ['YResolution', 253]]], [{'Orientation': 4, 'PixelYDimension': 1209, 'ImageWidth': 3039, 'ImageLength': 4709, 'XResolution': 133, 'YResolution': 298, 'XMP:Orientation': '3', 'ThumbOrientation': 1, 'Make': 'Acme'}, [['ImageLength', 4709], ['ImageWidth', 3039], ['Make', 'Acme'], ['Orientation', 1], ['PixelYDimension', 1209], ['XMP:Orientation', '1'], ['XResolution', 133], ['YResolution', 298]]], [{'Orientation': 1, 'XResolution': 149, 'YResolution': 285, 'XMP:Orientation': '3', 'ThumbOrientation': 1}, [['Orientation', 1], ['XMP:Orientation', '1'], ['XResolution', 149], ['YResolution', 285]]], [{'PixelXDimension': 385, 'ImageWidth': 1099, 'ImageLength': 3036, 'XMP:Orientation': '8', 'ThumbOrientation': 8}, [['ImageLength', 3036], ['ImageWidth', 1099], ['PixelXDimension', 385], ['XMP:Orientation', '1']]], [{'Orientation': 5, 'PixelYDimension': 4522, 'XResolution': 74, 'YResolution': 301, 'ThumbOrientation': 6, 'Make': 'Acme'}, [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 4522], ['XResolution', 301], ['YResolution', 74]]]]]
labels = ["regression: axis-swapping orientation set", "repair trap", "combined fault", "control", "control", "boundary", "boundary", "control"]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("%s %d" % (labels[i % len(labels)], i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: axis-swapping orientation set 0 | [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3085], ['PixelYDimension', 271], ['XMP:Orientation', '1'], ['XResolution', 264], ['YResolution', 241]] | [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 271], ['PixelYDimension', 3085], ['XMP:Orientation', '1'], ['XResolution', 241], ['YResolution', 264]] | Failed |
| repair trap 1 | [['ImageLength', 3126], ['Make', 'Acme'], ['Orientation', 1], ['PixelYDimension', 399], ['XMP:Orientation', '1'], ['XResolution', 194], ['YResolution', 247]] | [['ImageWidth', 3126], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 399], ['XMP:Orientation', '1'], ['XResolution', 247], ['YResolution', 194]] | Failed |
| combined fault 2 | [['ImageLength', 620], ['ImageWidth', 1196], ['Orientation', 1], ['PixelXDimension', 3483], ['PixelYDimension', 682], ['XMP:Orientation', '1']] | [['ImageLength', 620], ['ImageWidth', 1196], ['Orientation', 1], ['PixelXDimension', 3483], ['PixelYDimension', 682], ['XMP:Orientation', '1']] | Passed |
| control 3 | [['ImageLength', 411], ['ImageWidth', 3378], ['PixelXDimension', 3713], ['PixelYDimension', 3107], ['YResolution', 121]] | [['ImageLength', 411], ['ImageWidth', 3378], ['PixelXDimension', 3713], ['PixelYDimension', 3107], ['YResolution', 121]] | Passed |
| control 4 | [['ImageLength', 2684], ['ImageWidth', 1654], ['PixelXDimension', 3102], ['PixelYDimension', 263]] | [['ImageLength', 2684], ['ImageWidth', 1654], ['PixelXDimension', 3102], ['PixelYDimension', 263]] | Passed |
| boundary 5 | [['ImageLength', 4173], ['ImageWidth', 4760], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 182]] | [['ImageLength', 4173], ['ImageWidth', 4760], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 182]] | Passed |
| boundary 6 | [['ImageWidth', 3230], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3689], ['PixelYDimension', 3494], ['XMP:Orientation', '1'], ['YResolution', 115]] | [['ImageWidth', 3230], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3689], ['PixelYDimension', 3494], ['XMP:Orientation', '1'], ['YResolution', 115]] | Passed |
| control 7 | [['ImageLength', 4554], ['ImageWidth', 2585], ['Orientation', 1], ['PixelXDimension', 2873], ['PixelYDimension', 1191]] | [['ImageLength', 2585], ['ImageWidth', 4554], ['Orientation', 1], ['PixelXDimension', 1191], ['PixelYDimension', 2873]] | Failed |
SHA-256 / 39f8c3580ae831f8e586e4570e13daf45dd3746293c5222442f4a1be8469ca3c
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(meta):
m = dict(meta)
t = m.get('Orientation', 1)
if t not in (1, 2, 3, 4, 5, 6, 7, 8):
t = 1
if t > 5:
for a, b in (('PixelXDimension', 'PixelYDimension'), ('ImageWidth', 'ImageLength'), ('XResolution', 'YResolution')):
va, vb = m.pop(a, None), m.pop(b, None)
if vb is not None:
m[a] = vb
if va is not None:
m[b] = va
if 'Orientation' in m:
m['Orientation'] = 1
if 'XMP:Orientation' in m:
m['XMP:Orientation'] = '1'
m.pop('ThumbOrientation', None)
return [[k, m[k]] for k in sorted(m)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[{'Orientation': 5, 'PixelXDimension': 3085, 'PixelYDimension': 271, 'XResolution': 264, 'YResolution': 241, 'XMP:Orientation': '1', 'Make': 'Acme'}, [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 271], ['PixelYDimension', 3085], ['XMP:Orientation', '1'], ['XResolution', 241], ['YResolution', 264]]], [{'Orientation': 5, 'PixelYDimension': 399, 'ImageLength': 3126, 'XResolution': 194, 'YResolution': 247, 'XMP:Orientation': '1', 'Make': 'Acme'}, [['ImageWidth', 3126], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 399], ['XMP:Orientation', '1'], ['XResolution', 247], ['YResolution', 194]]], [{'Orientation': 2, 'PixelXDimension': 3483, 'PixelYDimension': 682, 'ImageWidth': 1196, 'ImageLength': 620, 'XMP:Orientation': '6', 'ThumbOrientation': 6}, [['ImageLength', 620], ['ImageWidth', 1196], ['Orientation', 1], ['PixelXDimension', 3483], ['PixelYDimension', 682], ['XMP:Orientation', '1']]], [{'PixelXDimension': 3713, 'PixelYDimension': 3107, 'ImageWidth': 3378, 'ImageLength': 411, 'YResolution': 121}, [['ImageLength', 411], ['ImageWidth', 3378], ['PixelXDimension', 3713], ['PixelYDimension', 3107], ['YResolution', 121]]], [{'PixelXDimension': 3102, 'PixelYDimension': 263, 'ImageWidth': 1654, 'ImageLength': 2684}, [['ImageLength', 2684], ['ImageWidth', 1654], ['PixelXDimension', 3102], ['PixelYDimension', 263]]], [{'Orientation': 0, 'ImageWidth': 4760, 'ImageLength': 4173, 'XResolution': 182, 'Make': 'Acme'}, [['ImageLength', 4173], ['ImageWidth', 4760], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 182]]], [{'Orientation': 8, 'PixelXDimension': 3494, 'PixelYDimension': 3689, 'ImageLength': 3230, 'XResolution': 115, 'XMP:Orientation': '6', 'ThumbOrientation': 1, 'Make': 'Acme'}, [['ImageWidth', 3230], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3689], ['PixelYDimension', 3494], ['XMP:Orientation', '1'], ['YResolution', 115]]], [{'Orientation': 7, 'PixelXDimension': 2873, 'PixelYDimension': 1191, 'ImageWidth': 2585, 'ImageLength': 4554}, [['ImageLength', 2585], ['ImageWidth', 4554], ['Orientation', 1], ['PixelXDimension', 1191], ['PixelYDimension', 2873]]]], [[{'Orientation': 7, 'PixelXDimension': 692, 'PixelYDimension': 4405, 'ImageWidth': 4045, 'ImageLength': 1814, 'XResolution': 327, 'YResolution': 215}, [['ImageLength', 4045], ['ImageWidth', 1814], ['Orientation', 1], ['PixelXDimension', 4405], ['PixelYDimension', 692], ['XResolution', 215], ['YResolution', 327]]], [{'Orientation': 5, 'ImageLength': 631}, [['ImageWidth', 631], ['Orientation', 1]]], [{'Orientation': 5, 'PixelXDimension': 1942, 'PixelYDimension': 3465, 'ImageWidth': 2311, 'ImageLength': 1274, 'XResolution': 348, 'YResolution': 400, 'ThumbOrientation': 6}, [['ImageLength', 2311], ['ImageWidth', 1274], ['Orientation', 1], ['PixelXDimension', 3465], ['PixelYDimension', 1942], ['XResolution', 400], ['YResolution', 348]]], [{'PixelXDimension': 611, 'PixelYDimension': 1679, 'ImageWidth': 4933, 'ImageLength': 565, 'XMP:Orientation': '1', 'ThumbOrientation': 6, 'Make': 'Acme'}, [['ImageLength', 565], ['ImageWidth', 4933], ['Make', 'Acme'], ['PixelXDimension', 611], ['PixelYDimension', 1679], ['XMP:Orientation', '1']]], [{'Orientation': 0, 'PixelYDimension': 4669, 'ImageWidth': 1458, 'ImageLength': 3813, 'XResolution': 143, 'YResolution': 303}, [['ImageLength', 3813], ['ImageWidth', 1458], ['Orientation', 1], ['PixelYDimension', 4669], ['XResolution', 143], ['YResolution', 303]]], [{'Orientation': 9, 'PixelXDimension': 1450, 'PixelYDimension': 714, 'ImageWidth': 3388, 'ImageLength': 3368, 'YResolution': 224, 'ThumbOrientation': 8, 'Make': 'Acme'}, [['ImageLength', 3368], ['ImageWidth', 3388], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 1450], ['PixelYDimension', 714], ['YResolution', 224]]], [{'PixelXDimension': 2501, 'ImageWidth': 4285, 'ImageLength': 4215, 'XResolution': 212, 'YResolution': 316, 'XMP:Orientation': '1', 'ThumbOrientation': 8}, [['ImageLength', 4215], ['ImageWidth', 4285], ['PixelXDimension', 2501], ['XMP:Orientation', '1'], ['XResolution', 212], ['YResolution', 316]]], [{'Orientation': 5, 'PixelXDimension': 3884, 'PixelYDimension': 595, 'ImageWidth': 537, 'ImageLength': 3701, 'XResolution': 241, 'YResolution': 324}, [['ImageLength', 537], ['ImageWidth', 3701], ['Orientation', 1], ['PixelXDimension', 595], ['PixelYDimension', 3884], ['XResolution', 324], ['YResolution', 241]]]], [[{'Orientation': 7, 'PixelXDimension': 3388, 'PixelYDimension': 4213, 'ImageWidth': 1704}, [['ImageLength', 1704], ['Orientation', 1], ['PixelXDimension', 4213], ['PixelYDimension', 3388]]], [{'Orientation': 5, 'PixelYDimension': 3841, 'ImageWidth': 4299, 'ThumbOrientation': 1, 'Make': 'Acme'}, [['ImageLength', 4299], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3841]]], [{'Orientation': 5, 'PixelXDimension': 4630, 'PixelYDimension': 3429, 'ImageWidth': 2850, 'XResolution': 300, 'YResolution': 94}, [['ImageLength', 2850], ['Orientation', 1], ['PixelXDimension', 3429], ['PixelYDimension', 4630], ['XResolution', 94], ['YResolution', 300]]], [{'Orientation': 1, 'PixelYDimension': 4637, 'ImageWidth': 844, 'ImageLength': 4281, 'XResolution': 123, 'XMP:Orientation': '1'}, [['ImageLength', 4281], ['ImageWidth', 844], ['Orientation', 1], ['PixelYDimension', 4637], ['XMP:Orientation', '1'], ['XResolution', 123]]], [{'Orientation': 9, 'PixelXDimension': 2099, 'PixelYDimension': 2710, 'XResolution': 330, 'YResolution': 270, 'Make': 'Acme'}, [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 2099], ['PixelYDimension', 2710], ['XResolution', 330], ['YResolution', 270]]], [{'Orientation': 8, 'PixelXDimension': 4471, 'PixelYDimension': 854, 'ImageWidth': 4083, 'ImageLength': 2109}, [['ImageLength', 4083], ['ImageWidth', 2109], ['Orientation', 1], ['PixelXDimension', 854], ['PixelYDimension', 4471]]], [{'Orientation': 6, 'PixelYDimension': 2320, 'ImageWidth': 4268, 'ImageLength': 4198, 'XResolution': 376, 'YResolution': 302, 'ThumbOrientation': 1}, [['ImageLength', 4268], ['ImageWidth', 4198], ['Orientation', 1], ['PixelXDimension', 2320], ['XResolution', 302], ['YResolution', 376]]], [{'Orientation': 5, 'PixelXDimension': 3958, 'PixelYDimension': 4449, 'ImageLength': 2850, 'XResolution': 243, 'YResolution': 171, 'XMP:Orientation': '8'}, [['ImageWidth', 2850], ['Orientation', 1], ['PixelXDimension', 4449], ['PixelYDimension', 3958], ['XMP:Orientation', '1'], ['XResolution', 171], ['YResolution', 243]]]], [[{'Orientation': 5, 'ImageWidth': 2748, 'YResolution': 177, 'XMP:Orientation': '3'}, [['ImageLength', 2748], ['Orientation', 1], ['XMP:Orientation', '1'], ['XResolution', 177]]], [{'Orientation': 5, 'PixelXDimension': 4104, 'PixelYDimension': 2711, 'ImageWidth': 409, 'ImageLength': 3239, 'YResolution': 300, 'ThumbOrientation': 6}, [['ImageLength', 409], ['ImageWidth', 3239], ['Orientation', 1], ['PixelXDimension', 2711], ['PixelYDimension', 4104], ['XResolution', 300]]], [{'Orientation': 2, 'PixelXDimension': 4921, 'PixelYDimension': 3995, 'ImageWidth': 1616, 'XResolution': 341, 'XMP:Orientation': '6'}, [['ImageWidth', 1616], ['Orientation', 1], ['PixelXDimension', 4921], ['PixelYDimension', 3995], ['XMP:Orientation', '1'], ['XResolution', 341]]], [{'PixelXDimension': 1405, 'PixelYDimension': 3697, 'ImageWidth': 3644, 'ImageLength': 3874, 'YResolution': 207, 'XMP:Orientation': '1'}, [['ImageLength', 3874], ['ImageWidth', 3644], ['PixelXDimension', 1405], ['PixelYDimension', 3697], ['XMP:Orientation', '1'], ['YResolution', 207]]], [{'Orientation': 8, 'ImageWidth': 4397, 'ImageLength': 4112, 'XResolution': 282, 'ThumbOrientation': 8, 'Make': 'Acme'}, [['ImageLength', 4397], ['ImageWidth', 4112], ['Make', 'Acme'], ['Orientation', 1], ['YResolution', 282]]], [{'Orientation': 6, 'PixelXDimension': 2290, 'ImageWidth': 1257, 'ImageLength': 2949, 'XResolution': 142, 'YResolution': 251, 'XMP:Orientation': '8'}, [['ImageLength', 1257], ['ImageWidth', 2949], ['Orientation', 1], ['PixelYDimension', 2290], ['XMP:Orientation', '1'], ['XResolution', 251], ['YResolution', 142]]], [{'Orientation': 3, 'PixelXDimension': 317, 'PixelYDimension': 1770, 'ImageWidth': 3506, 'XResolution': 328, 'YResolution': 264}, [['ImageWidth', 3506], ['Orientation', 1], ['PixelXDimension', 317], ['PixelYDimension', 1770], ['XResolution', 328], ['YResolution', 264]]], [{'Orientation': 5, 'ImageWidth': 4453, 'ImageLength': 2889, 'XResolution': 346, 'YResolution': 99, 'Make': 'Acme'}, [['ImageLength', 4453], ['ImageWidth', 2889], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 99], ['YResolution', 346]]]], [[{'Orientation': 5, 'PixelXDimension': 4580, 'XResolution': 206, 'YResolution': 392, 'XMP:Orientation': '8'}, [['Orientation', 1], ['PixelYDimension', 4580], ['XMP:Orientation', '1'], ['XResolution', 392], ['YResolution', 206]]], [{'Orientation': 5, 'PixelXDimension': 2631, 'PixelYDimension': 811, 'ImageLength': 4347, 'XResolution': 306, 'YResolution': 141, 'XMP:Orientation': '3'}, [['ImageWidth', 4347], ['Orientation', 1], ['PixelXDimension', 811], ['PixelYDimension', 2631], ['XMP:Orientation', '1'], ['XResolution', 141], ['YResolution', 306]]], [{'Orientation': 5, 'PixelXDimension': 1756, 'PixelYDimension': 1545, 'ImageWidth': 2249, 'ThumbOrientation': 6}, [['ImageLength', 2249], ['Orientation', 1], ['PixelXDimension', 1545], ['PixelYDimension', 1756]]], [{'Orientation': 2, 'PixelXDimension': 2531, 'PixelYDimension': 3008, 'ImageWidth': 4056, 'YResolution': 253}, [['ImageWidth', 4056], ['Orientation', 1], ['PixelXDimension', 2531], ['PixelYDimension', 3008], ['YResolution', 253]]], [{'Orientation': 4, 'PixelYDimension': 1209, 'ImageWidth': 3039, 'ImageLength': 4709, 'XResolution': 133, 'YResolution': 298, 'XMP:Orientation': '3', 'ThumbOrientation': 1, 'Make': 'Acme'}, [['ImageLength', 4709], ['ImageWidth', 3039], ['Make', 'Acme'], ['Orientation', 1], ['PixelYDimension', 1209], ['XMP:Orientation', '1'], ['XResolution', 133], ['YResolution', 298]]], [{'Orientation': 1, 'XResolution': 149, 'YResolution': 285, 'XMP:Orientation': '3', 'ThumbOrientation': 1}, [['Orientation', 1], ['XMP:Orientation', '1'], ['XResolution', 149], ['YResolution', 285]]], [{'PixelXDimension': 385, 'ImageWidth': 1099, 'ImageLength': 3036, 'XMP:Orientation': '8', 'ThumbOrientation': 8}, [['ImageLength', 3036], ['ImageWidth', 1099], ['PixelXDimension', 385], ['XMP:Orientation', '1']]], [{'Orientation': 5, 'PixelYDimension': 4522, 'XResolution': 74, 'YResolution': 301, 'ThumbOrientation': 6, 'Make': 'Acme'}, [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 4522], ['XResolution', 301], ['YResolution', 74]]]]]
labels = ["regression: axis-swapping orientation set", "repair trap", "combined fault", "control", "control", "boundary", "boundary", "control"]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("%s %d" % (labels[i % len(labels)], i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: axis-swapping orientation set 0 | [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3085], ['PixelYDimension', 271], ['XMP:Orientation', '1'], ['XResolution', 264], ['YResolution', 241]] | [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 271], ['PixelYDimension', 3085], ['XMP:Orientation', '1'], ['XResolution', 241], ['YResolution', 264]] | Failed |
| repair trap 1 | [['ImageLength', 3126], ['Make', 'Acme'], ['Orientation', 1], ['PixelYDimension', 399], ['XMP:Orientation', '1'], ['XResolution', 194], ['YResolution', 247]] | [['ImageWidth', 3126], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 399], ['XMP:Orientation', '1'], ['XResolution', 247], ['YResolution', 194]] | Failed |
| combined fault 2 | [['ImageLength', 620], ['ImageWidth', 1196], ['Orientation', 1], ['PixelXDimension', 3483], ['PixelYDimension', 682], ['XMP:Orientation', '1']] | [['ImageLength', 620], ['ImageWidth', 1196], ['Orientation', 1], ['PixelXDimension', 3483], ['PixelYDimension', 682], ['XMP:Orientation', '1']] | Passed |
| control 3 | [['ImageLength', 411], ['ImageWidth', 3378], ['PixelXDimension', 3713], ['PixelYDimension', 3107], ['YResolution', 121]] | [['ImageLength', 411], ['ImageWidth', 3378], ['PixelXDimension', 3713], ['PixelYDimension', 3107], ['YResolution', 121]] | Passed |
| control 4 | [['ImageLength', 2684], ['ImageWidth', 1654], ['PixelXDimension', 3102], ['PixelYDimension', 263]] | [['ImageLength', 2684], ['ImageWidth', 1654], ['PixelXDimension', 3102], ['PixelYDimension', 263]] | Passed |
| boundary 5 | [['ImageLength', 4173], ['ImageWidth', 4760], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 182]] | [['ImageLength', 4173], ['ImageWidth', 4760], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 182]] | Passed |
| boundary 6 | [['ImageWidth', 3230], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3689], ['PixelYDimension', 3494], ['XMP:Orientation', '1'], ['YResolution', 115]] | [['ImageWidth', 3230], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3689], ['PixelYDimension', 3494], ['XMP:Orientation', '1'], ['YResolution', 115]] | Passed |
| control 7 | [['ImageLength', 2585], ['ImageWidth', 4554], ['Orientation', 1], ['PixelXDimension', 1191], ['PixelYDimension', 2873]] | [['ImageLength', 2585], ['ImageWidth', 4554], ['Orientation', 1], ['PixelXDimension', 1191], ['PixelYDimension', 2873]] | Passed |
SHA-256 / 8f88c53d27941a95111f2b94613aa756c42bad4b5ff88e2964386b1b290b34c7
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(meta):
m = dict(meta)
t = m.get('Orientation', 1)
if t not in (1, 2, 3, 4, 5, 6, 7, 8):
t = 1
if t >= 5:
for a, b in (('PixelXDimension', 'PixelYDimension'), ('ImageWidth', 'ImageLength'), ('XResolution', 'YResolution')):
va, vb = m.pop(a, None), m.pop(b, None)
if vb is not None:
m[a] = vb
if va is not None:
m[b] = va
if 'Orientation' in m:
m['Orientation'] = 1
if 'XMP:Orientation' in m:
m['XMP:Orientation'] = '1'
m.pop('ThumbOrientation', None)
return [[k, m[k]] for k in sorted(m)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[{'Orientation': 5, 'PixelXDimension': 3085, 'PixelYDimension': 271, 'XResolution': 264, 'YResolution': 241, 'XMP:Orientation': '1', 'Make': 'Acme'}, [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 271], ['PixelYDimension', 3085], ['XMP:Orientation', '1'], ['XResolution', 241], ['YResolution', 264]]], [{'Orientation': 5, 'PixelYDimension': 399, 'ImageLength': 3126, 'XResolution': 194, 'YResolution': 247, 'XMP:Orientation': '1', 'Make': 'Acme'}, [['ImageWidth', 3126], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 399], ['XMP:Orientation', '1'], ['XResolution', 247], ['YResolution', 194]]], [{'Orientation': 2, 'PixelXDimension': 3483, 'PixelYDimension': 682, 'ImageWidth': 1196, 'ImageLength': 620, 'XMP:Orientation': '6', 'ThumbOrientation': 6}, [['ImageLength', 620], ['ImageWidth', 1196], ['Orientation', 1], ['PixelXDimension', 3483], ['PixelYDimension', 682], ['XMP:Orientation', '1']]], [{'PixelXDimension': 3713, 'PixelYDimension': 3107, 'ImageWidth': 3378, 'ImageLength': 411, 'YResolution': 121}, [['ImageLength', 411], ['ImageWidth', 3378], ['PixelXDimension', 3713], ['PixelYDimension', 3107], ['YResolution', 121]]], [{'PixelXDimension': 3102, 'PixelYDimension': 263, 'ImageWidth': 1654, 'ImageLength': 2684}, [['ImageLength', 2684], ['ImageWidth', 1654], ['PixelXDimension', 3102], ['PixelYDimension', 263]]], [{'Orientation': 0, 'ImageWidth': 4760, 'ImageLength': 4173, 'XResolution': 182, 'Make': 'Acme'}, [['ImageLength', 4173], ['ImageWidth', 4760], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 182]]], [{'Orientation': 8, 'PixelXDimension': 3494, 'PixelYDimension': 3689, 'ImageLength': 3230, 'XResolution': 115, 'XMP:Orientation': '6', 'ThumbOrientation': 1, 'Make': 'Acme'}, [['ImageWidth', 3230], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3689], ['PixelYDimension', 3494], ['XMP:Orientation', '1'], ['YResolution', 115]]], [{'Orientation': 7, 'PixelXDimension': 2873, 'PixelYDimension': 1191, 'ImageWidth': 2585, 'ImageLength': 4554}, [['ImageLength', 2585], ['ImageWidth', 4554], ['Orientation', 1], ['PixelXDimension', 1191], ['PixelYDimension', 2873]]]], [[{'Orientation': 7, 'PixelXDimension': 692, 'PixelYDimension': 4405, 'ImageWidth': 4045, 'ImageLength': 1814, 'XResolution': 327, 'YResolution': 215}, [['ImageLength', 4045], ['ImageWidth', 1814], ['Orientation', 1], ['PixelXDimension', 4405], ['PixelYDimension', 692], ['XResolution', 215], ['YResolution', 327]]], [{'Orientation': 5, 'ImageLength': 631}, [['ImageWidth', 631], ['Orientation', 1]]], [{'Orientation': 5, 'PixelXDimension': 1942, 'PixelYDimension': 3465, 'ImageWidth': 2311, 'ImageLength': 1274, 'XResolution': 348, 'YResolution': 400, 'ThumbOrientation': 6}, [['ImageLength', 2311], ['ImageWidth', 1274], ['Orientation', 1], ['PixelXDimension', 3465], ['PixelYDimension', 1942], ['XResolution', 400], ['YResolution', 348]]], [{'PixelXDimension': 611, 'PixelYDimension': 1679, 'ImageWidth': 4933, 'ImageLength': 565, 'XMP:Orientation': '1', 'ThumbOrientation': 6, 'Make': 'Acme'}, [['ImageLength', 565], ['ImageWidth', 4933], ['Make', 'Acme'], ['PixelXDimension', 611], ['PixelYDimension', 1679], ['XMP:Orientation', '1']]], [{'Orientation': 0, 'PixelYDimension': 4669, 'ImageWidth': 1458, 'ImageLength': 3813, 'XResolution': 143, 'YResolution': 303}, [['ImageLength', 3813], ['ImageWidth', 1458], ['Orientation', 1], ['PixelYDimension', 4669], ['XResolution', 143], ['YResolution', 303]]], [{'Orientation': 9, 'PixelXDimension': 1450, 'PixelYDimension': 714, 'ImageWidth': 3388, 'ImageLength': 3368, 'YResolution': 224, 'ThumbOrientation': 8, 'Make': 'Acme'}, [['ImageLength', 3368], ['ImageWidth', 3388], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 1450], ['PixelYDimension', 714], ['YResolution', 224]]], [{'PixelXDimension': 2501, 'ImageWidth': 4285, 'ImageLength': 4215, 'XResolution': 212, 'YResolution': 316, 'XMP:Orientation': '1', 'ThumbOrientation': 8}, [['ImageLength', 4215], ['ImageWidth', 4285], ['PixelXDimension', 2501], ['XMP:Orientation', '1'], ['XResolution', 212], ['YResolution', 316]]], [{'Orientation': 5, 'PixelXDimension': 3884, 'PixelYDimension': 595, 'ImageWidth': 537, 'ImageLength': 3701, 'XResolution': 241, 'YResolution': 324}, [['ImageLength', 537], ['ImageWidth', 3701], ['Orientation', 1], ['PixelXDimension', 595], ['PixelYDimension', 3884], ['XResolution', 324], ['YResolution', 241]]]], [[{'Orientation': 7, 'PixelXDimension': 3388, 'PixelYDimension': 4213, 'ImageWidth': 1704}, [['ImageLength', 1704], ['Orientation', 1], ['PixelXDimension', 4213], ['PixelYDimension', 3388]]], [{'Orientation': 5, 'PixelYDimension': 3841, 'ImageWidth': 4299, 'ThumbOrientation': 1, 'Make': 'Acme'}, [['ImageLength', 4299], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3841]]], [{'Orientation': 5, 'PixelXDimension': 4630, 'PixelYDimension': 3429, 'ImageWidth': 2850, 'XResolution': 300, 'YResolution': 94}, [['ImageLength', 2850], ['Orientation', 1], ['PixelXDimension', 3429], ['PixelYDimension', 4630], ['XResolution', 94], ['YResolution', 300]]], [{'Orientation': 1, 'PixelYDimension': 4637, 'ImageWidth': 844, 'ImageLength': 4281, 'XResolution': 123, 'XMP:Orientation': '1'}, [['ImageLength', 4281], ['ImageWidth', 844], ['Orientation', 1], ['PixelYDimension', 4637], ['XMP:Orientation', '1'], ['XResolution', 123]]], [{'Orientation': 9, 'PixelXDimension': 2099, 'PixelYDimension': 2710, 'XResolution': 330, 'YResolution': 270, 'Make': 'Acme'}, [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 2099], ['PixelYDimension', 2710], ['XResolution', 330], ['YResolution', 270]]], [{'Orientation': 8, 'PixelXDimension': 4471, 'PixelYDimension': 854, 'ImageWidth': 4083, 'ImageLength': 2109}, [['ImageLength', 4083], ['ImageWidth', 2109], ['Orientation', 1], ['PixelXDimension', 854], ['PixelYDimension', 4471]]], [{'Orientation': 6, 'PixelYDimension': 2320, 'ImageWidth': 4268, 'ImageLength': 4198, 'XResolution': 376, 'YResolution': 302, 'ThumbOrientation': 1}, [['ImageLength', 4268], ['ImageWidth', 4198], ['Orientation', 1], ['PixelXDimension', 2320], ['XResolution', 302], ['YResolution', 376]]], [{'Orientation': 5, 'PixelXDimension': 3958, 'PixelYDimension': 4449, 'ImageLength': 2850, 'XResolution': 243, 'YResolution': 171, 'XMP:Orientation': '8'}, [['ImageWidth', 2850], ['Orientation', 1], ['PixelXDimension', 4449], ['PixelYDimension', 3958], ['XMP:Orientation', '1'], ['XResolution', 171], ['YResolution', 243]]]], [[{'Orientation': 5, 'ImageWidth': 2748, 'YResolution': 177, 'XMP:Orientation': '3'}, [['ImageLength', 2748], ['Orientation', 1], ['XMP:Orientation', '1'], ['XResolution', 177]]], [{'Orientation': 5, 'PixelXDimension': 4104, 'PixelYDimension': 2711, 'ImageWidth': 409, 'ImageLength': 3239, 'YResolution': 300, 'ThumbOrientation': 6}, [['ImageLength', 409], ['ImageWidth', 3239], ['Orientation', 1], ['PixelXDimension', 2711], ['PixelYDimension', 4104], ['XResolution', 300]]], [{'Orientation': 2, 'PixelXDimension': 4921, 'PixelYDimension': 3995, 'ImageWidth': 1616, 'XResolution': 341, 'XMP:Orientation': '6'}, [['ImageWidth', 1616], ['Orientation', 1], ['PixelXDimension', 4921], ['PixelYDimension', 3995], ['XMP:Orientation', '1'], ['XResolution', 341]]], [{'PixelXDimension': 1405, 'PixelYDimension': 3697, 'ImageWidth': 3644, 'ImageLength': 3874, 'YResolution': 207, 'XMP:Orientation': '1'}, [['ImageLength', 3874], ['ImageWidth', 3644], ['PixelXDimension', 1405], ['PixelYDimension', 3697], ['XMP:Orientation', '1'], ['YResolution', 207]]], [{'Orientation': 8, 'ImageWidth': 4397, 'ImageLength': 4112, 'XResolution': 282, 'ThumbOrientation': 8, 'Make': 'Acme'}, [['ImageLength', 4397], ['ImageWidth', 4112], ['Make', 'Acme'], ['Orientation', 1], ['YResolution', 282]]], [{'Orientation': 6, 'PixelXDimension': 2290, 'ImageWidth': 1257, 'ImageLength': 2949, 'XResolution': 142, 'YResolution': 251, 'XMP:Orientation': '8'}, [['ImageLength', 1257], ['ImageWidth', 2949], ['Orientation', 1], ['PixelYDimension', 2290], ['XMP:Orientation', '1'], ['XResolution', 251], ['YResolution', 142]]], [{'Orientation': 3, 'PixelXDimension': 317, 'PixelYDimension': 1770, 'ImageWidth': 3506, 'XResolution': 328, 'YResolution': 264}, [['ImageWidth', 3506], ['Orientation', 1], ['PixelXDimension', 317], ['PixelYDimension', 1770], ['XResolution', 328], ['YResolution', 264]]], [{'Orientation': 5, 'ImageWidth': 4453, 'ImageLength': 2889, 'XResolution': 346, 'YResolution': 99, 'Make': 'Acme'}, [['ImageLength', 4453], ['ImageWidth', 2889], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 99], ['YResolution', 346]]]], [[{'Orientation': 5, 'PixelXDimension': 4580, 'XResolution': 206, 'YResolution': 392, 'XMP:Orientation': '8'}, [['Orientation', 1], ['PixelYDimension', 4580], ['XMP:Orientation', '1'], ['XResolution', 392], ['YResolution', 206]]], [{'Orientation': 5, 'PixelXDimension': 2631, 'PixelYDimension': 811, 'ImageLength': 4347, 'XResolution': 306, 'YResolution': 141, 'XMP:Orientation': '3'}, [['ImageWidth', 4347], ['Orientation', 1], ['PixelXDimension', 811], ['PixelYDimension', 2631], ['XMP:Orientation', '1'], ['XResolution', 141], ['YResolution', 306]]], [{'Orientation': 5, 'PixelXDimension': 1756, 'PixelYDimension': 1545, 'ImageWidth': 2249, 'ThumbOrientation': 6}, [['ImageLength', 2249], ['Orientation', 1], ['PixelXDimension', 1545], ['PixelYDimension', 1756]]], [{'Orientation': 2, 'PixelXDimension': 2531, 'PixelYDimension': 3008, 'ImageWidth': 4056, 'YResolution': 253}, [['ImageWidth', 4056], ['Orientation', 1], ['PixelXDimension', 2531], ['PixelYDimension', 3008], ['YResolution', 253]]], [{'Orientation': 4, 'PixelYDimension': 1209, 'ImageWidth': 3039, 'ImageLength': 4709, 'XResolution': 133, 'YResolution': 298, 'XMP:Orientation': '3', 'ThumbOrientation': 1, 'Make': 'Acme'}, [['ImageLength', 4709], ['ImageWidth', 3039], ['Make', 'Acme'], ['Orientation', 1], ['PixelYDimension', 1209], ['XMP:Orientation', '1'], ['XResolution', 133], ['YResolution', 298]]], [{'Orientation': 1, 'XResolution': 149, 'YResolution': 285, 'XMP:Orientation': '3', 'ThumbOrientation': 1}, [['Orientation', 1], ['XMP:Orientation', '1'], ['XResolution', 149], ['YResolution', 285]]], [{'PixelXDimension': 385, 'ImageWidth': 1099, 'ImageLength': 3036, 'XMP:Orientation': '8', 'ThumbOrientation': 8}, [['ImageLength', 3036], ['ImageWidth', 1099], ['PixelXDimension', 385], ['XMP:Orientation', '1']]], [{'Orientation': 5, 'PixelYDimension': 4522, 'XResolution': 74, 'YResolution': 301, 'ThumbOrientation': 6, 'Make': 'Acme'}, [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 4522], ['XResolution', 301], ['YResolution', 74]]]]]
labels = ["regression: axis-swapping orientation set", "repair trap", "combined fault", "control", "control", "boundary", "boundary", "control"]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("%s %d" % (labels[i % len(labels)], i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: axis-swapping orientation set 0 | [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 271], ['PixelYDimension', 3085], ['XMP:Orientation', '1'], ['XResolution', 241], ['YResolution', 264]] | [['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 271], ['PixelYDimension', 3085], ['XMP:Orientation', '1'], ['XResolution', 241], ['YResolution', 264]] | Passed |
| repair trap 1 | [['ImageWidth', 3126], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 399], ['XMP:Orientation', '1'], ['XResolution', 247], ['YResolution', 194]] | [['ImageWidth', 3126], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 399], ['XMP:Orientation', '1'], ['XResolution', 247], ['YResolution', 194]] | Passed |
| combined fault 2 | [['ImageLength', 620], ['ImageWidth', 1196], ['Orientation', 1], ['PixelXDimension', 3483], ['PixelYDimension', 682], ['XMP:Orientation', '1']] | [['ImageLength', 620], ['ImageWidth', 1196], ['Orientation', 1], ['PixelXDimension', 3483], ['PixelYDimension', 682], ['XMP:Orientation', '1']] | Passed |
| control 3 | [['ImageLength', 411], ['ImageWidth', 3378], ['PixelXDimension', 3713], ['PixelYDimension', 3107], ['YResolution', 121]] | [['ImageLength', 411], ['ImageWidth', 3378], ['PixelXDimension', 3713], ['PixelYDimension', 3107], ['YResolution', 121]] | Passed |
| control 4 | [['ImageLength', 2684], ['ImageWidth', 1654], ['PixelXDimension', 3102], ['PixelYDimension', 263]] | [['ImageLength', 2684], ['ImageWidth', 1654], ['PixelXDimension', 3102], ['PixelYDimension', 263]] | Passed |
| boundary 5 | [['ImageLength', 4173], ['ImageWidth', 4760], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 182]] | [['ImageLength', 4173], ['ImageWidth', 4760], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 182]] | Passed |
| boundary 6 | [['ImageWidth', 3230], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3689], ['PixelYDimension', 3494], ['XMP:Orientation', '1'], ['YResolution', 115]] | [['ImageWidth', 3230], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3689], ['PixelYDimension', 3494], ['XMP:Orientation', '1'], ['YResolution', 115]] | Passed |
| control 7 | [['ImageLength', 2585], ['ImageWidth', 4554], ['Orientation', 1], ['PixelXDimension', 1191], ['PixelYDimension', 2873]] | [['ImageLength', 2585], ['ImageWidth', 4554], ['Orientation', 1], ['PixelXDimension', 1191], ['PixelYDimension', 2873]] | Passed |
SHA-256 / aced9f1fbfd2f90867def5a10960e55f1149d5e032960e0dd4e74ce1600babe1
Verification & scope
A deterministic bounded teaching model with a stipulated contract; it makes no claim of conformance to any published specification. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:49:41.554819+00:00.
Case digest / eff0c4f636a275cf616e6e11b47d911e5c50dda1e784d2c74248a53b027a28e6