FA-51386 / Raster clipping / Open access
Pick buffer clip coverage: depth tie · case 01
Equal-depth fragments replace the earlier pick ID despite strict-nearer policy.
ROOT CAUSE
Equal-depth fragments replace the earlier pick ID despite strict-nearer policy.
VERIFIED REPAIR
Apply the documented state transition at depth tie. Each draw has an object ID, coverage samples, clip samples, integer depth, depth-test flag and ID-write flag. ID zero is a valid object. Pick samples start empty with infinite depth. With depth test enabled, strictly nearer fragments replace stored IDs and depth; equal depth keeps the earlier fragment. Disabled depth testing writes without changing depth. ID-write-disabled draws still update depth when tested. Queries return IDs or null for out-of-target samples.
Unsuccessful approach: Special-casing only empty object IDs does not preserve ties between real objects.
Case contract
Each draw has an object ID, coverage samples, clip samples, integer depth, depth-test flag and ID-write flag. ID zero is a valid object. Pick samples start empty with infinite depth. With depth test enabled, strictly nearer fragments replace stored IDs and depth; equal depth keeps the earlier fragment. Disabled depth testing writes without changing depth. ID-write-disabled draws still update depth when tested. Queries return IDs or null for out-of-target samples.
Why this case matters
Raster clip state can leak coverage across draws even when every individual region is valid.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(commands, size):
full=set(range(size))
ids=[None]*size
depths=[float('inf')]*size
out=[]
for cmd in commands:
if cmd[0]=='clear':
for x in set(cmd[1])&full: ids[x]=None; depths[x]=float('inf')
elif cmd[0]=='draw':
_,key,coverage,clip,depth,test,write=cmd
for x in set(coverage)&set(clip)&full:
if test and depth>depths[x]: continue
if test: depths[x]=depth
if write: ids[x]=key
else:
out.append([ids[x] if x in full else None for x in cmd[1]])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 4), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 4), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 4), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 4), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 4), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 4), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 4), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 4), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 4), [[None, 'a', None, None]])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 4), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 4), [[None]])
if N == 2:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 5), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 5), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 5), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 5), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 5), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 5), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 5), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 5), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 5), [[None, 'a', None, None]])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 5), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 5), [[None]])
if N == 3:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 6), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 6), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 6), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 6), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 6), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 6), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 6), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 6), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 6), [[None, 'a', None, None]])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 6), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 6), [[None]])
if N == 4:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 7), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 7), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 7), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 7), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 7), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 7), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 7), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 7), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 7), [[None, 'a', None, None]])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 7), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 7), [[None]])
if N == 5:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 8), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 8), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 8), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 8), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 8), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 8), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 8), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 8), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 8), [[None, 'a', None, 'a']])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 8), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 8), [[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 sequence 0 | [['a', None]] | [['a', None]] | Passed |
| explicit sequence 1 | [['b']] | [['a']] | Failed |
| explicit sequence 2 | [['b']] | [['b']] | Passed |
| explicit sequence 3 | [[None]] | [[None]] | Passed |
| explicit sequence 4 | [[0]] | [[0]] | Passed |
| explicit sequence 5 | [[None]] | [[None]] | Passed |
| explicit sequence 6 | [['b']] | [['b']] | Passed |
| explicit sequence 7 | [[None, 'a'], ['a']] | [[None, 'a'], ['a']] | Passed |
| explicit sequence 8 | [[None, 'a', None, None]] | [[None, 'a', None, None]] | Passed |
| explicit sequence 9 | [['b', 'a', 'b']] | [['b', 'a', 'b']] | Passed |
| explicit sequence 10 | [[None]] | [[None]] | Passed |
SHA-256 / 781c05cd42b970344ce94f1a0e9fb8c321f013941b392463fb71636c90257935
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(commands, size):
full=set(range(size))
ids=[None]*size
depths=[float('inf')]*size
out=[]
for cmd in commands:
if cmd[0]=='clear':
for x in set(cmd[1])&full: ids[x]=None; depths[x]=float('inf')
elif cmd[0]=='draw':
_,key,coverage,clip,depth,test,write=cmd
for x in set(coverage)&set(clip)&full:
if test and depth>depths[x] or (depth==depths[x] and key is None): continue
if test: depths[x]=depth
if write: ids[x]=key
else:
out.append([ids[x] if x in full else None for x in cmd[1]])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 4), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 4), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 4), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 4), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 4), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 4), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 4), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 4), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 4), [[None, 'a', None, None]])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 4), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 4), [[None]])
if N == 2:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 5), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 5), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 5), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 5), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 5), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 5), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 5), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 5), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 5), [[None, 'a', None, None]])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 5), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 5), [[None]])
if N == 3:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 6), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 6), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 6), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 6), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 6), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 6), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 6), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 6), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 6), [[None, 'a', None, None]])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 6), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 6), [[None]])
if N == 4:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 7), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 7), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 7), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 7), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 7), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 7), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 7), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 7), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 7), [[None, 'a', None, None]])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 7), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 7), [[None]])
if N == 5:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 8), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 8), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 8), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 8), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 8), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 8), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 8), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 8), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 8), [[None, 'a', None, 'a']])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 8), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 8), [[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 sequence 0 | [['a', None]] | [['a', None]] | Passed |
| explicit sequence 1 | [['b']] | [['a']] | Failed |
| explicit sequence 2 | [['b']] | [['b']] | Passed |
| explicit sequence 3 | [[None]] | [[None]] | Passed |
| explicit sequence 4 | [[0]] | [[0]] | Passed |
| explicit sequence 5 | [[None]] | [[None]] | Passed |
| explicit sequence 6 | [['b']] | [['b']] | Passed |
| explicit sequence 7 | [[None, 'a'], ['a']] | [[None, 'a'], ['a']] | Passed |
| explicit sequence 8 | [[None, 'a', None, None]] | [[None, 'a', None, None]] | Passed |
| explicit sequence 9 | [['b', 'a', 'b']] | [['b', 'a', 'b']] | Passed |
| explicit sequence 10 | [[None]] | [[None]] | Passed |
SHA-256 / 3794c8a7aac785ee08ff0ce09c385ffee1484573ebac54bbce07058c7f6baeec
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(commands, size):
full=set(range(size))
ids=[None]*size
depths=[float('inf')]*size
out=[]
for cmd in commands:
if cmd[0]=='clear':
for x in set(cmd[1])&full: ids[x]=None; depths[x]=float('inf')
elif cmd[0]=='draw':
_,key,coverage,clip,depth,test,write=cmd
for x in set(coverage)&set(clip)&full:
if test and depth>=depths[x]: continue
if test: depths[x]=depth
if write: ids[x]=key
else:
out.append([ids[x] if x in full else None for x in cmd[1]])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 4), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 4), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 4), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 4), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 4), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 4), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 4), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 4), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 4), [[None, 'a', None, None]])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 4), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 4), [[None]])
if N == 2:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 5), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 5), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 5), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 5), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 5), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 5), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 5), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 5), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 5), [[None, 'a', None, None]])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 5), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 5), [[None]])
if N == 3:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 6), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 6), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 6), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 6), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 6), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 6), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 6), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 6), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 6), [[None, 'a', None, None]])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 6), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 6), [[None]])
if N == 4:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 7), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 7), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 7), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 7), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 7), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 7), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 7), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 7), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 7), [[None, 'a', None, None]])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 7), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 7), [[None]])
if N == 5:
check('explicit sequence 0', solve([['draw', 'a', [0, 1], [0], 3, True, True], ['read', [0, 1]]], 8), [['a', None]])
check('explicit sequence 1', solve([['draw', 'a', [0], [0], 3, True, True], ['draw', 'b', [0], [0], 3, True, True], ['read', [0]]], 8), [['a']])
check('explicit sequence 2', solve([['draw', 'a', [0], [0], 1, False, True], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 8), [['b']])
check('explicit sequence 3', solve([['draw', 'a', [0], [0], 1, True, False], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 8), [[None]])
check('explicit sequence 4', solve([['draw', 0, [0], [0], 1, True, True], ['read', [0]]], 8), [[0]])
check('explicit sequence 5', solve([['draw', 'a', [0], [0], 1, False, False], ['read', [0]]], 8), [[None]])
check('explicit sequence 6', solve([['draw', 'a', [0], [0], 1, True, True], ['clear', [0]], ['draw', 'b', [0], [0], 2, True, True], ['read', [0]]], 8), [['b']])
check('explicit sequence 7', solve([['draw', 'a', [0, 1], [0, 1], 1, True, True], ['clear', [0]], ['read', [0, 1]], ['clear', []], ['read', [1]]], 8), [[None, 'a'], ['a']])
check('explicit sequence 8', solve([['draw', 'a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 1, True, True], ['read', [-1, 0, 99, 7]]], 8), [[None, 'a', None, 'a']])
check('explicit sequence 9', solve([['draw', 'a', [0], [0], 1, True, True], ['draw', 'b', [1], [1], 1, True, True], ['read', [1, 0, 1]]], 8), [['b', 'a', 'b']])
check('explicit sequence 10', solve([['draw', 'a', [0], [], 1, True, True], ['read', [0]]], 8), [[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 sequence 0 | [['a', None]] | [['a', None]] | Passed |
| explicit sequence 1 | [['a']] | [['a']] | Passed |
| explicit sequence 2 | [['b']] | [['b']] | Passed |
| explicit sequence 3 | [[None]] | [[None]] | Passed |
| explicit sequence 4 | [[0]] | [[0]] | Passed |
| explicit sequence 5 | [[None]] | [[None]] | Passed |
| explicit sequence 6 | [['b']] | [['b']] | Passed |
| explicit sequence 7 | [[None, 'a'], ['a']] | [[None, 'a'], ['a']] | Passed |
| explicit sequence 8 | [[None, 'a', None, None]] | [[None, 'a', None, None]] | Passed |
| explicit sequence 9 | [['b', 'a', 'b']] | [['b', 'a', 'b']] | Passed |
| explicit sequence 10 | [[None]] | [[None]] | Passed |
SHA-256 / ddce81e28eafea2cc8699a4c0f550469a57ecdfdb88604693f39680b5f241206
Verification & scope
Finite one-dimensional integer sample sets model coverage state only; no geometric intersection, memory layout, GPU or graphics-standard 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:18.420329+00:00.
Case digest / ec86f42a9a669862d882f0369ea6165ec7c9b8fd0561b169bde39f02e1b05646