{"abstract":"Repeated morphology restarts from the original clip each iteration.","category":"Raster clipping","checks":12,"contract":"A binary sample mask supports dilation/erosion by an explicit signed structuring element. Out-of-target samples are uncovered; empty structuring elements yield empty output. Open erodes then dilates; close dilates then erodes. Gradient is dilated minus eroded; boundary is original minus eroded; exterior boundary is dilated minus original. Iterations use complete prior masks.","evaluation_group":"s3-raster-clipping-clip-mask-morphology","failed_approach":"Allowing only the first step to use the current result still restarts all later iterations.","family":"s3-raster-clipping-clip-mask-morphology-iteration-original","id":"FA-50921","implementations":{"attempt":{"sha256":"a34556cd469e91dbe3b29f0c5d4260a98f4e5555916b344dc9735157477d79dc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(commands, size):\n    full=set(range(size))\n    out=[]\n    for cmd in commands:\n        source,kernel,mode,iterations=cmd\n        source=set(source)&full\n        kernel=set(kernel)\n        def dilate(s): return {x for x in full if any(x-k in s for k in kernel)}\n        def erode(s): return {x for x in full if kernel and all(x+k in s for k in kernel)}\n        result=set(source)\n        for _ in range(max(0,iterations)):\n            prior=set(result) if _==0 else set(source)\n            if mode=='dilate': result=dilate(prior)\n            elif mode=='erode': result=erode(prior)\n            elif mode=='open': result=dilate(erode(prior))\n            elif mode=='close': result=erode(dilate(prior))\n            elif mode=='gradient': result=dilate(prior)-erode(prior)\n            elif mode=='inner': result=prior-erode(prior)\n            else: result=dilate(prior)-prior\n        out.append(sorted(result))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 4), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 4), [[1, 2]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 4), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 4), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 4), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 4), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 4), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 4), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 4), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 4), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 4), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 4), [[0, 1, 2]])\nif N == 2:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 5), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 5), [[1, 2, 3]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 5), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 5), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 5), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 5), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 5), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 5), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 5), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 5), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 5), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 5), [[0, 1, 2]])\nif N == 3:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 6), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 6), [[1, 2, 3, 4]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 6), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 6), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 6), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 6), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 6), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 6), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 6), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 6), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 6), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 6), [[0, 1, 2]])\nif N == 4:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 7), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 7), [[1, 2, 3, 4, 5]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 7), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 7), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 7), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 7), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 7), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 7), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 7), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 7), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 7), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 7), [[0, 1, 2]])\nif N == 5:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 8), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 8), [[1, 2, 3, 4, 5, 6]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 8), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 8), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 8), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 8), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 8), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 8), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 8), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 8), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 8), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 8), [[0, 1, 2]])\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"6ce55a1d90f3bb75317cf238072456070cef556e5de980e6417d0a89ee29f0d1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(commands, size):\n    full=set(range(size))\n    out=[]\n    for cmd in commands:\n        source,kernel,mode,iterations=cmd\n        source=set(source)&full\n        kernel=set(kernel)\n        def dilate(s): return {x for x in full if any(x-k in s for k in kernel)}\n        def erode(s): return {x for x in full if kernel and all(x+k in s for k in kernel)}\n        result=set(source)\n        for _ in range(max(0,iterations)):\n            prior=set(source)\n            if mode=='dilate': result=dilate(prior)\n            elif mode=='erode': result=erode(prior)\n            elif mode=='open': result=dilate(erode(prior))\n            elif mode=='close': result=erode(dilate(prior))\n            elif mode=='gradient': result=dilate(prior)-erode(prior)\n            elif mode=='inner': result=prior-erode(prior)\n            else: result=dilate(prior)-prior\n        out.append(sorted(result))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 4), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 4), [[1, 2]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 4), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 4), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 4), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 4), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 4), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 4), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 4), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 4), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 4), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 4), [[0, 1, 2]])\nif N == 2:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 5), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 5), [[1, 2, 3]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 5), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 5), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 5), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 5), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 5), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 5), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 5), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 5), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 5), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 5), [[0, 1, 2]])\nif N == 3:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 6), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 6), [[1, 2, 3, 4]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 6), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 6), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 6), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 6), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 6), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 6), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 6), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 6), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 6), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 6), [[0, 1, 2]])\nif N == 4:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 7), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 7), [[1, 2, 3, 4, 5]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 7), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 7), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 7), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 7), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 7), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 7), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 7), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 7), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 7), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 7), [[0, 1, 2]])\nif N == 5:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 8), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 8), [[1, 2, 3, 4, 5, 6]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 8), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 8), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 8), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 8), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 8), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 8), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 8), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 8), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 8), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 8), [[0, 1, 2]])\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"8a2613ae3697d095c1bd08bfb42b0127397ecaa5322af6aaa2cd68387f4f6171","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(commands, size):\n    full=set(range(size))\n    out=[]\n    for cmd in commands:\n        source,kernel,mode,iterations=cmd\n        source=set(source)&full\n        kernel=set(kernel)\n        def dilate(s): return {x for x in full if any(x-k in s for k in kernel)}\n        def erode(s): return {x for x in full if kernel and all(x+k in s for k in kernel)}\n        result=set(source)\n        for _ in range(max(0,iterations)):\n            prior=set(result)\n            if mode=='dilate': result=dilate(prior)\n            elif mode=='erode': result=erode(prior)\n            elif mode=='open': result=dilate(erode(prior))\n            elif mode=='close': result=erode(dilate(prior))\n            elif mode=='gradient': result=dilate(prior)-erode(prior)\n            elif mode=='inner': result=prior-erode(prior)\n            else: result=dilate(prior)-prior\n        out.append(sorted(result))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 4), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 4), [[1, 2]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 4), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 4), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 4), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 4), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 4), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 4), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 4), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 4), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 4), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 4), [[0, 1, 2]])\nif N == 2:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 5), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 5), [[1, 2, 3]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 5), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 5), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 5), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 5), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 5), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 5), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 5), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 5), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 5), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 5), [[0, 1, 2]])\nif N == 3:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 6), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 6), [[1, 2, 3, 4]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 6), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 6), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 6), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 6), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 6), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 6), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 6), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 6), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 6), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 6), [[0, 1, 2]])\nif N == 4:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 7), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 7), [[1, 2, 3, 4, 5]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 7), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 7), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 7), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 7), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 7), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 7), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 7), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 7), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 7), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 7), [[0, 1, 2]])\nif N == 5:\n    check('explicit sequence 0', solve([[[1], [0, 1], 'dilate', 1]], 8), [[1, 2]])\n    check('explicit sequence 1', solve([[[0, 1, 2, 3, 4, 5, 6, 7], [-1, 0, 1], 'erode', 1]], 8), [[1, 2, 3, 4, 5, 6]])\n    check('explicit sequence 2', solve([[[1], [], 'erode', 1]], 8), [[]])\n    check('explicit sequence 3', solve([[[1], [0, 1], 'open', 1]], 8), [[]])\n    check('explicit sequence 4', solve([[[0, 2], [0, 1], 'close', 1]], 8), [[0, 1, 2]])\n    check('explicit sequence 5', solve([[[0, 1, 2], [0, 1], 'gradient', 1]], 8), [[2, 3]])\n    check('explicit sequence 6', solve([[[0, 1, 2], [0, 1], 'inner', 1]], 8), [[2]])\n    check('explicit sequence 7', solve([[[1], [0, 1], 'outer', 1]], 8), [[2]])\n    check('explicit sequence 8', solve([[[0], [0, 1], 'dilate', 2]], 8), [[0, 1, 2]])\n    check('explicit sequence 9', solve([[[1], [0, 1], 'dilate', 0]], 8), [[1]])\n    check('explicit sequence 10', solve([[[2], [-1, 0], 'dilate', 1]], 8), [[1, 2]])\n    check('explicit sequence 11', solve([[[0, 1, 2], [0, 1], 'open', 1]], 8), [[0, 1, 2]])\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-raster-clipping-clip-mask-morphology-iteration-original","generated_at":"2026-09-29T14:45:13.821776+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Raster clip state can leak coverage across draws even when every individual region is valid.","repair":"Apply the documented state transition at iteration original. A binary sample mask supports dilation/erosion by an explicit signed structuring element. Out-of-target samples are uncovered; empty structuring elements yield empty output. Open erodes then dilates; close dilates then erodes. Gradient is dilated minus eroded; boundary is original minus eroded; exterior boundary is dilated minus original. Iterations use complete prior masks.","root_cause":"Repeated morphology restarts from the original clip each iteration.","sha256":"e3898ab4bbb9afd1915af09df1bb5744f2c6dcaa40330b16db0843c9a2fbde92","title":"Clip mask morphology: iteration original · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.343,"exit_code":1,"observations":[{"actual":[[1,2]],"check":"explicit sequence 0","expected":[[1,2]],"passed":true},{"actual":[[1,2]],"check":"explicit sequence 1","expected":[[1,2]],"passed":true},{"actual":[[]],"check":"explicit sequence 2","expected":[[]],"passed":true},{"actual":[[]],"check":"explicit sequence 3","expected":[[]],"passed":true},{"actual":[[0,1,2]],"check":"explicit sequence 4","expected":[[0,1,2]],"passed":true},{"actual":[[2,3]],"check":"explicit sequence 5","expected":[[2,3]],"passed":true},{"actual":[[2]],"check":"explicit sequence 6","expected":[[2]],"passed":true},{"actual":[[2]],"check":"explicit sequence 7","expected":[[2]],"passed":true},{"actual":[[0,1]],"check":"explicit sequence 8","expected":[[0,1,2]],"passed":false},{"actual":[[1]],"check":"explicit sequence 9","expected":[[1]],"passed":true},{"actual":[[1,2]],"check":"explicit sequence 10","expected":[[1,2]],"passed":true},{"actual":[[0,1,2]],"check":"explicit sequence 11","expected":[[0,1,2]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"explicit sequence 0\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 1\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 2\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit sequence 3\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit sequence 4\", \"actual\": [[0, 1, 2]], \"expected\": [[0, 1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 5\", \"actual\": [[2, 3]], \"expected\": [[2, 3]], \"passed\": true}, {\"check\": \"explicit sequence 6\", \"actual\": [[2]], \"expected\": [[2]], \"passed\": true}, {\"check\": \"explicit sequence 7\", \"actual\": [[2]], \"expected\": [[2]], \"passed\": true}, {\"check\": \"explicit sequence 8\", \"actual\": [[0, 1]], \"expected\": [[0, 1, 2]], \"passed\": false}, {\"check\": \"explicit sequence 9\", \"actual\": [[1]], \"expected\": [[1]], \"passed\": true}, {\"check\": \"explicit sequence 10\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 11\", \"actual\": [[0, 1, 2]], \"expected\": [[0, 1, 2]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.914,"exit_code":1,"observations":[{"actual":[[1,2]],"check":"explicit sequence 0","expected":[[1,2]],"passed":true},{"actual":[[1,2]],"check":"explicit sequence 1","expected":[[1,2]],"passed":true},{"actual":[[]],"check":"explicit sequence 2","expected":[[]],"passed":true},{"actual":[[]],"check":"explicit sequence 3","expected":[[]],"passed":true},{"actual":[[0,1,2]],"check":"explicit sequence 4","expected":[[0,1,2]],"passed":true},{"actual":[[2,3]],"check":"explicit sequence 5","expected":[[2,3]],"passed":true},{"actual":[[2]],"check":"explicit sequence 6","expected":[[2]],"passed":true},{"actual":[[2]],"check":"explicit sequence 7","expected":[[2]],"passed":true},{"actual":[[0,1]],"check":"explicit sequence 8","expected":[[0,1,2]],"passed":false},{"actual":[[1]],"check":"explicit sequence 9","expected":[[1]],"passed":true},{"actual":[[1,2]],"check":"explicit sequence 10","expected":[[1,2]],"passed":true},{"actual":[[0,1,2]],"check":"explicit sequence 11","expected":[[0,1,2]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"explicit sequence 0\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 1\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 2\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit sequence 3\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit sequence 4\", \"actual\": [[0, 1, 2]], \"expected\": [[0, 1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 5\", \"actual\": [[2, 3]], \"expected\": [[2, 3]], \"passed\": true}, {\"check\": \"explicit sequence 6\", \"actual\": [[2]], \"expected\": [[2]], \"passed\": true}, {\"check\": \"explicit sequence 7\", \"actual\": [[2]], \"expected\": [[2]], \"passed\": true}, {\"check\": \"explicit sequence 8\", \"actual\": [[0, 1]], \"expected\": [[0, 1, 2]], \"passed\": false}, {\"check\": \"explicit sequence 9\", \"actual\": [[1]], \"expected\": [[1]], \"passed\": true}, {\"check\": \"explicit sequence 10\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 11\", \"actual\": [[0, 1, 2]], \"expected\": [[0, 1, 2]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":45.296,"exit_code":0,"observations":[{"actual":[[1,2]],"check":"explicit sequence 0","expected":[[1,2]],"passed":true},{"actual":[[1,2]],"check":"explicit sequence 1","expected":[[1,2]],"passed":true},{"actual":[[]],"check":"explicit sequence 2","expected":[[]],"passed":true},{"actual":[[]],"check":"explicit sequence 3","expected":[[]],"passed":true},{"actual":[[0,1,2]],"check":"explicit sequence 4","expected":[[0,1,2]],"passed":true},{"actual":[[2,3]],"check":"explicit sequence 5","expected":[[2,3]],"passed":true},{"actual":[[2]],"check":"explicit sequence 6","expected":[[2]],"passed":true},{"actual":[[2]],"check":"explicit sequence 7","expected":[[2]],"passed":true},{"actual":[[0,1,2]],"check":"explicit sequence 8","expected":[[0,1,2]],"passed":true},{"actual":[[1]],"check":"explicit sequence 9","expected":[[1]],"passed":true},{"actual":[[1,2]],"check":"explicit sequence 10","expected":[[1,2]],"passed":true},{"actual":[[0,1,2]],"check":"explicit sequence 11","expected":[[0,1,2]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"explicit sequence 0\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 1\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 2\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit sequence 3\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit sequence 4\", \"actual\": [[0, 1, 2]], \"expected\": [[0, 1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 5\", \"actual\": [[2, 3]], \"expected\": [[2, 3]], \"passed\": true}, {\"check\": \"explicit sequence 6\", \"actual\": [[2]], \"expected\": [[2]], \"passed\": true}, {\"check\": \"explicit sequence 7\", \"actual\": [[2]], \"expected\": [[2]], \"passed\": true}, {\"check\": \"explicit sequence 8\", \"actual\": [[0, 1, 2]], \"expected\": [[0, 1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 9\", \"actual\": [[1]], \"expected\": [[1]], \"passed\": true}, {\"check\": \"explicit sequence 10\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"passed\": true}, {\"check\": \"explicit sequence 11\", \"actual\": [[0, 1, 2]], \"expected\": [[0, 1, 2]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}