{"abstract":"Anisotropic scans print stretched after their pixels were rotated upright.","category":"Image orientation metadata","checks":8,"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.","evaluation_group":"w2-image-orientation-metadata-bake-metadata-rewrite","failed_approach":"Listing only the resolution pair drops the ImageWidth/ImageLength swap.","family":"w2-image-orientation-metadata-bake-metadata-rewrite-resolution-pair","id":"FA-79116","implementations":{"attempt":{"sha256":"50b6a9b63494fbbadbc29bbf01e86e9d6a7781020c5f4ec7c697a732633a6485","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(meta):\n    m = dict(meta)\n    t = m.get('Orientation', 1)\n    if t not in (1, 2, 3, 4, 5, 6, 7, 8):\n        t = 1\n    if t >= 5:\n        for a, b in (('PixelXDimension', 'PixelYDimension'), ('XResolution', 'YResolution')):\n            va, vb = m.pop(a, None), m.pop(b, None)\n            if vb is not None:\n                m[a] = vb\n            if va is not None:\n                m[b] = va\n    if 'Orientation' in m:\n        m['Orientation'] = 1\n    if 'XMP:Orientation' in m:\n        m['XMP:Orientation'] = '1'\n    m.pop('ThumbOrientation', None)\n    return [[k, m[k]] for k in sorted(m)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[{'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': 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': 6, 'PixelYDimension': 2215, 'ImageWidth': 3631, 'YResolution': 135, 'XMP:Orientation': '6'}, [['ImageLength', 3631], ['Orientation', 1], ['PixelXDimension', 2215], ['XMP:Orientation', '1'], ['XResolution', 135]]], [{'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': 6, 'PixelXDimension': 640, 'PixelYDimension': 1787, 'ImageWidth': 2123, 'XResolution': 295}, [['ImageLength', 2123], ['Orientation', 1], ['PixelXDimension', 1787], ['PixelYDimension', 640], ['YResolution', 295]]]], [[{'Orientation': 6, 'ImageWidth': 3998, 'XResolution': 106, 'YResolution': 377, 'ThumbOrientation': 1}, [['ImageLength', 3998], ['Orientation', 1], ['XResolution', 377], ['YResolution', 106]]], [{'Orientation': 8, 'PixelXDimension': 2357, 'ImageWidth': 4348, 'ImageLength': 2027, 'XResolution': 114, 'XMP:Orientation': '3', 'Make': 'Acme'}, [['ImageLength', 4348], ['ImageWidth', 2027], ['Make', 'Acme'], ['Orientation', 1], ['PixelYDimension', 2357], ['XMP:Orientation', '1'], ['YResolution', 114]]], [{'Orientation': 8, 'PixelXDimension': 4972, 'ImageWidth': 1028, 'ImageLength': 1331, 'XResolution': 377, 'YResolution': 144, 'XMP:Orientation': '6', 'ThumbOrientation': 8}, [['ImageLength', 1028], ['ImageWidth', 1331], ['Orientation', 1], ['PixelYDimension', 4972], ['XMP:Orientation', '1'], ['XResolution', 144], ['YResolution', 377]]], [{'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': 6, 'PixelXDimension': 1877, 'PixelYDimension': 3253, 'ImageWidth': 1194, 'ImageLength': 3586, 'XResolution': 126, 'YResolution': 287, 'Make': 'Acme'}, [['ImageLength', 1194], ['ImageWidth', 3586], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3253], ['PixelYDimension', 1877], ['XResolution', 287], ['YResolution', 126]]]], [[{'Orientation': 6, 'PixelXDimension': 1678, 'PixelYDimension': 2248, 'ImageWidth': 1422, 'ImageLength': 2871, 'YResolution': 243, 'XMP:Orientation': '1'}, [['ImageLength', 1422], ['ImageWidth', 2871], ['Orientation', 1], ['PixelXDimension', 2248], ['PixelYDimension', 1678], ['XMP:Orientation', '1'], ['XResolution', 243]]], [{'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': 7, 'PixelXDimension': 1680, 'ImageLength': 3872, 'XResolution': 257, 'YResolution': 304}, [['ImageWidth', 3872], ['Orientation', 1], ['PixelYDimension', 1680], ['XResolution', 304], ['YResolution', 257]]], [{'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': 4, 'PixelYDimension': 2321, 'ImageWidth': 1769, 'XResolution': 96, 'YResolution': 275, 'XMP:Orientation': '3'}, [['ImageWidth', 1769], ['Orientation', 1], ['PixelYDimension', 2321], ['XMP:Orientation', '1'], ['XResolution', 96], ['YResolution', 275]]], [{'Orientation': 0, 'PixelXDimension': 3801, 'PixelYDimension': 833, 'ImageWidth': 655, 'ImageLength': 2578, 'XResolution': 340}, [['ImageLength', 2578], ['ImageWidth', 655], ['Orientation', 1], ['PixelXDimension', 3801], ['PixelYDimension', 833], ['XResolution', 340]]], [{'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': 4453, 'ImageLength': 2889, 'XResolution': 346, 'YResolution': 99, 'Make': 'Acme'}, [['ImageLength', 4453], ['ImageWidth', 2889], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 99], ['YResolution', 346]]], [{'Orientation': 8, 'PixelXDimension': 2766, 'PixelYDimension': 597, 'ImageWidth': 1819, 'XResolution': 357, 'YResolution': 78}, [['ImageLength', 1819], ['Orientation', 1], ['PixelXDimension', 597], ['PixelYDimension', 2766], ['XResolution', 78], ['YResolution', 357]]], [{'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': 3, 'PixelXDimension': 317, 'PixelYDimension': 1770, 'ImageWidth': 3506, 'XResolution': 328, 'YResolution': 264}, [['ImageWidth', 3506], ['Orientation', 1], ['PixelXDimension', 317], ['PixelYDimension', 1770], ['XResolution', 328], ['YResolution', 264]]], [{'Orientation': 1, 'PixelXDimension': 717, 'ImageWidth': 4963, 'ImageLength': 644, 'XResolution': 201, 'YResolution': 305, 'XMP:Orientation': '1'}, [['ImageLength', 644], ['ImageWidth', 4963], ['Orientation', 1], ['PixelXDimension', 717], ['XMP:Orientation', '1'], ['XResolution', 201], ['YResolution', 305]]], [{'Orientation': 3, 'PixelXDimension': 1081, 'PixelYDimension': 160, 'ImageWidth': 4451, 'ImageLength': 4974, 'XResolution': 180, 'YResolution': 379, 'XMP:Orientation': '8', 'ThumbOrientation': 8, 'Make': 'Acme'}, [['ImageLength', 4974], ['ImageWidth', 4451], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 1081], ['PixelYDimension', 160], ['XMP:Orientation', '1'], ['XResolution', 180], ['YResolution', 379]]], [{'Orientation': 8, 'ImageWidth': 4397, 'ImageLength': 4112, 'XResolution': 282, 'ThumbOrientation': 8, 'Make': 'Acme'}, [['ImageLength', 4397], ['ImageWidth', 4112], ['Make', 'Acme'], ['Orientation', 1], ['YResolution', 282]]]], [[{'Orientation': 8, 'PixelXDimension': 522, 'XResolution': 367, 'XMP:Orientation': '3'}, [['Orientation', 1], ['PixelYDimension', 522], ['XMP:Orientation', '1'], ['YResolution', 367]]], [{'Orientation': 8, 'PixelXDimension': 1349, 'PixelYDimension': 887, 'ImageLength': 4267, 'ThumbOrientation': 8}, [['ImageWidth', 4267], ['Orientation', 1], ['PixelXDimension', 887], ['PixelYDimension', 1349]]], [{'Orientation': 5, 'PixelXDimension': 3532, 'PixelYDimension': 3753, 'ImageWidth': 1702, 'XResolution': 370, 'XMP:Orientation': '8'}, [['ImageLength', 1702], ['Orientation', 1], ['PixelXDimension', 3753], ['PixelYDimension', 3532], ['XMP:Orientation', '1'], ['YResolution', 370]]], [{'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': 9, 'PixelXDimension': 4218, 'PixelYDimension': 1148, 'ImageWidth': 1525, 'XResolution': 171, 'YResolution': 311, 'XMP:Orientation': '6', 'Make': 'Acme'}, [['ImageWidth', 1525], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 4218], ['PixelYDimension', 1148], ['XMP:Orientation', '1'], ['XResolution', 171], ['YResolution', 311]]], [{'Orientation': 0, 'PixelXDimension': 1579, 'PixelYDimension': 2508, 'ImageWidth': 104, 'ImageLength': 3875, 'XResolution': 311, 'YResolution': 283, 'ThumbOrientation': 8}, [['ImageLength', 3875], ['ImageWidth', 104], ['Orientation', 1], ['PixelXDimension', 1579], ['PixelYDimension', 2508], ['XResolution', 311], ['YResolution', 283]]], [{'Orientation': 5, 'PixelXDimension': 2301, 'PixelYDimension': 1707, 'ImageWidth': 1166, 'ImageLength': 3560, 'XResolution': 383, 'ThumbOrientation': 8}, [['ImageLength', 1166], ['ImageWidth', 3560], ['Orientation', 1], ['PixelXDimension', 1707], ['PixelYDimension', 2301], ['YResolution', 383]]]]]\nlabels = [\"regression: resolution pair swap\", \"repair trap\", \"combined fault\", \"control\", \"control\", \"boundary\", \"boundary\", \"control\"]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (labels[i % len(labels)], i), solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"dbbb6570496e28b9b977b448942652730c4a7bd7941ace862396cf93fb8be8c3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(meta):\n    m = dict(meta)\n    t = m.get('Orientation', 1)\n    if t not in (1, 2, 3, 4, 5, 6, 7, 8):\n        t = 1\n    if t >= 5:\n        for a, b in (('PixelXDimension', 'PixelYDimension'), ('ImageWidth', 'ImageLength')):\n            va, vb = m.pop(a, None), m.pop(b, None)\n            if vb is not None:\n                m[a] = vb\n            if va is not None:\n                m[b] = va\n    if 'Orientation' in m:\n        m['Orientation'] = 1\n    if 'XMP:Orientation' in m:\n        m['XMP:Orientation'] = '1'\n    m.pop('ThumbOrientation', None)\n    return [[k, m[k]] for k in sorted(m)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[{'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': 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': 6, 'PixelYDimension': 2215, 'ImageWidth': 3631, 'YResolution': 135, 'XMP:Orientation': '6'}, [['ImageLength', 3631], ['Orientation', 1], ['PixelXDimension', 2215], ['XMP:Orientation', '1'], ['XResolution', 135]]], [{'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': 6, 'PixelXDimension': 640, 'PixelYDimension': 1787, 'ImageWidth': 2123, 'XResolution': 295}, [['ImageLength', 2123], ['Orientation', 1], ['PixelXDimension', 1787], ['PixelYDimension', 640], ['YResolution', 295]]]], [[{'Orientation': 6, 'ImageWidth': 3998, 'XResolution': 106, 'YResolution': 377, 'ThumbOrientation': 1}, [['ImageLength', 3998], ['Orientation', 1], ['XResolution', 377], ['YResolution', 106]]], [{'Orientation': 8, 'PixelXDimension': 2357, 'ImageWidth': 4348, 'ImageLength': 2027, 'XResolution': 114, 'XMP:Orientation': '3', 'Make': 'Acme'}, [['ImageLength', 4348], ['ImageWidth', 2027], ['Make', 'Acme'], ['Orientation', 1], ['PixelYDimension', 2357], ['XMP:Orientation', '1'], ['YResolution', 114]]], [{'Orientation': 8, 'PixelXDimension': 4972, 'ImageWidth': 1028, 'ImageLength': 1331, 'XResolution': 377, 'YResolution': 144, 'XMP:Orientation': '6', 'ThumbOrientation': 8}, [['ImageLength', 1028], ['ImageWidth', 1331], ['Orientation', 1], ['PixelYDimension', 4972], ['XMP:Orientation', '1'], ['XResolution', 144], ['YResolution', 377]]], [{'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': 6, 'PixelXDimension': 1877, 'PixelYDimension': 3253, 'ImageWidth': 1194, 'ImageLength': 3586, 'XResolution': 126, 'YResolution': 287, 'Make': 'Acme'}, [['ImageLength', 1194], ['ImageWidth', 3586], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3253], ['PixelYDimension', 1877], ['XResolution', 287], ['YResolution', 126]]]], [[{'Orientation': 6, 'PixelXDimension': 1678, 'PixelYDimension': 2248, 'ImageWidth': 1422, 'ImageLength': 2871, 'YResolution': 243, 'XMP:Orientation': '1'}, [['ImageLength', 1422], ['ImageWidth', 2871], ['Orientation', 1], ['PixelXDimension', 2248], ['PixelYDimension', 1678], ['XMP:Orientation', '1'], ['XResolution', 243]]], [{'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': 7, 'PixelXDimension': 1680, 'ImageLength': 3872, 'XResolution': 257, 'YResolution': 304}, [['ImageWidth', 3872], ['Orientation', 1], ['PixelYDimension', 1680], ['XResolution', 304], ['YResolution', 257]]], [{'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': 4, 'PixelYDimension': 2321, 'ImageWidth': 1769, 'XResolution': 96, 'YResolution': 275, 'XMP:Orientation': '3'}, [['ImageWidth', 1769], ['Orientation', 1], ['PixelYDimension', 2321], ['XMP:Orientation', '1'], ['XResolution', 96], ['YResolution', 275]]], [{'Orientation': 0, 'PixelXDimension': 3801, 'PixelYDimension': 833, 'ImageWidth': 655, 'ImageLength': 2578, 'XResolution': 340}, [['ImageLength', 2578], ['ImageWidth', 655], ['Orientation', 1], ['PixelXDimension', 3801], ['PixelYDimension', 833], ['XResolution', 340]]], [{'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': 4453, 'ImageLength': 2889, 'XResolution': 346, 'YResolution': 99, 'Make': 'Acme'}, [['ImageLength', 4453], ['ImageWidth', 2889], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 99], ['YResolution', 346]]], [{'Orientation': 8, 'PixelXDimension': 2766, 'PixelYDimension': 597, 'ImageWidth': 1819, 'XResolution': 357, 'YResolution': 78}, [['ImageLength', 1819], ['Orientation', 1], ['PixelXDimension', 597], ['PixelYDimension', 2766], ['XResolution', 78], ['YResolution', 357]]], [{'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': 3, 'PixelXDimension': 317, 'PixelYDimension': 1770, 'ImageWidth': 3506, 'XResolution': 328, 'YResolution': 264}, [['ImageWidth', 3506], ['Orientation', 1], ['PixelXDimension', 317], ['PixelYDimension', 1770], ['XResolution', 328], ['YResolution', 264]]], [{'Orientation': 1, 'PixelXDimension': 717, 'ImageWidth': 4963, 'ImageLength': 644, 'XResolution': 201, 'YResolution': 305, 'XMP:Orientation': '1'}, [['ImageLength', 644], ['ImageWidth', 4963], ['Orientation', 1], ['PixelXDimension', 717], ['XMP:Orientation', '1'], ['XResolution', 201], ['YResolution', 305]]], [{'Orientation': 3, 'PixelXDimension': 1081, 'PixelYDimension': 160, 'ImageWidth': 4451, 'ImageLength': 4974, 'XResolution': 180, 'YResolution': 379, 'XMP:Orientation': '8', 'ThumbOrientation': 8, 'Make': 'Acme'}, [['ImageLength', 4974], ['ImageWidth', 4451], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 1081], ['PixelYDimension', 160], ['XMP:Orientation', '1'], ['XResolution', 180], ['YResolution', 379]]], [{'Orientation': 8, 'ImageWidth': 4397, 'ImageLength': 4112, 'XResolution': 282, 'ThumbOrientation': 8, 'Make': 'Acme'}, [['ImageLength', 4397], ['ImageWidth', 4112], ['Make', 'Acme'], ['Orientation', 1], ['YResolution', 282]]]], [[{'Orientation': 8, 'PixelXDimension': 522, 'XResolution': 367, 'XMP:Orientation': '3'}, [['Orientation', 1], ['PixelYDimension', 522], ['XMP:Orientation', '1'], ['YResolution', 367]]], [{'Orientation': 8, 'PixelXDimension': 1349, 'PixelYDimension': 887, 'ImageLength': 4267, 'ThumbOrientation': 8}, [['ImageWidth', 4267], ['Orientation', 1], ['PixelXDimension', 887], ['PixelYDimension', 1349]]], [{'Orientation': 5, 'PixelXDimension': 3532, 'PixelYDimension': 3753, 'ImageWidth': 1702, 'XResolution': 370, 'XMP:Orientation': '8'}, [['ImageLength', 1702], ['Orientation', 1], ['PixelXDimension', 3753], ['PixelYDimension', 3532], ['XMP:Orientation', '1'], ['YResolution', 370]]], [{'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': 9, 'PixelXDimension': 4218, 'PixelYDimension': 1148, 'ImageWidth': 1525, 'XResolution': 171, 'YResolution': 311, 'XMP:Orientation': '6', 'Make': 'Acme'}, [['ImageWidth', 1525], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 4218], ['PixelYDimension', 1148], ['XMP:Orientation', '1'], ['XResolution', 171], ['YResolution', 311]]], [{'Orientation': 0, 'PixelXDimension': 1579, 'PixelYDimension': 2508, 'ImageWidth': 104, 'ImageLength': 3875, 'XResolution': 311, 'YResolution': 283, 'ThumbOrientation': 8}, [['ImageLength', 3875], ['ImageWidth', 104], ['Orientation', 1], ['PixelXDimension', 1579], ['PixelYDimension', 2508], ['XResolution', 311], ['YResolution', 283]]], [{'Orientation': 5, 'PixelXDimension': 2301, 'PixelYDimension': 1707, 'ImageWidth': 1166, 'ImageLength': 3560, 'XResolution': 383, 'ThumbOrientation': 8}, [['ImageLength', 1166], ['ImageWidth', 3560], ['Orientation', 1], ['PixelXDimension', 1707], ['PixelYDimension', 2301], ['YResolution', 383]]]]]\nlabels = [\"regression: resolution pair swap\", \"repair trap\", \"combined fault\", \"control\", \"control\", \"boundary\", \"boundary\", \"control\"]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (labels[i % len(labels)], i), solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"fa80e2833fbbe912bded11b45c933dd1c28dd9e6ba8314435df897d371c2932f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(meta):\n    m = dict(meta)\n    t = m.get('Orientation', 1)\n    if t not in (1, 2, 3, 4, 5, 6, 7, 8):\n        t = 1\n    if t >= 5:\n        for a, b in (('PixelXDimension', 'PixelYDimension'), ('ImageWidth', 'ImageLength'), ('XResolution', 'YResolution')):\n            va, vb = m.pop(a, None), m.pop(b, None)\n            if vb is not None:\n                m[a] = vb\n            if va is not None:\n                m[b] = va\n    if 'Orientation' in m:\n        m['Orientation'] = 1\n    if 'XMP:Orientation' in m:\n        m['XMP:Orientation'] = '1'\n    m.pop('ThumbOrientation', None)\n    return [[k, m[k]] for k in sorted(m)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[{'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': 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': 6, 'PixelYDimension': 2215, 'ImageWidth': 3631, 'YResolution': 135, 'XMP:Orientation': '6'}, [['ImageLength', 3631], ['Orientation', 1], ['PixelXDimension', 2215], ['XMP:Orientation', '1'], ['XResolution', 135]]], [{'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': 6, 'PixelXDimension': 640, 'PixelYDimension': 1787, 'ImageWidth': 2123, 'XResolution': 295}, [['ImageLength', 2123], ['Orientation', 1], ['PixelXDimension', 1787], ['PixelYDimension', 640], ['YResolution', 295]]]], [[{'Orientation': 6, 'ImageWidth': 3998, 'XResolution': 106, 'YResolution': 377, 'ThumbOrientation': 1}, [['ImageLength', 3998], ['Orientation', 1], ['XResolution', 377], ['YResolution', 106]]], [{'Orientation': 8, 'PixelXDimension': 2357, 'ImageWidth': 4348, 'ImageLength': 2027, 'XResolution': 114, 'XMP:Orientation': '3', 'Make': 'Acme'}, [['ImageLength', 4348], ['ImageWidth', 2027], ['Make', 'Acme'], ['Orientation', 1], ['PixelYDimension', 2357], ['XMP:Orientation', '1'], ['YResolution', 114]]], [{'Orientation': 8, 'PixelXDimension': 4972, 'ImageWidth': 1028, 'ImageLength': 1331, 'XResolution': 377, 'YResolution': 144, 'XMP:Orientation': '6', 'ThumbOrientation': 8}, [['ImageLength', 1028], ['ImageWidth', 1331], ['Orientation', 1], ['PixelYDimension', 4972], ['XMP:Orientation', '1'], ['XResolution', 144], ['YResolution', 377]]], [{'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': 6, 'PixelXDimension': 1877, 'PixelYDimension': 3253, 'ImageWidth': 1194, 'ImageLength': 3586, 'XResolution': 126, 'YResolution': 287, 'Make': 'Acme'}, [['ImageLength', 1194], ['ImageWidth', 3586], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 3253], ['PixelYDimension', 1877], ['XResolution', 287], ['YResolution', 126]]]], [[{'Orientation': 6, 'PixelXDimension': 1678, 'PixelYDimension': 2248, 'ImageWidth': 1422, 'ImageLength': 2871, 'YResolution': 243, 'XMP:Orientation': '1'}, [['ImageLength', 1422], ['ImageWidth', 2871], ['Orientation', 1], ['PixelXDimension', 2248], ['PixelYDimension', 1678], ['XMP:Orientation', '1'], ['XResolution', 243]]], [{'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': 7, 'PixelXDimension': 1680, 'ImageLength': 3872, 'XResolution': 257, 'YResolution': 304}, [['ImageWidth', 3872], ['Orientation', 1], ['PixelYDimension', 1680], ['XResolution', 304], ['YResolution', 257]]], [{'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': 4, 'PixelYDimension': 2321, 'ImageWidth': 1769, 'XResolution': 96, 'YResolution': 275, 'XMP:Orientation': '3'}, [['ImageWidth', 1769], ['Orientation', 1], ['PixelYDimension', 2321], ['XMP:Orientation', '1'], ['XResolution', 96], ['YResolution', 275]]], [{'Orientation': 0, 'PixelXDimension': 3801, 'PixelYDimension': 833, 'ImageWidth': 655, 'ImageLength': 2578, 'XResolution': 340}, [['ImageLength', 2578], ['ImageWidth', 655], ['Orientation', 1], ['PixelXDimension', 3801], ['PixelYDimension', 833], ['XResolution', 340]]], [{'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': 4453, 'ImageLength': 2889, 'XResolution': 346, 'YResolution': 99, 'Make': 'Acme'}, [['ImageLength', 4453], ['ImageWidth', 2889], ['Make', 'Acme'], ['Orientation', 1], ['XResolution', 99], ['YResolution', 346]]], [{'Orientation': 8, 'PixelXDimension': 2766, 'PixelYDimension': 597, 'ImageWidth': 1819, 'XResolution': 357, 'YResolution': 78}, [['ImageLength', 1819], ['Orientation', 1], ['PixelXDimension', 597], ['PixelYDimension', 2766], ['XResolution', 78], ['YResolution', 357]]], [{'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': 3, 'PixelXDimension': 317, 'PixelYDimension': 1770, 'ImageWidth': 3506, 'XResolution': 328, 'YResolution': 264}, [['ImageWidth', 3506], ['Orientation', 1], ['PixelXDimension', 317], ['PixelYDimension', 1770], ['XResolution', 328], ['YResolution', 264]]], [{'Orientation': 1, 'PixelXDimension': 717, 'ImageWidth': 4963, 'ImageLength': 644, 'XResolution': 201, 'YResolution': 305, 'XMP:Orientation': '1'}, [['ImageLength', 644], ['ImageWidth', 4963], ['Orientation', 1], ['PixelXDimension', 717], ['XMP:Orientation', '1'], ['XResolution', 201], ['YResolution', 305]]], [{'Orientation': 3, 'PixelXDimension': 1081, 'PixelYDimension': 160, 'ImageWidth': 4451, 'ImageLength': 4974, 'XResolution': 180, 'YResolution': 379, 'XMP:Orientation': '8', 'ThumbOrientation': 8, 'Make': 'Acme'}, [['ImageLength', 4974], ['ImageWidth', 4451], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 1081], ['PixelYDimension', 160], ['XMP:Orientation', '1'], ['XResolution', 180], ['YResolution', 379]]], [{'Orientation': 8, 'ImageWidth': 4397, 'ImageLength': 4112, 'XResolution': 282, 'ThumbOrientation': 8, 'Make': 'Acme'}, [['ImageLength', 4397], ['ImageWidth', 4112], ['Make', 'Acme'], ['Orientation', 1], ['YResolution', 282]]]], [[{'Orientation': 8, 'PixelXDimension': 522, 'XResolution': 367, 'XMP:Orientation': '3'}, [['Orientation', 1], ['PixelYDimension', 522], ['XMP:Orientation', '1'], ['YResolution', 367]]], [{'Orientation': 8, 'PixelXDimension': 1349, 'PixelYDimension': 887, 'ImageLength': 4267, 'ThumbOrientation': 8}, [['ImageWidth', 4267], ['Orientation', 1], ['PixelXDimension', 887], ['PixelYDimension', 1349]]], [{'Orientation': 5, 'PixelXDimension': 3532, 'PixelYDimension': 3753, 'ImageWidth': 1702, 'XResolution': 370, 'XMP:Orientation': '8'}, [['ImageLength', 1702], ['Orientation', 1], ['PixelXDimension', 3753], ['PixelYDimension', 3532], ['XMP:Orientation', '1'], ['YResolution', 370]]], [{'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': 9, 'PixelXDimension': 4218, 'PixelYDimension': 1148, 'ImageWidth': 1525, 'XResolution': 171, 'YResolution': 311, 'XMP:Orientation': '6', 'Make': 'Acme'}, [['ImageWidth', 1525], ['Make', 'Acme'], ['Orientation', 1], ['PixelXDimension', 4218], ['PixelYDimension', 1148], ['XMP:Orientation', '1'], ['XResolution', 171], ['YResolution', 311]]], [{'Orientation': 0, 'PixelXDimension': 1579, 'PixelYDimension': 2508, 'ImageWidth': 104, 'ImageLength': 3875, 'XResolution': 311, 'YResolution': 283, 'ThumbOrientation': 8}, [['ImageLength', 3875], ['ImageWidth', 104], ['Orientation', 1], ['PixelXDimension', 1579], ['PixelYDimension', 2508], ['XResolution', 311], ['YResolution', 283]]], [{'Orientation': 5, 'PixelXDimension': 2301, 'PixelYDimension': 1707, 'ImageWidth': 1166, 'ImageLength': 3560, 'XResolution': 383, 'ThumbOrientation': 8}, [['ImageLength', 1166], ['ImageWidth', 3560], ['Orientation', 1], ['PixelXDimension', 1707], ['PixelYDimension', 2301], ['YResolution', 383]]]]]\nlabels = [\"regression: resolution pair swap\", \"repair trap\", \"combined fault\", \"control\", \"control\", \"boundary\", \"boundary\", \"control\"]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (labels[i % len(labels)], i), solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-image-orientation-metadata-bake-metadata-rewrite-resolution-pair","generated_at":"2026-09-29T14:49:41.764406+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"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.","repair":"Swap XResolution and YResolution alongside the pixel dimension tags.","root_cause":"The resolution pair is missing from the list of axis-bound tags.","sha256":"7d5d56c17df0c20052974d49e2eee1fcd97585f9311717e6a71502472cee2ca9","title":"Baking a rotated scan leaves X and Y resolution unswapped · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.919,"exit_code":1,"observations":[{"actual":[["Make","Acme"],["Orientation",1],["PixelXDimension",271],["PixelYDimension",3085],["XMP:Orientation","1"],["XResolution",241],["YResolution",264]],"check":"regression: resolution pair swap 0","expected":[["Make","Acme"],["Orientation",1],["PixelXDimension",271],["PixelYDimension",3085],["XMP:Orientation","1"],["XResolution",241],["YResolution",264]],"passed":true},{"actual":[["ImageLength",3230],["Make","Acme"],["Orientation",1],["PixelXDimension",3689],["PixelYDimension",3494],["XMP:Orientation","1"],["YResolution",115]],"check":"repair trap 1","expected":[["ImageWidth",3230],["Make","Acme"],["Orientation",1],["PixelXDimension",3689],["PixelYDimension",3494],["XMP:Orientation","1"],["YResolution",115]],"passed":false},{"actual":[["ImageWidth",3631],["Orientation",1],["PixelXDimension",2215],["XMP:Orientation","1"],["XResolution",135]],"check":"combined fault 2","expected":[["ImageLength",3631],["Orientation",1],["PixelXDimension",2215],["XMP:Orientation","1"],["XResolution",135]],"passed":false},{"actual":[["ImageLength",620],["ImageWidth",1196],["Orientation",1],["PixelXDimension",3483],["PixelYDimension",682],["XMP:Orientation","1"]],"check":"control 3","expected":[["ImageLength",620],["ImageWidth",1196],["Orientation",1],["PixelXDimension",3483],["PixelYDimension",682],["XMP:Orientation","1"]],"passed":true},{"actual":[["ImageLength",411],["ImageWidth",3378],["PixelXDimension",3713],["PixelYDimension",3107],["YResolution",121]],"check":"control 4","expected":[["ImageLength",411],["ImageWidth",3378],["PixelXDimension",3713],["PixelYDimension",3107],["YResolution",121]],"passed":true},{"actual":[["ImageLength",2684],["ImageWidth",1654],["PixelXDimension",3102],["PixelYDimension",263]],"check":"boundary 5","expected":[["ImageLength",2684],["ImageWidth",1654],["PixelXDimension",3102],["PixelYDimension",263]],"passed":true},{"actual":[["ImageLength",4173],["ImageWidth",4760],["Make","Acme"],["Orientation",1],["XResolution",182]],"check":"boundary 6","expected":[["ImageLength",4173],["ImageWidth",4760],["Make","Acme"],["Orientation",1],["XResolution",182]],"passed":true},{"actual":[["ImageWidth",2123],["Orientation",1],["PixelXDimension",1787],["PixelYDimension",640],["YResolution",295]],"check":"control 7","expected":[["ImageLength",2123],["Orientation",1],["PixelXDimension",1787],["PixelYDimension",640],["YResolution",295]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: resolution pair swap 0\", \"actual\": [[\"Make\", \"Acme\"], [\"Orientation\", 1], [\"PixelXDimension\", 271], [\"PixelYDimension\", 3085], [\"XMP:Orientation\", \"1\"], [\"XResolution\", 241], [\"YResolution\", 264]], \"expected\": [[\"Make\", \"Acme\"], [\"Orientation\", 1], [\"PixelXDimension\", 271], [\"PixelYDimension\", 3085], [\"XMP:Orientation\", \"1\"], [\"XResolution\", 241], [\"YResolution\", 264]], \"passed\": true}, {\"check\": \"repair trap 1\", \"actual\": [[\"ImageLength\", 3230], [\"Make\", \"Acme\"], [\"Orientation\", 1], [\"PixelXDimension\", 3689], [\"PixelYDimension\", 3494], [\"XMP:Orientation\", \"1\"], [\"YResolution\", 115]], \"expected\": [[\"ImageWidth\", 3230], [\"Make\", \"Acme\"], [\"Orientation\", 1], [\"PixelXDimension\", 3689], [\"PixelYDimension\", 3494], [\"XMP:Orientation\", \"1\"], [\"YResolution\", 115]], \"passed\": false}, {\"check\": \"combined fault 2\", \"actual\": [[\"ImageWidth\", 3631], [\"Orientation\", 1], [\"PixelXDimension\", 2215], [\"XMP:Orientation\", \"1\"], [\"XResolution\", 135]], \"expected\": [[\"ImageLength\", 3631], [\"Orientation\", 1], [\"PixelXDimension\", 2215], [\"XMP:Orientation\", \"1\"], [\"XResolution\", 135]], \"passed\": false}, {\"check\": \"control 3\", \"actual\": [[\"ImageLength\", 620], [\"ImageWidth\", 1196], [\"Orientation\", 1], [\"PixelXDimension\", 3483], [\"PixelYDimension\", 682], [\"XMP:Orientation\", \"1\"]], \"expected\": [[\"ImageLength\", 620], [\"ImageWidth\", 1196], [\"Orientation\", 1], [\"PixelXDimension\", 3483], [\"PixelYDimension\", 682], [\"XMP:Orientation\", \"1\"]], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [[\"ImageLength\", 411], [\"ImageWidth\", 3378], [\"PixelXDimension\", 3713], [\"PixelYDimension\", 3107], [\"YResolution\", 121]], \"expected\": [[\"ImageLength\", 411], [\"ImageWidth\", 3378], [\"PixelXDimension\", 3713], [\"PixelYDimension\", 3107], [\"YResolution\", 121]], \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": [[\"ImageLength\", 2684], [\"ImageWidth\", 1654], [\"PixelXDimension\", 3102], [\"PixelYDimension\", 263]], \"expected\": [[\"ImageLength\", 2684], [\"ImageWidth\", 1654], [\"PixelXDimension\", 3102], [\"PixelYDimension\", 263]], \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": [[\"ImageLength\", 4173], [\"ImageWidth\", 4760], [\"Make\", \"Acme\"], [\"Orientation\", 1], [\"XResolution\", 182]], \"expected\": [[\"ImageLength\", 4173], [\"ImageWidth\", 4760], [\"Make\", \"Acme\"], [\"Orientation\", 1], [\"XResolution\", 182]], \"passed\": true}, {\"check\": \"control 7\", \"actual\": [[\"ImageWidth\", 2123], [\"Orientation\", 1], [\"PixelXDimension\", 1787], [\"PixelYDimension\", 640], [\"YResolution\", 295]], \"expected\": [[\"ImageLength\", 2123], [\"Orientation\", 1], [\"PixelXDimension\", 1787], [\"PixelYDimension\", 640], [\"YResolution\", 295]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.948,"exit_code":1,"observations":[{"actual":[["Make","Acme"],["Orientation",1],["PixelXDimension",271],["PixelYDimension",3085],["XMP:Orientation","1"],["XResolution",264],["YResolution",241]],"check":"regression: resolution pair swap 0","expected":[["Make","Acme"],["Orientation",1],["PixelXDimension",271],["PixelYDimension",3085],["XMP:Orientation","1"],["XResolution",241],["YResolution",264]],"passed":false},{"actual":[["ImageWidth",3230],["Make","Acme"],["Orientation",1],["PixelXDimension",3689],["PixelYDimension",3494],["XMP:Orientation","1"],["XResolution",115]],"check":"repair trap 1","expected":[["ImageWidth",3230],["Make","Acme"],["Orientation",1],["PixelXDimension",3689],["PixelYDimension",3494],["XMP:Orientation","1"],["YResolution",115]],"passed":false},{"actual":[["ImageLength",3631],["Orientation",1],["PixelXDimension",2215],["XMP:Orientation","1"],["YResolution",135]],"check":"combined fault 2","expected":[["ImageLength",3631],["Orientation",1],["PixelXDimension",2215],["XMP:Orientation","1"],["XResolution",135]],"passed":false},{"actual":[["ImageLength",620],["ImageWidth",1196],["Orientation",1],["PixelXDimension",3483],["PixelYDimension",682],["XMP:Orientation","1"]],"check":"control 3","expected":[["ImageLength",620],["ImageWidth",1196],["Orientation",1],["PixelXDimension",3483],["PixelYDimension",682],["XMP:Orientation","1"]],"passed":true},{"actual":[["ImageLength",411],["ImageWidth",3378],["PixelXDimension",3713],["PixelYDimension",3107],["YResolution",121]],"check":"control 4","expected":[["ImageLength",411],["ImageWidth",3378],["PixelXDimension",3713],["PixelYDimension",3107],["YResolution",121]],"passed":true},{"actual":[["ImageLength",2684],["ImageWidth",1654],["PixelXDimension",3102],["PixelYDimension",263]],"check":"boundary 5","expected":[["ImageLength",2684],["ImageWidth",1654],["PixelXDimension",3102],["PixelYDimension",263]],"passed":true},{"actual":[["ImageLength",4173],["ImageWidth",4760],["Make","Acme"],["Orientation",1],["XResolution",182]],"check":"boundary 6","expected":[["ImageLength",4173],["ImageWidth",4760],["Make","Acme"],["Orientation",1],["XResolution",182]],"passed":true},{"actual":[["ImageLength",2123],["Orientation",1],["PixelXDimension",1787],["PixelYDimension",640],["XResolution",295]],"check":"control 7","expected":[["ImageLength",2123],["Orientation",1],["PixelXDimension",1787],["PixelYDimension",640],["YResolution",295]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: resolution pair swap 0\", \"actual\": [[\"Make\", \"Acme\"], [\"Orientation\", 1], [\"PixelXDimension\", 271], [\"PixelYDimension\", 3085], [\"XMP:Orientation\", \"1\"], [\"XResolution\", 264], [\"YResolution\", 241]], \"expected\": [[\"Make\", \"Acme\"], [\"Orientation\", 1], [\"PixelXDimension\", 271], [\"PixelYDimension\", 3085], [\"XMP:Orientation\", \"1\"], [\"XResolution\", 241], [\"YResolution\", 264]], \"passed\": false}, {\"check\": \"repair trap 1\", \"actual\": [[\"ImageWidth\", 3230], [\"Make\", \"Acme\"], [\"Orientation\", 1], [\"PixelXDimension\", 3689], [\"PixelYDimension\", 3494], [\"XMP:Orientation\", \"1\"], [\"XResolution\", 115]], \"expected\": [[\"ImageWidth\", 3230], [\"Make\", \"Acme\"], [\"Orientation\", 1], [\"PixelXDimension\", 3689], [\"PixelYDimension\", 3494], [\"XMP:Orientation\", \"1\"], [\"YResolution\", 115]], \"passed\": false}, {\"check\": \"combined fault 2\", \"actual\": [[\"ImageLength\", 3631], [\"Orientation\", 1], [\"PixelXDimension\", 2215], [\"XMP:Orientation\", \"1\"], [\"YResolution\", 135]], \"expected\": [[\"ImageLength\", 3631], [\"Orientation\", 1], [\"PixelXDimension\", 2215], [\"XMP:Orientation\", \"1\"], [\"XResolution\", 135]], \"passed\": false}, {\"check\": \"control 3\", \"actual\": [[\"ImageLength\", 620], [\"ImageWidth\", 1196], [\"Orientation\", 1], [\"PixelXDimension\", 3483], [\"PixelYDimension\", 682], [\"XMP:Orientation\", \"1\"]], \"expected\": [[\"ImageLength\", 620], [\"ImageWidth\", 1196], [\"Orientation\", 1], [\"PixelXDimension\", 3483], [\"PixelYDimension\", 682], [\"XMP:Orientation\", \"1\"]], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [[\"ImageLength\", 411], [\"ImageWidth\", 3378], [\"PixelXDimension\", 3713], [\"PixelYDimension\", 3107], [\"YResolution\", 121]], \"expected\": [[\"ImageLength\", 411], [\"ImageWidth\", 3378], [\"PixelXDimension\", 3713], [\"PixelYDimension\", 3107], [\"YResolution\", 121]], \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": [[\"ImageLength\", 2684], [\"ImageWidth\", 1654], [\"PixelXDimension\", 3102], [\"PixelYDimension\", 263]], \"expected\": [[\"ImageLength\", 2684], [\"ImageWidth\", 1654], [\"PixelXDimension\", 3102], [\"PixelYDimension\", 263]], \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": [[\"ImageLength\", 4173], [\"ImageWidth\", 4760], [\"Make\", \"Acme\"], [\"Orientation\", 1], [\"XResolution\", 182]], \"expected\": [[\"ImageLength\", 4173], [\"ImageWidth\", 4760], [\"Make\", \"Acme\"], [\"Orientation\", 1], [\"XResolution\", 182]], \"passed\": true}, {\"check\": \"control 7\", \"actual\": [[\"ImageLength\", 2123], [\"Orientation\", 1], [\"PixelXDimension\", 1787], [\"PixelYDimension\", 640], [\"XResolution\", 295]], \"expected\": [[\"ImageLength\", 2123], [\"Orientation\", 1], [\"PixelXDimension\", 1787], [\"PixelYDimension\", 640], [\"YResolution\", 295]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.582,"exit_code":0,"observations":[{"actual":[["Make","Acme"],["Orientation",1],["PixelXDimension",271],["PixelYDimension",3085],["XMP:Orientation","1"],["XResolution",241],["YResolution",264]],"check":"regression: resolution pair swap 0","expected":[["Make","Acme"],["Orientation",1],["PixelXDimension",271],["PixelYDimension",3085],["XMP:Orientation","1"],["XResolution",241],["YResolution",264]],"passed":true},{"actual":[["ImageWidth",3230],["Make","Acme"],["Orientation",1],["PixelXDimension",3689],["PixelYDimension",3494],["XMP:Orientation","1"],["YResolution",115]],"check":"repair trap 1","expected":[["ImageWidth",3230],["Make","Acme"],["Orientation",1],["PixelXDimension",3689],["PixelYDimension",3494],["XMP:Orientation","1"],["YResolution",115]],"passed":true},{"actual":[["ImageLength",3631],["Orientation",1],["PixelXDimension",2215],["XMP:Orientation","1"],["XResolution",135]],"check":"combined fault 2","expected":[["ImageLength",3631],["Orientation",1],["PixelXDimension",2215],["XMP:Orientation","1"],["XResolution",135]],"passed":true},{"actual":[["ImageLength",620],["ImageWidth",1196],["Orientation",1],["PixelXDimension",3483],["PixelYDimension",682],["XMP:Orientation","1"]],"check":"control 3","expected":[["ImageLength",620],["ImageWidth",1196],["Orientation",1],["PixelXDimension",3483],["PixelYDimension",682],["XMP:Orientation","1"]],"passed":true},{"actual":[["ImageLength",411],["ImageWidth",3378],["PixelXDimension",3713],["PixelYDimension",3107],["YResolution",121]],"check":"control 4","expected":[["ImageLength",411],["ImageWidth",3378],["PixelXDimension",3713],["PixelYDimension",3107],["YResolution",121]],"passed":true},{"actual":[["ImageLength",2684],["ImageWidth",1654],["PixelXDimension",3102],["PixelYDimension",263]],"check":"boundary 5","expected":[["ImageLength",2684],["ImageWidth",1654],["PixelXDimension",3102],["PixelYDimension",263]],"passed":true},{"actual":[["ImageLength",4173],["ImageWidth",4760],["Make","Acme"],["Orientation",1],["XResolution",182]],"check":"boundary 6","expected":[["ImageLength",4173],["ImageWidth",4760],["Make","Acme"],["Orientation",1],["XResolution",182]],"passed":true},{"actual":[["ImageLength",2123],["Orientation",1],["PixelXDimension",1787],["PixelYDimension",640],["YResolution",295]],"check":"control 7","expected":[["ImageLength",2123],["Orientation",1],["PixelXDimension",1787],["PixelYDimension",640],["YResolution",295]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: resolution pair swap 0\", \"actual\": [[\"Make\", \"Acme\"], [\"Orientation\", 1], [\"PixelXDimension\", 271], [\"PixelYDimension\", 3085], [\"XMP:Orientation\", \"1\"], [\"XResolution\", 241], [\"YResolution\", 264]], \"expected\": [[\"Make\", \"Acme\"], [\"Orientation\", 1], [\"PixelXDimension\", 271], [\"PixelYDimension\", 3085], [\"XMP:Orientation\", \"1\"], [\"XResolution\", 241], [\"YResolution\", 264]], \"passed\": true}, {\"check\": \"repair trap 1\", \"actual\": [[\"ImageWidth\", 3230], [\"Make\", \"Acme\"], [\"Orientation\", 1], [\"PixelXDimension\", 3689], [\"PixelYDimension\", 3494], [\"XMP:Orientation\", \"1\"], [\"YResolution\", 115]], \"expected\": [[\"ImageWidth\", 3230], [\"Make\", \"Acme\"], [\"Orientation\", 1], [\"PixelXDimension\", 3689], [\"PixelYDimension\", 3494], [\"XMP:Orientation\", \"1\"], [\"YResolution\", 115]], \"passed\": true}, {\"check\": \"combined fault 2\", \"actual\": [[\"ImageLength\", 3631], [\"Orientation\", 1], [\"PixelXDimension\", 2215], [\"XMP:Orientation\", \"1\"], [\"XResolution\", 135]], \"expected\": [[\"ImageLength\", 3631], [\"Orientation\", 1], [\"PixelXDimension\", 2215], [\"XMP:Orientation\", \"1\"], [\"XResolution\", 135]], \"passed\": true}, {\"check\": \"control 3\", \"actual\": [[\"ImageLength\", 620], [\"ImageWidth\", 1196], [\"Orientation\", 1], [\"PixelXDimension\", 3483], [\"PixelYDimension\", 682], [\"XMP:Orientation\", \"1\"]], \"expected\": [[\"ImageLength\", 620], [\"ImageWidth\", 1196], [\"Orientation\", 1], [\"PixelXDimension\", 3483], [\"PixelYDimension\", 682], [\"XMP:Orientation\", \"1\"]], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [[\"ImageLength\", 411], [\"ImageWidth\", 3378], [\"PixelXDimension\", 3713], [\"PixelYDimension\", 3107], [\"YResolution\", 121]], \"expected\": [[\"ImageLength\", 411], [\"ImageWidth\", 3378], [\"PixelXDimension\", 3713], [\"PixelYDimension\", 3107], [\"YResolution\", 121]], \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": [[\"ImageLength\", 2684], [\"ImageWidth\", 1654], [\"PixelXDimension\", 3102], [\"PixelYDimension\", 263]], \"expected\": [[\"ImageLength\", 2684], [\"ImageWidth\", 1654], [\"PixelXDimension\", 3102], [\"PixelYDimension\", 263]], \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": [[\"ImageLength\", 4173], [\"ImageWidth\", 4760], [\"Make\", \"Acme\"], [\"Orientation\", 1], [\"XResolution\", 182]], \"expected\": [[\"ImageLength\", 4173], [\"ImageWidth\", 4760], [\"Make\", \"Acme\"], [\"Orientation\", 1], [\"XResolution\", 182]], \"passed\": true}, {\"check\": \"control 7\", \"actual\": [[\"ImageLength\", 2123], [\"Orientation\", 1], [\"PixelXDimension\", 1787], [\"PixelYDimension\", 640], [\"YResolution\", 295]], \"expected\": [[\"ImageLength\", 2123], [\"Orientation\", 1], [\"PixelXDimension\", 1787], [\"PixelYDimension\", 640], [\"YResolution\", 295]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}