FAILURE MAP
← Case archive

FA-51671 / Raster clipping / Open access

Blit source destination clip: scissor left origin · case 01

Left trimming only happens for negative destination origins, ignoring a scissor whose left edge is inside the target.

Verified by executionVariant 1 · 12 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Left trimming only happens for negative destination origins, ignoring a scissor whose left edge is inside the target.

VERIFIED REPAIR

Restore the specified clipping decision at scissor left origin. Each command is [sw,sh,sx,sy,w,h,dx,dy,clip]: a source image sw by sh, a requested source rectangle origin and size, a destination origin, and a half-open destination scissor [left,top,right,bottom) first intersected with the size by size target. Negative source origins trim width/height and shift the destination by the same amount; the source rectangle is limited to the image; destination pixels left/top of the scissor trim size and advance the source origin; right/bottom trims use half-open bounds. The result is [sx,sy,dx,dy,w,h] or None when either dimension is empty.

Unsuccessful approach: An off-by-one scissor comparison still leaves a copy starting one column left of the scissor.

Case contract

Each command is [sw,sh,sx,sy,w,h,dx,dy,clip]: a source image sw by sh, a requested source rectangle origin and size, a destination origin, and a half-open destination scissor [left,top,right,bottom) first intersected with the size by size target. Negative source origins trim width/height and shift the destination by the same amount; the source rectangle is limited to the image; destination pixels left/top of the scissor trim size and advance the source origin; right/bottom trims use half-open bounds. The result is [sx,sy,dx,dy,w,h] or None when either dimension is empty.

Why this case matters

Raster clipping decides which pixels a primitive may touch; a single wrong clip decision writes outside the target or scissor, or silently drops visible coverage.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(commands, size):
    out=[]
    for sw,sh,sx,sy,w,h,dx,dy,clip in commands:
        cl,ct,cr,cb=max(clip[0],0),max(clip[1],0),min(clip[2],size),min(clip[3],size)
        if sx<0:
            w+=sx; dx-=sx; sx=0
        if sy<0:
            h+=sy; dy-=sy; sy=0
        w=min(w,sw-sx)
        h=min(h,sh-sy)
        if dx<0:
            w-=cl-dx; sx+=cl-dx; dx=cl
        if dy<ct:
            h-=ct-dy; sy+=ct-dy; dy=ct
        w=min(w,cr-dx)
        h=min(h,cb-dy)
        out.append([sx,sy,dx,dy,w,h] if w>0 and h>0 else None)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 6, 6]]], 6), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 6, 6]]], 6), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 6, 6]]], 6), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[9, 2, 0, 0, 9, 2, 0, 0, [0, 0, 10, 6]]], 6), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 4', solve([[6, 2, 0, 0, 6, 2, 0, 0, [0, 0, 3, 6]]], 6), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 4, 0, [0, 0, 6, 6]]], 6), [[0, 0, 4, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 6]]], 6), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 6, 6]]], 6), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 6, 6]]], 6), [[2, 0, 3, 0, 3, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 6, 6]]], 6), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 6, 6]]], 6), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[6, 6, 1, 1, 6, 6, -1, -1, [0, 0, 6, 6]]], 6), [[2, 2, 0, 0, 4, 4]])
if N == 2:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 7, 7]]], 7), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 7, 7]]], 7), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 7, 7]]], 7), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[10, 2, 0, 0, 10, 2, 0, 0, [0, 0, 11, 7]]], 7), [[0, 0, 0, 0, 7, 2]])
    check('explicit case 4', solve([[7, 2, 0, 0, 7, 2, 0, 0, [0, 0, 3, 7]]], 7), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 5, 0, [0, 0, 7, 7]]], 7), [[0, 0, 5, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 7]]], 7), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 7, 7]]], 7), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 7, 7]]], 7), [[2, 0, 3, 0, 4, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 7, 7]]], 7), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 7, 7]]], 7), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[7, 7, 1, 1, 7, 7, -1, -1, [0, 0, 7, 7]]], 7), [[2, 2, 0, 0, 5, 5]])
if N == 3:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 8, 8]]], 8), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 8, 8]]], 8), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 8, 8]]], 8), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[11, 2, 0, 0, 11, 2, 0, 0, [0, 0, 12, 8]]], 8), [[0, 0, 0, 0, 8, 2]])
    check('explicit case 4', solve([[8, 2, 0, 0, 8, 2, 0, 0, [0, 0, 3, 8]]], 8), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 6, 0, [0, 0, 8, 8]]], 8), [[0, 0, 6, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 8]]], 8), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 8, 8]]], 8), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 8, 8]]], 8), [[2, 0, 3, 0, 4, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 8, 8]]], 8), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 8, 8]]], 8), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[8, 8, 1, 1, 8, 8, -1, -1, [0, 0, 8, 8]]], 8), [[2, 2, 0, 0, 6, 6]])
