FA-10736 / Raster memory layout / Open access
Bottom up image rows · case 01
Bottom-up scanlines are displayed without vertical orientation conversion.
ROOT CAUSE
Bottom-up scanlines are displayed without vertical orientation conversion.
VERIFIED REPAIR
Use the stage contract: Convert a bottom-up row list into top-down orientation by reversing row order while preserving horizontal pixel order.
Unsuccessful approach: Reversing each row mirrors horizontally instead of flipping row order.
Case contract
Convert a bottom-up row list into top-down orientation by reversing row order while preserving horizontal pixel order.
Why this case matters
A deterministic software graphics stage with explicit channel and coordinate conventions; no hardware, device profile or API behavior is inferred.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(rows):
return [list(row) for row in rows]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve(*([[1, 2], [3, 4]],)), [[3, 4], [1, 2]])
check('fixture 2', solve(*([[1, 2]],)), [[1, 2]])
check('fixture 3', solve(*([],)), [])
check('fixture 4', solve(*([[1], [2], [3]],)), [[3], [2], [1]])
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 |
|---|---|---|---|
| fixture 1 | [[1, 2], [3, 4]] | [[3, 4], [1, 2]] | Failed |
| fixture 2 | [[1, 2]] | [[1, 2]] | Passed |
| fixture 3 | [] | [] | Passed |
| fixture 4 | [[1], [2], [3]] | [[3], [2], [1]] | Failed |
SHA-256 / 19c52c2741daf6dc55fb2a57b4855568a68d248f2fb274a5e3021b3814b759e3
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(rows):
return [list(reversed(row)) for row in rows]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve(*([[1, 2], [3, 4]],)), [[3, 4], [1, 2]])
check('fixture 2', solve(*([[1, 2]],)), [[1, 2]])
check('fixture 3', solve(*([],)), [])
check('fixture 4', solve(*([[1], [2], [3]],)), [[3], [2], [1]])
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 |
|---|---|---|---|
| fixture 1 | [[2, 1], [4, 3]] | [[3, 4], [1, 2]] | Failed |
| fixture 2 | [[2, 1]] | [[1, 2]] | Failed |
| fixture 3 | [] | [] | Passed |
| fixture 4 | [[1], [2], [3]] | [[3], [2], [1]] | Failed |
SHA-256 / 07436ae94d8e724e6ffc1f46ce733f9791ea10ed633943878e163e96073740a1
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(rows):
return [list(row) for row in reversed(rows)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve(*([[1, 2], [3, 4]],)), [[3, 4], [1, 2]])
check('fixture 2', solve(*([[1, 2]],)), [[1, 2]])
check('fixture 3', solve(*([],)), [])
check('fixture 4', solve(*([[1], [2], [3]],)), [[3], [2], [1]])
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 |
|---|---|---|---|
| fixture 1 | [[3, 4], [1, 2]] | [[3, 4], [1, 2]] | Passed |
| fixture 2 | [[1, 2]] | [[1, 2]] | Passed |
| fixture 3 | [] | [] | Passed |
| fixture 4 | [[3], [2], [1]] | [[3], [2], [1]] | Passed |
SHA-256 / e3392d41985e404e160c80f2d81c5f23d180ab51a51c7faf56dd3d3fbb483b10
Verification & scope
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:38:41.796429+00:00.
Case digest / 3f15d7f1287091122d77c91371436a518bc0faa86d2239ed1e5fc68491d676f9