{"abstract":"Jitter toward negative axes forces constant reinsertions.","category":"Collision detection broadphase","checks":8,"contract":"solve(tight, fat, disp, margin, mult): dynamic-tree proxy update. If the stored fat box contains the new tight box (inclusive) and its area is at most 4x that of a freshly built fat box, keep it: [False, fat]. Otherwise rebuild: tight expanded by margin on all sides, then extended by mult*disp on the side the motion points to; return [True, rebuilt box rounded to 6].","evaluation_group":"w2-collision_detection_broadphase-fat-aabb-reinsert","failed_approach":"Half margin on the low side still makes the box asymmetric.","family":"w2-collision_detection_broadphase-fat-aabb-reinsert-lower-margin","id":"FA-87401","implementations":{"attempt":{"sha256":"9943178acc8dfa27007d4b72f05576abbac252a3b911463fd7b8136018a11cec","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(tight, fat, disp, margin, mult):\n    def fatten():\n        f = [tight[0] - margin / 2, tight[1] - margin / 2, tight[2] + margin, tight[3] + margin]\n        dx, dy = mult * disp[0], mult * disp[1]\n        if dx < 0:\n            f[0] += dx\n        else:\n            f[2] += dx\n        if dy < 0:\n            f[1] += dy\n        else:\n            f[3] += dy\n        return [round(c, 6) for c in f]\n    def area(b):\n        return (b[2] - b[0]) * (b[3] - b[1])\n    inside = fat[0] <= tight[0] and fat[1] <= tight[1] and tight[2] <= fat[2] and tight[3] <= fat[3]\n    fresh = fatten()\n    if inside and area(fat) <= 4 * area(fresh):\n        return [False, fat]\n    return [True, fresh]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[-3.4, -0.9, -2.5, 0.7], [-7.4, -12.9, 1.5, 4.7], [0.1, 0.2], 0.1, 1.0], [True, [-3.5, -1.0, -2.3, 1.0]]], [[[1.7, 2.9, 3.1, 4.2], [0.6, 0.9, 6.0, 6.2], [0.1, -1.0], 0.5, 4.0], [False, [0.6, 0.9, 6.0, 6.2]]], [[[2.8, 1.5, 4.5, 2.1], [1.8, -1.5, 5.5, 3.1], [0, 0.2], 0.2, 1.0], [True, [2.6, 1.3, 4.7, 2.5]]], [[[-3.1, 3.1, -1.7, 4.7], [-3.2, 4.0, -1.5, 5.8], [-0.1, -1.0], 0.1, 1.0], [True, [-3.3, 2.0, -1.6, 4.8]]], [[[-2.5, -4.5, -1.7, -2.2], [-4.7, -5.2, -1.5, -1.5], [1.0, 0.5], 0.2, 1.0], [False, [-4.7, -5.2, -1.5, -1.5]]], [[[1.9, 0.0, 3.6, 1.9], [-2.1, -4.0, 7.6, 5.9], [-0.1, 0.2], 0.1, 1.0], [True, [1.7, -0.1, 3.7, 2.2]]], [[[-0.3, 2.0, 2.2, 4.9], [-1.8, 0.9, 1.7, 5.3], [1.0, 0.1], 0.5, 1.0], [True, [-0.8, 1.5, 3.7, 5.5]]], [[[-2.6, 2.9, -0.8, 3.7], [-3.5, 0.9, 1.8, 7.7], [0.4, -1.0], 0.5, 2.0], [False, [-3.5, 0.9, 1.8, 7.7]]]], [[[[4.9, 4.1, 7.8, 6.9], [4.8, 3.4, 8.5, 6.6], [-0.1, 0.5], 0.1, 4.0], [True, [4.4, 4.0, 7.9, 9.0]]], [[[1.4, 3.8, 4.1, 6.8], [0.3, 2.1, 4.4, 7.5], [-0.1, 0.5], 0.2, 1.0], [False, [0.3, 2.1, 4.4, 7.5]]], [[[0.8, -0.3, 1.7, 1.2], [-0.3, -2.3, 2.1, 3.2], [0.1, -1.0], 0.5, 1.0], [False, [-0.3, -2.3, 2.1, 3.2]]], [[[-0.1, -0.3, 1.1, 1.0], [-0.8, -0.3, 1.1, 1.4], [0.1, -0.2], 0.1, 4.0], [False, [-0.8, -0.3, 1.1, 1.4]]], [[[1.0, -3.0, 1.6, -2.8], [0.0, -4.0, 2.6, -1.8], [0.1, 0.2], 0.1, 1.0], [True, [0.9, -3.1, 1.8, -2.5]]], [[[3.5, 4.1, 4.2, 5.4], [3.4, 3.4, 4.9, 5.0], [-0.1, 0.5], 0.1, 1.0], [True, [3.3, 4.0, 4.3, 6.0]]], [[[2.6, 1.8, 5.1, 3.0], [1.0, 2.6, 4.9, 4.4], [0.4, -1.0], 0.2, 1.0], [True, [2.4, 0.6, 5.7, 3.2]]], [[[4.2, 2.6, 6.0, 4.8], [4.7, 2.7, 7.2, 5.2], [-0.6, -0.2], 0.1, 4.0], [True, [1.7, 1.7, 6.1, 4.9]]]], [[[[-0.8, 2.6, 0.4, 4.2], [-1.4, 2.3, 1.0, 4.8], [0, 0], 0.1, 1.0], [False, [-1.4, 2.3, 1.0, 4.8]]], [[[0.9, 1.6, 3.2, 3.0], [-2.5, 1.3, 3.3, 4.2], [0.4, -0.2], 0.5, 2.0], [False, [-2.5, 1.3, 3.3, 4.2]]], [[[1.5, -4.8, 2.9, -2.8], [1.0, -4.0, 2.6, -1.6], [0.4, -1.0], 0.1, 4.0], [True, [1.4, -8.9, 4.6, -2.7]]], [[[-0.9, 0.5, 1.8, 2.4], [-1.9, -0.1, 1.5, 3.0], [0.4, 0], 0.1, 2.0], [True, [-1.0, 0.4, 2.7, 2.5]]], [[[-2.2, -4.2, -1.7, -3.8], [-2.8, -4.8, -1.1, -3.2], [0.1, 0.2], 0.1, 1.0], [True, [-2.3, -4.3, -1.5, -3.5]]], [[[2.4, 1.1, 3.8, 3.7], [2.4, 1.9, 4.1, 4.8], [-0.1, -1.0], 0.1, 1.0], [True, [2.2, 0.0, 3.9, 3.8]]], [[[-4.2, -4.4, -1.9, -2.9], [-4.9, -4.6, -1.9, -2.8], [0.1, 0.1], 0.1, 1.0], [False, [-4.9, -4.6, -1.9, -2.8]]], [[[-4.2, 0.1, -2.1, 2.4], [-3.7, -0.2, -0.9, 2.9], [-0.6, 0.1], 0.1, 1.0], [True, [-4.9, 0.0, -2.0, 2.6]]]], [[[[5.9, -0.6, 8.3, 0.4], [4.7, -1.2, 7.4, -0.0], [1.0, 0.5], 0.1, 1.0], [True, [5.8, -0.7, 9.4, 1.0]]], [[[-3.9, -0.3, -3.4, 1.0], [-4.9, -1.3, -2.4, 2.0], [-0.1, 0], 0.2, 1.0], [True, [-4.2, -0.5, -3.2, 1.2]]], [[[-2.4, 2.5, -1.2, 3.0], [-2.5, 1.8, -1.0, 2.7], [-0.1, 0.5], 0.1, 1.0], [True, [-2.6, 2.4, -1.1, 3.6]]], [[[-0.8, -3.1, 0.9, -1.9], [-4.8, -6.2, 2.9, -1.5], [1.0, 0.1], 0.5, 4.0], [False, [-4.8, -6.2, 2.9, -1.5]]], [[[-2.8, -2.5, -0.4, -1.1], [-3.9, -2.6, -1.3, -1.0], [1.0, 0], 0.1, 2.0], [True, [-2.9, -2.6, 1.7, -1.0]]], [[[3.9, -3.1, 4.8, -1.7], [2.9, -4.1, 5.8, -0.7], [0, 0.2], 0.2, 1.0], [False, [2.9, -4.1, 5.8, -0.7]]], [[[2.8, -3.8, 4.5, -3.3], [2.5, -4.7, 4.8, -3.0], [-0.1, 0], 0.1, 1.0], [False, [2.5, -4.7, 4.8, -3.0]]], [[[-4.3, 0.5, -3.8, 1.7], [-4.4, 0.1, -3.3, 1.9], [-0.1, 0], 0.2, 1.0], [False, [-4.4, 0.1, -3.3, 1.9]]]], [[[[-0.9, -1.1, 0.9, 0.0], [-1.2, -1.4, 1.2, 0.3], [-0.1, 0.2], 0.2, 1.0], [False, [-1.2, -1.4, 1.2, 0.3]]], [[[4.1, -3.3, 6.8, -0.9], [3.2, -4.3, 6.9, -0.4], [0.4, 0.5], 0.5, 1.0], [False, [3.2, -4.3, 6.9, -0.4]]], [[[1.3, 2.0, 3.9, 4.1], [1.1, 1.7, 4.3, 4.2], [0, 0.1], 0.2, 1.0], [False, [1.1, 1.7, 4.3, 4.2]]], [[[-3.1, 3.5, -2.4, 4.0], [-3.7, 1.7, -1.8, 4.6], [0, 0], 0.1, 1.0], [True, [-3.2, 3.4, -2.3, 4.1]]], [[[1.5, 2.3, 3.1, 4.3], [1.2, 3.1, 3.2, 5.4], [0.1, -1.0], 0.1, 1.0], [True, [1.4, 1.2, 3.3, 4.4]]], [[[-0.3, -4.5, 1.1, -3.4], [-4.3, -16.5, 5.1, 0.6], [0, 0.2], 0.1, 1.0], [True, [-0.4, -4.6, 1.2, -3.1]]], [[[0.7, 2.5, 2.0, 3.2], [-0.3, 2.0, 3.0, 4.2], [-0.1, 0.2], 0.1, 1.0], [True, [0.5, 2.4, 2.1, 3.5]]], [[[0.3, -3.8, 1.7, -3.3], [-1.7, -9.8, 3.7, -1.3], [0, 0], 0.2, 1.0], [True, [0.1, -4.0, 1.9, -3.1]]]]]\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":"7c96c7dfa4d837b123f8fa3245710d5de2ca1cf1c537e4293b867038ade6c469","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(tight, fat, disp, margin, mult):\n    def fatten():\n        f = [tight[0], tight[1], tight[2] + margin, tight[3] + margin]\n        dx, dy = mult * disp[0], mult * disp[1]\n        if dx < 0:\n            f[0] += dx\n        else:\n            f[2] += dx\n        if dy < 0:\n            f[1] += dy\n        else:\n            f[3] += dy\n        return [round(c, 6) for c in f]\n    def area(b):\n        return (b[2] - b[0]) * (b[3] - b[1])\n    inside = fat[0] <= tight[0] and fat[1] <= tight[1] and tight[2] <= fat[2] and tight[3] <= fat[3]\n    fresh = fatten()\n    if inside and area(fat) <= 4 * area(fresh):\n        return [False, fat]\n    return [True, fresh]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[-3.4, -0.9, -2.5, 0.7], [-7.4, -12.9, 1.5, 4.7], [0.1, 0.2], 0.1, 1.0], [True, [-3.5, -1.0, -2.3, 1.0]]], [[[1.7, 2.9, 3.1, 4.2], [0.6, 0.9, 6.0, 6.2], [0.1, -1.0], 0.5, 4.0], [False, [0.6, 0.9, 6.0, 6.2]]], [[[2.8, 1.5, 4.5, 2.1], [1.8, -1.5, 5.5, 3.1], [0, 0.2], 0.2, 1.0], [True, [2.6, 1.3, 4.7, 2.5]]], [[[-3.1, 3.1, -1.7, 4.7], [-3.2, 4.0, -1.5, 5.8], [-0.1, -1.0], 0.1, 1.0], [True, [-3.3, 2.0, -1.6, 4.8]]], [[[-2.5, -4.5, -1.7, -2.2], [-4.7, -5.2, -1.5, -1.5], [1.0, 0.5], 0.2, 1.0], [False, [-4.7, -5.2, -1.5, -1.5]]], [[[1.9, 0.0, 3.6, 1.9], [-2.1, -4.0, 7.6, 5.9], [-0.1, 0.2], 0.1, 1.0], [True, [1.7, -0.1, 3.7, 2.2]]], [[[-0.3, 2.0, 2.2, 4.9], [-1.8, 0.9, 1.7, 5.3], [1.0, 0.1], 0.5, 1.0], [True, [-0.8, 1.5, 3.7, 5.5]]], [[[-2.6, 2.9, -0.8, 3.7], [-3.5, 0.9, 1.8, 7.7], [0.4, -1.0], 0.5, 2.0], [False, [-3.5, 0.9, 1.8, 7.7]]]], [[[[4.9, 4.1, 7.8, 6.9], [4.8, 3.4, 8.5, 6.6], [-0.1, 0.5], 0.1, 4.0], [True, [4.4, 4.0, 7.9, 9.0]]], [[[1.4, 3.8, 4.1, 6.8], [0.3, 2.1, 4.4, 7.5], [-0.1, 0.5], 0.2, 1.0], [False, [0.3, 2.1, 4.4, 7.5]]], [[[0.8, -0.3, 1.7, 1.2], [-0.3, -2.3, 2.1, 3.2], [0.1, -1.0], 0.5, 1.0], [False, [-0.3, -2.3, 2.1, 3.2]]], [[[-0.1, -0.3, 1.1, 1.0], [-0.8, -0.3, 1.1, 1.4], [0.1, -0.2], 0.1, 4.0], [False, [-0.8, -0.3, 1.1, 1.4]]], [[[1.0, -3.0, 1.6, -2.8], [0.0, -4.0, 2.6, -1.8], [0.1, 0.2], 0.1, 1.0], [True, [0.9, -3.1, 1.8, -2.5]]], [[[3.5, 4.1, 4.2, 5.4], [3.4, 3.4, 4.9, 5.0], [-0.1, 0.5], 0.1, 1.0], [True, [3.3, 4.0, 4.3, 6.0]]], [[[2.6, 1.8, 5.1, 3.0], [1.0, 2.6, 4.9, 4.4], [0.4, -1.0], 0.2, 1.0], [True, [2.4, 0.6, 5.7, 3.2]]], [[[4.2, 2.6, 6.0, 4.8], [4.7, 2.7, 7.2, 5.2], [-0.6, -0.2], 0.1, 4.0], [True, [1.7, 1.7, 6.1, 4.9]]]], [[[[-0.8, 2.6, 0.4, 4.2], [-1.4, 2.3, 1.0, 4.8], [0, 0], 0.1, 1.0], [False, [-1.4, 2.3, 1.0, 4.8]]], [[[0.9, 1.6, 3.2, 3.0], [-2.5, 1.3, 3.3, 4.2], [0.4, -0.2], 0.5, 2.0], [False, [-2.5, 1.3, 3.3, 4.2]]], [[[1.5, -4.8, 2.9, -2.8], [1.0, -4.0, 2.6, -1.6], [0.4, -1.0], 0.1, 4.0], [True, [1.4, -8.9, 4.6, -2.7]]], [[[-0.9, 0.5, 1.8, 2.4], [-1.9, -0.1, 1.5, 3.0], [0.4, 0], 0.1, 2.0], [True, [-1.0, 0.4, 2.7, 2.5]]], [[[-2.2, -4.2, -1.7, -3.8], [-2.8, -4.8, -1.1, -3.2], [0.1, 0.2], 0.1, 1.0], [True, [-2.3, -4.3, -1.5, -3.5]]], [[[2.4, 1.1, 3.8, 3.7], [2.4, 1.9, 4.1, 4.8], [-0.1, -1.0], 0.1, 1.0], [True, [2.2, 0.0, 3.9, 3.8]]], [[[-4.2, -4.4, -1.9, -2.9], [-4.9, -4.6, -1.9, -2.8], [0.1, 0.1], 0.1, 1.0], [False, [-4.9, -4.6, -1.9, -2.8]]], [[[-4.2, 0.1, -2.1, 2.4], [-3.7, -0.2, -0.9, 2.9], [-0.6, 0.1], 0.1, 1.0], [True, [-4.9, 0.0, -2.0, 2.6]]]], [[[[5.9, -0.6, 8.3, 0.4], [4.7, -1.2, 7.4, -0.0], [1.0, 0.5], 0.1, 1.0], [True, [5.8, -0.7, 9.4, 1.0]]], [[[-3.9, -0.3, -3.4, 1.0], [-4.9, -1.3, -2.4, 2.0], [-0.1, 0], 0.2, 1.0], [True, [-4.2, -0.5, -3.2, 1.2]]], [[[-2.4, 2.5, -1.2, 3.0], [-2.5, 1.8, -1.0, 2.7], [-0.1, 0.5], 0.1, 1.0], [True, [-2.6, 2.4, -1.1, 3.6]]], [[[-0.8, -3.1, 0.9, -1.9], [-4.8, -6.2, 2.9, -1.5], [1.0, 0.1], 0.5, 4.0], [False, [-4.8, -6.2, 2.9, -1.5]]], [[[-2.8, -2.5, -0.4, -1.1], [-3.9, -2.6, -1.3, -1.0], [1.0, 0], 0.1, 2.0], [True, [-2.9, -2.6, 1.7, -1.0]]], [[[3.9, -3.1, 4.8, -1.7], [2.9, -4.1, 5.8, -0.7], [0, 0.2], 0.2, 1.0], [False, [2.9, -4.1, 5.8, -0.7]]], [[[2.8, -3.8, 4.5, -3.3], [2.5, -4.7, 4.8, -3.0], [-0.1, 0], 0.1, 1.0], [False, [2.5, -4.7, 4.8, -3.0]]], [[[-4.3, 0.5, -3.8, 1.7], [-4.4, 0.1, -3.3, 1.9], [-0.1, 0], 0.2, 1.0], [False, [-4.4, 0.1, -3.3, 1.9]]]], [[[[-0.9, -1.1, 0.9, 0.0], [-1.2, -1.4, 1.2, 0.3], [-0.1, 0.2], 0.2, 1.0], [False, [-1.2, -1.4, 1.2, 0.3]]], [[[4.1, -3.3, 6.8, -0.9], [3.2, -4.3, 6.9, -0.4], [0.4, 0.5], 0.5, 1.0], [False, [3.2, -4.3, 6.9, -0.4]]], [[[1.3, 2.0, 3.9, 4.1], [1.1, 1.7, 4.3, 4.2], [0, 0.1], 0.2, 1.0], [False, [1.1, 1.7, 4.3, 4.2]]], [[[-3.1, 3.5, -2.4, 4.0], [-3.7, 1.7, -1.8, 4.6], [0, 0], 0.1, 1.0], [True, [-3.2, 3.4, -2.3, 4.1]]], [[[1.5, 2.3, 3.1, 4.3], [1.2, 3.1, 3.2, 5.4], [0.1, -1.0], 0.1, 1.0], [True, [1.4, 1.2, 3.3, 4.4]]], [[[-0.3, -4.5, 1.1, -3.4], [-4.3, -16.5, 5.1, 0.6], [0, 0.2], 0.1, 1.0], [True, [-0.4, -4.6, 1.2, -3.1]]], [[[0.7, 2.5, 2.0, 3.2], [-0.3, 2.0, 3.0, 4.2], [-0.1, 0.2], 0.1, 1.0], [True, [0.5, 2.4, 2.1, 3.5]]], [[[0.3, -3.8, 1.7, -3.3], [-1.7, -9.8, 3.7, -1.3], [0, 0], 0.2, 1.0], [True, [0.1, -4.0, 1.9, -3.1]]]]]\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"},"fixed":{"sha256":"f76f7d5289517d9f5de4a682df6d653b1cd5488b57ffb6cb4aea8c76bc144dd8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(tight, fat, disp, margin, mult):\n    def fatten():\n        f = [tight[0] - margin, tight[1] - margin, tight[2] + margin, tight[3] + margin]\n        dx, dy = mult * disp[0], mult * disp[1]\n        if dx < 0:\n            f[0] += dx\n        else:\n            f[2] += dx\n        if dy < 0:\n            f[1] += dy\n        else:\n            f[3] += dy\n        return [round(c, 6) for c in f]\n    def area(b):\n        return (b[2] - b[0]) * (b[3] - b[1])\n    inside = fat[0] <= tight[0] and fat[1] <= tight[1] and tight[2] <= fat[2] and tight[3] <= fat[3]\n    fresh = fatten()\n    if inside and area(fat) <= 4 * area(fresh):\n        return [False, fat]\n    return [True, fresh]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[-3.4, -0.9, -2.5, 0.7], [-7.4, -12.9, 1.5, 4.7], [0.1, 0.2], 0.1, 1.0], [True, [-3.5, -1.0, -2.3, 1.0]]], [[[1.7, 2.9, 3.1, 4.2], [0.6, 0.9, 6.0, 6.2], [0.1, -1.0], 0.5, 4.0], [False, [0.6, 0.9, 6.0, 6.2]]], [[[2.8, 1.5, 4.5, 2.1], [1.8, -1.5, 5.5, 3.1], [0, 0.2], 0.2, 1.0], [True, [2.6, 1.3, 4.7, 2.5]]], [[[-3.1, 3.1, -1.7, 4.7], [-3.2, 4.0, -1.5, 5.8], [-0.1, -1.0], 0.1, 1.0], [True, [-3.3, 2.0, -1.6, 4.8]]], [[[-2.5, -4.5, -1.7, -2.2], [-4.7, -5.2, -1.5, -1.5], [1.0, 0.5], 0.2, 1.0], [False, [-4.7, -5.2, -1.5, -1.5]]], [[[1.9, 0.0, 3.6, 1.9], [-2.1, -4.0, 7.6, 5.9], [-0.1, 0.2], 0.1, 1.0], [True, [1.7, -0.1, 3.7, 2.2]]], [[[-0.3, 2.0, 2.2, 4.9], [-1.8, 0.9, 1.7, 5.3], [1.0, 0.1], 0.5, 1.0], [True, [-0.8, 1.5, 3.7, 5.5]]], [[[-2.6, 2.9, -0.8, 3.7], [-3.5, 0.9, 1.8, 7.7], [0.4, -1.0], 0.5, 2.0], [False, [-3.5, 0.9, 1.8, 7.7]]]], [[[[4.9, 4.1, 7.8, 6.9], [4.8, 3.4, 8.5, 6.6], [-0.1, 0.5], 0.1, 4.0], [True, [4.4, 4.0, 7.9, 9.0]]], [[[1.4, 3.8, 4.1, 6.8], [0.3, 2.1, 4.4, 7.5], [-0.1, 0.5], 0.2, 1.0], [False, [0.3, 2.1, 4.4, 7.5]]], [[[0.8, -0.3, 1.7, 1.2], [-0.3, -2.3, 2.1, 3.2], [0.1, -1.0], 0.5, 1.0], [False, [-0.3, -2.3, 2.1, 3.2]]], [[[-0.1, -0.3, 1.1, 1.0], [-0.8, -0.3, 1.1, 1.4], [0.1, -0.2], 0.1, 4.0], [False, [-0.8, -0.3, 1.1, 1.4]]], [[[1.0, -3.0, 1.6, -2.8], [0.0, -4.0, 2.6, -1.8], [0.1, 0.2], 0.1, 1.0], [True, [0.9, -3.1, 1.8, -2.5]]], [[[3.5, 4.1, 4.2, 5.4], [3.4, 3.4, 4.9, 5.0], [-0.1, 0.5], 0.1, 1.0], [True, [3.3, 4.0, 4.3, 6.0]]], [[[2.6, 1.8, 5.1, 3.0], [1.0, 2.6, 4.9, 4.4], [0.4, -1.0], 0.2, 1.0], [True, [2.4, 0.6, 5.7, 3.2]]], [[[4.2, 2.6, 6.0, 4.8], [4.7, 2.7, 7.2, 5.2], [-0.6, -0.2], 0.1, 4.0], [True, [1.7, 1.7, 6.1, 4.9]]]], [[[[-0.8, 2.6, 0.4, 4.2], [-1.4, 2.3, 1.0, 4.8], [0, 0], 0.1, 1.0], [False, [-1.4, 2.3, 1.0, 4.8]]], [[[0.9, 1.6, 3.2, 3.0], [-2.5, 1.3, 3.3, 4.2], [0.4, -0.2], 0.5, 2.0], [False, [-2.5, 1.3, 3.3, 4.2]]], [[[1.5, -4.8, 2.9, -2.8], [1.0, -4.0, 2.6, -1.6], [0.4, -1.0], 0.1, 4.0], [True, [1.4, -8.9, 4.6, -2.7]]], [[[-0.9, 0.5, 1.8, 2.4], [-1.9, -0.1, 1.5, 3.0], [0.4, 0], 0.1, 2.0], [True, [-1.0, 0.4, 2.7, 2.5]]], [[[-2.2, -4.2, -1.7, -3.8], [-2.8, -4.8, -1.1, -3.2], [0.1, 0.2], 0.1, 1.0], [True, [-2.3, -4.3, -1.5, -3.5]]], [[[2.4, 1.1, 3.8, 3.7], [2.4, 1.9, 4.1, 4.8], [-0.1, -1.0], 0.1, 1.0], [True, [2.2, 0.0, 3.9, 3.8]]], [[[-4.2, -4.4, -1.9, -2.9], [-4.9, -4.6, -1.9, -2.8], [0.1, 0.1], 0.1, 1.0], [False, [-4.9, -4.6, -1.9, -2.8]]], [[[-4.2, 0.1, -2.1, 2.4], [-3.7, -0.2, -0.9, 2.9], [-0.6, 0.1], 0.1, 1.0], [True, [-4.9, 0.0, -2.0, 2.6]]]], [[[[5.9, -0.6, 8.3, 0.4], [4.7, -1.2, 7.4, -0.0], [1.0, 0.5], 0.1, 1.0], [True, [5.8, -0.7, 9.4, 1.0]]], [[[-3.9, -0.3, -3.4, 1.0], [-4.9, -1.3, -2.4, 2.0], [-0.1, 0], 0.2, 1.0], [True, [-4.2, -0.5, -3.2, 1.2]]], [[[-2.4, 2.5, -1.2, 3.0], [-2.5, 1.8, -1.0, 2.7], [-0.1, 0.5], 0.1, 1.0], [True, [-2.6, 2.4, -1.1, 3.6]]], [[[-0.8, -3.1, 0.9, -1.9], [-4.8, -6.2, 2.9, -1.5], [1.0, 0.1], 0.5, 4.0], [False, [-4.8, -6.2, 2.9, -1.5]]], [[[-2.8, -2.5, -0.4, -1.1], [-3.9, -2.6, -1.3, -1.0], [1.0, 0], 0.1, 2.0], [True, [-2.9, -2.6, 1.7, -1.0]]], [[[3.9, -3.1, 4.8, -1.7], [2.9, -4.1, 5.8, -0.7], [0, 0.2], 0.2, 1.0], [False, [2.9, -4.1, 5.8, -0.7]]], [[[2.8, -3.8, 4.5, -3.3], [2.5, -4.7, 4.8, -3.0], [-0.1, 0], 0.1, 1.0], [False, [2.5, -4.7, 4.8, -3.0]]], [[[-4.3, 0.5, -3.8, 1.7], [-4.4, 0.1, -3.3, 1.9], [-0.1, 0], 0.2, 1.0], [False, [-4.4, 0.1, -3.3, 1.9]]]], [[[[-0.9, -1.1, 0.9, 0.0], [-1.2, -1.4, 1.2, 0.3], [-0.1, 0.2], 0.2, 1.0], [False, [-1.2, -1.4, 1.2, 0.3]]], [[[4.1, -3.3, 6.8, -0.9], [3.2, -4.3, 6.9, -0.4], [0.4, 0.5], 0.5, 1.0], [False, [3.2, -4.3, 6.9, -0.4]]], [[[1.3, 2.0, 3.9, 4.1], [1.1, 1.7, 4.3, 4.2], [0, 0.1], 0.2, 1.0], [False, [1.1, 1.7, 4.3, 4.2]]], [[[-3.1, 3.5, -2.4, 4.0], [-3.7, 1.7, -1.8, 4.6], [0, 0], 0.1, 1.0], [True, [-3.2, 3.4, -2.3, 4.1]]], [[[1.5, 2.3, 3.1, 4.3], [1.2, 3.1, 3.2, 5.4], [0.1, -1.0], 0.1, 1.0], [True, [1.4, 1.2, 3.3, 4.4]]], [[[-0.3, -4.5, 1.1, -3.4], [-4.3, -16.5, 5.1, 0.6], [0, 0.2], 0.1, 1.0], [True, [-0.4, -4.6, 1.2, -3.1]]], [[[0.7, 2.5, 2.0, 3.2], [-0.3, 2.0, 3.0, 4.2], [-0.1, 0.2], 0.1, 1.0], [True, [0.5, 2.4, 2.1, 3.5]]], [[[0.3, -3.8, 1.7, -3.3], [-1.7, -9.8, 3.7, -1.3], [0, 0], 0.2, 1.0], [True, [0.1, -4.0, 1.9, -3.1]]]]]\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-fat-aabb-reinsert-lower-margin","generated_at":"2026-09-29T14:50:58.512237+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.","repair":"Subtract the margin from both minimum coordinates.","root_cause":"The rebuilt min corner equals the tight min corner.","sha256":"24f50f96eeea50fd564f60f5410b5f464d553bcb971eeec60a0eb4ab2cefff86","title":"Fat margin is applied only to the upper corner · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.659,"exit_code":1,"observations":[{"actual":[true,[-3.45,-0.95,-2.3,1.0]],"check":"case 0","expected":[true,[-3.5,-1.0,-2.3,1.0]],"passed":false},{"actual":[false,[0.6,0.9,6.0,6.2]],"check":"case 1","expected":[false,[0.6,0.9,6.0,6.2]],"passed":true},{"actual":[true,[2.7,1.4,4.7,2.5]],"check":"case 2","expected":[true,[2.6,1.3,4.7,2.5]],"passed":false},{"actual":[true,[-3.25,2.05,-1.6,4.8]],"check":"case 3","expected":[true,[-3.3,2.0,-1.6,4.8]],"passed":false},{"actual":[false,[-4.7,-5.2,-1.5,-1.5]],"check":"case 4","expected":[false,[-4.7,-5.2,-1.5,-1.5]],"passed":true},{"actual":[true,[1.75,-0.05,3.7,2.2]],"check":"case 5","expected":[true,[1.7,-0.1,3.7,2.2]],"passed":false},{"actual":[true,[-0.55,1.75,3.7,5.5]],"check":"case 6","expected":[true,[-0.8,1.5,3.7,5.5]],"passed":false},{"actual":[false,[-3.5,0.9,1.8,7.7]],"check":"case 7","expected":[false,[-3.5,0.9,1.8,7.7]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [true, [-3.45, -0.95, -2.3, 1.0]], \"expected\": [true, [-3.5, -1.0, -2.3, 1.0]], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [false, [0.6, 0.9, 6.0, 6.2]], \"expected\": [false, [0.6, 0.9, 6.0, 6.2]], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [true, [2.7, 1.4, 4.7, 2.5]], \"expected\": [true, [2.6, 1.3, 4.7, 2.5]], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [true, [-3.25, 2.05, -1.6, 4.8]], \"expected\": [true, [-3.3, 2.0, -1.6, 4.8]], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [false, [-4.7, -5.2, -1.5, -1.5]], \"expected\": [false, [-4.7, -5.2, -1.5, -1.5]], \"passed\": true}, {\"check\": \"case 5\", \"actual\": [true, [1.75, -0.05, 3.7, 2.2]], \"expected\": [true, [1.7, -0.1, 3.7, 2.2]], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [true, [-0.55, 1.75, 3.7, 5.5]], \"expected\": [true, [-0.8, 1.5, 3.7, 5.5]], \"passed\": false}, {\"check\": \"case 7\", \"actual\": [false, [-3.5, 0.9, 1.8, 7.7]], \"expected\": [false, [-3.5, 0.9, 1.8, 7.7]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.616,"exit_code":1,"observations":[{"actual":[true,[-3.4,-0.9,-2.3,1.0]],"check":"case 0","expected":[true,[-3.5,-1.0,-2.3,1.0]],"passed":false},{"actual":[false,[0.6,0.9,6.0,6.2]],"check":"case 1","expected":[false,[0.6,0.9,6.0,6.2]],"passed":true},{"actual":[true,[2.8,1.5,4.7,2.5]],"check":"case 2","expected":[true,[2.6,1.3,4.7,2.5]],"passed":false},{"actual":[true,[-3.2,2.1,-1.6,4.8]],"check":"case 3","expected":[true,[-3.3,2.0,-1.6,4.8]],"passed":false},{"actual":[false,[-4.7,-5.2,-1.5,-1.5]],"check":"case 4","expected":[false,[-4.7,-5.2,-1.5,-1.5]],"passed":true},{"actual":[true,[1.8,0.0,3.7,2.2]],"check":"case 5","expected":[true,[1.7,-0.1,3.7,2.2]],"passed":false},{"actual":[true,[-0.3,2.0,3.7,5.5]],"check":"case 6","expected":[true,[-0.8,1.5,3.7,5.5]],"passed":false},{"actual":[false,[-3.5,0.9,1.8,7.7]],"check":"case 7","expected":[false,[-3.5,0.9,1.8,7.7]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [true, [-3.4, -0.9, -2.3, 1.0]], \"expected\": [true, [-3.5, -1.0, -2.3, 1.0]], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [false, [0.6, 0.9, 6.0, 6.2]], \"expected\": [false, [0.6, 0.9, 6.0, 6.2]], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [true, [2.8, 1.5, 4.7, 2.5]], \"expected\": [true, [2.6, 1.3, 4.7, 2.5]], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [true, [-3.2, 2.1, -1.6, 4.8]], \"expected\": [true, [-3.3, 2.0, -1.6, 4.8]], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [false, [-4.7, -5.2, -1.5, -1.5]], \"expected\": [false, [-4.7, -5.2, -1.5, -1.5]], \"passed\": true}, {\"check\": \"case 5\", \"actual\": [true, [1.8, 0.0, 3.7, 2.2]], \"expected\": [true, [1.7, -0.1, 3.7, 2.2]], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [true, [-0.3, 2.0, 3.7, 5.5]], \"expected\": [true, [-0.8, 1.5, 3.7, 5.5]], \"passed\": false}, {\"check\": \"case 7\", \"actual\": [false, [-3.5, 0.9, 1.8, 7.7]], \"expected\": [false, [-3.5, 0.9, 1.8, 7.7]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.472,"exit_code":0,"observations":[{"actual":[true,[-3.5,-1.0,-2.3,1.0]],"check":"case 0","expected":[true,[-3.5,-1.0,-2.3,1.0]],"passed":true},{"actual":[false,[0.6,0.9,6.0,6.2]],"check":"case 1","expected":[false,[0.6,0.9,6.0,6.2]],"passed":true},{"actual":[true,[2.6,1.3,4.7,2.5]],"check":"case 2","expected":[true,[2.6,1.3,4.7,2.5]],"passed":true},{"actual":[true,[-3.3,2.0,-1.6,4.8]],"check":"case 3","expected":[true,[-3.3,2.0,-1.6,4.8]],"passed":true},{"actual":[false,[-4.7,-5.2,-1.5,-1.5]],"check":"case 4","expected":[false,[-4.7,-5.2,-1.5,-1.5]],"passed":true},{"actual":[true,[1.7,-0.1,3.7,2.2]],"check":"case 5","expected":[true,[1.7,-0.1,3.7,2.2]],"passed":true},{"actual":[true,[-0.8,1.5,3.7,5.5]],"check":"case 6","expected":[true,[-0.8,1.5,3.7,5.5]],"passed":true},{"actual":[false,[-3.5,0.9,1.8,7.7]],"check":"case 7","expected":[false,[-3.5,0.9,1.8,7.7]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [true, [-3.5, -1.0, -2.3, 1.0]], \"expected\": [true, [-3.5, -1.0, -2.3, 1.0]], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [false, [0.6, 0.9, 6.0, 6.2]], \"expected\": [false, [0.6, 0.9, 6.0, 6.2]], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [true, [2.6, 1.3, 4.7, 2.5]], \"expected\": [true, [2.6, 1.3, 4.7, 2.5]], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [true, [-3.3, 2.0, -1.6, 4.8]], \"expected\": [true, [-3.3, 2.0, -1.6, 4.8]], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [false, [-4.7, -5.2, -1.5, -1.5]], \"expected\": [false, [-4.7, -5.2, -1.5, -1.5]], \"passed\": true}, {\"check\": \"case 5\", \"actual\": [true, [1.7, -0.1, 3.7, 2.2]], \"expected\": [true, [1.7, -0.1, 3.7, 2.2]], \"passed\": true}, {\"check\": \"case 6\", \"actual\": [true, [-0.8, 1.5, 3.7, 5.5]], \"expected\": [true, [-0.8, 1.5, 3.7, 5.5]], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [false, [-3.5, 0.9, 1.8, 7.7]], \"expected\": [false, [-3.5, 0.9, 1.8, 7.7]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}