if N == 4:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 9, 9]]], 9), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 9, 9]]], 9), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 9, 9]]], 9), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[12, 2, 0, 0, 12, 2, 0, 0, [0, 0, 13, 9]]], 9), [[0, 0, 0, 0, 9, 2]])
    check('explicit case 4', solve([[9, 2, 0, 0, 9, 2, 0, 0, [0, 0, 3, 9]]], 9), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 7, 0, [0, 0, 9, 9]]], 9), [[0, 0, 7, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 9]]], 9), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 9, 9]]], 9), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 9, 9]]], 9), [[2, 0, 3, 0, 4, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 9, 9]]], 9), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 9, 9]]], 9), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[9, 9, 1, 1, 9, 9, -1, -1, [0, 0, 9, 9]]], 9), [[2, 2, 0, 0, 7, 7]])
if N == 5:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 10, 10]]], 10), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 10, 10]]], 10), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 10, 10]]], 10), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[13, 2, 0, 0, 13, 2, 0, 0, [0, 0, 14, 10]]], 10), [[0, 0, 0, 0, 10, 2]])
    check('explicit case 4', solve([[10, 2, 0, 0, 10, 2, 0, 0, [0, 0, 3, 10]]], 10), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 8, 0, [0, 0, 10, 10]]], 10), [[0, 0, 8, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 10]]], 10), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 10, 10]]], 10), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 10, 10]]], 10), [[2, 0, 3, 0, 4, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 10, 10]]], 10), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 10, 10]]], 10), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[10, 10, 1, 1, 10, 10, -1, -1, [0, 0, 10, 10]]], 10), [[2, 2, 0, 0, 8, 8]])
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 fixtureActualExpectedOutcome
explicit case 0[[0, 0, 1, 1, 4, 4]][[0, 0, 1, 1, 4, 4]]Passed
explicit case 1[[0, 0, 2, 0, 2, 2]][[0, 0, 2, 0, 2, 2]]Passed
explicit case 2[[2, 0, 0, 0, 3, 3]][[2, 0, 0, 0, 3, 3]]Passed
explicit case 3[[0, 0, 0, 0, 6, 2]][[0, 0, 0, 0, 6, 2]]Passed
explicit case 4[[0, 0, 0, 0, 3, 2]][[0, 0, 0, 0, 3, 2]]Passed
explicit case 5[[0, 0, 4, 0, 2, 4]][[0, 0, 4, 0, 2, 4]]Passed
explicit case 6[None][None]Passed
explicit case 7[None][None]Passed
explicit case 8[[0, 0, 1, 0, 5, 6]][[2, 0, 3, 0, 3, 6]]Failed
explicit case 9[[0, 0, 0, 0, 6, 2]][[0, 0, 0, 0, 6, 2]]Passed
explicit case 10[[0, 0, 0, 0, 2, 6]][[0, 0, 0, 0, 2, 6]]Passed
explicit case 11[[2, 2, 0, 0, 4, 4]][[2, 2, 0, 0, 4, 4]]Passed

SHA-256 / 0486da19640850aae2f19f89b58b10761e7a2e07f4a717bd605362a596a3aec5

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(commands, size):
    out=[]
    for sw,sh,sx,sy,w,h,dx,dy,clip in commands:
        cl,ct,cr,cb=max(clip[0],0),max(clip[1],0),min(clip[2],size),min(clip[3],size)
        if sx<0:
            w+=sx; dx-=sx; sx=0
        if sy<0:
            h+=sy; dy-=sy; sy=0
        w=min(w,sw-sx)
        h=min(h,sh-sy)
        if dx<cl-1:
            w-=cl-dx; sx+=cl-dx; dx=cl
        if dy<ct:
            h-=ct-dy; sy+=ct-dy; dy=ct
        w=min(w,cr-dx)
        h=min(h,cb-dy)
        out.append([sx,sy,dx,dy,w,h] if w>0 and h>0 else None)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 6, 6]]], 6), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 6, 6]]], 6), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 6, 6]]], 6), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[9, 2, 0, 0, 9, 2, 0, 0, [0, 0, 10, 6]]], 6), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 4', solve([[6, 2, 0, 0, 6, 2, 0, 0, [0, 0, 3, 6]]], 6), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 4, 0, [0, 0, 6, 6]]], 6), [[0, 0, 4, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 6]]], 6), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 6, 6]]], 6), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 6, 6]]], 6), [[2, 0, 3, 0, 3, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 6, 6]]], 6), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 6, 6]]], 6), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[6, 6, 1, 1, 6, 6, -1, -1, [0, 0, 6, 6]]], 6), [[2, 2, 0, 0, 4, 4]])
