{"abstract":"Diagonal rays visit a different neighbor than the contract and cached tests.","category":"Collision detection broadphase","checks":8,"contract":"solve(o, d, cs, max_t): Amanatides-Woo traversal of a uniform grid for a ray o+t*d (d not normalized). Start in cell floor(o/cs); step the axis with the smaller next boundary t (x on ties) while that t <= max_t, at most 64 cells. Return the visited cells [[ix,iy],...].","contract_signature":"o, d, cs, max_t","evaluation_group":"w2-collision_detection_broadphase-grid-ray-dda","failed_approach":"Stepping both axes at once on a tie skips the neighbor cell entirely.","family":"w2-collision_detection_broadphase-grid-ray-dda-corner-tie-step","id":"FA-87606","implementations":{"attempt":{"sha256":"f23fa35e569bab38a361dc7f5eac7d0e5ee84dc9891f018cfdc034dcef8537ce","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(o, d, cs, max_t):\n    ix, iy = math.floor(o[0] / cs), math.floor(o[1] / cs)\n    sx = 1 if d[0] > 0 else (-1 if d[0] < 0 else 0)\n    sy = 1 if d[1] > 0 else (-1 if d[1] < 0 else 0)\n    inf = float('inf')\n    if sx > 0:\n        tmx = ((ix + 1) * cs - o[0]) / d[0]\n    elif sx < 0:\n        tmx = (ix * cs - o[0]) / d[0]\n    else:\n        tmx = inf\n    if sy > 0:\n        tmy = ((iy + 1) * cs - o[1]) / d[1]\n    elif sy < 0:\n        tmy = (iy * cs - o[1]) / d[1]\n    else:\n        tmy = inf\n    tdx = cs / abs(d[0]) if sx else inf\n    tdy = cs / abs(d[1]) if sy else inf\n    cells = [[ix, iy]]\n    while len(cells) < 64:\n        if tmx <= tmy:\n            t, ax = tmx, 0\n        else:\n            t, ax = tmy, 1\n        if t > max_t:\n            break\n        if tmx == tmy:\n            ix += sx\n            tmx += tdx\n            iy += sy\n            tmy += tdy\n        elif ax == 0:\n            ix += sx\n            tmx += tdx\n        else:\n            iy += sy\n            tmy += tdy\n        cells.append([ix, iy])\n    return cells\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[0.0, -1.5], [4, -2], 1.0, 3.0], [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]]], [[[1.75, -0.25], [4, 4], 0.5, 2.0], [[3, -1], [4, -1], [4, 0], [5, 0], [5, 1], [6, 1], [6, 2], [7, 2], [7, 3], [8, 3], [8, 4], [9, 4], [9, 5], [10, 5], [10, 6], [11, 6], [11, 7], [12, 7], [12, 8], [13, 8], [13, 9], [14, 9], [14, 10], [15, 10], [15, 11], [16, 11], [16, 12], [17, 12], [17, 13], [18, 13], [18, 14], [19, 14], [19, 15]]], [[[-1.25, 1.5], [-4, 2], 0.5, 3.0], [[-3, 3], [-4, 3], [-5, 3], [-5, 4], [-6, 4], [-7, 4], [-7, 5], [-8, 5], [-9, 5], [-9, 6], [-10, 6], [-11, 6], [-11, 7], [-12, 7], [-13, 7], [-13, 8], [-14, 8], [-15, 8], [-15, 9], [-16, 9], [-17, 9], [-17, 10], [-18, 10], [-19, 10], [-19, 11], [-20, 11], [-21, 11], [-21, 12], [-22, 12], [-23, 12], [-23, 13], [-24, 13], [-25, 13], [-25, 14], [-26, 14], [-27, 14], [-27, 15]]], [[[-0.75, 0.75], [0, 0], 1.0, 0.5], [[-1, 0]]], [[[0.25, 1.75], [-1, 4], 0.5, 3.0], [[0, 3], [0, 4], [0, 5], [-1, 5], [-1, 6], [-1, 7], [-1, 8], [-1, 9], [-2, 9], [-2, 10], [-2, 11], [-2, 12], [-2, 13], [-3, 13], [-3, 14], [-3, 15], [-3, 16], [-3, 17], [-4, 17], [-4, 18], [-4, 19], [-4, 20], [-4, 21], [-5, 21], [-5, 22], [-5, 23], [-5, 24], [-5, 25], [-6, 25], [-6, 26], [-6, 27]]], [[[0.0, 0.5], [-4, -1], 1.0, 2.0], [[0, 0], [-1, 0], [-2, 0], [-3, 0], [-3, -1], [-4, -1], [-5, -1], [-6, -1], [-7, -1], [-7, -2], [-8, -2], [-9, -2]]], [[[-1.0, -2.0], [-4, 4], 0.5, 0.5], [[-2, -4], [-3, -4], [-4, -4], [-4, -3], [-5, -3], [-5, -2], [-6, -2], [-6, -1], [-7, -1], [-7, 0]]], [[[-1.5, -1.5], [4, 4], 0.5, 0.5], [[-3, -3], [-2, -3], [-2, -2], [-1, -2], [-1, -1], [0, -1], [0, 0], [1, 0], [1, 1]]]], [[[[-2.0, -0.75], [-4, 2], 0.5, 0.5], [[-4, -2], [-5, -2], [-6, -2], [-6, -1], [-7, -1], [-8, -1], [-8, 0], [-9, 0]]], [[[-1.25, 0.5], [1, -1], 1.0, 3.0], [[-2, 0], [-1, 0], [-1, -1], [0, -1], [0, -2], [1, -2], [1, -3]]], [[[-2.0, 0.75], [4, 4], 0.5, 3.0], [[-4, 1], [-4, 2], [-3, 2], [-3, 3], [-2, 3], [-2, 4], [-1, 4], [-1, 5], [0, 5], [0, 6], [1, 6], [1, 7], [2, 7], [2, 8], [3, 8], [3, 9], [4, 9], [4, 10], [5, 10], [5, 11], [6, 11], [6, 12], [7, 12], [7, 13], [8, 13], [8, 14], [9, 14], [9, 15], [10, 15], [10, 16], [11, 16], [11, 17], [12, 17], [12, 18], [13, 18], [13, 19], [14, 19], [14, 20], [15, 20], [15, 21], [16, 21], [16, 22], [17, 22], [17, 23], [18, 23], [18, 24], [19, 24], [19, 25], [20, 25]]], [[[1.5, 2.0], [-1, 2], 0.5, 1.0], [[3, 4], [2, 4], [2, 5], [1, 5], [1, 6], [1, 7], [0, 7], [0, 8]]], [[[0.75, -1.0], [0, 4], 2.0, 1.0], [[0, -1], [0, 0], [0, 1]]], [[[0.5, -1.0], [1, -2], 2.0, 3.0], [[0, -1], [0, -2], [1, -2], [1, -3], [1, -4]]], [[[-0.25, 2.0], [-1, 2], 0.5, 1.0], [[-1, 4], [-2, 4], [-2, 5], [-2, 6], [-3, 6], [-3, 7], [-3, 8]]], [[[-0.25, 0.5], [0, -1], 0.5, 2.0], [[-1, 1], [-1, 0], [-1, -1], [-1, -2], [-1, -3], [-1, -4]]]], [[[[-0.25, 1.0], [1, 4], 2.0, 2.0], [[-1, 0], [0, 0], [0, 1], [0, 2], [0, 3], [0, 4]]], [[[2.0, 1.25], [-1, -2], 1.0, 2.0], [[2, 1], [1, 1], [1, 0], [1, -1], [0, -1], [0, -2], [0, -3], [-1, -3]]], [[[1.0, 0.5], [-1, 4], 0.5, 3.0], [[2, 1], [1, 1], [1, 2], [1, 3], [1, 4], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [-1, 8], [-1, 9], [-1, 10], [-1, 11], [-1, 12], [-2, 12], [-2, 13], [-2, 14], [-2, 15], [-2, 16], [-3, 16], [-3, 17], [-3, 18], [-3, 19], [-3, 20], [-4, 20], [-4, 21], [-4, 22], [-4, 23], [-4, 24], [-5, 24], [-5, 25]]], [[[-0.25, 0.75], [-2, 2], 0.5, 2.0], [[-1, 1], [-2, 1], [-2, 2], [-3, 2], [-3, 3], [-4, 3], [-4, 4], [-5, 4], [-5, 5], [-6, 5], [-6, 6], [-7, 6], [-7, 7], [-8, 7], [-8, 8], [-9, 8], [-9, 9]]], [[[0.25, -1.75], [-2, -2], 2.0, 0.5], [[0, -1], [-1, -1], [-1, -2]]], [[[0.25, 0.25], [-1, 0], 1.0, 1.0], [[0, 0], [-1, 0]]], [[[-1.25, 0.75], [-4, -2], 1.0, 3.0], [[-2, 0], [-3, 0], [-3, -1], [-4, -1], [-5, -1], [-5, -2], [-6, -2], [-7, -2], [-7, -3], [-8, -3], [-9, -3], [-9, -4], [-10, -4], [-11, -4], [-11, -5], [-12, -5], [-13, -5], [-13, -6], [-14, -6]]], [[[0.25, 1.25], [-4, 4], 0.5, 1.0], [[0, 2], [-1, 2], [-1, 3], [-2, 3], [-2, 4], [-3, 4], [-3, 5], [-4, 5], [-4, 6], [-5, 6], [-5, 7], [-6, 7], [-6, 8], [-7, 8], [-7, 9], [-8, 9], [-8, 10]]]], [[[[-1.25, 0.75], [-2, -2], 0.5, 0.5], [[-3, 1], [-4, 1], [-4, 0], [-5, 0], [-5, -1]]], [[[1.5, -1.75], [2, 1], 1.0, 3.0], [[1, -2], [2, -2], [3, -2], [3, -1], [4, -1], [5, -1], [5, 0], [6, 0], [7, 0], [7, 1]]], [[[-0.5, -1.5], [-1, -1], 0.5, 2.0], [[-1, -3], [-2, -3], [-2, -4], [-3, -4], [-3, -5], [-4, -5], [-4, -6], [-5, -6], [-5, -7], [-6, -7], [-6, -8]]], [[[1.25, 0.5], [0, -1], 2.0, 3.0], [[0, 0], [0, -1], [0, -2]]], [[[-1.25, 1.75], [0, 2], 0.5, 0.5], [[-3, 3], [-3, 4], [-3, 5]]], [[[0.5, 0.5], [2, 2], 1.0, 1.0], [[0, 0], [1, 0], [1, 1], [2, 1], [2, 2]]], [[[1.75, -1.75], [1, -1], 1.0, 3.0], [[1, -2], [2, -2], [2, -3], [3, -3], [3, -4], [4, -4], [4, -5]]], [[[-0.25, -0.75], [0, 1], 0.5, 2.0], [[-1, -2], [-1, -1], [-1, 0], [-1, 1], [-1, 2]]]], [[[[0.0, 2.0], [-1, -2], 2.0, 0.5], [[0, 1], [-1, 1], [-1, 0]]], [[[-0.5, 0.0], [2, 2], 2.0, 0.5], [[-1, 0], [0, 0]]], [[[-1.5, -2.0], [-4, 4], 0.5, 0.5], [[-3, -4], [-4, -4], [-5, -4], [-5, -3], [-6, -3], [-6, -2], [-7, -2], [-7, -1], [-8, -1], [-8, 0]]], [[[1.25, 1.75], [-1, -2], 0.5, 2.0], [[2, 3], [2, 2], [1, 2], [1, 1], [1, 0], [0, 0], [0, -1], [0, -2], [-1, -2], [-1, -3], [-1, -4], [-2, -4], [-2, -5]]], [[[0.75, -1.25], [2, -2], 0.5, 1.0], [[1, -3], [2, -3], [2, -4], [3, -4], [3, -5], [4, -5], [4, -6], [5, -6], [5, -7]]], [[[-2.0, 2.0], [-2, 2], 1.0, 1.0], [[-2, 2], [-3, 2], [-4, 2], [-4, 3], [-5, 3], [-5, 4]]], [[[-1.0, -1.0], [-4, -1], 1.0, 0.5], [[-1, -1], [-2, -1], [-2, -2], [-3, -2], [-4, -2]]], [[[0.5, -1.5], [2, 4], 1.0, 0.5], [[0, -2], [0, -1], [1, -1], [1, 0]]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"case %d\" % i, solve(*args), expected)\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":"01a4459e63553c339d186a93d535b2f26d0a562ef74f95290107fb0ff146558c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(o, d, cs, max_t):\n    ix, iy = math.floor(o[0] / cs), math.floor(o[1] / cs)\n    sx = 1 if d[0] > 0 else (-1 if d[0] < 0 else 0)\n    sy = 1 if d[1] > 0 else (-1 if d[1] < 0 else 0)\n    inf = float('inf')\n    if sx > 0:\n        tmx = ((ix + 1) * cs - o[0]) / d[0]\n    elif sx < 0:\n        tmx = (ix * cs - o[0]) / d[0]\n    else:\n        tmx = inf\n    if sy > 0:\n        tmy = ((iy + 1) * cs - o[1]) / d[1]\n    elif sy < 0:\n        tmy = (iy * cs - o[1]) / d[1]\n    else:\n        tmy = inf\n    tdx = cs / abs(d[0]) if sx else inf\n    tdy = cs / abs(d[1]) if sy else inf\n    cells = [[ix, iy]]\n    while len(cells) < 64:\n        if tmx < tmy:\n            t, ax = tmx, 0\n        else:\n            t, ax = tmy, 1\n        if t > max_t:\n            break\n        if ax == 0:\n            ix += sx\n            tmx += tdx\n        else:\n            iy += sy\n            tmy += tdy\n        cells.append([ix, iy])\n    return cells\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[0.0, -1.5], [4, -2], 1.0, 3.0], [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]]], [[[1.75, -0.25], [4, 4], 0.5, 2.0], [[3, -1], [4, -1], [4, 0], [5, 0], [5, 1], [6, 1], [6, 2], [7, 2], [7, 3], [8, 3], [8, 4], [9, 4], [9, 5], [10, 5], [10, 6], [11, 6], [11, 7], [12, 7], [12, 8], [13, 8], [13, 9], [14, 9], [14, 10], [15, 10], [15, 11], [16, 11], [16, 12], [17, 12], [17, 13], [18, 13], [18, 14], [19, 14], [19, 15]]], [[[-1.25, 1.5], [-4, 2], 0.5, 3.0], [[-3, 3], [-4, 3], [-5, 3], [-5, 4], [-6, 4], [-7, 4], [-7, 5], [-8, 5], [-9, 5], [-9, 6], [-10, 6], [-11, 6], [-11, 7], [-12, 7], [-13, 7], [-13, 8], [-14, 8], [-15, 8], [-15, 9], [-16, 9], [-17, 9], [-17, 10], [-18, 10], [-19, 10], [-19, 11], [-20, 11], [-21, 11], [-21, 12], [-22, 12], [-23, 12], [-23, 13], [-24, 13], [-25, 13], [-25, 14], [-26, 14], [-27, 14], [-27, 15]]], [[[-0.75, 0.75], [0, 0], 1.0, 0.5], [[-1, 0]]], [[[0.25, 1.75], [-1, 4], 0.5, 3.0], [[0, 3], [0, 4], [0, 5], [-1, 5], [-1, 6], [-1, 7], [-1, 8], [-1, 9], [-2, 9], [-2, 10], [-2, 11], [-2, 12], [-2, 13], [-3, 13], [-3, 14], [-3, 15], [-3, 16], [-3, 17], [-4, 17], [-4, 18], [-4, 19], [-4, 20], [-4, 21], [-5, 21], [-5, 22], [-5, 23], [-5, 24], [-5, 25], [-6, 25], [-6, 26], [-6, 27]]], [[[0.0, 0.5], [-4, -1], 1.0, 2.0], [[0, 0], [-1, 0], [-2, 0], [-3, 0], [-3, -1], [-4, -1], [-5, -1], [-6, -1], [-7, -1], [-7, -2], [-8, -2], [-9, -2]]], [[[-1.0, -2.0], [-4, 4], 0.5, 0.5], [[-2, -4], [-3, -4], [-4, -4], [-4, -3], [-5, -3], [-5, -2], [-6, -2], [-6, -1], [-7, -1], [-7, 0]]], [[[-1.5, -1.5], [4, 4], 0.5, 0.5], [[-3, -3], [-2, -3], [-2, -2], [-1, -2], [-1, -1], [0, -1], [0, 0], [1, 0], [1, 1]]]], [[[[-2.0, -0.75], [-4, 2], 0.5, 0.5], [[-4, -2], [-5, -2], [-6, -2], [-6, -1], [-7, -1], [-8, -1], [-8, 0], [-9, 0]]], [[[-1.25, 0.5], [1, -1], 1.0, 3.0], [[-2, 0], [-1, 0], [-1, -1], [0, -1], [0, -2], [1, -2], [1, -3]]], [[[-2.0, 0.75], [4, 4], 0.5, 3.0], [[-4, 1], [-4, 2], [-3, 2], [-3, 3], [-2, 3], [-2, 4], [-1, 4], [-1, 5], [0, 5], [0, 6], [1, 6], [1, 7], [2, 7], [2, 8], [3, 8], [3, 9], [4, 9], [4, 10], [5, 10], [5, 11], [6, 11], [6, 12], [7, 12], [7, 13], [8, 13], [8, 14], [9, 14], [9, 15], [10, 15], [10, 16], [11, 16], [11, 17], [12, 17], [12, 18], [13, 18], [13, 19], [14, 19], [14, 20], [15, 20], [15, 21], [16, 21], [16, 22], [17, 22], [17, 23], [18, 23], [18, 24], [19, 24], [19, 25], [20, 25]]], [[[1.5, 2.0], [-1, 2], 0.5, 1.0], [[3, 4], [2, 4], [2, 5], [1, 5], [1, 6], [1, 7], [0, 7], [0, 8]]], [[[0.75, -1.0], [0, 4], 2.0, 1.0], [[0, -1], [0, 0], [0, 1]]], [[[0.5, -1.0], [1, -2], 2.0, 3.0], [[0, -1], [0, -2], [1, -2], [1, -3], [1, -4]]], [[[-0.25, 2.0], [-1, 2], 0.5, 1.0], [[-1, 4], [-2, 4], [-2, 5], [-2, 6], [-3, 6], [-3, 7], [-3, 8]]], [[[-0.25, 0.5], [0, -1], 0.5, 2.0], [[-1, 1], [-1, 0], [-1, -1], [-1, -2], [-1, -3], [-1, -4]]]], [[[[-0.25, 1.0], [1, 4], 2.0, 2.0], [[-1, 0], [0, 0], [0, 1], [0, 2], [0, 3], [0, 4]]], [[[2.0, 1.25], [-1, -2], 1.0, 2.0], [[2, 1], [1, 1], [1, 0], [1, -1], [0, -1], [0, -2], [0, -3], [-1, -3]]], [[[1.0, 0.5], [-1, 4], 0.5, 3.0], [[2, 1], [1, 1], [1, 2], [1, 3], [1, 4], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [-1, 8], [-1, 9], [-1, 10], [-1, 11], [-1, 12], [-2, 12], [-2, 13], [-2, 14], [-2, 15], [-2, 16], [-3, 16], [-3, 17], [-3, 18], [-3, 19], [-3, 20], [-4, 20], [-4, 21], [-4, 22], [-4, 23], [-4, 24], [-5, 24], [-5, 25]]], [[[-0.25, 0.75], [-2, 2], 0.5, 2.0], [[-1, 1], [-2, 1], [-2, 2], [-3, 2], [-3, 3], [-4, 3], [-4, 4], [-5, 4], [-5, 5], [-6, 5], [-6, 6], [-7, 6], [-7, 7], [-8, 7], [-8, 8], [-9, 8], [-9, 9]]], [[[0.25, -1.75], [-2, -2], 2.0, 0.5], [[0, -1], [-1, -1], [-1, -2]]], [[[0.25, 0.25], [-1, 0], 1.0, 1.0], [[0, 0], [-1, 0]]], [[[-1.25, 0.75], [-4, -2], 1.0, 3.0], [[-2, 0], [-3, 0], [-3, -1], [-4, -1], [-5, -1], [-5, -2], [-6, -2], [-7, -2], [-7, -3], [-8, -3], [-9, -3], [-9, -4], [-10, -4], [-11, -4], [-11, -5], [-12, -5], [-13, -5], [-13, -6], [-14, -6]]], [[[0.25, 1.25], [-4, 4], 0.5, 1.0], [[0, 2], [-1, 2], [-1, 3], [-2, 3], [-2, 4], [-3, 4], [-3, 5], [-4, 5], [-4, 6], [-5, 6], [-5, 7], [-6, 7], [-6, 8], [-7, 8], [-7, 9], [-8, 9], [-8, 10]]]], [[[[-1.25, 0.75], [-2, -2], 0.5, 0.5], [[-3, 1], [-4, 1], [-4, 0], [-5, 0], [-5, -1]]], [[[1.5, -1.75], [2, 1], 1.0, 3.0], [[1, -2], [2, -2], [3, -2], [3, -1], [4, -1], [5, -1], [5, 0], [6, 0], [7, 0], [7, 1]]], [[[-0.5, -1.5], [-1, -1], 0.5, 2.0], [[-1, -3], [-2, -3], [-2, -4], [-3, -4], [-3, -5], [-4, -5], [-4, -6], [-5, -6], [-5, -7], [-6, -7], [-6, -8]]], [[[1.25, 0.5], [0, -1], 2.0, 3.0], [[0, 0], [0, -1], [0, -2]]], [[[-1.25, 1.75], [0, 2], 0.5, 0.5], [[-3, 3], [-3, 4], [-3, 5]]], [[[0.5, 0.5], [2, 2], 1.0, 1.0], [[0, 0], [1, 0], [1, 1], [2, 1], [2, 2]]], [[[1.75, -1.75], [1, -1], 1.0, 3.0], [[1, -2], [2, -2], [2, -3], [3, -3], [3, -4], [4, -4], [4, -5]]], [[[-0.25, -0.75], [0, 1], 0.5, 2.0], [[-1, -2], [-1, -1], [-1, 0], [-1, 1], [-1, 2]]]], [[[[0.0, 2.0], [-1, -2], 2.0, 0.5], [[0, 1], [-1, 1], [-1, 0]]], [[[-0.5, 0.0], [2, 2], 2.0, 0.5], [[-1, 0], [0, 0]]], [[[-1.5, -2.0], [-4, 4], 0.5, 0.5], [[-3, -4], [-4, -4], [-5, -4], [-5, -3], [-6, -3], [-6, -2], [-7, -2], [-7, -1], [-8, -1], [-8, 0]]], [[[1.25, 1.75], [-1, -2], 0.5, 2.0], [[2, 3], [2, 2], [1, 2], [1, 1], [1, 0], [0, 0], [0, -1], [0, -2], [-1, -2], [-1, -3], [-1, -4], [-2, -4], [-2, -5]]], [[[0.75, -1.25], [2, -2], 0.5, 1.0], [[1, -3], [2, -3], [2, -4], [3, -4], [3, -5], [4, -5], [4, -6], [5, -6], [5, -7]]], [[[-2.0, 2.0], [-2, 2], 1.0, 1.0], [[-2, 2], [-3, 2], [-4, 2], [-4, 3], [-5, 3], [-5, 4]]], [[[-1.0, -1.0], [-4, -1], 1.0, 0.5], [[-1, -1], [-2, -1], [-2, -2], [-3, -2], [-4, -2]]], [[[0.5, -1.5], [2, 4], 1.0, 0.5], [[0, -2], [0, -1], [1, -1], [1, 0]]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"case %d\" % i, solve(*args), expected)\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":"A deterministic bounded teaching model with stipulated toy conventions; not a production physics engine or spatial index. 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":"w2-collision_detection_broadphase-grid-ray-dda-corner-tie-step","generated_at":"2026-09-29T14:51:00.372084+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Broadphase stages decide which object pairs ever reach narrowphase; a wrong boundary, ordering or bookkeeping rule silently drops real contacts or floods the solver with false candidates.","root_cause":"The axis choice uses tmx < tmy.","sha256":"dca7a999207431c6749c2fc30d0847a24f6a7ca13709da0aaabc39436e41e3c0","title":"Ray exactly through a grid corner steps y first · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":41.728,"exit_code":1,"observations":[{"actual":[[0,-2],[1,-3],[2,-3],[3,-4],[4,-4],[5,-5],[6,-5],[7,-6],[8,-6],[9,-7],[10,-7],[11,-8],[12,-8]],"check":"case 0","expected":[[0,-2],[1,-2],[1,-3],[2,-3],[3,-3],[3,-4],[4,-4],[5,-4],[5,-5],[6,-5],[7,-5],[7,-6],[8,-6],[9,-6],[9,-7],[10,-7],[11,-7],[11,-8],[12,-8]],"passed":false},{"actual":[[3,-1],[4,0],[5,1],[6,2],[7,3],[8,4],[9,5],[10,6],[11,7],[12,8],[13,9],[14,10],[15,11],[16,12],[17,13],[18,14],[19,15]],"check":"case 1","expected":[[3,-1],[4,-1],[4,0],[5,0],[5,1],[6,1],[6,2],[7,2],[7,3],[8,3],[8,4],[9,4],[9,5],[10,5],[10,6],[11,6],[11,7],[12,7],[12,8],[13,8],[13,9],[14,9],[14,10],[15,10],[15,11],[16,11],[16,12],[17,12],[17,13],[18,13],[18,14],[19,14],[19,15]],"passed":false},{"actual":[[-3,3],[-4,3],[-5,3],[-5,4],[-6,4],[-7,4],[-7,5],[-8,5],[-9,5],[-9,6],[-10,6],[-11,6],[-11,7],[-12,7],[-13,7],[-13,8],[-14,8],[-15,8],[-15,9],[-16,9],[-17,9],[-17,10],[-18,10],[-19,10],[-19,11],[-20,11],[-21,11],[-21,12],[-22,12],[-23,12],[-23,13],[-24,13],[-25,13],[-25,14],[-26,14],[-27,14],[-27,15]],"check":"case 2","expected":[[-3,3],[-4,3],[-5,3],[-5,4],[-6,4],[-7,4],[-7,5],[-8,5],[-9,5],[-9,6],[-10,6],[-11,6],[-11,7],[-12,7],[-13,7],[-13,8],[-14,8],[-15,8],[-15,9],[-16,9],[-17,9],[-17,10],[-18,10],[-19,10],[-19,11],[-20,11],[-21,11],[-21,12],[-22,12],[-23,12],[-23,13],[-24,13],[-25,13],[-25,14],[-26,14],[-27,14],[-27,15]],"passed":true},{"actual":[[-1,0]],"check":"case 3","expected":[[-1,0]],"passed":true},{"actual":[[0,3],[0,4],[0,5],[-1,5],[-1,6],[-1,7],[-1,8],[-1,9],[-2,9],[-2,10],[-2,11],[-2,12],[-2,13],[-3,13],[-3,14],[-3,15],[-3,16],[-3,17],[-4,17],[-4,18],[-4,19],[-4,20],[-4,21],[-5,21],[-5,22],[-5,23],[-5,24],[-5,25],[-6,25],[-6,26],[-6,27]],"check":"case 4","expected":[[0,3],[0,4],[0,5],[-1,5],[-1,6],[-1,7],[-1,8],[-1,9],[-2,9],[-2,10],[-2,11],[-2,12],[-2,13],[-3,13],[-3,14],[-3,15],[-3,16],[-3,17],[-4,17],[-4,18],[-4,19],[-4,20],[-4,21],[-5,21],[-5,22],[-5,23],[-5,24],[-5,25],[-6,25],[-6,26],[-6,27]],"passed":true},{"actual":[[0,0],[-1,0],[-2,0],[-3,-1],[-4,-1],[-5,-1],[-6,-1],[-7,-2],[-8,-2],[-9,-2]],"check":"case 5","expected":[[0,0],[-1,0],[-2,0],[-3,0],[-3,-1],[-4,-1],[-5,-1],[-6,-1],[-7,-1],[-7,-2],[-8,-2],[-9,-2]],"passed":false},{"actual":[[-2,-4],[-3,-4],[-4,-3],[-5,-2],[-6,-1],[-7,0]],"check":"case 6","expected":[[-2,-4],[-3,-4],[-4,-4],[-4,-3],[-5,-3],[-5,-2],[-6,-2],[-6,-1],[-7,-1],[-7,0]],"passed":false},{"actual":[[-3,-3],[-2,-2],[-1,-1],[0,0],[1,1]],"check":"case 7","expected":[[-3,-3],[-2,-3],[-2,-2],[-1,-2],[-1,-1],[0,-1],[0,0],[1,0],[1,1]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[0, -2], [1, -3], [2, -3], [3, -4], [4, -4], [5, -5], [6, -5], [7, -6], [8, -6], [9, -7], [10, -7], [11, -8], [12, -8]], \"expected\": [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [[3, -1], [4, 0], [5, 1], [6, 2], [7, 3], [8, 4], [9, 5], [10, 6], [11, 7], [12, 8], [13, 9], [14, 10], [15, 11], [16, 12], [17, 13], [18, 14], [19, 15]], \"expected\": [[3, -1], [4, -1], [4, 0], [5, 0], [5, 1], [6, 1], [6, 2], [7, 2], [7, 3], [8, 3], [8, 4], [9, 4], [9, 5], [10, 5], [10, 6], [11, 6], [11, 7], [12, 7], [12, 8], [13, 8], [13, 9], [14, 9], [14, 10], [15, 10], [15, 11], [16, 11], [16, 12], [17, 12], [17, 13], [18, 13], [18, 14], [19, 14], [19, 15]], \"passed\": false}, {\"check\": \"case 2\", \"actual\": [[-3, 3], [-4, 3], [-5, 3], [-5, 4], [-6, 4], [-7, 4], [-7, 5], [-8, 5], [-9, 5], [-9, 6], [-10, 6], [-11, 6], [-11, 7], [-12, 7], [-13, 7], [-13, 8], [-14, 8], [-15, 8], [-15, 9], [-16, 9], [-17, 9], [-17, 10], [-18, 10], [-19, 10], [-19, 11], [-20, 11], [-21, 11], [-21, 12], [-22, 12], [-23, 12], [-23, 13], [-24, 13], [-25, 13], [-25, 14], [-26, 14], [-27, 14], [-27, 15]], \"expected\": [[-3, 3], [-4, 3], [-5, 3], [-5, 4], [-6, 4], [-7, 4], [-7, 5], [-8, 5], [-9, 5], [-9, 6], [-10, 6], [-11, 6], [-11, 7], [-12, 7], [-13, 7], [-13, 8], [-14, 8], [-15, 8], [-15, 9], [-16, 9], [-17, 9], [-17, 10], [-18, 10], [-19, 10], [-19, 11], [-20, 11], [-21, 11], [-21, 12], [-22, 12], [-23, 12], [-23, 13], [-24, 13], [-25, 13], [-25, 14], [-26, 14], [-27, 14], [-27, 15]], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [[-1, 0]], \"expected\": [[-1, 0]], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [[0, 3], [0, 4], [0, 5], [-1, 5], [-1, 6], [-1, 7], [-1, 8], [-1, 9], [-2, 9], [-2, 10], [-2, 11], [-2, 12], [-2, 13], [-3, 13], [-3, 14], [-3, 15], [-3, 16], [-3, 17], [-4, 17], [-4, 18], [-4, 19], [-4, 20], [-4, 21], [-5, 21], [-5, 22], [-5, 23], [-5, 24], [-5, 25], [-6, 25], [-6, 26], [-6, 27]], \"expected\": [[0, 3], [0, 4], [0, 5], [-1, 5], [-1, 6], [-1, 7], [-1, 8], [-1, 9], [-2, 9], [-2, 10], [-2, 11], [-2, 12], [-2, 13], [-3, 13], [-3, 14], [-3, 15], [-3, 16], [-3, 17], [-4, 17], [-4, 18], [-4, 19], [-4, 20], [-4, 21], [-5, 21], [-5, 22], [-5, 23], [-5, 24], [-5, 25], [-6, 25], [-6, 26], [-6, 27]], \"passed\": true}, {\"check\": \"case 5\", \"actual\": [[0, 0], [-1, 0], [-2, 0], [-3, -1], [-4, -1], [-5, -1], [-6, -1], [-7, -2], [-8, -2], [-9, -2]], \"expected\": [[0, 0], [-1, 0], [-2, 0], [-3, 0], [-3, -1], [-4, -1], [-5, -1], [-6, -1], [-7, -1], [-7, -2], [-8, -2], [-9, -2]], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [[-2, -4], [-3, -4], [-4, -3], [-5, -2], [-6, -1], [-7, 0]], \"expected\": [[-2, -4], [-3, -4], [-4, -4], [-4, -3], [-5, -3], [-5, -2], [-6, -2], [-6, -1], [-7, -1], [-7, 0]], \"passed\": false}, {\"check\": \"case 7\", \"actual\": [[-3, -3], [-2, -2], [-1, -1], [0, 0], [1, 1]], \"expected\": [[-3, -3], [-2, -3], [-2, -2], [-1, -2], [-1, -1], [0, -1], [0, 0], [1, 0], [1, 1]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.392,"exit_code":1,"observations":[{"actual":[[0,-2],[0,-3],[1,-3],[2,-3],[2,-4],[3,-4],[4,-4],[4,-5],[5,-5],[6,-5],[6,-6],[7,-6],[8,-6],[8,-7],[9,-7],[10,-7],[10,-8],[11,-8],[12,-8]],"check":"case 0","expected":[[0,-2],[1,-2],[1,-3],[2,-3],[3,-3],[3,-4],[4,-4],[5,-4],[5,-5],[6,-5],[7,-5],[7,-6],[8,-6],[9,-6],[9,-7],[10,-7],[11,-7],[11,-8],[12,-8]],"passed":false},{"actual":[[3,-1],[3,0],[4,0],[4,1],[5,1],[5,2],[6,2],[6,3],[7,3],[7,4],[8,4],[8,5],[9,5],[9,6],[10,6],[10,7],[11,7],[11,8],[12,8],[12,9],[13,9],[13,10],[14,10],[14,11],[15,11],[15,12],[16,12],[16,13],[17,13],[17,14],[18,14],[18,15],[19,15]],"check":"case 1","expected":[[3,-1],[4,-1],[4,0],[5,0],[5,1],[6,1],[6,2],[7,2],[7,3],[8,3],[8,4],[9,4],[9,5],[10,5],[10,6],[11,6],[11,7],[12,7],[12,8],[13,8],[13,9],[14,9],[14,10],[15,10],[15,11],[16,11],[16,12],[17,12],[17,13],[18,13],[18,14],[19,14],[19,15]],"passed":false},{"actual":[[-3,3],[-4,3],[-5,3],[-5,4],[-6,4],[-7,4],[-7,5],[-8,5],[-9,5],[-9,6],[-10,6],[-11,6],[-11,7],[-12,7],[-13,7],[-13,8],[-14,8],[-15,8],[-15,9],[-16,9],[-17,9],[-17,10],[-18,10],[-19,10],[-19,11],[-20,11],[-21,11],[-21,12],[-22,12],[-23,12],[-23,13],[-24,13],[-25,13],[-25,14],[-26,14],[-27,14],[-27,15]],"check":"case 2","expected":[[-3,3],[-4,3],[-5,3],[-5,4],[-6,4],[-7,4],[-7,5],[-8,5],[-9,5],[-9,6],[-10,6],[-11,6],[-11,7],[-12,7],[-13,7],[-13,8],[-14,8],[-15,8],[-15,9],[-16,9],[-17,9],[-17,10],[-18,10],[-19,10],[-19,11],[-20,11],[-21,11],[-21,12],[-22,12],[-23,12],[-23,13],[-24,13],[-25,13],[-25,14],[-26,14],[-27,14],[-27,15]],"passed":true},{"actual":[[-1,0]],"check":"case 3","expected":[[-1,0]],"passed":true},{"actual":[[0,3],[0,4],[0,5],[-1,5],[-1,6],[-1,7],[-1,8],[-1,9],[-2,9],[-2,10],[-2,11],[-2,12],[-2,13],[-3,13],[-3,14],[-3,15],[-3,16],[-3,17],[-4,17],[-4,18],[-4,19],[-4,20],[-4,21],[-5,21],[-5,22],[-5,23],[-5,24],[-5,25],[-6,25],[-6,26],[-6,27]],"check":"case 4","expected":[[0,3],[0,4],[0,5],[-1,5],[-1,6],[-1,7],[-1,8],[-1,9],[-2,9],[-2,10],[-2,11],[-2,12],[-2,13],[-3,13],[-3,14],[-3,15],[-3,16],[-3,17],[-4,17],[-4,18],[-4,19],[-4,20],[-4,21],[-5,21],[-5,22],[-5,23],[-5,24],[-5,25],[-6,25],[-6,26],[-6,27]],"passed":true},{"actual":[[0,0],[-1,0],[-2,0],[-2,-1],[-3,-1],[-4,-1],[-5,-1],[-6,-1],[-6,-2],[-7,-2],[-8,-2],[-9,-2]],"check":"case 5","expected":[[0,0],[-1,0],[-2,0],[-3,0],[-3,-1],[-4,-1],[-5,-1],[-6,-1],[-7,-1],[-7,-2],[-8,-2],[-9,-2]],"passed":false},{"actual":[[-2,-4],[-3,-4],[-3,-3],[-4,-3],[-4,-2],[-5,-2],[-5,-1],[-6,-1],[-6,0],[-7,0]],"check":"case 6","expected":[[-2,-4],[-3,-4],[-4,-4],[-4,-3],[-5,-3],[-5,-2],[-6,-2],[-6,-1],[-7,-1],[-7,0]],"passed":false},{"actual":[[-3,-3],[-3,-2],[-2,-2],[-2,-1],[-1,-1],[-1,0],[0,0],[0,1],[1,1]],"check":"case 7","expected":[[-3,-3],[-2,-3],[-2,-2],[-1,-2],[-1,-1],[0,-1],[0,0],[1,0],[1,1]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[0, -2], [0, -3], [1, -3], [2, -3], [2, -4], [3, -4], [4, -4], [4, -5], [5, -5], [6, -5], [6, -6], [7, -6], [8, -6], [8, -7], [9, -7], [10, -7], [10, -8], [11, -8], [12, -8]], \"expected\": [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [[3, -1], [3, 0], [4, 0], [4, 1], [5, 1], [5, 2], [6, 2], [6, 3], [7, 3], [7, 4], [8, 4], [8, 5], [9, 5], [9, 6], [10, 6], [10, 7], [11, 7], [11, 8], [12, 8], [12, 9], [13, 9], [13, 10], [14, 10], [14, 11], [15, 11], [15, 12], [16, 12], [16, 13], [17, 13], [17, 14], [18, 14], [18, 15], [19, 15]], \"expected\": [[3, -1], [4, -1], [4, 0], [5, 0], [5, 1], [6, 1], [6, 2], [7, 2], [7, 3], [8, 3], [8, 4], [9, 4], [9, 5], [10, 5], [10, 6], [11, 6], [11, 7], [12, 7], [12, 8], [13, 8], [13, 9], [14, 9], [14, 10], [15, 10], [15, 11], [16, 11], [16, 12], [17, 12], [17, 13], [18, 13], [18, 14], [19, 14], [19, 15]], \"passed\": false}, {\"check\": \"case 2\", \"actual\": [[-3, 3], [-4, 3], [-5, 3], [-5, 4], [-6, 4], [-7, 4], [-7, 5], [-8, 5], [-9, 5], [-9, 6], [-10, 6], [-11, 6], [-11, 7], [-12, 7], [-13, 7], [-13, 8], [-14, 8], [-15, 8], [-15, 9], [-16, 9], [-17, 9], [-17, 10], [-18, 10], [-19, 10], [-19, 11], [-20, 11], [-21, 11], [-21, 12], [-22, 12], [-23, 12], [-23, 13], [-24, 13], [-25, 13], [-25, 14], [-26, 14], [-27, 14], [-27, 15]], \"expected\": [[-3, 3], [-4, 3], [-5, 3], [-5, 4], [-6, 4], [-7, 4], [-7, 5], [-8, 5], [-9, 5], [-9, 6], [-10, 6], [-11, 6], [-11, 7], [-12, 7], [-13, 7], [-13, 8], [-14, 8], [-15, 8], [-15, 9], [-16, 9], [-17, 9], [-17, 10], [-18, 10], [-19, 10], [-19, 11], [-20, 11], [-21, 11], [-21, 12], [-22, 12], [-23, 12], [-23, 13], [-24, 13], [-25, 13], [-25, 14], [-26, 14], [-27, 14], [-27, 15]], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [[-1, 0]], \"expected\": [[-1, 0]], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [[0, 3], [0, 4], [0, 5], [-1, 5], [-1, 6], [-1, 7], [-1, 8], [-1, 9], [-2, 9], [-2, 10], [-2, 11], [-2, 12], [-2, 13], [-3, 13], [-3, 14], [-3, 15], [-3, 16], [-3, 17], [-4, 17], [-4, 18], [-4, 19], [-4, 20], [-4, 21], [-5, 21], [-5, 22], [-5, 23], [-5, 24], [-5, 25], [-6, 25], [-6, 26], [-6, 27]], \"expected\": [[0, 3], [0, 4], [0, 5], [-1, 5], [-1, 6], [-1, 7], [-1, 8], [-1, 9], [-2, 9], [-2, 10], [-2, 11], [-2, 12], [-2, 13], [-3, 13], [-3, 14], [-3, 15], [-3, 16], [-3, 17], [-4, 17], [-4, 18], [-4, 19], [-4, 20], [-4, 21], [-5, 21], [-5, 22], [-5, 23], [-5, 24], [-5, 25], [-6, 25], [-6, 26], [-6, 27]], \"passed\": true}, {\"check\": \"case 5\", \"actual\": [[0, 0], [-1, 0], [-2, 0], [-2, -1], [-3, -1], [-4, -1], [-5, -1], [-6, -1], [-6, -2], [-7, -2], [-8, -2], [-9, -2]], \"expected\": [[0, 0], [-1, 0], [-2, 0], [-3, 0], [-3, -1], [-4, -1], [-5, -1], [-6, -1], [-7, -1], [-7, -2], [-8, -2], [-9, -2]], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [[-2, -4], [-3, -4], [-3, -3], [-4, -3], [-4, -2], [-5, -2], [-5, -1], [-6, -1], [-6, 0], [-7, 0]], \"expected\": [[-2, -4], [-3, -4], [-4, -4], [-4, -3], [-5, -3], [-5, -2], [-6, -2], [-6, -1], [-7, -1], [-7, 0]], \"passed\": false}, {\"check\": \"case 7\", \"actual\": [[-3, -3], [-3, -2], [-2, -2], [-2, -1], [-1, -1], [-1, 0], [0, 0], [0, 1], [1, 1]], \"expected\": [[-3, -3], [-2, -3], [-2, -2], [-1, -2], [-1, -1], [0, -1], [0, 0], [1, 0], [1, 1]], \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}