FA-51771 / Raster clipping / Open access
Guard band triangle clip: guard band y ignored · case 01
Guard-band classification checks only x, so triangles far beyond the guard band vertically skip geometric clipping.
ROOT CAUSE
Guard-band classification checks only x, so triangles far beyond the guard band vertically skip geometric clipping.
VERIFIED REPAIR
Restore the specified clipping decision at guard band y ignored. Each command is a triangle of three exact vertices in continuous raster coordinates. The viewport is [0,size]x[0,size] and the guard band extends one viewport size beyond each side. A triangle is rejected when all vertices lie strictly beyond the same viewport edge; accepted when all vertices are inside the closed viewport; guard-banded when all vertices are inside the closed guard band; otherwise it requires geometric clipping. Accepted and guard-banded triangles report the pixel bounding box [floor(min x),floor(min y),ceil(max x),ceil(max y)) clamped to the viewport, or None if empty.
Unsuccessful approach: Checking only the lower guard limit still misses triangles far above the viewport.
Case contract
Each command is a triangle of three exact vertices in continuous raster coordinates. The viewport is [0,size]x[0,size] and the guard band extends one viewport size beyond each side. A triangle is rejected when all vertices lie strictly beyond the same viewport edge; accepted when all vertices are inside the closed viewport; guard-banded when all vertices are inside the closed guard band; otherwise it requires geometric clipping. Accepted and guard-banded triangles report the pixel bounding box [floor(min x),floor(min y),ceil(max x),ceil(max y)) clamped to the viewport, or None if 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
import math
from fractions import Fraction
N = 1
observations = []
def solve(commands, size):
out=[]
g=size
for tri in commands:
xs=[Fraction(v[0]) for v in tri]
ys=[Fraction(v[1]) for v in tri]
if max(xs)<0 or min(xs)>size or max(ys)<0 or min(ys)>size:
out.append(['reject',None])
continue
if min(xs)>=0 and max(xs)<=size and min(ys)>=0 and max(ys)<=size: kind='accept'
elif min(xs)>=-g and max(xs)<=size+g: kind='guard'
else:
out.append(['clip',None])
continue
x0=max(math.floor(min(xs)),0)
x1=min(math.ceil(max(xs)),size)
y0=max(math.floor(min(ys)),0)
y1=min(math.ceil(max(ys)),size)
out.append([kind,[x0,y0,x1,y1] if x0<x1 and y0<y1 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([[[1, 1], [5, 1], [2, 5]]], 6), [['accept', [1, 1, 5, 5]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 6]]], 6), [['reject', None]])
check('explicit case 2', solve([[[-12, -12], [24, -12], [3, 24]]], 6), [['clip', None]])
check('explicit case 3', solve([[[6, 0], [8, 1], [7, 3]]], 6), [['guard', None]])
check('explicit case 4', solve([[['13/2', 0], [9, 1], [7, 3]]], 6), [['reject', None]])
check('explicit case 5', solve([[[1, -18], [2, 3], [3, 3]]], 6), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 6), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-5, 1], [2, 2], [1, 3]]], 6), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [8, 1], [2, 3]]], 6), [['guard', [1, 1, 6, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 7], [5, 2]]], 6), [['guard', [0, 1, 5, 6]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 13]]], 6), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 30]]], 6), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 6), [['reject', None]])
if N == 2:
check('explicit case 0', solve([[[1, 1], [6, 1], [2, 6]]], 7), [['accept', [1, 1, 6, 6]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 7]]], 7), [['reject', None]])
check('explicit case 2', solve([[[-14, -14], [28, -14], [3, 28]]], 7), [['clip', None]])
check('explicit case 3', solve([[[7, 0], [9, 1], [8, 3]]], 7), [['guard', None]])
check('explicit case 4', solve([[['15/2', 0], [10, 1], [8, 3]]], 7), [['reject', None]])
check('explicit case 5', solve([[[1, -21], [2, 3], [3, 3]]], 7), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 7), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-6, 1], [2, 2], [1, 3]]], 7), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [9, 1], [2, 3]]], 7), [['guard', [1, 1, 7, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 8], [6, 2]]], 7), [['guard', [0, 1, 6, 7]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 15]]], 7), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 35]]], 7), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 7), [['reject', None]])
if N == 3:
check('explicit case 0', solve([[[1, 1], [7, 1], [2, 7]]], 8), [['accept', [1, 1, 7, 7]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 8]]], 8), [['reject', None]])
check('explicit case 2', solve([[[-16, -16], [32, -16], [4, 32]]], 8), [['clip', None]])
check('explicit case 3', solve([[[8, 0], [10, 1], [9, 3]]], 8), [['guard', None]])
check('explicit case 4', solve([[['17/2', 0], [11, 1], [9, 3]]], 8), [['reject', None]])
check('explicit case 5', solve([[[1, -24], [2, 3], [3, 3]]], 8), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 8), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-7, 1], [2, 2], [1, 3]]], 8), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [10, 1], [2, 3]]], 8), [['guard', [1, 1, 8, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 9], [7, 2]]], 8), [['guard', [0, 1, 7, 8]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 17]]], 8), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 40]]], 8), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 8), [['reject', None]])
if N == 4:
check('explicit case 0', solve([[[1, 1], [8, 1], [2, 8]]], 9), [['accept', [1, 1, 8, 8]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 9]]], 9), [['reject', None]])
check('explicit case 2', solve([[[-18, -18], [36, -18], [4, 36]]], 9), [['clip', None]])
check('explicit case 3', solve([[[9, 0], [11, 1], [10, 3]]], 9), [['guard', None]])
check('explicit case 4', solve([[['19/2', 0], [12, 1], [10, 3]]], 9), [['reject', None]])
check('explicit case 5', solve([[[1, -27], [2, 3], [3, 3]]], 9), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 9), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-8, 1], [2, 2], [1, 3]]], 9), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [11, 1], [2, 3]]], 9), [['guard', [1, 1, 9, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 10], [8, 2]]], 9), [['guard', [0, 1, 8, 9]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 19]]], 9), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 45]]], 9), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 9), [['reject', None]])
if N == 5:
check('explicit case 0', solve([[[1, 1], [9, 1], [2, 9]]], 10), [['accept', [1, 1, 9, 9]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 10]]], 10), [['reject', None]])
check('explicit case 2', solve([[[-20, -20], [40, -20], [5, 40]]], 10), [['clip', None]])
check('explicit case 3', solve([[[10, 0], [12, 1], [11, 3]]], 10), [['guard', None]])
check('explicit case 4', solve([[['21/2', 0], [13, 1], [11, 3]]], 10), [['reject', None]])
check('explicit case 5', solve([[[1, -30], [2, 3], [3, 3]]], 10), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 10), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-9, 1], [2, 2], [1, 3]]], 10), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [12, 1], [2, 3]]], 10), [['guard', [1, 1, 10, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 11], [9, 2]]], 10), [['guard', [0, 1, 9, 10]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 21]]], 10), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 50]]], 10), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 10), [['reject', None]])
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 |
|---|---|---|---|
| explicit case 0 | [['accept', [1, 1, 5, 5]]] | [['accept', [1, 1, 5, 5]]] | Passed |
| explicit case 1 | [['reject', None]] | [['reject', None]] | Passed |
| explicit case 2 | [['clip', None]] | [['clip', None]] | Passed |
| explicit case 3 | [['guard', None]] | [['guard', None]] | Passed |
| explicit case 4 | [['reject', None]] | [['reject', None]] | Passed |
| explicit case 5 | [['guard', [1, 0, 3, 3]]] | [['clip', None]] | Failed |
| explicit case 6 | [['accept', [1, 1, 3, 3]]] | [['accept', [1, 1, 3, 3]]] | Passed |
| explicit case 7 | [['guard', [0, 1, 2, 3]]] | [['guard', [0, 1, 2, 3]]] | Passed |
| explicit case 8 | [['guard', [1, 1, 6, 3]]] | [['guard', [1, 1, 6, 3]]] | Passed |
| explicit case 9 | [['guard', [0, 1, 5, 6]]] | [['guard', [0, 1, 5, 6]]] | Passed |
| explicit case 10 | [['guard', [1, 1, 3, 6]]] | [['clip', None]] | Failed |
| explicit case 11 | [['guard', [1, 1, 2, 6]]] | [['clip', None]] | Failed |
| explicit case 12 | [['reject', None]] | [['reject', None]] | Passed |
SHA-256 / 1c9d06e79ca2c66403e16ee6765df7ce24eab636036060c93214e25209087ae1
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(commands, size):
out=[]
g=size
for tri in commands:
xs=[Fraction(v[0]) for v in tri]
ys=[Fraction(v[1]) for v in tri]
if max(xs)<0 or min(xs)>size or max(ys)<0 or min(ys)>size:
out.append(['reject',None])
continue
if min(xs)>=0 and max(xs)<=size and min(ys)>=0 and max(ys)<=size: kind='accept'
elif min(xs)>=-g and max(xs)<=size+g and max(ys)<=size+g: kind='guard'
else:
out.append(['clip',None])
continue
x0=max(math.floor(min(xs)),0)
x1=min(math.ceil(max(xs)),size)
y0=max(math.floor(min(ys)),0)
y1=min(math.ceil(max(ys)),size)
out.append([kind,[x0,y0,x1,y1] if x0<x1 and y0<y1 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([[[1, 1], [5, 1], [2, 5]]], 6), [['accept', [1, 1, 5, 5]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 6]]], 6), [['reject', None]])
check('explicit case 2', solve([[[-12, -12], [24, -12], [3, 24]]], 6), [['clip', None]])
check('explicit case 3', solve([[[6, 0], [8, 1], [7, 3]]], 6), [['guard', None]])
check('explicit case 4', solve([[['13/2', 0], [9, 1], [7, 3]]], 6), [['reject', None]])
check('explicit case 5', solve([[[1, -18], [2, 3], [3, 3]]], 6), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 6), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-5, 1], [2, 2], [1, 3]]], 6), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [8, 1], [2, 3]]], 6), [['guard', [1, 1, 6, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 7], [5, 2]]], 6), [['guard', [0, 1, 5, 6]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 13]]], 6), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 30]]], 6), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 6), [['reject', None]])
if N == 2:
check('explicit case 0', solve([[[1, 1], [6, 1], [2, 6]]], 7), [['accept', [1, 1, 6, 6]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 7]]], 7), [['reject', None]])
check('explicit case 2', solve([[[-14, -14], [28, -14], [3, 28]]], 7), [['clip', None]])
check('explicit case 3', solve([[[7, 0], [9, 1], [8, 3]]], 7), [['guard', None]])
check('explicit case 4', solve([[['15/2', 0], [10, 1], [8, 3]]], 7), [['reject', None]])
check('explicit case 5', solve([[[1, -21], [2, 3], [3, 3]]], 7), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 7), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-6, 1], [2, 2], [1, 3]]], 7), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [9, 1], [2, 3]]], 7), [['guard', [1, 1, 7, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 8], [6, 2]]], 7), [['guard', [0, 1, 6, 7]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 15]]], 7), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 35]]], 7), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 7), [['reject', None]])
if N == 3:
check('explicit case 0', solve([[[1, 1], [7, 1], [2, 7]]], 8), [['accept', [1, 1, 7, 7]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 8]]], 8), [['reject', None]])
check('explicit case 2', solve([[[-16, -16], [32, -16], [4, 32]]], 8), [['clip', None]])
check('explicit case 3', solve([[[8, 0], [10, 1], [9, 3]]], 8), [['guard', None]])
check('explicit case 4', solve([[['17/2', 0], [11, 1], [9, 3]]], 8), [['reject', None]])
check('explicit case 5', solve([[[1, -24], [2, 3], [3, 3]]], 8), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 8), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-7, 1], [2, 2], [1, 3]]], 8), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [10, 1], [2, 3]]], 8), [['guard', [1, 1, 8, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 9], [7, 2]]], 8), [['guard', [0, 1, 7, 8]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 17]]], 8), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 40]]], 8), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 8), [['reject', None]])
if N == 4:
check('explicit case 0', solve([[[1, 1], [8, 1], [2, 8]]], 9), [['accept', [1, 1, 8, 8]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 9]]], 9), [['reject', None]])
check('explicit case 2', solve([[[-18, -18], [36, -18], [4, 36]]], 9), [['clip', None]])
check('explicit case 3', solve([[[9, 0], [11, 1], [10, 3]]], 9), [['guard', None]])
check('explicit case 4', solve([[['19/2', 0], [12, 1], [10, 3]]], 9), [['reject', None]])
check('explicit case 5', solve([[[1, -27], [2, 3], [3, 3]]], 9), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 9), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-8, 1], [2, 2], [1, 3]]], 9), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [11, 1], [2, 3]]], 9), [['guard', [1, 1, 9, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 10], [8, 2]]], 9), [['guard', [0, 1, 8, 9]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 19]]], 9), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 45]]], 9), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 9), [['reject', None]])
if N == 5:
check('explicit case 0', solve([[[1, 1], [9, 1], [2, 9]]], 10), [['accept', [1, 1, 9, 9]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 10]]], 10), [['reject', None]])
check('explicit case 2', solve([[[-20, -20], [40, -20], [5, 40]]], 10), [['clip', None]])
check('explicit case 3', solve([[[10, 0], [12, 1], [11, 3]]], 10), [['guard', None]])
check('explicit case 4', solve([[['21/2', 0], [13, 1], [11, 3]]], 10), [['reject', None]])
check('explicit case 5', solve([[[1, -30], [2, 3], [3, 3]]], 10), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 10), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-9, 1], [2, 2], [1, 3]]], 10), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [12, 1], [2, 3]]], 10), [['guard', [1, 1, 10, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 11], [9, 2]]], 10), [['guard', [0, 1, 9, 10]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 21]]], 10), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 50]]], 10), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 10), [['reject', None]])
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 |
|---|---|---|---|
| explicit case 0 | [['accept', [1, 1, 5, 5]]] | [['accept', [1, 1, 5, 5]]] | Passed |
| explicit case 1 | [['reject', None]] | [['reject', None]] | Passed |
| explicit case 2 | [['clip', None]] | [['clip', None]] | Passed |
| explicit case 3 | [['guard', None]] | [['guard', None]] | Passed |
| explicit case 4 | [['reject', None]] | [['reject', None]] | Passed |
| explicit case 5 | [['guard', [1, 0, 3, 3]]] | [['clip', None]] | Failed |
| explicit case 6 | [['accept', [1, 1, 3, 3]]] | [['accept', [1, 1, 3, 3]]] | Passed |
| explicit case 7 | [['guard', [0, 1, 2, 3]]] | [['guard', [0, 1, 2, 3]]] | Passed |
| explicit case 8 | [['guard', [1, 1, 6, 3]]] | [['guard', [1, 1, 6, 3]]] | Passed |
| explicit case 9 | [['guard', [0, 1, 5, 6]]] | [['guard', [0, 1, 5, 6]]] | Passed |
| explicit case 10 | [['clip', None]] | [['clip', None]] | Passed |
| explicit case 11 | [['clip', None]] | [['clip', None]] | Passed |
| explicit case 12 | [['reject', None]] | [['reject', None]] | Passed |
SHA-256 / 378ccef62ef227053e4f68c10b247e7baf24d3f5220122884f9de43d17a35e78
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(commands, size):
out=[]
g=size
for tri in commands:
xs=[Fraction(v[0]) for v in tri]
ys=[Fraction(v[1]) for v in tri]
if max(xs)<0 or min(xs)>size or max(ys)<0 or min(ys)>size:
out.append(['reject',None])
continue
if min(xs)>=0 and max(xs)<=size and min(ys)>=0 and max(ys)<=size: kind='accept'
elif min(xs)>=-g and max(xs)<=size+g and min(ys)>=-g and max(ys)<=size+g: kind='guard'
else:
out.append(['clip',None])
continue
x0=max(math.floor(min(xs)),0)
x1=min(math.ceil(max(xs)),size)
y0=max(math.floor(min(ys)),0)
y1=min(math.ceil(max(ys)),size)
out.append([kind,[x0,y0,x1,y1] if x0<x1 and y0<y1 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([[[1, 1], [5, 1], [2, 5]]], 6), [['accept', [1, 1, 5, 5]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 6]]], 6), [['reject', None]])
check('explicit case 2', solve([[[-12, -12], [24, -12], [3, 24]]], 6), [['clip', None]])
check('explicit case 3', solve([[[6, 0], [8, 1], [7, 3]]], 6), [['guard', None]])
check('explicit case 4', solve([[['13/2', 0], [9, 1], [7, 3]]], 6), [['reject', None]])
check('explicit case 5', solve([[[1, -18], [2, 3], [3, 3]]], 6), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 6), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-5, 1], [2, 2], [1, 3]]], 6), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [8, 1], [2, 3]]], 6), [['guard', [1, 1, 6, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 7], [5, 2]]], 6), [['guard', [0, 1, 5, 6]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 13]]], 6), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 30]]], 6), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 6), [['reject', None]])
if N == 2:
check('explicit case 0', solve([[[1, 1], [6, 1], [2, 6]]], 7), [['accept', [1, 1, 6, 6]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 7]]], 7), [['reject', None]])
check('explicit case 2', solve([[[-14, -14], [28, -14], [3, 28]]], 7), [['clip', None]])
check('explicit case 3', solve([[[7, 0], [9, 1], [8, 3]]], 7), [['guard', None]])
check('explicit case 4', solve([[['15/2', 0], [10, 1], [8, 3]]], 7), [['reject', None]])
check('explicit case 5', solve([[[1, -21], [2, 3], [3, 3]]], 7), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 7), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-6, 1], [2, 2], [1, 3]]], 7), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [9, 1], [2, 3]]], 7), [['guard', [1, 1, 7, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 8], [6, 2]]], 7), [['guard', [0, 1, 6, 7]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 15]]], 7), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 35]]], 7), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 7), [['reject', None]])
if N == 3:
check('explicit case 0', solve([[[1, 1], [7, 1], [2, 7]]], 8), [['accept', [1, 1, 7, 7]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 8]]], 8), [['reject', None]])
check('explicit case 2', solve([[[-16, -16], [32, -16], [4, 32]]], 8), [['clip', None]])
check('explicit case 3', solve([[[8, 0], [10, 1], [9, 3]]], 8), [['guard', None]])
check('explicit case 4', solve([[['17/2', 0], [11, 1], [9, 3]]], 8), [['reject', None]])
check('explicit case 5', solve([[[1, -24], [2, 3], [3, 3]]], 8), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 8), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-7, 1], [2, 2], [1, 3]]], 8), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [10, 1], [2, 3]]], 8), [['guard', [1, 1, 8, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 9], [7, 2]]], 8), [['guard', [0, 1, 7, 8]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 17]]], 8), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 40]]], 8), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 8), [['reject', None]])
if N == 4:
check('explicit case 0', solve([[[1, 1], [8, 1], [2, 8]]], 9), [['accept', [1, 1, 8, 8]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 9]]], 9), [['reject', None]])
check('explicit case 2', solve([[[-18, -18], [36, -18], [4, 36]]], 9), [['clip', None]])
check('explicit case 3', solve([[[9, 0], [11, 1], [10, 3]]], 9), [['guard', None]])
check('explicit case 4', solve([[['19/2', 0], [12, 1], [10, 3]]], 9), [['reject', None]])
check('explicit case 5', solve([[[1, -27], [2, 3], [3, 3]]], 9), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 9), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-8, 1], [2, 2], [1, 3]]], 9), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [11, 1], [2, 3]]], 9), [['guard', [1, 1, 9, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 10], [8, 2]]], 9), [['guard', [0, 1, 8, 9]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 19]]], 9), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 45]]], 9), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 9), [['reject', None]])
if N == 5:
check('explicit case 0', solve([[[1, 1], [9, 1], [2, 9]]], 10), [['accept', [1, 1, 9, 9]]])
check('explicit case 1', solve([[[-1, -1], [-3, 2], [-2, 10]]], 10), [['reject', None]])
check('explicit case 2', solve([[[-20, -20], [40, -20], [5, 40]]], 10), [['clip', None]])
check('explicit case 3', solve([[[10, 0], [12, 1], [11, 3]]], 10), [['guard', None]])
check('explicit case 4', solve([[['21/2', 0], [13, 1], [11, 3]]], 10), [['reject', None]])
check('explicit case 5', solve([[[1, -30], [2, 3], [3, 3]]], 10), [['clip', None]])
check('explicit case 6', solve([[[1, 1], ['5/2', 1], [2, 3]]], 10), [['accept', [1, 1, 3, 3]]])
check('explicit case 7', solve([[[-9, 1], [2, 2], [1, 3]]], 10), [['guard', [0, 1, 2, 3]]])
check('explicit case 8', solve([[[1, 1], [12, 1], [2, 3]]], 10), [['guard', [1, 1, 10, 3]]])
check('explicit case 9', solve([[[-1, 1], [1, 11], [9, 2]]], 10), [['guard', [0, 1, 9, 10]]])
check('explicit case 10', solve([[[1, 1], [3, 1], [2, 21]]], 10), [['clip', None]])
check('explicit case 11', solve([[[1, 1], [2, 1], [2, 50]]], 10), [['clip', None]])
check('explicit case 12', solve([[[1, -3], [3, -2], [2, -5]]], 10), [['reject', None]])
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 |
|---|---|---|---|
| explicit case 0 | [['accept', [1, 1, 5, 5]]] | [['accept', [1, 1, 5, 5]]] | Passed |
| explicit case 1 | [['reject', None]] | [['reject', None]] | Passed |
| explicit case 2 | [['clip', None]] | [['clip', None]] | Passed |
| explicit case 3 | [['guard', None]] | [['guard', None]] | Passed |
| explicit case 4 | [['reject', None]] | [['reject', None]] | Passed |
| explicit case 5 | [['clip', None]] | [['clip', None]] | Passed |
| explicit case 6 | [['accept', [1, 1, 3, 3]]] | [['accept', [1, 1, 3, 3]]] | Passed |
| explicit case 7 | [['guard', [0, 1, 2, 3]]] | [['guard', [0, 1, 2, 3]]] | Passed |
| explicit case 8 | [['guard', [1, 1, 6, 3]]] | [['guard', [1, 1, 6, 3]]] | Passed |
| explicit case 9 | [['guard', [0, 1, 5, 6]]] | [['guard', [0, 1, 5, 6]]] | Passed |
| explicit case 10 | [['clip', None]] | [['clip', None]] | Passed |
| explicit case 11 | [['clip', None]] | [['clip', None]] | Passed |
| explicit case 12 | [['reject', None]] | [['reject', None]] | Passed |
SHA-256 / e4fbf57f5557b498f263aa7e9765509d855973830e43bbfbf65115d910ddd620
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:22.301716+00:00.
Case digest / d793598051bb63effe74330bc04f6075c2752997d0dc76901ec810b14fd153b3