if N == 2:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 7, 7]]], 7), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 7, 7]]], 7), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 7, 7]]], 7), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[10, 2, 0, 0, 10, 2, 0, 0, [0, 0, 11, 7]]], 7), [[0, 0, 0, 0, 7, 2]])
    check('explicit case 4', solve([[7, 2, 0, 0, 7, 2, 0, 0, [0, 0, 3, 7]]], 7), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 5, 0, [0, 0, 7, 7]]], 7), [[0, 0, 5, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 7]]], 7), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 7, 7]]], 7), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 7, 7]]], 7), [[2, 0, 3, 0, 4, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 7, 7]]], 7), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 7, 7]]], 7), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[7, 7, 1, 1, 7, 7, -1, -1, [0, 0, 7, 7]]], 7), [[2, 2, 0, 0, 5, 5]])
if N == 3:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 8, 8]]], 8), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 8, 8]]], 8), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 8, 8]]], 8), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[11, 2, 0, 0, 11, 2, 0, 0, [0, 0, 12, 8]]], 8), [[0, 0, 0, 0, 8, 2]])
    check('explicit case 4', solve([[8, 2, 0, 0, 8, 2, 0, 0, [0, 0, 3, 8]]], 8), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 6, 0, [0, 0, 8, 8]]], 8), [[0, 0, 6, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 8]]], 8), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 8, 8]]], 8), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 8, 8]]], 8), [[2, 0, 3, 0, 4, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 8, 8]]], 8), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 8, 8]]], 8), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[8, 8, 1, 1, 8, 8, -1, -1, [0, 0, 8, 8]]], 8), [[2, 2, 0, 0, 6, 6]])
if N == 4:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 9, 9]]], 9), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 9, 9]]], 9), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 9, 9]]], 9), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[12, 2, 0, 0, 12, 2, 0, 0, [0, 0, 13, 9]]], 9), [[0, 0, 0, 0, 9, 2]])
    check('explicit case 4', solve([[9, 2, 0, 0, 9, 2, 0, 0, [0, 0, 3, 9]]], 9), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 7, 0, [0, 0, 9, 9]]], 9), [[0, 0, 7, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 9]]], 9), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 9, 9]]], 9), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 9, 9]]], 9), [[2, 0, 3, 0, 4, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 9, 9]]], 9), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 9, 9]]], 9), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[9, 9, 1, 1, 9, 9, -1, -1, [0, 0, 9, 9]]], 9), [[2, 2, 0, 0, 7, 7]])
if N == 5:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 10, 10]]], 10), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 10, 10]]], 10), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 10, 10]]], 10), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[13, 2, 0, 0, 13, 2, 0, 0, [0, 0, 14, 10]]], 10), [[0, 0, 0, 0, 10, 2]])
    check('explicit case 4', solve([[10, 2, 0, 0, 10, 2, 0, 0, [0, 0, 3, 10]]], 10), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 8, 0, [0, 0, 10, 10]]], 10), [[0, 0, 8, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 10]]], 10), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 10, 10]]], 10), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 10, 10]]], 10), [[2, 0, 3, 0, 4, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 10, 10]]], 10), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 10, 10]]], 10), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[10, 10, 1, 1, 10, 10, -1, -1, [0, 0, 10, 10]]], 10), [[2, 2, 0, 0, 8, 8]])
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 fixtureActualExpectedOutcome
explicit case 0[[0, 0, 1, 1, 4, 4]][[0, 0, 1, 1, 4, 4]]Passed
explicit case 1[[0, 0, 2, 0, 2, 2]][[0, 0, 2, 0, 2, 2]]Passed
explicit case 2[[2, 0, 0, 0, 3, 3]][[2, 0, 0, 0, 3, 3]]Passed
explicit case 3[[0, 0, 0, 0, 6, 2]][[0, 0, 0, 0, 6, 2]]Passed
explicit case 4[[0, 0, 0, 0, 3, 2]][[0, 0, 0, 0, 3, 2]]Passed
explicit case 5[[0, 0, 4, 0, 2, 4]][[0, 0, 4, 0, 2, 4]]Passed
explicit case 6[None][None]Passed
explicit case 7[None][None]Passed
explicit case 8[[2, 0, 3, 0, 3, 6]][[2, 0, 3, 0, 3, 6]]Passed
explicit case 9[[0, 0, 0, 0, 6, 2]][[0, 0, 0, 0, 6, 2]]Passed
explicit case 10[[0, 0, 0, 0, 2, 6]][[0, 0, 0, 0, 2, 6]]Passed
explicit case 11[[1, 2, -1, 0, 5, 4]][[2, 2, 0, 0, 4, 4]]Failed

