FA-70296 / Map projection transforms / Open access
World file to corner geotransform and pixel centre: pixel height sign · case 01
North-up rasters flip upside down when converted.
ROOT CAUSE
The pixel height is negated as if world files stored a positive height.
VERIFIED REPAIR
At the pixel height sign step restore `D, E]`, leaving the rest of the model unchanged.
Unsuccessful approach: Taking the absolute value flips every standard north-up raster.
Case 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.
Why this case matters
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.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
lines, col, row = x
A, D, B, E, C, Fy = lines
gt = [C - A / 2 - B / 2, A, B, Fy - D / 2 - E / 2, D, -E]
cx = C + A * col + B * row
cy = Fy + D * col + E * row
return [round(v, 6) for v in gt + [cx, cy]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('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])]]
for label, args, expected in fixtures[N-1]:
check(label, 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 |
|---|---|---|---|
| control #0 | [500000.0, 30.0, 0.0, 4200000.0, 0.0, 30.0, 501455.0, 4198995.0] | [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 501455.0, 4198995.0] | Failed |
| control #1 | [-180.0, 0.25, 0.0, 90.0, 0.0, 0.25, -167.375, 81.125] | [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125] | Failed |
| control #2 | [1000.0, 2.0, 0.5, 4999.6, 0.4, 2.0, 1081.25, 4947.6] | [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6] | Failed |
| control #3 | [295.0, 10.0, -3.0, 905.0, 2.0, 10.0, 241.5, 429.0] | [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0] | Failed |
| control #4 | [0.0, 1.0, 0.0, 0.0, 0.0, -1.0, 25.5, 48.5] | [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5] | Failed |
| control #5 | [96.75, 5.0, 1.5, 203.0, -1.0, 5.0, 366.0, -60.0] | [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0] | Failed |
| control #6 | [500000.0, 30.0, 0.0, 4200000.0, 0.0, 30.0, 500915.0, 4199895.0] | [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0] | Failed |
| control #7 | [-180.0, 0.25, 0.0, 90.0, 0.0, 0.25, -170.125, 88.125] | [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125] | Failed |
SHA-256 / b4386755b7040f6903cd8ec0249f9f2d89120801accc3fe259adcc218cf2bea4
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
lines, col, row = x
A, D, B, E, C, Fy = lines
gt = [C - A / 2 - B / 2, A, B, Fy - D / 2 - E / 2, D, abs(E)]
cx = C + A * col + B * row
cy = Fy + D * col + E * row
return [round(v, 6) for v in gt + [cx, cy]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('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])]]
for label, args, expected in fixtures[N-1]:
check(label, 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 |
|---|---|---|---|
| control #0 | [500000.0, 30.0, 0.0, 4200000.0, 0.0, 30.0, 501455.0, 4198995.0] | [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 501455.0, 4198995.0] | Failed |
| control #1 | [-180.0, 0.25, 0.0, 90.0, 0.0, 0.25, -167.375, 81.125] | [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125] | Failed |
| control #2 | [1000.0, 2.0, 0.5, 4999.6, 0.4, 2.0, 1081.25, 4947.6] | [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6] | Failed |
| control #3 | [295.0, 10.0, -3.0, 905.0, 2.0, 10.0, 241.5, 429.0] | [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0] | Failed |
| control #4 | [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5] | [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5] | Passed |
| control #5 | [96.75, 5.0, 1.5, 203.0, -1.0, 5.0, 366.0, -60.0] | [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0] | Failed |
| control #6 | [500000.0, 30.0, 0.0, 4200000.0, 0.0, 30.0, 500915.0, 4199895.0] | [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0] | Failed |
| control #7 | [-180.0, 0.25, 0.0, 90.0, 0.0, 0.25, -170.125, 88.125] | [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125] | Failed |
SHA-256 / f7abb928fc2f13636af3a985db8cc85f1e6af096134ca08824d64a6db3608235
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
lines, col, row = x
A, D, B, E, C, Fy = lines
gt = [C - A / 2 - B / 2, A, B, Fy - D / 2 - E / 2, D, E]
cx = C + A * col + B * row
cy = Fy + D * col + E * row
return [round(v, 6) for v in gt + [cx, cy]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('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])]]
for label, args, expected in fixtures[N-1]:
check(label, 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 |
|---|---|---|---|
| control #0 | [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 501455.0, 4198995.0] | [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 501455.0, 4198995.0] | Passed |
| control #1 | [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125] | [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -167.375, 81.125] | Passed |
| control #2 | [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6] | [1000.0, 2.0, 0.5, 4999.6, 0.4, -2.0, 1081.25, 4947.6] | Passed |
| control #3 | [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0] | [295.0, 10.0, -3.0, 905.0, 2.0, -10.0, 241.5, 429.0] | Passed |
| control #4 | [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5] | [0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 25.5, 48.5] | Passed |
| control #5 | [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0] | [96.75, 5.0, 1.5, 203.0, -1.0, -5.0, 366.0, -60.0] | Passed |
| control #6 | [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0] | [500000.0, 30.0, 0.0, 4200000.0, 0.0, -30.0, 500915.0, 4199895.0] | Passed |
| control #7 | [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125] | [-180.0, 0.25, 0.0, 90.0, 0.0, -0.25, -170.125, 88.125] | Passed |
SHA-256 / 128b1eed72300f421f778096122f8500e5903b70c13fbebf8e73160c47fd8946
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:48:19.464078+00:00.
Case digest / fbc6f4755b7a4aafad2e8d4e09f1a0720ef17cf180802a49a8388d3485574757