{"abstract":"Orienting a downward edge swaps only its y coordinates, reversing the x interpolation along the edge.","category":"Raster clipping","checks":13,"contract":"Each command is [polygon,scissor]. Rows y in the scissor rows [top,bottom) intersected with [0,size) are sampled at y+1/2. Each polygon edge is oriented bottom to top and contributes a crossing when top<=yc<bottom (half-open in y), interpolated exactly. Crossings are sorted and paired even-odd. A pair covers pixels whose centers x+1/2 satisfy xa<=x+1/2<xb, i.e. [ceil(xa-1/2),ceil(xb-1/2)), then clipped to the scissor columns [left,right) intersected with [0,size). Non-empty spans are returned as [row,start,end].","evaluation_group":"s3-raster-clipping-scanline-polygon-span-clip","failed_approach":"Rewriting the swap as a four-way tuple still exchanges only the y coordinates.","family":"s3-raster-clipping-scanline-polygon-span-clip-edge-orientation-partial-swap","id":"FA-51711","implementations":{"attempt":{"sha256":"ac1dca1e910e25d1dcb460ea9024eb377d7deb3017877469625c4dad8b25999f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(commands, size):\n    out=[]\n    for poly,clip in commands:\n        l,t,r,b=max(clip[0],0),max(clip[1],0),min(clip[2],size),min(clip[3],size)\n        pts=[(Fraction(x),Fraction(y)) for x,y in poly]\n        spans=[]\n        for y in range(t,b):\n            yc=y+Fraction(1,2)\n            xs=[]\n            for i in range(len(pts)):\n                (ax,ay),(bx,by)=pts[i-1],pts[i]\n                if ay>by: ax,ay,bx,by=ax,by,bx,ay\n                if ay<=yc<by:\n                    xs.append(ax+(bx-ax)*(yc-ay)/(by-ay))\n            xs.sort()\n            for j in range(0,len(xs)-1,2):\n                start=math.ceil(xs[j]-Fraction(1,2))\n                end=math.ceil(xs[j+1]-Fraction(1,2))\n                start,end=max(start,l),min(end,r)\n                if start<end: spans.append([y,start,end])\n        out.append(spans)\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 case 0', solve([[[[1, 1], [5, 1], [5, 5], [1, 5]], [0, 0, 6, 6]]], 6), [[[1, 1, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 6, 6]]], 6), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 6, 6]]], 6), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 6, 6]]], 6), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 6, 6]]], 6), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [6, 0], [6, 6], [0, 6]], [2, 1, 4, 3]]], 6), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 6, 6]]], 6), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [8, 0], [8, 2], [-2, 2]], [0, 0, 6, 6]]], 6), [[[0, 0, 6], [1, 0, 6]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 6, 6]]], 6), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 6, 6]]], 6), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 6, 6]]], 6), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 6, 6]]], 6), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 6, 6]]], 6), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\nif N == 2:\n    check('explicit case 0', solve([[[[1, 1], [6, 1], [6, 6], [1, 6]], [0, 0, 7, 7]]], 7), [[[1, 1, 6], [2, 1, 6], [3, 1, 6], [4, 1, 6], [5, 1, 6]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 7, 7]]], 7), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 7, 7]]], 7), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 7, 7]]], 7), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 7, 7]]], 7), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [7, 0], [7, 7], [0, 7]], [2, 1, 4, 3]]], 7), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 7, 7]]], 7), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [9, 0], [9, 2], [-2, 2]], [0, 0, 7, 7]]], 7), [[[0, 0, 7], [1, 0, 7]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 7, 7]]], 7), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 7, 7]]], 7), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 7, 7]]], 7), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 7, 7]]], 7), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 7, 7]]], 7), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\nif N == 3:\n    check('explicit case 0', solve([[[[1, 1], [7, 1], [7, 7], [1, 7]], [0, 0, 8, 8]]], 8), [[[1, 1, 7], [2, 1, 7], [3, 1, 7], [4, 1, 7], [5, 1, 7], [6, 1, 7]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 8, 8]]], 8), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 8, 8]]], 8), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 8, 8]]], 8), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 8, 8]]], 8), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [8, 0], [8, 8], [0, 8]], [2, 1, 4, 3]]], 8), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 8, 8]]], 8), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [10, 0], [10, 2], [-2, 2]], [0, 0, 8, 8]]], 8), [[[0, 0, 8], [1, 0, 8]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 8, 8]]], 8), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 8, 8]]], 8), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 8, 8]]], 8), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 8, 8]]], 8), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 8, 8]]], 8), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\nif N == 4:\n    check('explicit case 0', solve([[[[1, 1], [8, 1], [8, 8], [1, 8]], [0, 0, 9, 9]]], 9), [[[1, 1, 8], [2, 1, 8], [3, 1, 8], [4, 1, 8], [5, 1, 8], [6, 1, 8], [7, 1, 8]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 9, 9]]], 9), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 9, 9]]], 9), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 9, 9]]], 9), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 9, 9]]], 9), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [9, 0], [9, 9], [0, 9]], [2, 1, 4, 3]]], 9), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 9, 9]]], 9), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [11, 0], [11, 2], [-2, 2]], [0, 0, 9, 9]]], 9), [[[0, 0, 9], [1, 0, 9]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 9, 9]]], 9), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 9, 9]]], 9), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 9, 9]]], 9), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 9, 9]]], 9), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 9, 9]]], 9), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\nif N == 5:\n    check('explicit case 0', solve([[[[1, 1], [9, 1], [9, 9], [1, 9]], [0, 0, 10, 10]]], 10), [[[1, 1, 9], [2, 1, 9], [3, 1, 9], [4, 1, 9], [5, 1, 9], [6, 1, 9], [7, 1, 9], [8, 1, 9]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 10, 10]]], 10), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 10, 10]]], 10), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 10, 10]]], 10), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 10, 10]]], 10), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [10, 0], [10, 10], [0, 10]], [2, 1, 4, 3]]], 10), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 10, 10]]], 10), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [12, 0], [12, 2], [-2, 2]], [0, 0, 10, 10]]], 10), [[[0, 0, 10], [1, 0, 10]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 10, 10]]], 10), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 10, 10]]], 10), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 10, 10]]], 10), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 10, 10]]], 10), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 10, 10]]], 10), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\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":"e209f34055a07ea4c55fbbf70fa380c41e49bd12abf45350a56b3769a37208a2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(commands, size):\n    out=[]\n    for poly,clip in commands:\n        l,t,r,b=max(clip[0],0),max(clip[1],0),min(clip[2],size),min(clip[3],size)\n        pts=[(Fraction(x),Fraction(y)) for x,y in poly]\n        spans=[]\n        for y in range(t,b):\n            yc=y+Fraction(1,2)\n            xs=[]\n            for i in range(len(pts)):\n                (ax,ay),(bx,by)=pts[i-1],pts[i]\n                if ay>by: ay,by=by,ay\n                if ay<=yc<by:\n                    xs.append(ax+(bx-ax)*(yc-ay)/(by-ay))\n            xs.sort()\n            for j in range(0,len(xs)-1,2):\n                start=math.ceil(xs[j]-Fraction(1,2))\n                end=math.ceil(xs[j+1]-Fraction(1,2))\n                start,end=max(start,l),min(end,r)\n                if start<end: spans.append([y,start,end])\n        out.append(spans)\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 case 0', solve([[[[1, 1], [5, 1], [5, 5], [1, 5]], [0, 0, 6, 6]]], 6), [[[1, 1, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 6, 6]]], 6), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 6, 6]]], 6), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 6, 6]]], 6), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 6, 6]]], 6), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [6, 0], [6, 6], [0, 6]], [2, 1, 4, 3]]], 6), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 6, 6]]], 6), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [8, 0], [8, 2], [-2, 2]], [0, 0, 6, 6]]], 6), [[[0, 0, 6], [1, 0, 6]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 6, 6]]], 6), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 6, 6]]], 6), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 6, 6]]], 6), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 6, 6]]], 6), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 6, 6]]], 6), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\nif N == 2:\n    check('explicit case 0', solve([[[[1, 1], [6, 1], [6, 6], [1, 6]], [0, 0, 7, 7]]], 7), [[[1, 1, 6], [2, 1, 6], [3, 1, 6], [4, 1, 6], [5, 1, 6]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 7, 7]]], 7), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 7, 7]]], 7), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 7, 7]]], 7), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 7, 7]]], 7), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [7, 0], [7, 7], [0, 7]], [2, 1, 4, 3]]], 7), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 7, 7]]], 7), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [9, 0], [9, 2], [-2, 2]], [0, 0, 7, 7]]], 7), [[[0, 0, 7], [1, 0, 7]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 7, 7]]], 7), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 7, 7]]], 7), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 7, 7]]], 7), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 7, 7]]], 7), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 7, 7]]], 7), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\nif N == 3:\n    check('explicit case 0', solve([[[[1, 1], [7, 1], [7, 7], [1, 7]], [0, 0, 8, 8]]], 8), [[[1, 1, 7], [2, 1, 7], [3, 1, 7], [4, 1, 7], [5, 1, 7], [6, 1, 7]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 8, 8]]], 8), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 8, 8]]], 8), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 8, 8]]], 8), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 8, 8]]], 8), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [8, 0], [8, 8], [0, 8]], [2, 1, 4, 3]]], 8), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 8, 8]]], 8), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [10, 0], [10, 2], [-2, 2]], [0, 0, 8, 8]]], 8), [[[0, 0, 8], [1, 0, 8]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 8, 8]]], 8), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 8, 8]]], 8), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 8, 8]]], 8), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 8, 8]]], 8), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 8, 8]]], 8), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\nif N == 4:\n    check('explicit case 0', solve([[[[1, 1], [8, 1], [8, 8], [1, 8]], [0, 0, 9, 9]]], 9), [[[1, 1, 8], [2, 1, 8], [3, 1, 8], [4, 1, 8], [5, 1, 8], [6, 1, 8], [7, 1, 8]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 9, 9]]], 9), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 9, 9]]], 9), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 9, 9]]], 9), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 9, 9]]], 9), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [9, 0], [9, 9], [0, 9]], [2, 1, 4, 3]]], 9), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 9, 9]]], 9), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [11, 0], [11, 2], [-2, 2]], [0, 0, 9, 9]]], 9), [[[0, 0, 9], [1, 0, 9]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 9, 9]]], 9), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 9, 9]]], 9), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 9, 9]]], 9), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 9, 9]]], 9), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 9, 9]]], 9), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\nif N == 5:\n    check('explicit case 0', solve([[[[1, 1], [9, 1], [9, 9], [1, 9]], [0, 0, 10, 10]]], 10), [[[1, 1, 9], [2, 1, 9], [3, 1, 9], [4, 1, 9], [5, 1, 9], [6, 1, 9], [7, 1, 9], [8, 1, 9]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 10, 10]]], 10), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 10, 10]]], 10), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 10, 10]]], 10), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 10, 10]]], 10), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [10, 0], [10, 10], [0, 10]], [2, 1, 4, 3]]], 10), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 10, 10]]], 10), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [12, 0], [12, 2], [-2, 2]], [0, 0, 10, 10]]], 10), [[[0, 0, 10], [1, 0, 10]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 10, 10]]], 10), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 10, 10]]], 10), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 10, 10]]], 10), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 10, 10]]], 10), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 10, 10]]], 10), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\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":"711b1a6a7773b7911b36539d16025d30d3aa9f00b98844921c0cd2ce19658a0a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(commands, size):\n    out=[]\n    for poly,clip in commands:\n        l,t,r,b=max(clip[0],0),max(clip[1],0),min(clip[2],size),min(clip[3],size)\n        pts=[(Fraction(x),Fraction(y)) for x,y in poly]\n        spans=[]\n        for y in range(t,b):\n            yc=y+Fraction(1,2)\n            xs=[]\n            for i in range(len(pts)):\n                (ax,ay),(bx,by)=pts[i-1],pts[i]\n                if ay>by: ax,ay,bx,by=bx,by,ax,ay\n                if ay<=yc<by:\n                    xs.append(ax+(bx-ax)*(yc-ay)/(by-ay))\n            xs.sort()\n            for j in range(0,len(xs)-1,2):\n                start=math.ceil(xs[j]-Fraction(1,2))\n                end=math.ceil(xs[j+1]-Fraction(1,2))\n                start,end=max(start,l),min(end,r)\n                if start<end: spans.append([y,start,end])\n        out.append(spans)\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 case 0', solve([[[[1, 1], [5, 1], [5, 5], [1, 5]], [0, 0, 6, 6]]], 6), [[[1, 1, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 6, 6]]], 6), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 6, 6]]], 6), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 6, 6]]], 6), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 6, 6]]], 6), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [6, 0], [6, 6], [0, 6]], [2, 1, 4, 3]]], 6), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 6, 6]]], 6), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [8, 0], [8, 2], [-2, 2]], [0, 0, 6, 6]]], 6), [[[0, 0, 6], [1, 0, 6]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 6, 6]]], 6), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 6, 6]]], 6), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 6, 6]]], 6), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 6, 6]]], 6), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 6, 6]]], 6), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\nif N == 2:\n    check('explicit case 0', solve([[[[1, 1], [6, 1], [6, 6], [1, 6]], [0, 0, 7, 7]]], 7), [[[1, 1, 6], [2, 1, 6], [3, 1, 6], [4, 1, 6], [5, 1, 6]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 7, 7]]], 7), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 7, 7]]], 7), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 7, 7]]], 7), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 7, 7]]], 7), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [7, 0], [7, 7], [0, 7]], [2, 1, 4, 3]]], 7), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 7, 7]]], 7), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [9, 0], [9, 2], [-2, 2]], [0, 0, 7, 7]]], 7), [[[0, 0, 7], [1, 0, 7]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 7, 7]]], 7), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 7, 7]]], 7), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 7, 7]]], 7), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 7, 7]]], 7), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 7, 7]]], 7), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\nif N == 3:\n    check('explicit case 0', solve([[[[1, 1], [7, 1], [7, 7], [1, 7]], [0, 0, 8, 8]]], 8), [[[1, 1, 7], [2, 1, 7], [3, 1, 7], [4, 1, 7], [5, 1, 7], [6, 1, 7]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 8, 8]]], 8), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 8, 8]]], 8), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 8, 8]]], 8), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 8, 8]]], 8), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [8, 0], [8, 8], [0, 8]], [2, 1, 4, 3]]], 8), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 8, 8]]], 8), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [10, 0], [10, 2], [-2, 2]], [0, 0, 8, 8]]], 8), [[[0, 0, 8], [1, 0, 8]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 8, 8]]], 8), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 8, 8]]], 8), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 8, 8]]], 8), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 8, 8]]], 8), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 8, 8]]], 8), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\nif N == 4:\n    check('explicit case 0', solve([[[[1, 1], [8, 1], [8, 8], [1, 8]], [0, 0, 9, 9]]], 9), [[[1, 1, 8], [2, 1, 8], [3, 1, 8], [4, 1, 8], [5, 1, 8], [6, 1, 8], [7, 1, 8]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 9, 9]]], 9), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 9, 9]]], 9), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 9, 9]]], 9), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 9, 9]]], 9), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [9, 0], [9, 9], [0, 9]], [2, 1, 4, 3]]], 9), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 9, 9]]], 9), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [11, 0], [11, 2], [-2, 2]], [0, 0, 9, 9]]], 9), [[[0, 0, 9], [1, 0, 9]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 9, 9]]], 9), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 9, 9]]], 9), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 9, 9]]], 9), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 9, 9]]], 9), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 9, 9]]], 9), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\nif N == 5:\n    check('explicit case 0', solve([[[[1, 1], [9, 1], [9, 9], [1, 9]], [0, 0, 10, 10]]], 10), [[[1, 1, 9], [2, 1, 9], [3, 1, 9], [4, 1, 9], [5, 1, 9], [6, 1, 9], [7, 1, 9], [8, 1, 9]]])\n    check('explicit case 1', solve([[[[1, 0], [3, '5/2'], [5, 0], [5, 5], [1, 5]], [0, 0, 10, 10]]], 10), [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]])\n    check('explicit case 2', solve([[[[0, '1/2'], [4, '5/2'], [0, '9/2']], [0, 0, 10, 10]]], 10), [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]])\n    check('explicit case 3', solve([[[['1/2', 0], ['7/2', 0], ['7/2', 3], ['1/2', 3]], [0, 0, 10, 10]]], 10), [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]])\n    check('explicit case 4', solve([[[['3/2', 0], ['9/2', 0], ['9/2', 2], ['3/2', 2]], [0, 0, 10, 10]]], 10), [[[0, 1, 4], [1, 1, 4]]])\n    check('explicit case 5', solve([[[[0, 0], [10, 0], [10, 10], [0, 10]], [2, 1, 4, 3]]], 10), [[[1, 2, 4], [2, 2, 4]]])\n    check('explicit case 6', solve([[[[0, 0], [1, 4], [2, 0], [3, 4], [4, 0], [4, 5], [0, 5]], [0, 0, 10, 10]]], 10), [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]])\n    check('explicit case 7', solve([[[[-2, 0], [12, 0], [12, 2], [-2, 2]], [0, 0, 10, 10]]], 10), [[[0, 0, 10], [1, 0, 10]]])\n    check('explicit case 8', solve([[[[0, 0], [2, 0], [2, 2], [0, 2]], [3, 0, 10, 10]]], 10), [[]])\n    check('explicit case 9', solve([[[[1, 0], [5, 4], [1, 4]], [0, 0, 10, 10]]], 10), [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]])\n    check('explicit case 10', solve([[[['1/4', 0], ['5/2', 0], ['5/2', 2], ['1/4', 2]], [1, 0, 10, 10]]], 10), [[[0, 1, 2], [1, 1, 2]]])\n    check('explicit case 11', solve([[[[4, 1], [4, 4], [1, 4], [1, 1]], [0, 0, 10, 10]]], 10), [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]])\n    check('explicit case 12', solve([[[[0, 0], [5, 0], [5, 4], [3, '3/2'], [1, 4], [0, 4]], [0, 0, 10, 10]]], 10), [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]])\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":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-raster-clipping-scanline-polygon-span-clip-edge-orientation-partial-swap","generated_at":"2026-09-29T14:45:21.588291+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"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.","repair":"Restore the specified clipping decision at edge orientation partial swap. Each command is [polygon,scissor]. Rows y in the scissor rows [top,bottom) intersected with [0,size) are sampled at y+1/2. Each polygon edge is oriented bottom to top and contributes a crossing when top<=yc<bottom (half-open in y), interpolated exactly. Crossings are sorted and paired even-odd. A pair covers pixels whose centers x+1/2 satisfy xa<=x+1/2<xb, i.e. [ceil(xa-1/2),ceil(xb-1/2)), then clipped to the scissor columns [left,right) intersected with [0,size). Non-empty spans are returned as [row,start,end].","root_cause":"Orienting a downward edge swaps only its y coordinates, reversing the x interpolation along the edge.","sha256":"c73a4d6cce860622e3233d26cd878d192e7fb629d4b6ad1de45006f1c1763f23","title":"Scanline polygon span clip: edge orientation partial swap · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.925,"exit_code":1,"observations":[{"actual":[[[1,1,5],[2,1,5],[3,1,5],[4,1,5]]],"check":"explicit case 0","expected":[[[1,1,5],[2,1,5],[3,1,5],[4,1,5]]],"passed":true},{"actual":[[[0,3,5],[1,1,2],[1,4,5],[2,1,5],[3,1,5],[4,1,5]]],"check":"explicit case 1","expected":[[[1,1,2],[1,4,5],[2,1,5],[3,1,5],[4,1,5]]],"passed":false},{"actual":[[[1,0,2],[2,0,4],[3,0,2]]],"check":"explicit case 2","expected":[[[1,0,2],[2,0,4],[3,0,2]]],"passed":true},{"actual":[[[0,0,3],[1,0,3],[2,0,3]]],"check":"explicit case 3","expected":[[[0,0,3],[1,0,3],[2,0,3]]],"passed":true},{"actual":[[[0,1,4],[1,1,4]]],"check":"explicit case 4","expected":[[[0,1,4],[1,1,4]]],"passed":true},{"actual":[[[1,2,4],[2,2,4]]],"check":"explicit case 5","expected":[[[1,2,4],[2,2,4]]],"passed":true},{"actual":[[[0,1,2],[0,3,4],[1,1,2],[1,3,4],[2,0,1],[2,2,3],[3,0,1],[3,2,3],[4,0,4]]],"check":"explicit case 6","expected":[[[2,0,1],[2,1,3],[2,3,4],[3,0,1],[3,1,3],[3,3,4],[4,0,4]]],"passed":false},{"actual":[[[0,0,6],[1,0,6]]],"check":"explicit case 7","expected":[[[0,0,6],[1,0,6]]],"passed":true},{"actual":[[]],"check":"explicit case 8","expected":[[]],"passed":true},{"actual":[[[1,1,2],[2,1,3],[3,1,4]]],"check":"explicit case 9","expected":[[[1,1,2],[2,1,3],[3,1,4]]],"passed":true},{"actual":[[[0,1,2],[1,1,2]]],"check":"explicit case 10","expected":[[[0,1,2],[1,1,2]]],"passed":true},{"actual":[[[1,1,4],[2,1,4],[3,1,4]]],"check":"explicit case 11","expected":[[[1,1,4],[2,1,4],[3,1,4]]],"passed":true},{"actual":[[[0,0,5],[1,0,3],[2,0,2],[2,4,5],[3,0,1],[3,3,5]]],"check":"explicit case 12","expected":[[[0,0,5],[1,0,3],[1,3,5],[2,0,2],[2,4,5],[3,0,1]]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"explicit case 0\", \"actual\": [[[1, 1, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]], \"expected\": [[[1, 1, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]], \"passed\": true}, {\"check\": \"explicit case 1\", \"actual\": [[[0, 3, 5], [1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]], \"expected\": [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]], \"passed\": false}, {\"check\": \"explicit case 2\", \"actual\": [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]], \"expected\": [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]], \"passed\": true}, {\"check\": \"explicit case 3\", \"actual\": [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]], \"expected\": [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]], \"passed\": true}, {\"check\": \"explicit case 4\", \"actual\": [[[0, 1, 4], [1, 1, 4]]], \"expected\": [[[0, 1, 4], [1, 1, 4]]], \"passed\": true}, {\"check\": \"explicit case 5\", \"actual\": [[[1, 2, 4], [2, 2, 4]]], \"expected\": [[[1, 2, 4], [2, 2, 4]]], \"passed\": true}, {\"check\": \"explicit case 6\", \"actual\": [[[0, 1, 2], [0, 3, 4], [1, 1, 2], [1, 3, 4], [2, 0, 1], [2, 2, 3], [3, 0, 1], [3, 2, 3], [4, 0, 4]]], \"expected\": [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]], \"passed\": false}, {\"check\": \"explicit case 7\", \"actual\": [[[0, 0, 6], [1, 0, 6]]], \"expected\": [[[0, 0, 6], [1, 0, 6]]], \"passed\": true}, {\"check\": \"explicit case 8\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit case 9\", \"actual\": [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]], \"expected\": [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]], \"passed\": true}, {\"check\": \"explicit case 10\", \"actual\": [[[0, 1, 2], [1, 1, 2]]], \"expected\": [[[0, 1, 2], [1, 1, 2]]], \"passed\": true}, {\"check\": \"explicit case 11\", \"actual\": [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]], \"expected\": [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]], \"passed\": true}, {\"check\": \"explicit case 12\", \"actual\": [[[0, 0, 5], [1, 0, 3], [2, 0, 2], [2, 4, 5], [3, 0, 1], [3, 3, 5]]], \"expected\": [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.421,"exit_code":1,"observations":[{"actual":[[[1,1,5],[2,1,5],[3,1,5],[4,1,5]]],"check":"explicit case 0","expected":[[[1,1,5],[2,1,5],[3,1,5],[4,1,5]]],"passed":true},{"actual":[[[0,3,5],[1,1,2],[1,4,5],[2,1,5],[3,1,5],[4,1,5]]],"check":"explicit case 1","expected":[[[1,1,2],[1,4,5],[2,1,5],[3,1,5],[4,1,5]]],"passed":false},{"actual":[[[1,0,2],[2,0,4],[3,0,2]]],"check":"explicit case 2","expected":[[[1,0,2],[2,0,4],[3,0,2]]],"passed":true},{"actual":[[[0,0,3],[1,0,3],[2,0,3]]],"check":"explicit case 3","expected":[[[0,0,3],[1,0,3],[2,0,3]]],"passed":true},{"actual":[[[0,1,4],[1,1,4]]],"check":"explicit case 4","expected":[[[0,1,4],[1,1,4]]],"passed":true},{"actual":[[[1,2,4],[2,2,4]]],"check":"explicit case 5","expected":[[[1,2,4],[2,2,4]]],"passed":true},{"actual":[[[0,1,2],[0,3,4],[1,1,2],[1,3,4],[2,0,1],[2,2,3],[3,0,1],[3,2,3],[4,0,4]]],"check":"explicit case 6","expected":[[[2,0,1],[2,1,3],[2,3,4],[3,0,1],[3,1,3],[3,3,4],[4,0,4]]],"passed":false},{"actual":[[[0,0,6],[1,0,6]]],"check":"explicit case 7","expected":[[[0,0,6],[1,0,6]]],"passed":true},{"actual":[[]],"check":"explicit case 8","expected":[[]],"passed":true},{"actual":[[[1,1,2],[2,1,3],[3,1,4]]],"check":"explicit case 9","expected":[[[1,1,2],[2,1,3],[3,1,4]]],"passed":true},{"actual":[[[0,1,2],[1,1,2]]],"check":"explicit case 10","expected":[[[0,1,2],[1,1,2]]],"passed":true},{"actual":[[[1,1,4],[2,1,4],[3,1,4]]],"check":"explicit case 11","expected":[[[1,1,4],[2,1,4],[3,1,4]]],"passed":true},{"actual":[[[0,0,5],[1,0,3],[2,0,2],[2,4,5],[3,0,1],[3,3,5]]],"check":"explicit case 12","expected":[[[0,0,5],[1,0,3],[1,3,5],[2,0,2],[2,4,5],[3,0,1]]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"explicit case 0\", \"actual\": [[[1, 1, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]], \"expected\": [[[1, 1, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]], \"passed\": true}, {\"check\": \"explicit case 1\", \"actual\": [[[0, 3, 5], [1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]], \"expected\": [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]], \"passed\": false}, {\"check\": \"explicit case 2\", \"actual\": [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]], \"expected\": [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]], \"passed\": true}, {\"check\": \"explicit case 3\", \"actual\": [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]], \"expected\": [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]], \"passed\": true}, {\"check\": \"explicit case 4\", \"actual\": [[[0, 1, 4], [1, 1, 4]]], \"expected\": [[[0, 1, 4], [1, 1, 4]]], \"passed\": true}, {\"check\": \"explicit case 5\", \"actual\": [[[1, 2, 4], [2, 2, 4]]], \"expected\": [[[1, 2, 4], [2, 2, 4]]], \"passed\": true}, {\"check\": \"explicit case 6\", \"actual\": [[[0, 1, 2], [0, 3, 4], [1, 1, 2], [1, 3, 4], [2, 0, 1], [2, 2, 3], [3, 0, 1], [3, 2, 3], [4, 0, 4]]], \"expected\": [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]], \"passed\": false}, {\"check\": \"explicit case 7\", \"actual\": [[[0, 0, 6], [1, 0, 6]]], \"expected\": [[[0, 0, 6], [1, 0, 6]]], \"passed\": true}, {\"check\": \"explicit case 8\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit case 9\", \"actual\": [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]], \"expected\": [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]], \"passed\": true}, {\"check\": \"explicit case 10\", \"actual\": [[[0, 1, 2], [1, 1, 2]]], \"expected\": [[[0, 1, 2], [1, 1, 2]]], \"passed\": true}, {\"check\": \"explicit case 11\", \"actual\": [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]], \"expected\": [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]], \"passed\": true}, {\"check\": \"explicit case 12\", \"actual\": [[[0, 0, 5], [1, 0, 3], [2, 0, 2], [2, 4, 5], [3, 0, 1], [3, 3, 5]]], \"expected\": [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":53.658,"exit_code":0,"observations":[{"actual":[[[1,1,5],[2,1,5],[3,1,5],[4,1,5]]],"check":"explicit case 0","expected":[[[1,1,5],[2,1,5],[3,1,5],[4,1,5]]],"passed":true},{"actual":[[[1,1,2],[1,4,5],[2,1,5],[3,1,5],[4,1,5]]],"check":"explicit case 1","expected":[[[1,1,2],[1,4,5],[2,1,5],[3,1,5],[4,1,5]]],"passed":true},{"actual":[[[1,0,2],[2,0,4],[3,0,2]]],"check":"explicit case 2","expected":[[[1,0,2],[2,0,4],[3,0,2]]],"passed":true},{"actual":[[[0,0,3],[1,0,3],[2,0,3]]],"check":"explicit case 3","expected":[[[0,0,3],[1,0,3],[2,0,3]]],"passed":true},{"actual":[[[0,1,4],[1,1,4]]],"check":"explicit case 4","expected":[[[0,1,4],[1,1,4]]],"passed":true},{"actual":[[[1,2,4],[2,2,4]]],"check":"explicit case 5","expected":[[[1,2,4],[2,2,4]]],"passed":true},{"actual":[[[2,0,1],[2,1,3],[2,3,4],[3,0,1],[3,1,3],[3,3,4],[4,0,4]]],"check":"explicit case 6","expected":[[[2,0,1],[2,1,3],[2,3,4],[3,0,1],[3,1,3],[3,3,4],[4,0,4]]],"passed":true},{"actual":[[[0,0,6],[1,0,6]]],"check":"explicit case 7","expected":[[[0,0,6],[1,0,6]]],"passed":true},{"actual":[[]],"check":"explicit case 8","expected":[[]],"passed":true},{"actual":[[[1,1,2],[2,1,3],[3,1,4]]],"check":"explicit case 9","expected":[[[1,1,2],[2,1,3],[3,1,4]]],"passed":true},{"actual":[[[0,1,2],[1,1,2]]],"check":"explicit case 10","expected":[[[0,1,2],[1,1,2]]],"passed":true},{"actual":[[[1,1,4],[2,1,4],[3,1,4]]],"check":"explicit case 11","expected":[[[1,1,4],[2,1,4],[3,1,4]]],"passed":true},{"actual":[[[0,0,5],[1,0,3],[1,3,5],[2,0,2],[2,4,5],[3,0,1]]],"check":"explicit case 12","expected":[[[0,0,5],[1,0,3],[1,3,5],[2,0,2],[2,4,5],[3,0,1]]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"explicit case 0\", \"actual\": [[[1, 1, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]], \"expected\": [[[1, 1, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]], \"passed\": true}, {\"check\": \"explicit case 1\", \"actual\": [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]], \"expected\": [[[1, 1, 2], [1, 4, 5], [2, 1, 5], [3, 1, 5], [4, 1, 5]]], \"passed\": true}, {\"check\": \"explicit case 2\", \"actual\": [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]], \"expected\": [[[1, 0, 2], [2, 0, 4], [3, 0, 2]]], \"passed\": true}, {\"check\": \"explicit case 3\", \"actual\": [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]], \"expected\": [[[0, 0, 3], [1, 0, 3], [2, 0, 3]]], \"passed\": true}, {\"check\": \"explicit case 4\", \"actual\": [[[0, 1, 4], [1, 1, 4]]], \"expected\": [[[0, 1, 4], [1, 1, 4]]], \"passed\": true}, {\"check\": \"explicit case 5\", \"actual\": [[[1, 2, 4], [2, 2, 4]]], \"expected\": [[[1, 2, 4], [2, 2, 4]]], \"passed\": true}, {\"check\": \"explicit case 6\", \"actual\": [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]], \"expected\": [[[2, 0, 1], [2, 1, 3], [2, 3, 4], [3, 0, 1], [3, 1, 3], [3, 3, 4], [4, 0, 4]]], \"passed\": true}, {\"check\": \"explicit case 7\", \"actual\": [[[0, 0, 6], [1, 0, 6]]], \"expected\": [[[0, 0, 6], [1, 0, 6]]], \"passed\": true}, {\"check\": \"explicit case 8\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"explicit case 9\", \"actual\": [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]], \"expected\": [[[1, 1, 2], [2, 1, 3], [3, 1, 4]]], \"passed\": true}, {\"check\": \"explicit case 10\", \"actual\": [[[0, 1, 2], [1, 1, 2]]], \"expected\": [[[0, 1, 2], [1, 1, 2]]], \"passed\": true}, {\"check\": \"explicit case 11\", \"actual\": [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]], \"expected\": [[[1, 1, 4], [2, 1, 4], [3, 1, 4]]], \"passed\": true}, {\"check\": \"explicit case 12\", \"actual\": [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]], \"expected\": [[[0, 0, 5], [1, 0, 3], [1, 3, 5], [2, 0, 2], [2, 4, 5], [3, 0, 1]]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}