SHA-256 / 1032f022972a9516330d01e24ad0a61a3b62d6d174edf52acf2f8e1f2355ee43

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(commands, size):
    out=[]
    for sw,sh,sx,sy,w,h,dx,dy,clip in commands:
        cl,ct,cr,cb=max(clip[0],0),max(clip[1],0),min(clip[2],size),min(clip[3],size)
        if sx<0:
            w+=sx; dx-=sx; sx=0
        if sy<0:
            h+=sy; dy-=sy; sy=0
        w=min(w,sw-sx)
        h=min(h,sh-sy)
        if dx<cl:
            w-=cl-dx; sx+=cl-dx; dx=cl
        if dy<ct:
            h-=ct-dy; sy+=ct-dy; dy=ct
        w=min(w,cr-dx)
        h=min(h,cb-dy)
        out.append([sx,sy,dx,dy,w,h] if w>0 and h>0 else None)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 6, 6]]], 6), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 6, 6]]], 6), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 6, 6]]], 6), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[9, 2, 0, 0, 9, 2, 0, 0, [0, 0, 10, 6]]], 6), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 4', solve([[6, 2, 0, 0, 6, 2, 0, 0, [0, 0, 3, 6]]], 6), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 4, 0, [0, 0, 6, 6]]], 6), [[0, 0, 4, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 6]]], 6), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 6, 6]]], 6), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 6, 6]]], 6), [[2, 0, 3, 0, 3, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 6, 6]]], 6), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 6, 6]]], 6), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[6, 6, 1, 1, 6, 6, -1, -1, [0, 0, 6, 6]]], 6), [[2, 2, 0, 0, 4, 4]])
if N == 2:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 7, 7]]], 7), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 7, 7]]], 7), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 7, 7]]], 7), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[10, 2, 0, 0, 10, 2, 0, 0, [0, 0, 11, 7]]], 7), [[0, 0, 0, 0, 7, 2]])
    check('explicit case 4', solve([[7, 2, 0, 0, 7, 2, 0, 0, [0, 0, 3, 7]]], 7), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 5, 0, [0, 0, 7, 7]]], 7), [[0, 0, 5, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 7]]], 7), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 7, 7]]], 7), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 7, 7]]], 7), [[2, 0, 3, 0, 4, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 7, 7]]], 7), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 7, 7]]], 7), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[7, 7, 1, 1, 7, 7, -1, -1, [0, 0, 7, 7]]], 7), [[2, 2, 0, 0, 5, 5]])
if N == 3:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 8, 8]]], 8), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 8, 8]]], 8), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 8, 8]]], 8), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[11, 2, 0, 0, 11, 2, 0, 0, [0, 0, 12, 8]]], 8), [[0, 0, 0, 0, 8, 2]])
    check('explicit case 4', solve([[8, 2, 0, 0, 8, 2, 0, 0, [0, 0, 3, 8]]], 8), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 6, 0, [0, 0, 8, 8]]], 8), [[0, 0, 6, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 8]]], 8), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 8, 8]]], 8), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 8, 8]]], 8), [[2, 0, 3, 0, 4, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 8, 8]]], 8), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 8, 8]]], 8), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[8, 8, 1, 1, 8, 8, -1, -1, [0, 0, 8, 8]]], 8), [[2, 2, 0, 0, 6, 6]])
