{"abstract":"North-up rasters flip upside down when converted.","category":"Map projection transforms","checks":8,"contract":"Input [lines, col, row] where lines are the six world-file values in file order A, D, B, E, C, F: A and E are the pixel sizes, D and B the rotation terms, and (C, F) the map coordinate of the centre of the upper-left pixel. Return the corner-based geotransform [C - A/2 - B/2, A, B, F - D/2 - E/2, D, E] followed by the centre of pixel (col, row): C + A*col + B*row and F + D*col + E*row; all rounded to 6 decimals.","evaluation_group":"w2-map-projection-transforms-world-file-geotransform","failed_approach":"Taking the absolute value flips every standard north-up raster.","family":"w2-map-projection-transforms-world-file-geotransform-pixel-height-sign","id":"FA-70296","implementations":{"attempt":{"sha256":"f7abb928fc2f13636af3a985db8cc85f1e6af096134ca08824d64a6db3608235","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    lines, col, row = x\n    A, D, B, E, C, Fy = lines\n    gt = [C - A / 2 - B / 2, A, B, Fy - D / 2 - E / 2, D, abs(E)]\n    cx = C + A * col + B * row\n    cy = Fy + D * col + E * row\n    return [round(v, 6) for v in gt + [cx, cy]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 48, 33], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 501455.0, 4198995.0]), ('control #1', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 50, 35], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125]), ('control #2', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 32, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6]), ('control #3', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 9, 49], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0]), ('control #4', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 25, 48], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5]), ('control #5', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 40, 44], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0]), ('control #6', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 30, 3], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0]), ('control #7', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 39, 7], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125])], [('control #1', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 50, 35], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125]), ('control #2', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 32, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6]), ('control #5', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 40, 44], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0]), ('control #6', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 30, 3], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0]), ('control #7', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 39, 7], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125]), ('control #8', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 3, 25], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1019.75, 4950.0]), ('control #9', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 30, 23], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 529.5, 731.0]), ('control #10', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 27, 23], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 27.5, 23.5])], [('control #2', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 32, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6]), ('control #3', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 9, 49], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0]), ('control #8', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 3, 25], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1019.75, 4950.0]), ('control #9', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 30, 23], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 529.5, 731.0]), ('control #10', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 27, 23], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 27.5, 23.5]), ('control #11', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 3, 46], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 184.0, -33.0]), ('control #12', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 5, 40], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500165.0, 4198785.0]), ('control #13', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 14, 18], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -176.375, 85.375])], [('control #3', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 9, 49], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0]), ('control #5', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 40, 44], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0]), ('control #11', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 3, 46], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 184.0, -33.0]), ('control #12', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 5, 40], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500165.0, 4198785.0]), ('control #13', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 14, 18], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -176.375, 85.375]), ('control #14', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 1, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1019.25, 4935.2]), ('control #15', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 35, 23], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 579.5, 741.0]), ('control #16', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 0, 18], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 18.5])], [('control #4', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 25, 48], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5]), ('control #5', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 40, 44], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0]), ('control #14', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 1, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1019.25, 4935.2]), ('control #15', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 35, 23], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 579.5, 741.0]), ('control #16', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 0, 18], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 18.5]), ('control #17', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 17, 23], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 219.5, 68.0]), ('control #18', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 14, 1], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500435.0, 4199955.0]), ('control #19', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 23, 49], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -174.125, 77.625])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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":"b4386755b7040f6903cd8ec0249f9f2d89120801accc3fe259adcc218cf2bea4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    lines, col, row = x\n    A, D, B, E, C, Fy = lines\n    gt = [C - A / 2 - B / 2, A, B, Fy - D / 2 - E / 2, D, -E]\n    cx = C + A * col + B * row\n    cy = Fy + D * col + E * row\n    return [round(v, 6) for v in gt + [cx, cy]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 48, 33], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 501455.0, 4198995.0]), ('control #1', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 50, 35], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125]), ('control #2', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 32, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6]), ('control #3', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 9, 49], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0]), ('control #4', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 25, 48], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5]), ('control #5', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 40, 44], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0]), ('control #6', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 30, 3], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0]), ('control #7', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 39, 7], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125])], [('control #1', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 50, 35], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125]), ('control #2', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 32, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6]), ('control #5', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 40, 44], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0]), ('control #6', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 30, 3], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0]), ('control #7', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 39, 7], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125]), ('control #8', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 3, 25], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1019.75, 4950.0]), ('control #9', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 30, 23], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 529.5, 731.0]), ('control #10', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 27, 23], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 27.5, 23.5])], [('control #2', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 32, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6]), ('control #3', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 9, 49], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0]), ('control #8', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 3, 25], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1019.75, 4950.0]), ('control #9', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 30, 23], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 529.5, 731.0]), ('control #10', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 27, 23], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 27.5, 23.5]), ('control #11', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 3, 46], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 184.0, -33.0]), ('control #12', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 5, 40], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500165.0, 4198785.0]), ('control #13', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 14, 18], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -176.375, 85.375])], [('control #3', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 9, 49], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0]), ('control #5', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 40, 44], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0]), ('control #11', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 3, 46], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 184.0, -33.0]), ('control #12', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 5, 40], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500165.0, 4198785.0]), ('control #13', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 14, 18], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -176.375, 85.375]), ('control #14', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 1, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1019.25, 4935.2]), ('control #15', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 35, 23], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 579.5, 741.0]), ('control #16', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 0, 18], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 18.5])], [('control #4', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 25, 48], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5]), ('control #5', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 40, 44], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0]), ('control #14', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 1, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1019.25, 4935.2]), ('control #15', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 35, 23], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 579.5, 741.0]), ('control #16', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 0, 18], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 18.5]), ('control #17', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 17, 23], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 219.5, 68.0]), ('control #18', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 14, 1], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500435.0, 4199955.0]), ('control #19', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 23, 49], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -174.125, 77.625])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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":"128b1eed72300f421f778096122f8500e5903b70c13fbebf8e73160c47fd8946","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    lines, col, row = x\n    A, D, B, E, C, Fy = lines\n    gt = [C - A / 2 - B / 2, A, B, Fy - D / 2 - E / 2, D, E]\n    cx = C + A * col + B * row\n    cy = Fy + D * col + E * row\n    return [round(v, 6) for v in gt + [cx, cy]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 48, 33], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 501455.0, 4198995.0]), ('control #1', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 50, 35], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125]), ('control #2', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 32, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6]), ('control #3', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 9, 49], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0]), ('control #4', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 25, 48], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5]), ('control #5', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 40, 44], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0]), ('control #6', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 30, 3], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0]), ('control #7', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 39, 7], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125])], [('control #1', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 50, 35], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125]), ('control #2', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 32, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6]), ('control #5', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 40, 44], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0]), ('control #6', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 30, 3], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0]), ('control #7', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 39, 7], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125]), ('control #8', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 3, 25], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1019.75, 4950.0]), ('control #9', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 30, 23], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 529.5, 731.0]), ('control #10', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 27, 23], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 27.5, 23.5])], [('control #2', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 32, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6]), ('control #3', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 9, 49], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0]), ('control #8', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 3, 25], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1019.75, 4950.0]), ('control #9', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 30, 23], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 529.5, 731.0]), ('control #10', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 27, 23], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 27.5, 23.5]), ('control #11', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 3, 46], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 184.0, -33.0]), ('control #12', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 5, 40], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500165.0, 4198785.0]), ('control #13', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 14, 18], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -176.375, 85.375])], [('control #3', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 9, 49], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0]), ('control #5', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 40, 44], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0]), ('control #11', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 3, 46], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 184.0, -33.0]), ('control #12', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 5, 40], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500165.0, 4198785.0]), ('control #13', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 14, 18], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -176.375, 85.375]), ('control #14', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 1, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1019.25, 4935.2]), ('control #15', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 35, 23], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 579.5, 741.0]), ('control #16', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 0, 18], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 18.5])], [('control #4', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 25, 48], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5]), ('control #5', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 40, 44], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0]), ('control #14', [[2.0, 0.4, 0.5, -2.0, 1001.25, 4998.8], 1, 32], [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1019.25, 4935.2]), ('control #15', [[10.0, 2.0, -3.0, -10.0, 298.5, 901.0], 35, 23], [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 579.5, 741.0]), ('control #16', [[1.0, 0.0, 0.0, 1.0, 0.5, 0.5], 0, 18], [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 18.5]), ('control #17', [[5.0, -1.0, 1.5, -5.0, 100.0, 200.0], 17, 23], [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 219.5, 68.0]), ('control #18', [[30.0, 0.0, 0.0, -30.0, 500015.0, 4199985.0], 14, 1], [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500435.0, 4199955.0]), ('control #19', [[0.25, 0.0, 0.0, -0.25, -179.875, 89.875], 23, 49], [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -174.125, 77.625])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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":"Stipulated deterministic toy contract on a bounded input domain; results are rounded as stated and no conformance with any published standard or library is claimed. 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-map-projection-transforms-world-file-geotransform-pixel-height-sign","generated_at":"2026-09-29T14:48:19.464078+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"GIS tools interchange world files and corner-origin geotransforms; the half-pixel convention and line order are classic sources of half-pixel and rotated-raster shifts.","repair":"At the pixel height sign step restore `D, E]`, leaving the rest of the model unchanged.","root_cause":"The pixel height is negated as if world files stored a positive height.","sha256":"fbc6f4755b7a4aafad2e8d4e09f1a0720ef17cf180802a49a8388d3485574757","title":"World file to corner geotransform and pixel centre: pixel height sign · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.838,"exit_code":1,"observations":[{"actual":[500000.0,30.0,0.0,4200000.0,0.0,30.0,501455.0,4198995.0],"check":"control #0","expected":[500000.0,30.0,0.0,4200000.0,0.0,-30.0,501455.0,4198995.0],"passed":false},{"actual":[-180.0,0.25,0.0,90.0,0.0,0.25,-167.375,81.125],"check":"control #1","expected":[-180.0,0.25,0.0,90.0,0.0,-0.25,-167.375,81.125],"passed":false},{"actual":[1000.0,2.0,0.5,4999.6,0.4,2.0,1081.25,4947.6],"check":"control #2","expected":[1000.0,2.0,0.5,4999.6,0.4,-2.0,1081.25,4947.6],"passed":false},{"actual":[295.0,10.0,-3.0,905.0,2.0,10.0,241.5,429.0],"check":"control #3","expected":[295.0,10.0,-3.0,905.0,2.0,-10.0,241.5,429.0],"passed":false},{"actual":[0.0,1.0,0.0,0.0,0.0,1.0,25.5,48.5],"check":"control #4","expected":[0.0,1.0,0.0,0.0,0.0,1.0,25.5,48.5],"passed":true},{"actual":[96.75,5.0,1.5,203.0,-1.0,5.0,366.0,-60.0],"check":"control #5","expected":[96.75,5.0,1.5,203.0,-1.0,-5.0,366.0,-60.0],"passed":false},{"actual":[500000.0,30.0,0.0,4200000.0,0.0,30.0,500915.0,4199895.0],"check":"control #6","expected":[500000.0,30.0,0.0,4200000.0,0.0,-30.0,500915.0,4199895.0],"passed":false},{"actual":[-180.0,0.25,0.0,90.0,0.0,0.25,-170.125,88.125],"check":"control #7","expected":[-180.0,0.25,0.0,90.0,0.0,-0.25,-170.125,88.125],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [500000.0, 30.0, 0.0, 4200000.0, 0.0, 30.0, 501455.0, 4198995.0], \"expected\": [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 501455.0, 4198995.0], \"passed\": false}, {\"check\": \"control #1\", \"actual\": [-180.0, 0.25, 0.0, 90.0, 0.0, 0.25, -167.375, 81.125], \"expected\": [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125], \"passed\": false}, {\"check\": \"control #2\", \"actual\": [1000.0, 2.0, 0.5, 4999.6, 0.4, 2.0, 1081.25, 4947.6], \"expected\": [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6], \"passed\": false}, {\"check\": \"control #3\", \"actual\": [295.0, 10.0, -3.0, 905.0, 2.0, 10.0, 241.5, 429.0], \"expected\": [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0], \"passed\": false}, {\"check\": \"control #4\", \"actual\": [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5], \"expected\": [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5], \"passed\": true}, {\"check\": \"control #5\", \"actual\": [96.75, 5.0, 1.5, 203.0, -1.0, 5.0, 366.0, -60.0], \"expected\": [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0], \"passed\": false}, {\"check\": \"control #6\", \"actual\": [500000.0, 30.0, 0.0, 4200000.0, 0.0, 30.0, 500915.0, 4199895.0], \"expected\": [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0], \"passed\": false}, {\"check\": \"control #7\", \"actual\": [-180.0, 0.25, 0.0, 90.0, 0.0, 0.25, -170.125, 88.125], \"expected\": [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":83.978,"exit_code":1,"observations":[{"actual":[500000.0,30.0,0.0,4200000.0,0.0,30.0,501455.0,4198995.0],"check":"control #0","expected":[500000.0,30.0,0.0,4200000.0,0.0,-30.0,501455.0,4198995.0],"passed":false},{"actual":[-180.0,0.25,0.0,90.0,0.0,0.25,-167.375,81.125],"check":"control #1","expected":[-180.0,0.25,0.0,90.0,0.0,-0.25,-167.375,81.125],"passed":false},{"actual":[1000.0,2.0,0.5,4999.6,0.4,2.0,1081.25,4947.6],"check":"control #2","expected":[1000.0,2.0,0.5,4999.6,0.4,-2.0,1081.25,4947.6],"passed":false},{"actual":[295.0,10.0,-3.0,905.0,2.0,10.0,241.5,429.0],"check":"control #3","expected":[295.0,10.0,-3.0,905.0,2.0,-10.0,241.5,429.0],"passed":false},{"actual":[0.0,1.0,0.0,0.0,0.0,-1.0,25.5,48.5],"check":"control #4","expected":[0.0,1.0,0.0,0.0,0.0,1.0,25.5,48.5],"passed":false},{"actual":[96.75,5.0,1.5,203.0,-1.0,5.0,366.0,-60.0],"check":"control #5","expected":[96.75,5.0,1.5,203.0,-1.0,-5.0,366.0,-60.0],"passed":false},{"actual":[500000.0,30.0,0.0,4200000.0,0.0,30.0,500915.0,4199895.0],"check":"control #6","expected":[500000.0,30.0,0.0,4200000.0,0.0,-30.0,500915.0,4199895.0],"passed":false},{"actual":[-180.0,0.25,0.0,90.0,0.0,0.25,-170.125,88.125],"check":"control #7","expected":[-180.0,0.25,0.0,90.0,0.0,-0.25,-170.125,88.125],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [500000.0, 30.0, 0.0, 4200000.0, 0.0, 30.0, 501455.0, 4198995.0], \"expected\": [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 501455.0, 4198995.0], \"passed\": false}, {\"check\": \"control #1\", \"actual\": [-180.0, 0.25, 0.0, 90.0, 0.0, 0.25, -167.375, 81.125], \"expected\": [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125], \"passed\": false}, {\"check\": \"control #2\", \"actual\": [1000.0, 2.0, 0.5, 4999.6, 0.4, 2.0, 1081.25, 4947.6], \"expected\": [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6], \"passed\": false}, {\"check\": \"control #3\", \"actual\": [295.0, 10.0, -3.0, 905.0, 2.0, 10.0, 241.5, 429.0], \"expected\": [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0], \"passed\": false}, {\"check\": \"control #4\", \"actual\": [0.0, 1.0, 0.0, 0.0, 0.0, -1.0, 25.5, 48.5], \"expected\": [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5], \"passed\": false}, {\"check\": \"control #5\", \"actual\": [96.75, 5.0, 1.5, 203.0, -1.0, 5.0, 366.0, -60.0], \"expected\": [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0], \"passed\": false}, {\"check\": \"control #6\", \"actual\": [500000.0, 30.0, 0.0, 4200000.0, 0.0, 30.0, 500915.0, 4199895.0], \"expected\": [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0], \"passed\": false}, {\"check\": \"control #7\", \"actual\": [-180.0, 0.25, 0.0, 90.0, 0.0, 0.25, -170.125, 88.125], \"expected\": [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.142,"exit_code":0,"observations":[{"actual":[500000.0,30.0,0.0,4200000.0,0.0,-30.0,501455.0,4198995.0],"check":"control #0","expected":[500000.0,30.0,0.0,4200000.0,0.0,-30.0,501455.0,4198995.0],"passed":true},{"actual":[-180.0,0.25,0.0,90.0,0.0,-0.25,-167.375,81.125],"check":"control #1","expected":[-180.0,0.25,0.0,90.0,0.0,-0.25,-167.375,81.125],"passed":true},{"actual":[1000.0,2.0,0.5,4999.6,0.4,-2.0,1081.25,4947.6],"check":"control #2","expected":[1000.0,2.0,0.5,4999.6,0.4,-2.0,1081.25,4947.6],"passed":true},{"actual":[295.0,10.0,-3.0,905.0,2.0,-10.0,241.5,429.0],"check":"control #3","expected":[295.0,10.0,-3.0,905.0,2.0,-10.0,241.5,429.0],"passed":true},{"actual":[0.0,1.0,0.0,0.0,0.0,1.0,25.5,48.5],"check":"control #4","expected":[0.0,1.0,0.0,0.0,0.0,1.0,25.5,48.5],"passed":true},{"actual":[96.75,5.0,1.5,203.0,-1.0,-5.0,366.0,-60.0],"check":"control #5","expected":[96.75,5.0,1.5,203.0,-1.0,-5.0,366.0,-60.0],"passed":true},{"actual":[500000.0,30.0,0.0,4200000.0,0.0,-30.0,500915.0,4199895.0],"check":"control #6","expected":[500000.0,30.0,0.0,4200000.0,0.0,-30.0,500915.0,4199895.0],"passed":true},{"actual":[-180.0,0.25,0.0,90.0,0.0,-0.25,-170.125,88.125],"check":"control #7","expected":[-180.0,0.25,0.0,90.0,0.0,-0.25,-170.125,88.125],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 501455.0, 4198995.0], \"expected\": [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 501455.0, 4198995.0], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125], \"expected\": [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125], \"passed\": true}, {\"check\": \"control #2\", \"actual\": [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6], \"expected\": [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6], \"passed\": true}, {\"check\": \"control #3\", \"actual\": [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0], \"expected\": [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0], \"passed\": true}, {\"check\": \"control #4\", \"actual\": [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5], \"expected\": [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5], \"passed\": true}, {\"check\": \"control #5\", \"actual\": [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0], \"expected\": [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0], \"passed\": true}, {\"check\": \"control #6\", \"actual\": [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0], \"expected\": [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0], \"passed\": true}, {\"check\": \"control #7\", \"actual\": [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125], \"expected\": [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}