{"abstract":"Quad meshes report a failed identity.","category":"Mesh topology invariants","checks":7,"contract":"Input [faces, kind] with kind \"tri\" or \"quad\". Valence = number of edge neighbours; boundary vertices touch an edge used once. Regular valence is 6/4 (tri interior/boundary) or 4/3 (quad). Index sum = sum of (regular - valence). Return [index sum, chi=V-E+F, index sum == k*chi] with k=6 for tri and 4 for quad.","evaluation_group":"w2-mesh_topology_invariants-valence-index-sum","failed_approach":"Hard-coding 4 fails triangle meshes instead.","family":"w2-mesh_topology_invariants-valence-index-sum-identity-multiplier","id":"FA-88816","implementations":{"attempt":{"sha256":"05b40ead0eb8c743b4dfbc400b6bfe4899cd53e2935f65da95bb08b250cb31a0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    faces,kind=x\n    nb={}\n    cnt={}\n    for f in faces:\n        n=len(f)\n        for i in range(n):\n            a,b=f[i],f[(i+1)%n]\n            nb.setdefault(a,set()).add(b)\n            nb.setdefault(b,set()).add(a)\n            k=(min(a,b),max(a,b))\n            cnt[k]=cnt.get(k,0)+1\n    bnd={v for k,c in cnt.items() if c==1 for v in k}\n    reg_i,reg_b,mult=(6,4,6) if kind=='tri' else (4,3,4)\n    idx=sum((reg_b if v in bnd else reg_i)-len(nb[v]) for v in nb)\n    chi=len(nb)-len(cnt)+len(faces)\n    return [idx,chi,idx==4*chi]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['tetrahedron', [[[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]], 'tri']], [12, 2, True]], ['octahedron', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 1], [5, 2, 1], [5, 3, 2], [5, 4, 3], [5, 1, 4]], 'tri']], [12, 2, True]], ['disk', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]], 'tri']], [6, 1, True]], ['triangle torus', [[[[0, 3, 4], [0, 4, 1], [1, 4, 5], [1, 5, 2], [2, 5, 3], [2, 3, 0], [3, 6, 7], [3, 7, 4], [4, 7, 8], [4, 8, 5], [5, 8, 6], [5, 6, 3], [6, 0, 1], [6, 1, 7], [7, 1, 2], [7, 2, 8], [8, 2, 0], [8, 0, 6]], 'tri']], [0, 0, True]], ['triangle grid', [[[[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4], [3, 4, 7], [3, 7, 6], [4, 5, 8], [4, 8, 7]], 'tri']], [6, 1, True]], ['cube', [[[[0, 3, 2, 1], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]], 'quad']], [8, 2, True]], ['quad grid', [[[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]], 'quad']], [4, 1, True]]], [['octahedron', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 1], [5, 2, 1], [5, 3, 2], [5, 4, 3], [5, 1, 4]], 'tri']], [12, 2, True]], ['triangle grid', [[[[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4], [3, 4, 7], [3, 7, 6], [4, 5, 8], [4, 8, 7]], 'tri']], [6, 1, True]], ['cube', [[[[0, 3, 2, 1], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]], 'quad']], [8, 2, True]], ['quad grid', [[[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]], 'quad']], [4, 1, True]], ['quad torus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0], [3, 6, 7, 4], [4, 7, 8, 5], [5, 8, 6, 3], [6, 0, 1, 7], [7, 1, 2, 8], [8, 2, 0, 6]], 'quad']], [0, 0, True]], ['quad annulus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0]], 'quad']], [0, 0, True]], ['open cylinder', [[[[0, 1, 5], [0, 5, 4], [1, 2, 6], [1, 6, 5], [2, 3, 7], [2, 7, 6], [3, 0, 4], [3, 4, 7]], 'tri']], [0, 0, True]]], [['tetrahedron', [[[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]], 'tri']], [12, 2, True]], ['disk', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]], 'tri']], [6, 1, True]], ['quad torus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0], [3, 6, 7, 4], [4, 7, 8, 5], [5, 8, 6, 3], [6, 0, 1, 7], [7, 1, 2, 8], [8, 2, 0, 6]], 'quad']], [0, 0, True]], ['quad annulus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0]], 'quad']], [0, 0, True]], ['open cylinder', [[[[0, 1, 5], [0, 5, 4], [1, 2, 6], [1, 6, 5], [2, 3, 7], [2, 7, 6], [3, 0, 4], [3, 4, 7]], 'tri']], [0, 0, True]], ['single quad', [[[[0, 1, 2, 3]], 'quad']], [4, 1, True]], ['fan', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4]], 'tri']], [6, 1, True]]], [['tetrahedron', [[[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]], 'tri']], [12, 2, True]], ['octahedron', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 1], [5, 2, 1], [5, 3, 2], [5, 4, 3], [5, 1, 4]], 'tri']], [12, 2, True]], ['disk', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]], 'tri']], [6, 1, True]], ['triangle torus', [[[[0, 3, 4], [0, 4, 1], [1, 4, 5], [1, 5, 2], [2, 5, 3], [2, 3, 0], [3, 6, 7], [3, 7, 4], [4, 7, 8], [4, 8, 5], [5, 8, 6], [5, 6, 3], [6, 0, 1], [6, 1, 7], [7, 1, 2], [7, 2, 8], [8, 2, 0], [8, 0, 6]], 'tri']], [0, 0, True]], ['triangle grid', [[[[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4], [3, 4, 7], [3, 7, 6], [4, 5, 8], [4, 8, 7]], 'tri']], [6, 1, True]], ['cube', [[[[0, 3, 2, 1], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]], 'quad']], [8, 2, True]], ['fan', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4]], 'tri']], [6, 1, True]]], [['disk', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]], 'tri']], [6, 1, True]], ['triangle torus', [[[[0, 3, 4], [0, 4, 1], [1, 4, 5], [1, 5, 2], [2, 5, 3], [2, 3, 0], [3, 6, 7], [3, 7, 4], [4, 7, 8], [4, 8, 5], [5, 8, 6], [5, 6, 3], [6, 0, 1], [6, 1, 7], [7, 1, 2], [7, 2, 8], [8, 2, 0], [8, 0, 6]], 'tri']], [0, 0, True]], ['triangle grid', [[[[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4], [3, 4, 7], [3, 7, 6], [4, 5, 8], [4, 8, 7]], 'tri']], [6, 1, True]], ['cube', [[[[0, 3, 2, 1], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]], 'quad']], [8, 2, True]], ['quad grid', [[[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]], 'quad']], [4, 1, True]], ['quad torus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0], [3, 6, 7, 4], [4, 7, 8, 5], [5, 8, 6, 3], [6, 0, 1, 7], [7, 1, 2, 8], [8, 2, 0, 6]], 'quad']], [0, 0, True]], ['fan', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4]], 'tri']], [6, 1, True]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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":"6163431b9a27a3c94c12bd196d9cb56dfda3f485860efd29f5bc2de3e3ec0580","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    faces,kind=x\n    nb={}\n    cnt={}\n    for f in faces:\n        n=len(f)\n        for i in range(n):\n            a,b=f[i],f[(i+1)%n]\n            nb.setdefault(a,set()).add(b)\n            nb.setdefault(b,set()).add(a)\n            k=(min(a,b),max(a,b))\n            cnt[k]=cnt.get(k,0)+1\n    bnd={v for k,c in cnt.items() if c==1 for v in k}\n    reg_i,reg_b,mult=(6,4,6) if kind=='tri' else (4,3,4)\n    idx=sum((reg_b if v in bnd else reg_i)-len(nb[v]) for v in nb)\n    chi=len(nb)-len(cnt)+len(faces)\n    return [idx,chi,idx==6*chi]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['tetrahedron', [[[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]], 'tri']], [12, 2, True]], ['octahedron', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 1], [5, 2, 1], [5, 3, 2], [5, 4, 3], [5, 1, 4]], 'tri']], [12, 2, True]], ['disk', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]], 'tri']], [6, 1, True]], ['triangle torus', [[[[0, 3, 4], [0, 4, 1], [1, 4, 5], [1, 5, 2], [2, 5, 3], [2, 3, 0], [3, 6, 7], [3, 7, 4], [4, 7, 8], [4, 8, 5], [5, 8, 6], [5, 6, 3], [6, 0, 1], [6, 1, 7], [7, 1, 2], [7, 2, 8], [8, 2, 0], [8, 0, 6]], 'tri']], [0, 0, True]], ['triangle grid', [[[[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4], [3, 4, 7], [3, 7, 6], [4, 5, 8], [4, 8, 7]], 'tri']], [6, 1, True]], ['cube', [[[[0, 3, 2, 1], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]], 'quad']], [8, 2, True]], ['quad grid', [[[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]], 'quad']], [4, 1, True]]], [['octahedron', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 1], [5, 2, 1], [5, 3, 2], [5, 4, 3], [5, 1, 4]], 'tri']], [12, 2, True]], ['triangle grid', [[[[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4], [3, 4, 7], [3, 7, 6], [4, 5, 8], [4, 8, 7]], 'tri']], [6, 1, True]], ['cube', [[[[0, 3, 2, 1], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]], 'quad']], [8, 2, True]], ['quad grid', [[[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]], 'quad']], [4, 1, True]], ['quad torus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0], [3, 6, 7, 4], [4, 7, 8, 5], [5, 8, 6, 3], [6, 0, 1, 7], [7, 1, 2, 8], [8, 2, 0, 6]], 'quad']], [0, 0, True]], ['quad annulus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0]], 'quad']], [0, 0, True]], ['open cylinder', [[[[0, 1, 5], [0, 5, 4], [1, 2, 6], [1, 6, 5], [2, 3, 7], [2, 7, 6], [3, 0, 4], [3, 4, 7]], 'tri']], [0, 0, True]]], [['tetrahedron', [[[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]], 'tri']], [12, 2, True]], ['disk', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]], 'tri']], [6, 1, True]], ['quad torus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0], [3, 6, 7, 4], [4, 7, 8, 5], [5, 8, 6, 3], [6, 0, 1, 7], [7, 1, 2, 8], [8, 2, 0, 6]], 'quad']], [0, 0, True]], ['quad annulus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0]], 'quad']], [0, 0, True]], ['open cylinder', [[[[0, 1, 5], [0, 5, 4], [1, 2, 6], [1, 6, 5], [2, 3, 7], [2, 7, 6], [3, 0, 4], [3, 4, 7]], 'tri']], [0, 0, True]], ['single quad', [[[[0, 1, 2, 3]], 'quad']], [4, 1, True]], ['fan', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4]], 'tri']], [6, 1, True]]], [['tetrahedron', [[[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]], 'tri']], [12, 2, True]], ['octahedron', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 1], [5, 2, 1], [5, 3, 2], [5, 4, 3], [5, 1, 4]], 'tri']], [12, 2, True]], ['disk', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]], 'tri']], [6, 1, True]], ['triangle torus', [[[[0, 3, 4], [0, 4, 1], [1, 4, 5], [1, 5, 2], [2, 5, 3], [2, 3, 0], [3, 6, 7], [3, 7, 4], [4, 7, 8], [4, 8, 5], [5, 8, 6], [5, 6, 3], [6, 0, 1], [6, 1, 7], [7, 1, 2], [7, 2, 8], [8, 2, 0], [8, 0, 6]], 'tri']], [0, 0, True]], ['triangle grid', [[[[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4], [3, 4, 7], [3, 7, 6], [4, 5, 8], [4, 8, 7]], 'tri']], [6, 1, True]], ['cube', [[[[0, 3, 2, 1], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]], 'quad']], [8, 2, True]], ['fan', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4]], 'tri']], [6, 1, True]]], [['disk', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]], 'tri']], [6, 1, True]], ['triangle torus', [[[[0, 3, 4], [0, 4, 1], [1, 4, 5], [1, 5, 2], [2, 5, 3], [2, 3, 0], [3, 6, 7], [3, 7, 4], [4, 7, 8], [4, 8, 5], [5, 8, 6], [5, 6, 3], [6, 0, 1], [6, 1, 7], [7, 1, 2], [7, 2, 8], [8, 2, 0], [8, 0, 6]], 'tri']], [0, 0, True]], ['triangle grid', [[[[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4], [3, 4, 7], [3, 7, 6], [4, 5, 8], [4, 8, 7]], 'tri']], [6, 1, True]], ['cube', [[[[0, 3, 2, 1], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]], 'quad']], [8, 2, True]], ['quad grid', [[[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]], 'quad']], [4, 1, True]], ['quad torus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0], [3, 6, 7, 4], [4, 7, 8, 5], [5, 8, 6, 3], [6, 0, 1, 7], [7, 1, 2, 8], [8, 2, 0, 6]], 'quad']], [0, 0, True]], ['fan', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4]], 'tri']], [6, 1, True]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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":"b6489ca0a8b8b012555d7b9998e763c1ea6a5e0e52f44ea3ae75c4d23e2db3ad","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    faces,kind=x\n    nb={}\n    cnt={}\n    for f in faces:\n        n=len(f)\n        for i in range(n):\n            a,b=f[i],f[(i+1)%n]\n            nb.setdefault(a,set()).add(b)\n            nb.setdefault(b,set()).add(a)\n            k=(min(a,b),max(a,b))\n            cnt[k]=cnt.get(k,0)+1\n    bnd={v for k,c in cnt.items() if c==1 for v in k}\n    reg_i,reg_b,mult=(6,4,6) if kind=='tri' else (4,3,4)\n    idx=sum((reg_b if v in bnd else reg_i)-len(nb[v]) for v in nb)\n    chi=len(nb)-len(cnt)+len(faces)\n    return [idx,chi,idx==mult*chi]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['tetrahedron', [[[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]], 'tri']], [12, 2, True]], ['octahedron', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 1], [5, 2, 1], [5, 3, 2], [5, 4, 3], [5, 1, 4]], 'tri']], [12, 2, True]], ['disk', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]], 'tri']], [6, 1, True]], ['triangle torus', [[[[0, 3, 4], [0, 4, 1], [1, 4, 5], [1, 5, 2], [2, 5, 3], [2, 3, 0], [3, 6, 7], [3, 7, 4], [4, 7, 8], [4, 8, 5], [5, 8, 6], [5, 6, 3], [6, 0, 1], [6, 1, 7], [7, 1, 2], [7, 2, 8], [8, 2, 0], [8, 0, 6]], 'tri']], [0, 0, True]], ['triangle grid', [[[[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4], [3, 4, 7], [3, 7, 6], [4, 5, 8], [4, 8, 7]], 'tri']], [6, 1, True]], ['cube', [[[[0, 3, 2, 1], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]], 'quad']], [8, 2, True]], ['quad grid', [[[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]], 'quad']], [4, 1, True]]], [['octahedron', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 1], [5, 2, 1], [5, 3, 2], [5, 4, 3], [5, 1, 4]], 'tri']], [12, 2, True]], ['triangle grid', [[[[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4], [3, 4, 7], [3, 7, 6], [4, 5, 8], [4, 8, 7]], 'tri']], [6, 1, True]], ['cube', [[[[0, 3, 2, 1], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]], 'quad']], [8, 2, True]], ['quad grid', [[[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]], 'quad']], [4, 1, True]], ['quad torus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0], [3, 6, 7, 4], [4, 7, 8, 5], [5, 8, 6, 3], [6, 0, 1, 7], [7, 1, 2, 8], [8, 2, 0, 6]], 'quad']], [0, 0, True]], ['quad annulus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0]], 'quad']], [0, 0, True]], ['open cylinder', [[[[0, 1, 5], [0, 5, 4], [1, 2, 6], [1, 6, 5], [2, 3, 7], [2, 7, 6], [3, 0, 4], [3, 4, 7]], 'tri']], [0, 0, True]]], [['tetrahedron', [[[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]], 'tri']], [12, 2, True]], ['disk', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]], 'tri']], [6, 1, True]], ['quad torus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0], [3, 6, 7, 4], [4, 7, 8, 5], [5, 8, 6, 3], [6, 0, 1, 7], [7, 1, 2, 8], [8, 2, 0, 6]], 'quad']], [0, 0, True]], ['quad annulus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0]], 'quad']], [0, 0, True]], ['open cylinder', [[[[0, 1, 5], [0, 5, 4], [1, 2, 6], [1, 6, 5], [2, 3, 7], [2, 7, 6], [3, 0, 4], [3, 4, 7]], 'tri']], [0, 0, True]], ['single quad', [[[[0, 1, 2, 3]], 'quad']], [4, 1, True]], ['fan', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4]], 'tri']], [6, 1, True]]], [['tetrahedron', [[[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]], 'tri']], [12, 2, True]], ['octahedron', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 1], [5, 2, 1], [5, 3, 2], [5, 4, 3], [5, 1, 4]], 'tri']], [12, 2, True]], ['disk', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]], 'tri']], [6, 1, True]], ['triangle torus', [[[[0, 3, 4], [0, 4, 1], [1, 4, 5], [1, 5, 2], [2, 5, 3], [2, 3, 0], [3, 6, 7], [3, 7, 4], [4, 7, 8], [4, 8, 5], [5, 8, 6], [5, 6, 3], [6, 0, 1], [6, 1, 7], [7, 1, 2], [7, 2, 8], [8, 2, 0], [8, 0, 6]], 'tri']], [0, 0, True]], ['triangle grid', [[[[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4], [3, 4, 7], [3, 7, 6], [4, 5, 8], [4, 8, 7]], 'tri']], [6, 1, True]], ['cube', [[[[0, 3, 2, 1], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]], 'quad']], [8, 2, True]], ['fan', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4]], 'tri']], [6, 1, True]]], [['disk', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]], 'tri']], [6, 1, True]], ['triangle torus', [[[[0, 3, 4], [0, 4, 1], [1, 4, 5], [1, 5, 2], [2, 5, 3], [2, 3, 0], [3, 6, 7], [3, 7, 4], [4, 7, 8], [4, 8, 5], [5, 8, 6], [5, 6, 3], [6, 0, 1], [6, 1, 7], [7, 1, 2], [7, 2, 8], [8, 2, 0], [8, 0, 6]], 'tri']], [0, 0, True]], ['triangle grid', [[[[0, 1, 4], [0, 4, 3], [1, 2, 5], [1, 5, 4], [3, 4, 7], [3, 7, 6], [4, 5, 8], [4, 8, 7]], 'tri']], [6, 1, True]], ['cube', [[[[0, 3, 2, 1], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]], 'quad']], [8, 2, True]], ['quad grid', [[[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]], 'quad']], [4, 1, True]], ['quad torus', [[[[0, 3, 4, 1], [1, 4, 5, 2], [2, 5, 3, 0], [3, 6, 7, 4], [4, 7, 8, 5], [5, 8, 6, 3], [6, 0, 1, 7], [7, 1, 2, 8], [8, 2, 0, 6]], 'quad']], [0, 0, True]], ['fan', [[[[0, 1, 2], [0, 2, 3], [0, 3, 4]], 'tri']], [6, 1, True]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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":"Pure combinatorial teaching model over integer face lists with a stipulated contract; no geometry kernel or file format is implied. 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-mesh_topology_invariants-valence-index-sum-identity-multiplier","generated_at":"2026-09-29T14:51:11.634255+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Mesh processing pipelines (remeshing, export, simulation, printing) trust these topological counts and adjacency answers; a wrong invariant silently accepts broken meshes or rejects valid ones.","repair":"Compare with k*chi, k=6 for triangles and 4 for quads.","root_cause":"The identity compares with 6*chi regardless of kind.","sha256":"864b082b721ba96e651158e49c641e61136878a70e4ae824c80ce191a2dc2f35","title":"Index identity uses the triangle multiplier for every mesh kind · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.244,"exit_code":1,"observations":[{"actual":[12,2,false],"check":"tetrahedron","expected":[12,2,true],"passed":false},{"actual":[12,2,false],"check":"octahedron","expected":[12,2,true],"passed":false},{"actual":[6,1,false],"check":"disk","expected":[6,1,true],"passed":false},{"actual":[0,0,true],"check":"triangle torus","expected":[0,0,true],"passed":true},{"actual":[6,1,false],"check":"triangle grid","expected":[6,1,true],"passed":false},{"actual":[8,2,true],"check":"cube","expected":[8,2,true],"passed":true},{"actual":[4,1,true],"check":"quad grid","expected":[4,1,true],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"tetrahedron\", \"actual\": [12, 2, false], \"expected\": [12, 2, true], \"passed\": false}, {\"check\": \"octahedron\", \"actual\": [12, 2, false], \"expected\": [12, 2, true], \"passed\": false}, {\"check\": \"disk\", \"actual\": [6, 1, false], \"expected\": [6, 1, true], \"passed\": false}, {\"check\": \"triangle torus\", \"actual\": [0, 0, true], \"expected\": [0, 0, true], \"passed\": true}, {\"check\": \"triangle grid\", \"actual\": [6, 1, false], \"expected\": [6, 1, true], \"passed\": false}, {\"check\": \"cube\", \"actual\": [8, 2, true], \"expected\": [8, 2, true], \"passed\": true}, {\"check\": \"quad grid\", \"actual\": [4, 1, true], \"expected\": [4, 1, true], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.682,"exit_code":1,"observations":[{"actual":[12,2,true],"check":"tetrahedron","expected":[12,2,true],"passed":true},{"actual":[12,2,true],"check":"octahedron","expected":[12,2,true],"passed":true},{"actual":[6,1,true],"check":"disk","expected":[6,1,true],"passed":true},{"actual":[0,0,true],"check":"triangle torus","expected":[0,0,true],"passed":true},{"actual":[6,1,true],"check":"triangle grid","expected":[6,1,true],"passed":true},{"actual":[8,2,false],"check":"cube","expected":[8,2,true],"passed":false},{"actual":[4,1,false],"check":"quad grid","expected":[4,1,true],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"tetrahedron\", \"actual\": [12, 2, true], \"expected\": [12, 2, true], \"passed\": true}, {\"check\": \"octahedron\", \"actual\": [12, 2, true], \"expected\": [12, 2, true], \"passed\": true}, {\"check\": \"disk\", \"actual\": [6, 1, true], \"expected\": [6, 1, true], \"passed\": true}, {\"check\": \"triangle torus\", \"actual\": [0, 0, true], \"expected\": [0, 0, true], \"passed\": true}, {\"check\": \"triangle grid\", \"actual\": [6, 1, true], \"expected\": [6, 1, true], \"passed\": true}, {\"check\": \"cube\", \"actual\": [8, 2, false], \"expected\": [8, 2, true], \"passed\": false}, {\"check\": \"quad grid\", \"actual\": [4, 1, false], \"expected\": [4, 1, true], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.836,"exit_code":0,"observations":[{"actual":[12,2,true],"check":"tetrahedron","expected":[12,2,true],"passed":true},{"actual":[12,2,true],"check":"octahedron","expected":[12,2,true],"passed":true},{"actual":[6,1,true],"check":"disk","expected":[6,1,true],"passed":true},{"actual":[0,0,true],"check":"triangle torus","expected":[0,0,true],"passed":true},{"actual":[6,1,true],"check":"triangle grid","expected":[6,1,true],"passed":true},{"actual":[8,2,true],"check":"cube","expected":[8,2,true],"passed":true},{"actual":[4,1,true],"check":"quad grid","expected":[4,1,true],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"tetrahedron\", \"actual\": [12, 2, true], \"expected\": [12, 2, true], \"passed\": true}, {\"check\": \"octahedron\", \"actual\": [12, 2, true], \"expected\": [12, 2, true], \"passed\": true}, {\"check\": \"disk\", \"actual\": [6, 1, true], \"expected\": [6, 1, true], \"passed\": true}, {\"check\": \"triangle torus\", \"actual\": [0, 0, true], \"expected\": [0, 0, true], \"passed\": true}, {\"check\": \"triangle grid\", \"actual\": [6, 1, true], \"expected\": [6, 1, true], \"passed\": true}, {\"check\": \"cube\", \"actual\": [8, 2, true], \"expected\": [8, 2, true], \"passed\": true}, {\"check\": \"quad grid\", \"actual\": [4, 1, true], \"expected\": [4, 1, true], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}