if N == 4:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 9, 9]]], 9), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 9, 9]]], 9), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 9, 9]]], 9), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[12, 2, 0, 0, 12, 2, 0, 0, [0, 0, 13, 9]]], 9), [[0, 0, 0, 0, 9, 2]])
    check('explicit case 4', solve([[9, 2, 0, 0, 9, 2, 0, 0, [0, 0, 3, 9]]], 9), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 7, 0, [0, 0, 9, 9]]], 9), [[0, 0, 7, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 9]]], 9), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 9, 9]]], 9), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 9, 9]]], 9), [[2, 0, 3, 0, 4, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 9, 9]]], 9), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 9, 9]]], 9), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[9, 9, 1, 1, 9, 9, -1, -1, [0, 0, 9, 9]]], 9), [[2, 2, 0, 0, 7, 7]])
if N == 5:
    check('explicit case 0', solve([[4, 4, 0, 0, 4, 4, 1, 1, [0, 0, 10, 10]]], 10), [[0, 0, 1, 1, 4, 4]])
    check('explicit case 1', solve([[4, 4, -2, 0, 4, 2, 0, 0, [0, 0, 10, 10]]], 10), [[0, 0, 2, 0, 2, 2]])
    check('explicit case 2', solve([[5, 3, 2, 0, 5, 3, 0, 0, [0, 0, 10, 10]]], 10), [[2, 0, 0, 0, 3, 3]])
    check('explicit case 3', solve([[13, 2, 0, 0, 13, 2, 0, 0, [0, 0, 14, 10]]], 10), [[0, 0, 0, 0, 10, 2]])
    check('explicit case 4', solve([[10, 2, 0, 0, 10, 2, 0, 0, [0, 0, 3, 10]]], 10), [[0, 0, 0, 0, 3, 2]])
    check('explicit case 5', solve([[4, 4, 0, 0, 4, 4, 8, 0, [0, 0, 10, 10]]], 10), [[0, 0, 8, 0, 2, 4]])
    check('explicit case 6', solve([[4, 4, 0, 0, 4, 4, 0, 0, [0, 0, 0, 10]]], 10), [None])
    check('explicit case 7', solve([[4, 4, 0, 0, 4, 0, 0, 0, [0, 0, 10, 10]]], 10), [None])
    check('explicit case 8', solve([[6, 6, 0, 0, 6, 6, 1, 0, [3, 0, 10, 10]]], 10), [[2, 0, 3, 0, 4, 6]])
    check('explicit case 9', solve([[6, 2, 0, 0, 6, 6, 0, 0, [0, 0, 10, 10]]], 10), [[0, 0, 0, 0, 6, 2]])
    check('explicit case 10', solve([[2, 6, 0, 0, 6, 6, 0, 0, [0, 0, 10, 10]]], 10), [[0, 0, 0, 0, 2, 6]])
    check('explicit case 11', solve([[10, 10, 1, 1, 10, 10, -1, -1, [0, 0, 10, 10]]], 10), [[2, 2, 0, 0, 8, 8]])
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 fixtureActualExpectedOutcome
explicit case 0[[0, 0, 1, 1, 4, 4]][[0, 0, 1, 1, 4, 4]]Passed
explicit case 1[[0, 0, 2, 0, 2, 2]][[0, 0, 2, 0, 2, 2]]Passed
explicit case 2[[2, 0, 0, 0, 3, 3]][[2, 0, 0, 0, 3, 3]]Passed
explicit case 3[[0, 0, 0, 0, 6, 2]][[0, 0, 0, 0, 6, 2]]Passed
explicit case 4[[0, 0, 0, 0, 3, 2]][[0, 0, 0, 0, 3, 2]]Passed
explicit case 5[[0, 0, 4, 0, 2, 4]][[0, 0, 4, 0, 2, 4]]Passed
explicit case 6[None][None]Passed
explicit case 7[None][None]Passed
explicit case 8[[2, 0, 3, 0, 3, 6]][[2, 0, 3, 0, 3, 6]]Passed
explicit case 9[[0, 0, 0, 0, 6, 2]][[0, 0, 0, 0, 6, 2]]Passed
explicit case 10[[0, 0, 0, 0, 2, 6]][[0, 0, 0, 0, 2, 6]]Passed
explicit case 11[[2, 2, 0, 0, 4, 4]][[2, 2, 0, 0, 4, 4]]Passed

SHA-256 / b3d4aa04d3bb498f415dc4837ccbfd804d6e5de09034cbca24858bfa447dac6d

Verification & scope

Exact integer/rational arithmetic on small stipulated fixtures models the clipping decision only; no memory layout, GPU pipeline, graphics API or standards conformance 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:45:21.200577+00:00.

Case digest / 70aef9b346bcd03fb205c1931c9071fc287b8e8f109ca1c601d202c624506762