{"abstract":"A segment parallel to and lying exactly on a clip boundary is rejected although boundary points are inside.","category":"Raster clipping","checks":13,"contract":"Each command is [x0,y0,x1,y1,rect] with integer coordinates and an inclusive integer rectangle [left,top,right,bottom] that is first intersected with the pixel-center raster [0,size-1]x[0,size-1]. An empty rectangle returns None. Liang-Barsky tests left, right, top and bottom inequalities with exact rational parameters: parallel segments outside a boundary are rejected, points on a boundary are inside, entering parameters raise t0 and leaving parameters lower t1. The result is [t0,t1] as exact rational strings or None.","evaluation_group":"s3-raster-clipping-liang-barsky-parametric-rect","failed_approach":"Accepting boundary lines that move still rejects a degenerate point that lies on the boundary.","family":"s3-raster-clipping-liang-barsky-parametric-rect-parallel-boundary-exclusive","id":"FA-51581","implementations":{"attempt":{"sha256":"fb0e4612d024f9521616715049686b71541e605a7c796de5068c21759ea6dca7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(commands, size):\n    out=[]\n    for x0,y0,x1,y1,rect in commands:\n        l,t,r,b=max(rect[0],0),max(rect[1],0),min(rect[2],size-1),min(rect[3],size-1)\n        if l>r or t>b:\n            out.append(None)\n            continue\n        dx,dy=x1-x0,y1-y0\n        t0,t1=Fraction(0),Fraction(1)\n        ok=True\n        for p,q in ((-dx,x0-l),(dx,r-x0),(-dy,y0-t),(dy,b-y0)):\n            if p==0:\n                if q<0 or q==0 and dx==dy==0: ok=False\n            else:\n                u=Fraction(q,p)\n                if p<0:\n                    if u>t1: ok=False\n                    elif u>t0: t0=u\n                else:\n                    if u<t0: ok=False\n                    elif u<t1: t1=u\n        out.append([str(t0),str(t1)] if ok else None)\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([[-2, 1, 7, 3, [0, 0, 6, 6]]], 6), [['2/9', '7/9']])\n    check('explicit case 1', solve([[1, 1, 11, 1, [0, 0, 11, 11]]], 6), [['0', '2/5']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 6), [None])\n    check('explicit case 3', solve([[0, 2, 5, 2, [0, 2, 5, 2]]], 6), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 5, 0, [0, 0, 5, 5]]], 6), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 5, 5]]], 6), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 5, 5]]], 6), [['1/2', '3/4']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 5, 5]]], 6), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 5, 5]]], 6), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 10, [0, 0, 5, 5]]], 6), [['0', '3/8']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 6]]], 6), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 5, 5]]], 6), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 5, 5]]], 6), [None])\nif N == 2:\n    check('explicit case 0', solve([[-2, 1, 8, 3, [0, 0, 7, 7]]], 7), [['1/5', '4/5']])\n    check('explicit case 1', solve([[1, 1, 12, 1, [0, 0, 12, 12]]], 7), [['0', '5/11']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 7), [None])\n    check('explicit case 3', solve([[0, 2, 6, 2, [0, 2, 6, 2]]], 7), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 6, 0, [0, 0, 6, 6]]], 7), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 6, 6]]], 7), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 6, 6]]], 7), [['1/2', '7/8']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 6, 6]]], 7), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 6, 6]]], 7), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 11, [0, 0, 6, 6]]], 7), [['0', '4/9']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 7]]], 7), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 6, 6]]], 7), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 6, 6]]], 7), [None])\nif N == 3:\n    check('explicit case 0', solve([[-2, 1, 9, 3, [0, 0, 8, 8]]], 8), [['2/11', '9/11']])\n    check('explicit case 1', solve([[1, 1, 13, 1, [0, 0, 13, 13]]], 8), [['0', '1/2']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 8), [None])\n    check('explicit case 3', solve([[0, 2, 7, 2, [0, 2, 7, 2]]], 8), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 7, 0, [0, 0, 7, 7]]], 8), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 7, 7]]], 8), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 7, 7]]], 8), [['1/2', '1']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 7, 7]]], 8), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 7, 7]]], 8), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 12, [0, 0, 7, 7]]], 8), [['0', '1/2']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 8]]], 8), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 7, 7]]], 8), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 7, 7]]], 8), [None])\nif N == 4:\n    check('explicit case 0', solve([[-2, 1, 10, 3, [0, 0, 9, 9]]], 9), [['1/6', '5/6']])\n    check('explicit case 1', solve([[1, 1, 14, 1, [0, 0, 14, 14]]], 9), [['0', '7/13']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 9), [None])\n    check('explicit case 3', solve([[0, 2, 8, 2, [0, 2, 8, 2]]], 9), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 8, 0, [0, 0, 8, 8]]], 9), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 8, 8]]], 9), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 8, 8]]], 9), [['1/2', '1']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 8, 8]]], 9), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 8, 8]]], 9), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 13, [0, 0, 8, 8]]], 9), [['0', '6/11']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 9]]], 9), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 8, 8]]], 9), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 8, 8]]], 9), [None])\nif N == 5:\n    check('explicit case 0', solve([[-2, 1, 11, 3, [0, 0, 10, 10]]], 10), [['2/13', '11/13']])\n    check('explicit case 1', solve([[1, 1, 15, 1, [0, 0, 15, 15]]], 10), [['0', '4/7']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 10), [None])\n    check('explicit case 3', solve([[0, 2, 9, 2, [0, 2, 9, 2]]], 10), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 9, 0, [0, 0, 9, 9]]], 10), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 9, 9]]], 10), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 9, 9]]], 10), [['1/2', '1']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 9, 9]]], 10), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 9, 9]]], 10), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 14, [0, 0, 9, 9]]], 10), [['0', '7/12']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 10]]], 10), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 9, 9]]], 10), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 9, 9]]], 10), [None])\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":"a60830b17d27a66da3b1cb7fc56bc135f997c05b30e9d6a31aac9ce0fbbc7d51","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(commands, size):\n    out=[]\n    for x0,y0,x1,y1,rect in commands:\n        l,t,r,b=max(rect[0],0),max(rect[1],0),min(rect[2],size-1),min(rect[3],size-1)\n        if l>r or t>b:\n            out.append(None)\n            continue\n        dx,dy=x1-x0,y1-y0\n        t0,t1=Fraction(0),Fraction(1)\n        ok=True\n        for p,q in ((-dx,x0-l),(dx,r-x0),(-dy,y0-t),(dy,b-y0)):\n            if p==0:\n                if q<=0: ok=False\n            else:\n                u=Fraction(q,p)\n                if p<0:\n                    if u>t1: ok=False\n                    elif u>t0: t0=u\n                else:\n                    if u<t0: ok=False\n                    elif u<t1: t1=u\n        out.append([str(t0),str(t1)] if ok else None)\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([[-2, 1, 7, 3, [0, 0, 6, 6]]], 6), [['2/9', '7/9']])\n    check('explicit case 1', solve([[1, 1, 11, 1, [0, 0, 11, 11]]], 6), [['0', '2/5']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 6), [None])\n    check('explicit case 3', solve([[0, 2, 5, 2, [0, 2, 5, 2]]], 6), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 5, 0, [0, 0, 5, 5]]], 6), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 5, 5]]], 6), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 5, 5]]], 6), [['1/2', '3/4']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 5, 5]]], 6), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 5, 5]]], 6), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 10, [0, 0, 5, 5]]], 6), [['0', '3/8']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 6]]], 6), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 5, 5]]], 6), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 5, 5]]], 6), [None])\nif N == 2:\n    check('explicit case 0', solve([[-2, 1, 8, 3, [0, 0, 7, 7]]], 7), [['1/5', '4/5']])\n    check('explicit case 1', solve([[1, 1, 12, 1, [0, 0, 12, 12]]], 7), [['0', '5/11']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 7), [None])\n    check('explicit case 3', solve([[0, 2, 6, 2, [0, 2, 6, 2]]], 7), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 6, 0, [0, 0, 6, 6]]], 7), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 6, 6]]], 7), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 6, 6]]], 7), [['1/2', '7/8']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 6, 6]]], 7), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 6, 6]]], 7), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 11, [0, 0, 6, 6]]], 7), [['0', '4/9']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 7]]], 7), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 6, 6]]], 7), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 6, 6]]], 7), [None])\nif N == 3:\n    check('explicit case 0', solve([[-2, 1, 9, 3, [0, 0, 8, 8]]], 8), [['2/11', '9/11']])\n    check('explicit case 1', solve([[1, 1, 13, 1, [0, 0, 13, 13]]], 8), [['0', '1/2']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 8), [None])\n    check('explicit case 3', solve([[0, 2, 7, 2, [0, 2, 7, 2]]], 8), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 7, 0, [0, 0, 7, 7]]], 8), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 7, 7]]], 8), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 7, 7]]], 8), [['1/2', '1']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 7, 7]]], 8), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 7, 7]]], 8), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 12, [0, 0, 7, 7]]], 8), [['0', '1/2']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 8]]], 8), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 7, 7]]], 8), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 7, 7]]], 8), [None])\nif N == 4:\n    check('explicit case 0', solve([[-2, 1, 10, 3, [0, 0, 9, 9]]], 9), [['1/6', '5/6']])\n    check('explicit case 1', solve([[1, 1, 14, 1, [0, 0, 14, 14]]], 9), [['0', '7/13']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 9), [None])\n    check('explicit case 3', solve([[0, 2, 8, 2, [0, 2, 8, 2]]], 9), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 8, 0, [0, 0, 8, 8]]], 9), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 8, 8]]], 9), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 8, 8]]], 9), [['1/2', '1']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 8, 8]]], 9), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 8, 8]]], 9), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 13, [0, 0, 8, 8]]], 9), [['0', '6/11']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 9]]], 9), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 8, 8]]], 9), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 8, 8]]], 9), [None])\nif N == 5:\n    check('explicit case 0', solve([[-2, 1, 11, 3, [0, 0, 10, 10]]], 10), [['2/13', '11/13']])\n    check('explicit case 1', solve([[1, 1, 15, 1, [0, 0, 15, 15]]], 10), [['0', '4/7']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 10), [None])\n    check('explicit case 3', solve([[0, 2, 9, 2, [0, 2, 9, 2]]], 10), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 9, 0, [0, 0, 9, 9]]], 10), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 9, 9]]], 10), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 9, 9]]], 10), [['1/2', '1']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 9, 9]]], 10), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 9, 9]]], 10), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 14, [0, 0, 9, 9]]], 10), [['0', '7/12']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 10]]], 10), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 9, 9]]], 10), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 9, 9]]], 10), [None])\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":"888d02f58fae858369ff6ed17ac87af836e8647f0a3a7bd31037c37b7ab537d2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(commands, size):\n    out=[]\n    for x0,y0,x1,y1,rect in commands:\n        l,t,r,b=max(rect[0],0),max(rect[1],0),min(rect[2],size-1),min(rect[3],size-1)\n        if l>r or t>b:\n            out.append(None)\n            continue\n        dx,dy=x1-x0,y1-y0\n        t0,t1=Fraction(0),Fraction(1)\n        ok=True\n        for p,q in ((-dx,x0-l),(dx,r-x0),(-dy,y0-t),(dy,b-y0)):\n            if p==0:\n                if q<0: ok=False\n            else:\n                u=Fraction(q,p)\n                if p<0:\n                    if u>t1: ok=False\n                    elif u>t0: t0=u\n                else:\n                    if u<t0: ok=False\n                    elif u<t1: t1=u\n        out.append([str(t0),str(t1)] if ok else None)\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([[-2, 1, 7, 3, [0, 0, 6, 6]]], 6), [['2/9', '7/9']])\n    check('explicit case 1', solve([[1, 1, 11, 1, [0, 0, 11, 11]]], 6), [['0', '2/5']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 6), [None])\n    check('explicit case 3', solve([[0, 2, 5, 2, [0, 2, 5, 2]]], 6), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 5, 0, [0, 0, 5, 5]]], 6), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 5, 5]]], 6), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 5, 5]]], 6), [['1/2', '3/4']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 5, 5]]], 6), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 5, 5]]], 6), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 10, [0, 0, 5, 5]]], 6), [['0', '3/8']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 6]]], 6), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 5, 5]]], 6), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 5, 5]]], 6), [None])\nif N == 2:\n    check('explicit case 0', solve([[-2, 1, 8, 3, [0, 0, 7, 7]]], 7), [['1/5', '4/5']])\n    check('explicit case 1', solve([[1, 1, 12, 1, [0, 0, 12, 12]]], 7), [['0', '5/11']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 7), [None])\n    check('explicit case 3', solve([[0, 2, 6, 2, [0, 2, 6, 2]]], 7), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 6, 0, [0, 0, 6, 6]]], 7), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 6, 6]]], 7), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 6, 6]]], 7), [['1/2', '7/8']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 6, 6]]], 7), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 6, 6]]], 7), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 11, [0, 0, 6, 6]]], 7), [['0', '4/9']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 7]]], 7), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 6, 6]]], 7), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 6, 6]]], 7), [None])\nif N == 3:\n    check('explicit case 0', solve([[-2, 1, 9, 3, [0, 0, 8, 8]]], 8), [['2/11', '9/11']])\n    check('explicit case 1', solve([[1, 1, 13, 1, [0, 0, 13, 13]]], 8), [['0', '1/2']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 8), [None])\n    check('explicit case 3', solve([[0, 2, 7, 2, [0, 2, 7, 2]]], 8), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 7, 0, [0, 0, 7, 7]]], 8), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 7, 7]]], 8), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 7, 7]]], 8), [['1/2', '1']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 7, 7]]], 8), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 7, 7]]], 8), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 12, [0, 0, 7, 7]]], 8), [['0', '1/2']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 8]]], 8), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 7, 7]]], 8), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 7, 7]]], 8), [None])\nif N == 4:\n    check('explicit case 0', solve([[-2, 1, 10, 3, [0, 0, 9, 9]]], 9), [['1/6', '5/6']])\n    check('explicit case 1', solve([[1, 1, 14, 1, [0, 0, 14, 14]]], 9), [['0', '7/13']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 9), [None])\n    check('explicit case 3', solve([[0, 2, 8, 2, [0, 2, 8, 2]]], 9), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 8, 0, [0, 0, 8, 8]]], 9), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 8, 8]]], 9), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 8, 8]]], 9), [['1/2', '1']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 8, 8]]], 9), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 8, 8]]], 9), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 13, [0, 0, 8, 8]]], 9), [['0', '6/11']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 9]]], 9), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 8, 8]]], 9), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 8, 8]]], 9), [None])\nif N == 5:\n    check('explicit case 0', solve([[-2, 1, 11, 3, [0, 0, 10, 10]]], 10), [['2/13', '11/13']])\n    check('explicit case 1', solve([[1, 1, 15, 1, [0, 0, 15, 15]]], 10), [['0', '4/7']])\n    check('explicit case 2', solve([[0, 0, 1, 1, [3, 3, 2, 5]]], 10), [None])\n    check('explicit case 3', solve([[0, 2, 9, 2, [0, 2, 9, 2]]], 10), [['0', '1']])\n    check('explicit case 4', solve([[0, 0, 9, 0, [0, 0, 9, 9]]], 10), [['0', '1']])\n    check('explicit case 5', solve([[0, 2, 0, 2, [0, 0, 9, 9]]], 10), [['0', '1']])\n    check('explicit case 6', solve([[-4, -1, 4, 7, [0, 0, 9, 9]]], 10), [['1/2', '1']])\n    check('explicit case 7', solve([[1, 1, 3, 1, [0, 0, 9, 9]]], 10), [['0', '1']])\n    check('explicit case 8', solve([[-1, 1, 2, 1, [0, 0, 9, 9]]], 10), [['1/3', '1']])\n    check('explicit case 9', solve([[1, 2, 1, 14, [0, 0, 9, 9]]], 10), [['0', '7/12']])\n    check('explicit case 10', solve([[2, -3, 5, 5, [1, 1, 4, 10]]], 10), [['1/2', '2/3']])\n    check('explicit case 11', solve([[-3, -3, -1, 4, [0, 0, 9, 9]]], 10), [None])\n    check('explicit case 12', solve([[-3, -2, 4, -3, [0, 0, 9, 9]]], 10), [None])\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-liang-barsky-parametric-rect-parallel-boundary-exclusive","generated_at":"2026-09-29T14:45:20.263298+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 parallel boundary exclusive. Each command is [x0,y0,x1,y1,rect] with integer coordinates and an inclusive integer rectangle [left,top,right,bottom] that is first intersected with the pixel-center raster [0,size-1]x[0,size-1]. An empty rectangle returns None. Liang-Barsky tests left, right, top and bottom inequalities with exact rational parameters: parallel segments outside a boundary are rejected, points on a boundary are inside, entering parameters raise t0 and leaving parameters lower t1. The result is [t0,t1] as exact rational strings or None.","root_cause":"A segment parallel to and lying exactly on a clip boundary is rejected although boundary points are inside.","sha256":"a81a91241f203ba3c7cd016ac6e40cf4d7a4585c46ff8f4f7a201eb865a1f5b1","title":"Liang barsky parametric rect: parallel boundary exclusive · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.005,"exit_code":1,"observations":[{"actual":[["2/9","7/9"]],"check":"explicit case 0","expected":[["2/9","7/9"]],"passed":true},{"actual":[["0","2/5"]],"check":"explicit case 1","expected":[["0","2/5"]],"passed":true},{"actual":[null],"check":"explicit case 2","expected":[null],"passed":true},{"actual":[["0","1"]],"check":"explicit case 3","expected":[["0","1"]],"passed":true},{"actual":[["0","1"]],"check":"explicit case 4","expected":[["0","1"]],"passed":true},{"actual":[null],"check":"explicit case 5","expected":[["0","1"]],"passed":false},{"actual":[["1/2","3/4"]],"check":"explicit case 6","expected":[["1/2","3/4"]],"passed":true},{"actual":[["0","1"]],"check":"explicit case 7","expected":[["0","1"]],"passed":true},{"actual":[["1/3","1"]],"check":"explicit case 8","expected":[["1/3","1"]],"passed":true},{"actual":[["0","3/8"]],"check":"explicit case 9","expected":[["0","3/8"]],"passed":true},{"actual":[["1/2","2/3"]],"check":"explicit case 10","expected":[["1/2","2/3"]],"passed":true},{"actual":[null],"check":"explicit case 11","expected":[null],"passed":true},{"actual":[null],"check":"explicit case 12","expected":[null],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"explicit case 0\", \"actual\": [[\"2/9\", \"7/9\"]], \"expected\": [[\"2/9\", \"7/9\"]], \"passed\": true}, {\"check\": \"explicit case 1\", \"actual\": [[\"0\", \"2/5\"]], \"expected\": [[\"0\", \"2/5\"]], \"passed\": true}, {\"check\": \"explicit case 2\", \"actual\": [null], \"expected\": [null], \"passed\": true}, {\"check\": \"explicit case 3\", \"actual\": [[\"0\", \"1\"]], \"expected\": [[\"0\", \"1\"]], \"passed\": true}, {\"check\": \"explicit case 4\", \"actual\": [[\"0\", \"1\"]], \"expected\": [[\"0\", \"1\"]], \"passed\": true}, {\"check\": \"explicit case 5\", \"actual\": [null], \"expected\": [[\"0\", \"1\"]], \"passed\": false}, {\"check\": \"explicit case 6\", \"actual\": [[\"1/2\", \"3/4\"]], \"expected\": [[\"1/2\", \"3/4\"]], \"passed\": true}, {\"check\": \"explicit case 7\", \"actual\": [[\"0\", \"1\"]], \"expected\": [[\"0\", \"1\"]], \"passed\": true}, {\"check\": \"explicit case 8\", \"actual\": [[\"1/3\", \"1\"]], \"expected\": [[\"1/3\", \"1\"]], \"passed\": true}, {\"check\": \"explicit case 9\", \"actual\": [[\"0\", \"3/8\"]], \"expected\": [[\"0\", \"3/8\"]], \"passed\": true}, {\"check\": \"explicit case 10\", \"actual\": [[\"1/2\", \"2/3\"]], \"expected\": [[\"1/2\", \"2/3\"]], \"passed\": true}, {\"check\": \"explicit case 11\", \"actual\": [null], \"expected\": [null], \"passed\": true}, {\"check\": \"explicit case 12\", \"actual\": [null], \"expected\": [null], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.985,"exit_code":1,"observations":[{"actual":[["2/9","7/9"]],"check":"explicit case 0","expected":[["2/9","7/9"]],"passed":true},{"actual":[["0","2/5"]],"check":"explicit case 1","expected":[["0","2/5"]],"passed":true},{"actual":[null],"check":"explicit case 2","expected":[null],"passed":true},{"actual":[null],"check":"explicit case 3","expected":[["0","1"]],"passed":false},{"actual":[null],"check":"explicit case 4","expected":[["0","1"]],"passed":false},{"actual":[null],"check":"explicit case 5","expected":[["0","1"]],"passed":false},{"actual":[["1/2","3/4"]],"check":"explicit case 6","expected":[["1/2","3/4"]],"passed":true},{"actual":[["0","1"]],"check":"explicit case 7","expected":[["0","1"]],"passed":true},{"actual":[["1/3","1"]],"check":"explicit case 8","expected":[["1/3","1"]],"passed":true},{"actual":[["0","3/8"]],"check":"explicit case 9","expected":[["0","3/8"]],"passed":true},{"actual":[["1/2","2/3"]],"check":"explicit case 10","expected":[["1/2","2/3"]],"passed":true},{"actual":[null],"check":"explicit case 11","expected":[null],"passed":true},{"actual":[null],"check":"explicit case 12","expected":[null],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"explicit case 0\", \"actual\": [[\"2/9\", \"7/9\"]], \"expected\": [[\"2/9\", \"7/9\"]], \"passed\": true}, {\"check\": \"explicit case 1\", \"actual\": [[\"0\", \"2/5\"]], \"expected\": [[\"0\", \"2/5\"]], \"passed\": true}, {\"check\": \"explicit case 2\", \"actual\": [null], \"expected\": [null], \"passed\": true}, {\"check\": \"explicit case 3\", \"actual\": [null], \"expected\": [[\"0\", \"1\"]], \"passed\": false}, {\"check\": \"explicit case 4\", \"actual\": [null], \"expected\": [[\"0\", \"1\"]], \"passed\": false}, {\"check\": \"explicit case 5\", \"actual\": [null], \"expected\": [[\"0\", \"1\"]], \"passed\": false}, {\"check\": \"explicit case 6\", \"actual\": [[\"1/2\", \"3/4\"]], \"expected\": [[\"1/2\", \"3/4\"]], \"passed\": true}, {\"check\": \"explicit case 7\", \"actual\": [[\"0\", \"1\"]], \"expected\": [[\"0\", \"1\"]], \"passed\": true}, {\"check\": \"explicit case 8\", \"actual\": [[\"1/3\", \"1\"]], \"expected\": [[\"1/3\", \"1\"]], \"passed\": true}, {\"check\": \"explicit case 9\", \"actual\": [[\"0\", \"3/8\"]], \"expected\": [[\"0\", \"3/8\"]], \"passed\": true}, {\"check\": \"explicit case 10\", \"actual\": [[\"1/2\", \"2/3\"]], \"expected\": [[\"1/2\", \"2/3\"]], \"passed\": true}, {\"check\": \"explicit case 11\", \"actual\": [null], \"expected\": [null], \"passed\": true}, {\"check\": \"explicit case 12\", \"actual\": [null], \"expected\": [null], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.063,"exit_code":0,"observations":[{"actual":[["2/9","7/9"]],"check":"explicit case 0","expected":[["2/9","7/9"]],"passed":true},{"actual":[["0","2/5"]],"check":"explicit case 1","expected":[["0","2/5"]],"passed":true},{"actual":[null],"check":"explicit case 2","expected":[null],"passed":true},{"actual":[["0","1"]],"check":"explicit case 3","expected":[["0","1"]],"passed":true},{"actual":[["0","1"]],"check":"explicit case 4","expected":[["0","1"]],"passed":true},{"actual":[["0","1"]],"check":"explicit case 5","expected":[["0","1"]],"passed":true},{"actual":[["1/2","3/4"]],"check":"explicit case 6","expected":[["1/2","3/4"]],"passed":true},{"actual":[["0","1"]],"check":"explicit case 7","expected":[["0","1"]],"passed":true},{"actual":[["1/3","1"]],"check":"explicit case 8","expected":[["1/3","1"]],"passed":true},{"actual":[["0","3/8"]],"check":"explicit case 9","expected":[["0","3/8"]],"passed":true},{"actual":[["1/2","2/3"]],"check":"explicit case 10","expected":[["1/2","2/3"]],"passed":true},{"actual":[null],"check":"explicit case 11","expected":[null],"passed":true},{"actual":[null],"check":"explicit case 12","expected":[null],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"explicit case 0\", \"actual\": [[\"2/9\", \"7/9\"]], \"expected\": [[\"2/9\", \"7/9\"]], \"passed\": true}, {\"check\": \"explicit case 1\", \"actual\": [[\"0\", \"2/5\"]], \"expected\": [[\"0\", \"2/5\"]], \"passed\": true}, {\"check\": \"explicit case 2\", \"actual\": [null], \"expected\": [null], \"passed\": true}, {\"check\": \"explicit case 3\", \"actual\": [[\"0\", \"1\"]], \"expected\": [[\"0\", \"1\"]], \"passed\": true}, {\"check\": \"explicit case 4\", \"actual\": [[\"0\", \"1\"]], \"expected\": [[\"0\", \"1\"]], \"passed\": true}, {\"check\": \"explicit case 5\", \"actual\": [[\"0\", \"1\"]], \"expected\": [[\"0\", \"1\"]], \"passed\": true}, {\"check\": \"explicit case 6\", \"actual\": [[\"1/2\", \"3/4\"]], \"expected\": [[\"1/2\", \"3/4\"]], \"passed\": true}, {\"check\": \"explicit case 7\", \"actual\": [[\"0\", \"1\"]], \"expected\": [[\"0\", \"1\"]], \"passed\": true}, {\"check\": \"explicit case 8\", \"actual\": [[\"1/3\", \"1\"]], \"expected\": [[\"1/3\", \"1\"]], \"passed\": true}, {\"check\": \"explicit case 9\", \"actual\": [[\"0\", \"3/8\"]], \"expected\": [[\"0\", \"3/8\"]], \"passed\": true}, {\"check\": \"explicit case 10\", \"actual\": [[\"1/2\", \"2/3\"]], \"expected\": [[\"1/2\", \"2/3\"]], \"passed\": true}, {\"check\": \"explicit case 11\", \"actual\": [null], \"expected\": [null], \"passed\": true}, {\"check\": \"explicit case 12\", \"actual\": [null], \"expected\": [null], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}