{"abstract":"Half the boundary vertices are treated as interior and judged against valence 6.","category":"Mesh topology invariants","checks":7,"contract":"Input: polygon faces. Neighbours of a vertex are the other endpoints of its edges (consecutive face corners, skipping coincident pairs). Boundary vertices are endpoints of edges used by exactly one face. Irregular vertices have valence != 6 (interior) or != 4 (boundary). Return [{vertex: valence}, irregular count, sorted boundary vertices].","evaluation_group":"w2-mesh_topology_invariants-vertex-valence","failed_approach":"Removing vertices that also touch interior edges unmarks almost every boundary vertex.","family":"w2-mesh_topology_invariants-vertex-valence-boundary-endpoints","id":"FA-88471","implementations":{"attempt":{"sha256":"6981915134cd97d8a687d4f2de473cad93f9ba0b2ada5018becd76de861e42a0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    faces=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            if a==b: continue\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=set()\n    for (a,b),c in cnt.items():\n        if c==1: bnd.update((a,b))\n        else: bnd.difference_update((a,b))\n    val={str(v):len(nb[v]) for v in sorted(nb)}\n    irr=sum(1 for v in nb if len(nb[v])!=(4 if v in bnd else 6))\n    return [val,irr,sorted(bnd)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['disk', [[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]]], [{'0': 5, '1': 3, '2': 3, '3': 3, '4': 3, '5': 3}, 6, [1, 2, 3, 4, 5]]], ['fan', [[[0, 1, 2], [0, 2, 3], [0, 3, 4]]], [{'0': 4, '1': 2, '2': 3, '3': 3, '4': 2}, 4, [0, 1, 2, 3, 4]]], ['tetrahedron', [[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]]], [{'0': 3, '1': 3, '2': 3, '3': 3}, 4, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4}, 6, []]], ['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]]], [{'0': 3, '1': 4, '2': 2, '3': 4, '4': 6, '5': 4, '6': 2, '7': 4, '8': 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]]], ['quad grid', [[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]]], [{'0': 2, '1': 3, '2': 2, '3': 3, '4': 4, '5': 3, '6': 2, '7': 3, '8': 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]]], ['degenerate corner', [[[0, 1, 1, 2], [0, 2, 3]]], [{'0': 3, '1': 2, '2': 3, '3': 2}, 4, [0, 1, 2, 3]]]], [['fan', [[[0, 1, 2], [0, 2, 3], [0, 3, 4]]], [{'0': 4, '1': 2, '2': 3, '3': 3, '4': 2}, 4, [0, 1, 2, 3, 4]]], ['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]]], [{'0': 3, '1': 4, '2': 2, '3': 4, '4': 6, '5': 4, '6': 2, '7': 4, '8': 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]]], ['quad grid', [[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]]], [{'0': 2, '1': 3, '2': 2, '3': 3, '4': 4, '5': 3, '6': 2, '7': 3, '8': 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]]], ['degenerate corner', [[[0, 1, 1, 2], [0, 2, 3]]], [{'0': 3, '1': 2, '2': 3, '3': 2}, 4, [0, 1, 2, 3]]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4}, 0, [0, 1, 2, 3, 4, 5, 6, 7]]], ['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]]], [{'0': 6, '1': 6, '2': 6, '3': 6, '4': 6, '5': 6, '6': 6, '7': 6, '8': 6}, 0, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4, '8': 4}, 9, []]]], [['disk', [[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]]], [{'0': 5, '1': 3, '2': 3, '3': 3, '4': 3, '5': 3}, 6, [1, 2, 3, 4, 5]]], ['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]]], [{'0': 3, '1': 4, '2': 2, '3': 4, '4': 6, '5': 4, '6': 2, '7': 4, '8': 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4}, 0, [0, 1, 2, 3, 4, 5, 6, 7]]], ['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]]], [{'0': 6, '1': 6, '2': 6, '3': 6, '4': 6, '5': 6, '6': 6, '7': 6, '8': 6}, 0, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4, '8': 4}, 9, []]], ['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]]], [{'0': 3, '1': 3, '2': 3, '3': 3, '4': 3, '5': 3, '6': 3, '7': 3}, 8, []]], ['single triangle', [[[0, 1, 2]]], [{'0': 2, '1': 2, '2': 2}, 3, [0, 1, 2]]]], [['disk', [[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]]], [{'0': 5, '1': 3, '2': 3, '3': 3, '4': 3, '5': 3}, 6, [1, 2, 3, 4, 5]]], ['fan', [[[0, 1, 2], [0, 2, 3], [0, 3, 4]]], [{'0': 4, '1': 2, '2': 3, '3': 3, '4': 2}, 4, [0, 1, 2, 3, 4]]], ['tetrahedron', [[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]]], [{'0': 3, '1': 3, '2': 3, '3': 3}, 4, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4}, 6, []]], ['quad grid', [[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]]], [{'0': 2, '1': 3, '2': 2, '3': 3, '4': 4, '5': 3, '6': 2, '7': 3, '8': 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4}, 0, [0, 1, 2, 3, 4, 5, 6, 7]]], ['single triangle', [[[0, 1, 2]]], [{'0': 2, '1': 2, '2': 2}, 3, [0, 1, 2]]]], [['tetrahedron', [[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]]], [{'0': 3, '1': 3, '2': 3, '3': 3}, 4, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4}, 6, []]], ['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]]], [{'0': 3, '1': 4, '2': 2, '3': 4, '4': 6, '5': 4, '6': 2, '7': 4, '8': 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]]], ['quad grid', [[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]]], [{'0': 2, '1': 3, '2': 2, '3': 3, '4': 4, '5': 3, '6': 2, '7': 3, '8': 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]]], ['degenerate corner', [[[0, 1, 1, 2], [0, 2, 3]]], [{'0': 3, '1': 2, '2': 3, '3': 2}, 4, [0, 1, 2, 3]]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4}, 0, [0, 1, 2, 3, 4, 5, 6, 7]]], ['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]]], [{'0': 6, '1': 6, '2': 6, '3': 6, '4': 6, '5': 6, '6': 6, '7': 6, '8': 6}, 0, []]]]]\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":"af1720f89e5746bb4afbc3523aab1b768871325868b4e8844c44171556c6f2f6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    faces=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            if a==b: continue\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=set()\n    for (a,b),c in cnt.items():\n        if c==1: bnd.add(a)\n    val={str(v):len(nb[v]) for v in sorted(nb)}\n    irr=sum(1 for v in nb if len(nb[v])!=(4 if v in bnd else 6))\n    return [val,irr,sorted(bnd)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['disk', [[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]]], [{'0': 5, '1': 3, '2': 3, '3': 3, '4': 3, '5': 3}, 6, [1, 2, 3, 4, 5]]], ['fan', [[[0, 1, 2], [0, 2, 3], [0, 3, 4]]], [{'0': 4, '1': 2, '2': 3, '3': 3, '4': 2}, 4, [0, 1, 2, 3, 4]]], ['tetrahedron', [[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]]], [{'0': 3, '1': 3, '2': 3, '3': 3}, 4, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4}, 6, []]], ['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]]], [{'0': 3, '1': 4, '2': 2, '3': 4, '4': 6, '5': 4, '6': 2, '7': 4, '8': 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]]], ['quad grid', [[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]]], [{'0': 2, '1': 3, '2': 2, '3': 3, '4': 4, '5': 3, '6': 2, '7': 3, '8': 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]]], ['degenerate corner', [[[0, 1, 1, 2], [0, 2, 3]]], [{'0': 3, '1': 2, '2': 3, '3': 2}, 4, [0, 1, 2, 3]]]], [['fan', [[[0, 1, 2], [0, 2, 3], [0, 3, 4]]], [{'0': 4, '1': 2, '2': 3, '3': 3, '4': 2}, 4, [0, 1, 2, 3, 4]]], ['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]]], [{'0': 3, '1': 4, '2': 2, '3': 4, '4': 6, '5': 4, '6': 2, '7': 4, '8': 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]]], ['quad grid', [[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]]], [{'0': 2, '1': 3, '2': 2, '3': 3, '4': 4, '5': 3, '6': 2, '7': 3, '8': 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]]], ['degenerate corner', [[[0, 1, 1, 2], [0, 2, 3]]], [{'0': 3, '1': 2, '2': 3, '3': 2}, 4, [0, 1, 2, 3]]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4}, 0, [0, 1, 2, 3, 4, 5, 6, 7]]], ['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]]], [{'0': 6, '1': 6, '2': 6, '3': 6, '4': 6, '5': 6, '6': 6, '7': 6, '8': 6}, 0, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4, '8': 4}, 9, []]]], [['disk', [[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]]], [{'0': 5, '1': 3, '2': 3, '3': 3, '4': 3, '5': 3}, 6, [1, 2, 3, 4, 5]]], ['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]]], [{'0': 3, '1': 4, '2': 2, '3': 4, '4': 6, '5': 4, '6': 2, '7': 4, '8': 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4}, 0, [0, 1, 2, 3, 4, 5, 6, 7]]], ['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]]], [{'0': 6, '1': 6, '2': 6, '3': 6, '4': 6, '5': 6, '6': 6, '7': 6, '8': 6}, 0, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4, '8': 4}, 9, []]], ['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]]], [{'0': 3, '1': 3, '2': 3, '3': 3, '4': 3, '5': 3, '6': 3, '7': 3}, 8, []]], ['single triangle', [[[0, 1, 2]]], [{'0': 2, '1': 2, '2': 2}, 3, [0, 1, 2]]]], [['disk', [[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]]], [{'0': 5, '1': 3, '2': 3, '3': 3, '4': 3, '5': 3}, 6, [1, 2, 3, 4, 5]]], ['fan', [[[0, 1, 2], [0, 2, 3], [0, 3, 4]]], [{'0': 4, '1': 2, '2': 3, '3': 3, '4': 2}, 4, [0, 1, 2, 3, 4]]], ['tetrahedron', [[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]]], [{'0': 3, '1': 3, '2': 3, '3': 3}, 4, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4}, 6, []]], ['quad grid', [[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]]], [{'0': 2, '1': 3, '2': 2, '3': 3, '4': 4, '5': 3, '6': 2, '7': 3, '8': 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4}, 0, [0, 1, 2, 3, 4, 5, 6, 7]]], ['single triangle', [[[0, 1, 2]]], [{'0': 2, '1': 2, '2': 2}, 3, [0, 1, 2]]]], [['tetrahedron', [[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]]], [{'0': 3, '1': 3, '2': 3, '3': 3}, 4, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4}, 6, []]], ['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]]], [{'0': 3, '1': 4, '2': 2, '3': 4, '4': 6, '5': 4, '6': 2, '7': 4, '8': 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]]], ['quad grid', [[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]]], [{'0': 2, '1': 3, '2': 2, '3': 3, '4': 4, '5': 3, '6': 2, '7': 3, '8': 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]]], ['degenerate corner', [[[0, 1, 1, 2], [0, 2, 3]]], [{'0': 3, '1': 2, '2': 3, '3': 2}, 4, [0, 1, 2, 3]]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4}, 0, [0, 1, 2, 3, 4, 5, 6, 7]]], ['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]]], [{'0': 6, '1': 6, '2': 6, '3': 6, '4': 6, '5': 6, '6': 6, '7': 6, '8': 6}, 0, []]]]]\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":"54d53e5e654fa4f303a2e41f3be18400d54f201c5fe0d547a74e5f8140c3aafa","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    faces=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            if a==b: continue\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=set()\n    for (a,b),c in cnt.items():\n        if c==1: bnd.update((a,b))\n    val={str(v):len(nb[v]) for v in sorted(nb)}\n    irr=sum(1 for v in nb if len(nb[v])!=(4 if v in bnd else 6))\n    return [val,irr,sorted(bnd)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['disk', [[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]]], [{'0': 5, '1': 3, '2': 3, '3': 3, '4': 3, '5': 3}, 6, [1, 2, 3, 4, 5]]], ['fan', [[[0, 1, 2], [0, 2, 3], [0, 3, 4]]], [{'0': 4, '1': 2, '2': 3, '3': 3, '4': 2}, 4, [0, 1, 2, 3, 4]]], ['tetrahedron', [[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]]], [{'0': 3, '1': 3, '2': 3, '3': 3}, 4, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4}, 6, []]], ['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]]], [{'0': 3, '1': 4, '2': 2, '3': 4, '4': 6, '5': 4, '6': 2, '7': 4, '8': 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]]], ['quad grid', [[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]]], [{'0': 2, '1': 3, '2': 2, '3': 3, '4': 4, '5': 3, '6': 2, '7': 3, '8': 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]]], ['degenerate corner', [[[0, 1, 1, 2], [0, 2, 3]]], [{'0': 3, '1': 2, '2': 3, '3': 2}, 4, [0, 1, 2, 3]]]], [['fan', [[[0, 1, 2], [0, 2, 3], [0, 3, 4]]], [{'0': 4, '1': 2, '2': 3, '3': 3, '4': 2}, 4, [0, 1, 2, 3, 4]]], ['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]]], [{'0': 3, '1': 4, '2': 2, '3': 4, '4': 6, '5': 4, '6': 2, '7': 4, '8': 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]]], ['quad grid', [[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]]], [{'0': 2, '1': 3, '2': 2, '3': 3, '4': 4, '5': 3, '6': 2, '7': 3, '8': 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]]], ['degenerate corner', [[[0, 1, 1, 2], [0, 2, 3]]], [{'0': 3, '1': 2, '2': 3, '3': 2}, 4, [0, 1, 2, 3]]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4}, 0, [0, 1, 2, 3, 4, 5, 6, 7]]], ['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]]], [{'0': 6, '1': 6, '2': 6, '3': 6, '4': 6, '5': 6, '6': 6, '7': 6, '8': 6}, 0, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4, '8': 4}, 9, []]]], [['disk', [[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]]], [{'0': 5, '1': 3, '2': 3, '3': 3, '4': 3, '5': 3}, 6, [1, 2, 3, 4, 5]]], ['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]]], [{'0': 3, '1': 4, '2': 2, '3': 4, '4': 6, '5': 4, '6': 2, '7': 4, '8': 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4}, 0, [0, 1, 2, 3, 4, 5, 6, 7]]], ['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]]], [{'0': 6, '1': 6, '2': 6, '3': 6, '4': 6, '5': 6, '6': 6, '7': 6, '8': 6}, 0, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4, '8': 4}, 9, []]], ['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]]], [{'0': 3, '1': 3, '2': 3, '3': 3, '4': 3, '5': 3, '6': 3, '7': 3}, 8, []]], ['single triangle', [[[0, 1, 2]]], [{'0': 2, '1': 2, '2': 2}, 3, [0, 1, 2]]]], [['disk', [[[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1]]], [{'0': 5, '1': 3, '2': 3, '3': 3, '4': 3, '5': 3}, 6, [1, 2, 3, 4, 5]]], ['fan', [[[0, 1, 2], [0, 2, 3], [0, 3, 4]]], [{'0': 4, '1': 2, '2': 3, '3': 3, '4': 2}, 4, [0, 1, 2, 3, 4]]], ['tetrahedron', [[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]]], [{'0': 3, '1': 3, '2': 3, '3': 3}, 4, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4}, 6, []]], ['quad grid', [[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]]], [{'0': 2, '1': 3, '2': 2, '3': 3, '4': 4, '5': 3, '6': 2, '7': 3, '8': 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4}, 0, [0, 1, 2, 3, 4, 5, 6, 7]]], ['single triangle', [[[0, 1, 2]]], [{'0': 2, '1': 2, '2': 2}, 3, [0, 1, 2]]]], [['tetrahedron', [[[0, 2, 1], [0, 1, 3], [1, 2, 3], [0, 3, 2]]], [{'0': 3, '1': 3, '2': 3, '3': 3}, 4, []]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4}, 6, []]], ['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]]], [{'0': 3, '1': 4, '2': 2, '3': 4, '4': 6, '5': 4, '6': 2, '7': 4, '8': 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]]], ['quad grid', [[[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]]], [{'0': 2, '1': 3, '2': 2, '3': 3, '4': 4, '5': 3, '6': 2, '7': 3, '8': 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]]], ['degenerate corner', [[[0, 1, 1, 2], [0, 2, 3]]], [{'0': 3, '1': 2, '2': 3, '3': 2}, 4, [0, 1, 2, 3]]], ['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]]], [{'0': 4, '1': 4, '2': 4, '3': 4, '4': 4, '5': 4, '6': 4, '7': 4}, 0, [0, 1, 2, 3, 4, 5, 6, 7]]], ['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]]], [{'0': 6, '1': 6, '2': 6, '3': 6, '4': 6, '5': 6, '6': 6, '7': 6, '8': 6}, 0, []]]]]\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-vertex-valence-boundary-endpoints","generated_at":"2026-09-29T14:51:08.437199+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":"Mark both endpoints of every boundary edge.","root_cause":"The boundary set adds only the first endpoint of each single-use edge.","sha256":"431acaa5f3eb1b3c884c2c58acbe4e27a5bb1f1631661eb9354bb2f11f2880e1","title":"Only one endpoint of a boundary edge is marked boundary · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.911,"exit_code":1,"observations":[{"actual":[{"0":5,"1":3,"2":3,"3":3,"4":3,"5":3},6,[1,2,3,4,5]],"check":"disk","expected":[{"0":5,"1":3,"2":3,"3":3,"4":3,"5":3},6,[1,2,3,4,5]],"passed":true},{"actual":[{"0":4,"1":2,"2":3,"3":3,"4":2},4,[0,1,2,3,4]],"check":"fan","expected":[{"0":4,"1":2,"2":3,"3":3,"4":2},4,[0,1,2,3,4]],"passed":true},{"actual":[{"0":3,"1":3,"2":3,"3":3},4,[]],"check":"tetrahedron","expected":[{"0":3,"1":3,"2":3,"3":3},4,[]],"passed":true},{"actual":[{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4},6,[]],"check":"octahedron","expected":[{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4},6,[]],"passed":true},{"actual":[{"0":3,"1":4,"2":2,"3":4,"4":6,"5":4,"6":2,"7":4,"8":3},5,[0,2,3,5,6,7,8]],"check":"triangle grid","expected":[{"0":3,"1":4,"2":2,"3":4,"4":6,"5":4,"6":2,"7":4,"8":3},4,[0,1,2,3,5,6,7,8]],"passed":false},{"actual":[{"0":2,"1":3,"2":2,"3":3,"4":4,"5":3,"6":2,"7":3,"8":2},9,[0,1,2,3,5,6,7,8]],"check":"quad grid","expected":[{"0":2,"1":3,"2":2,"3":3,"4":4,"5":3,"6":2,"7":3,"8":2},9,[0,1,2,3,5,6,7,8]],"passed":true},{"actual":[{"0":3,"1":2,"2":3,"3":2},4,[0,1,2,3]],"check":"degenerate corner","expected":[{"0":3,"1":2,"2":3,"3":2},4,[0,1,2,3]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"disk\", \"actual\": [{\"0\": 5, \"1\": 3, \"2\": 3, \"3\": 3, \"4\": 3, \"5\": 3}, 6, [1, 2, 3, 4, 5]], \"expected\": [{\"0\": 5, \"1\": 3, \"2\": 3, \"3\": 3, \"4\": 3, \"5\": 3}, 6, [1, 2, 3, 4, 5]], \"passed\": true}, {\"check\": \"fan\", \"actual\": [{\"0\": 4, \"1\": 2, \"2\": 3, \"3\": 3, \"4\": 2}, 4, [0, 1, 2, 3, 4]], \"expected\": [{\"0\": 4, \"1\": 2, \"2\": 3, \"3\": 3, \"4\": 2}, 4, [0, 1, 2, 3, 4]], \"passed\": true}, {\"check\": \"tetrahedron\", \"actual\": [{\"0\": 3, \"1\": 3, \"2\": 3, \"3\": 3}, 4, []], \"expected\": [{\"0\": 3, \"1\": 3, \"2\": 3, \"3\": 3}, 4, []], \"passed\": true}, {\"check\": \"octahedron\", \"actual\": [{\"0\": 4, \"1\": 4, \"2\": 4, \"3\": 4, \"4\": 4, \"5\": 4}, 6, []], \"expected\": [{\"0\": 4, \"1\": 4, \"2\": 4, \"3\": 4, \"4\": 4, \"5\": 4}, 6, []], \"passed\": true}, {\"check\": \"triangle grid\", \"actual\": [{\"0\": 3, \"1\": 4, \"2\": 2, \"3\": 4, \"4\": 6, \"5\": 4, \"6\": 2, \"7\": 4, \"8\": 3}, 5, [0, 2, 3, 5, 6, 7, 8]], \"expected\": [{\"0\": 3, \"1\": 4, \"2\": 2, \"3\": 4, \"4\": 6, \"5\": 4, \"6\": 2, \"7\": 4, \"8\": 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]], \"passed\": false}, {\"check\": \"quad grid\", \"actual\": [{\"0\": 2, \"1\": 3, \"2\": 2, \"3\": 3, \"4\": 4, \"5\": 3, \"6\": 2, \"7\": 3, \"8\": 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]], \"expected\": [{\"0\": 2, \"1\": 3, \"2\": 2, \"3\": 3, \"4\": 4, \"5\": 3, \"6\": 2, \"7\": 3, \"8\": 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]], \"passed\": true}, {\"check\": \"degenerate corner\", \"actual\": [{\"0\": 3, \"1\": 2, \"2\": 3, \"3\": 2}, 4, [0, 1, 2, 3]], \"expected\": [{\"0\": 3, \"1\": 2, \"2\": 3, \"3\": 2}, 4, [0, 1, 2, 3]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.57,"exit_code":1,"observations":[{"actual":[{"0":5,"1":3,"2":3,"3":3,"4":3,"5":3},6,[1,2,3,4]],"check":"disk","expected":[{"0":5,"1":3,"2":3,"3":3,"4":3,"5":3},6,[1,2,3,4,5]],"passed":false},{"actual":[{"0":4,"1":2,"2":3,"3":3,"4":2},4,[0,1,2,3]],"check":"fan","expected":[{"0":4,"1":2,"2":3,"3":3,"4":2},4,[0,1,2,3,4]],"passed":false},{"actual":[{"0":3,"1":3,"2":3,"3":3},4,[]],"check":"tetrahedron","expected":[{"0":3,"1":3,"2":3,"3":3},4,[]],"passed":true},{"actual":[{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4},6,[]],"check":"octahedron","expected":[{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4},6,[]],"passed":true},{"actual":[{"0":3,"1":4,"2":2,"3":4,"4":6,"5":4,"6":2,"7":4,"8":3},4,[0,1,2,3,5,6,7]],"check":"triangle grid","expected":[{"0":3,"1":4,"2":2,"3":4,"4":6,"5":4,"6":2,"7":4,"8":3},4,[0,1,2,3,5,6,7,8]],"passed":false},{"actual":[{"0":2,"1":3,"2":2,"3":3,"4":4,"5":3,"6":2,"7":3,"8":2},9,[0,1,2,3,5,6,7]],"check":"quad grid","expected":[{"0":2,"1":3,"2":2,"3":3,"4":4,"5":3,"6":2,"7":3,"8":2},9,[0,1,2,3,5,6,7,8]],"passed":false},{"actual":[{"0":3,"1":2,"2":3,"3":2},4,[0,1,2]],"check":"degenerate corner","expected":[{"0":3,"1":2,"2":3,"3":2},4,[0,1,2,3]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"disk\", \"actual\": [{\"0\": 5, \"1\": 3, \"2\": 3, \"3\": 3, \"4\": 3, \"5\": 3}, 6, [1, 2, 3, 4]], \"expected\": [{\"0\": 5, \"1\": 3, \"2\": 3, \"3\": 3, \"4\": 3, \"5\": 3}, 6, [1, 2, 3, 4, 5]], \"passed\": false}, {\"check\": \"fan\", \"actual\": [{\"0\": 4, \"1\": 2, \"2\": 3, \"3\": 3, \"4\": 2}, 4, [0, 1, 2, 3]], \"expected\": [{\"0\": 4, \"1\": 2, \"2\": 3, \"3\": 3, \"4\": 2}, 4, [0, 1, 2, 3, 4]], \"passed\": false}, {\"check\": \"tetrahedron\", \"actual\": [{\"0\": 3, \"1\": 3, \"2\": 3, \"3\": 3}, 4, []], \"expected\": [{\"0\": 3, \"1\": 3, \"2\": 3, \"3\": 3}, 4, []], \"passed\": true}, {\"check\": \"octahedron\", \"actual\": [{\"0\": 4, \"1\": 4, \"2\": 4, \"3\": 4, \"4\": 4, \"5\": 4}, 6, []], \"expected\": [{\"0\": 4, \"1\": 4, \"2\": 4, \"3\": 4, \"4\": 4, \"5\": 4}, 6, []], \"passed\": true}, {\"check\": \"triangle grid\", \"actual\": [{\"0\": 3, \"1\": 4, \"2\": 2, \"3\": 4, \"4\": 6, \"5\": 4, \"6\": 2, \"7\": 4, \"8\": 3}, 4, [0, 1, 2, 3, 5, 6, 7]], \"expected\": [{\"0\": 3, \"1\": 4, \"2\": 2, \"3\": 4, \"4\": 6, \"5\": 4, \"6\": 2, \"7\": 4, \"8\": 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]], \"passed\": false}, {\"check\": \"quad grid\", \"actual\": [{\"0\": 2, \"1\": 3, \"2\": 2, \"3\": 3, \"4\": 4, \"5\": 3, \"6\": 2, \"7\": 3, \"8\": 2}, 9, [0, 1, 2, 3, 5, 6, 7]], \"expected\": [{\"0\": 2, \"1\": 3, \"2\": 2, \"3\": 3, \"4\": 4, \"5\": 3, \"6\": 2, \"7\": 3, \"8\": 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]], \"passed\": false}, {\"check\": \"degenerate corner\", \"actual\": [{\"0\": 3, \"1\": 2, \"2\": 3, \"3\": 2}, 4, [0, 1, 2]], \"expected\": [{\"0\": 3, \"1\": 2, \"2\": 3, \"3\": 2}, 4, [0, 1, 2, 3]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.718,"exit_code":0,"observations":[{"actual":[{"0":5,"1":3,"2":3,"3":3,"4":3,"5":3},6,[1,2,3,4,5]],"check":"disk","expected":[{"0":5,"1":3,"2":3,"3":3,"4":3,"5":3},6,[1,2,3,4,5]],"passed":true},{"actual":[{"0":4,"1":2,"2":3,"3":3,"4":2},4,[0,1,2,3,4]],"check":"fan","expected":[{"0":4,"1":2,"2":3,"3":3,"4":2},4,[0,1,2,3,4]],"passed":true},{"actual":[{"0":3,"1":3,"2":3,"3":3},4,[]],"check":"tetrahedron","expected":[{"0":3,"1":3,"2":3,"3":3},4,[]],"passed":true},{"actual":[{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4},6,[]],"check":"octahedron","expected":[{"0":4,"1":4,"2":4,"3":4,"4":4,"5":4},6,[]],"passed":true},{"actual":[{"0":3,"1":4,"2":2,"3":4,"4":6,"5":4,"6":2,"7":4,"8":3},4,[0,1,2,3,5,6,7,8]],"check":"triangle grid","expected":[{"0":3,"1":4,"2":2,"3":4,"4":6,"5":4,"6":2,"7":4,"8":3},4,[0,1,2,3,5,6,7,8]],"passed":true},{"actual":[{"0":2,"1":3,"2":2,"3":3,"4":4,"5":3,"6":2,"7":3,"8":2},9,[0,1,2,3,5,6,7,8]],"check":"quad grid","expected":[{"0":2,"1":3,"2":2,"3":3,"4":4,"5":3,"6":2,"7":3,"8":2},9,[0,1,2,3,5,6,7,8]],"passed":true},{"actual":[{"0":3,"1":2,"2":3,"3":2},4,[0,1,2,3]],"check":"degenerate corner","expected":[{"0":3,"1":2,"2":3,"3":2},4,[0,1,2,3]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"disk\", \"actual\": [{\"0\": 5, \"1\": 3, \"2\": 3, \"3\": 3, \"4\": 3, \"5\": 3}, 6, [1, 2, 3, 4, 5]], \"expected\": [{\"0\": 5, \"1\": 3, \"2\": 3, \"3\": 3, \"4\": 3, \"5\": 3}, 6, [1, 2, 3, 4, 5]], \"passed\": true}, {\"check\": \"fan\", \"actual\": [{\"0\": 4, \"1\": 2, \"2\": 3, \"3\": 3, \"4\": 2}, 4, [0, 1, 2, 3, 4]], \"expected\": [{\"0\": 4, \"1\": 2, \"2\": 3, \"3\": 3, \"4\": 2}, 4, [0, 1, 2, 3, 4]], \"passed\": true}, {\"check\": \"tetrahedron\", \"actual\": [{\"0\": 3, \"1\": 3, \"2\": 3, \"3\": 3}, 4, []], \"expected\": [{\"0\": 3, \"1\": 3, \"2\": 3, \"3\": 3}, 4, []], \"passed\": true}, {\"check\": \"octahedron\", \"actual\": [{\"0\": 4, \"1\": 4, \"2\": 4, \"3\": 4, \"4\": 4, \"5\": 4}, 6, []], \"expected\": [{\"0\": 4, \"1\": 4, \"2\": 4, \"3\": 4, \"4\": 4, \"5\": 4}, 6, []], \"passed\": true}, {\"check\": \"triangle grid\", \"actual\": [{\"0\": 3, \"1\": 4, \"2\": 2, \"3\": 4, \"4\": 6, \"5\": 4, \"6\": 2, \"7\": 4, \"8\": 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]], \"expected\": [{\"0\": 3, \"1\": 4, \"2\": 2, \"3\": 4, \"4\": 6, \"5\": 4, \"6\": 2, \"7\": 4, \"8\": 3}, 4, [0, 1, 2, 3, 5, 6, 7, 8]], \"passed\": true}, {\"check\": \"quad grid\", \"actual\": [{\"0\": 2, \"1\": 3, \"2\": 2, \"3\": 3, \"4\": 4, \"5\": 3, \"6\": 2, \"7\": 3, \"8\": 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]], \"expected\": [{\"0\": 2, \"1\": 3, \"2\": 2, \"3\": 3, \"4\": 4, \"5\": 3, \"6\": 2, \"7\": 3, \"8\": 2}, 9, [0, 1, 2, 3, 5, 6, 7, 8]], \"passed\": true}, {\"check\": \"degenerate corner\", \"actual\": [{\"0\": 3, \"1\": 2, \"2\": 3, \"3\": 2}, 4, [0, 1, 2, 3]], \"expected\": [{\"0\": 3, \"1\": 2, \"2\": 3, \"3\": 2}, 4, [0, 1, 2, 3]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}