{"abstract":"Node reports come out in input order.","category":"GIS polygon topology","checks":8,"contract":"Input [nodes, arcs] with integer node ids and arcs [arc_id, from, to]. Degree counts arc ends, so a loop adds 2 to its node. Label degree 0 \"isolated\", 1 \"dangle\", 2 \"pseudo\", 3 or more \"node\". Return [[node, degree, label], ...] in ascending numeric node order, including isolated nodes.","evaluation_group":"w2-gis-polygon-topology-arc-node-classification","failed_approach":"Sorting by the string form orders node 100 before node 12.","family":"w2-gis-polygon-topology-arc-node-classification-numeric-node-ordering","id":"FA-70756","implementations":{"attempt":{"sha256":"ca3bce0b862a56d90f6f7f15a1cbba1d8c0a6a7f6d2e89c2eb4e191bdd9de91b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    nodes, arcs = x\n    deg = {n: 0 for n in nodes}\n    for aid, u, v in arcs:\n        deg[u] = deg.get(u, 0) + 1\n        deg[v] = deg.get(v, 0) + 1\n    out = []\n    for n in sorted(deg, key=str):\n        d = deg[n]\n        if d == 0:\n            label = 'isolated'\n        elif d == 1:\n            label = 'dangle'\n        elif d == 2:\n            label = 'pseudo'\n        else:\n            label = 'node'\n        out.append([n, d, label])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [[1, 2, 3, 4], [[10, 1, 2], [11, 2, 3], [12, 3, 4], [13, 4, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('control #1', [[1, 2, 3], [[10, 1, 2], [11, 2, 3]]], [[1, 1, 'dangle'], [2, 2, 'pseudo'], [3, 1, 'dangle']]), ('regression #2', [[7], [[30, 7, 7]]], [[7, 2, 'pseudo']]), ('regression #3', [[7, 8], [[30, 7, 7], [31, 7, 8]]], [[7, 3, 'node'], [8, 1, 'dangle']]), ('control #4', [[1, 2, 3, 4, 5], [[1, 1, 2], [2, 1, 3], [3, 1, 4], [4, 1, 5]]], [[1, 4, 'node'], [2, 1, 'dangle'], [3, 1, 'dangle'], [4, 1, 'dangle'], [5, 1, 'dangle']]), ('regression #5', [[2, 10, 11, 3], [[1, 2, 10], [2, 10, 11], [3, 11, 3], [4, 3, 2]]], [[2, 2, 'pseudo'], [3, 2, 'pseudo'], [10, 2, 'pseudo'], [11, 2, 'pseudo']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('regression #7', [[1, 2, 3, 4], [[1, 1, 2], [2, 1, 2], [3, 1, 2], [4, 3, 4], [5, 4, 3]]], [[1, 3, 'node'], [2, 3, 'node'], [3, 2, 'pseudo'], [4, 2, 'pseudo']])], [('regression #3', [[7, 8], [[30, 7, 7], [31, 7, 8]]], [[7, 3, 'node'], [8, 1, 'dangle']]), ('control #4', [[1, 2, 3, 4, 5], [[1, 1, 2], [2, 1, 3], [3, 1, 4], [4, 1, 5]]], [[1, 4, 'node'], [2, 1, 'dangle'], [3, 1, 'dangle'], [4, 1, 'dangle'], [5, 1, 'dangle']]), ('regression #5', [[2, 10, 11, 3], [[1, 2, 10], [2, 10, 11], [3, 11, 3], [4, 3, 2]]], [[2, 2, 'pseudo'], [3, 2, 'pseudo'], [10, 2, 'pseudo'], [11, 2, 'pseudo']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('regression #7', [[1, 2, 3, 4], [[1, 1, 2], [2, 1, 2], [3, 1, 2], [4, 3, 4], [5, 4, 3]]], [[1, 3, 'node'], [2, 3, 'node'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('boundary #8', [[5], []], [[5, 0, 'isolated']]), ('control #9', [[1, 2, 3, 4], [[1, 1, 2], [2, 2, 3], [3, 3, 1], [4, 1, 4], [5, 4, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node']]), ('regression #10', [[12, 3, 25, 100], [[1, 3, 12], [2, 12, 25], [3, 25, 3], [4, 100, 3]]], [[3, 3, 'node'], [12, 2, 'pseudo'], [25, 2, 'pseudo'], [100, 1, 'dangle']])], [('control #0', [[1, 2, 3, 4], [[10, 1, 2], [11, 2, 3], [12, 3, 4], [13, 4, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('control #1', [[1, 2, 3], [[10, 1, 2], [11, 2, 3]]], [[1, 1, 'dangle'], [2, 2, 'pseudo'], [3, 1, 'dangle']]), ('regression #5', [[2, 10, 11, 3], [[1, 2, 10], [2, 10, 11], [3, 11, 3], [4, 3, 2]]], [[2, 2, 'pseudo'], [3, 2, 'pseudo'], [10, 2, 'pseudo'], [11, 2, 'pseudo']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('boundary #8', [[5], []], [[5, 0, 'isolated']]), ('control #9', [[1, 2, 3, 4], [[1, 1, 2], [2, 2, 3], [3, 3, 1], [4, 1, 4], [5, 4, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node']]), ('regression #10', [[12, 3, 25, 100], [[1, 3, 12], [2, 12, 25], [3, 25, 3], [4, 100, 3]]], [[3, 3, 'node'], [12, 2, 'pseudo'], [25, 2, 'pseudo'], [100, 1, 'dangle']]), ('control #11', [[1, 2, 3, 4, 5, 6], [[1, 1, 2], [2, 2, 3], [3, 3, 4], [4, 4, 5], [5, 5, 6], [6, 6, 1], [7, 1, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node'], [5, 2, 'pseudo'], [6, 2, 'pseudo']])], [('control #0', [[1, 2, 3, 4], [[10, 1, 2], [11, 2, 3], [12, 3, 4], [13, 4, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('control #1', [[1, 2, 3], [[10, 1, 2], [11, 2, 3]]], [[1, 1, 'dangle'], [2, 2, 'pseudo'], [3, 1, 'dangle']]), ('regression #2', [[7], [[30, 7, 7]]], [[7, 2, 'pseudo']]), ('regression #3', [[7, 8], [[30, 7, 7], [31, 7, 8]]], [[7, 3, 'node'], [8, 1, 'dangle']]), ('control #4', [[1, 2, 3, 4, 5], [[1, 1, 2], [2, 1, 3], [3, 1, 4], [4, 1, 5]]], [[1, 4, 'node'], [2, 1, 'dangle'], [3, 1, 'dangle'], [4, 1, 'dangle'], [5, 1, 'dangle']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('regression #10', [[12, 3, 25, 100], [[1, 3, 12], [2, 12, 25], [3, 25, 3], [4, 100, 3]]], [[3, 3, 'node'], [12, 2, 'pseudo'], [25, 2, 'pseudo'], [100, 1, 'dangle']]), ('control #11', [[1, 2, 3, 4, 5, 6], [[1, 1, 2], [2, 2, 3], [3, 3, 4], [4, 4, 5], [5, 5, 6], [6, 6, 1], [7, 1, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node'], [5, 2, 'pseudo'], [6, 2, 'pseudo']])], [('regression #2', [[7], [[30, 7, 7]]], [[7, 2, 'pseudo']]), ('regression #3', [[7, 8], [[30, 7, 7], [31, 7, 8]]], [[7, 3, 'node'], [8, 1, 'dangle']]), ('control #4', [[1, 2, 3, 4, 5], [[1, 1, 2], [2, 1, 3], [3, 1, 4], [4, 1, 5]]], [[1, 4, 'node'], [2, 1, 'dangle'], [3, 1, 'dangle'], [4, 1, 'dangle'], [5, 1, 'dangle']]), ('regression #5', [[2, 10, 11, 3], [[1, 2, 10], [2, 10, 11], [3, 11, 3], [4, 3, 2]]], [[2, 2, 'pseudo'], [3, 2, 'pseudo'], [10, 2, 'pseudo'], [11, 2, 'pseudo']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('regression #7', [[1, 2, 3, 4], [[1, 1, 2], [2, 1, 2], [3, 1, 2], [4, 3, 4], [5, 4, 3]]], [[1, 3, 'node'], [2, 3, 'node'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('boundary #8', [[5], []], [[5, 0, 'isolated']]), ('control #9', [[1, 2, 3, 4], [[1, 1, 2], [2, 2, 3], [3, 3, 1], [4, 1, 4], [5, 4, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node']])]]\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":"155dde5b8a98d7ac106cf3392e5b944e1d32af2e1c17c0726f20fa7ab4da3842","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    nodes, arcs = x\n    deg = {n: 0 for n in nodes}\n    for aid, u, v in arcs:\n        deg[u] = deg.get(u, 0) + 1\n        deg[v] = deg.get(v, 0) + 1\n    out = []\n    for n in deg:\n        d = deg[n]\n        if d == 0:\n            label = 'isolated'\n        elif d == 1:\n            label = 'dangle'\n        elif d == 2:\n            label = 'pseudo'\n        else:\n            label = 'node'\n        out.append([n, d, label])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [[1, 2, 3, 4], [[10, 1, 2], [11, 2, 3], [12, 3, 4], [13, 4, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('control #1', [[1, 2, 3], [[10, 1, 2], [11, 2, 3]]], [[1, 1, 'dangle'], [2, 2, 'pseudo'], [3, 1, 'dangle']]), ('regression #2', [[7], [[30, 7, 7]]], [[7, 2, 'pseudo']]), ('regression #3', [[7, 8], [[30, 7, 7], [31, 7, 8]]], [[7, 3, 'node'], [8, 1, 'dangle']]), ('control #4', [[1, 2, 3, 4, 5], [[1, 1, 2], [2, 1, 3], [3, 1, 4], [4, 1, 5]]], [[1, 4, 'node'], [2, 1, 'dangle'], [3, 1, 'dangle'], [4, 1, 'dangle'], [5, 1, 'dangle']]), ('regression #5', [[2, 10, 11, 3], [[1, 2, 10], [2, 10, 11], [3, 11, 3], [4, 3, 2]]], [[2, 2, 'pseudo'], [3, 2, 'pseudo'], [10, 2, 'pseudo'], [11, 2, 'pseudo']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('regression #7', [[1, 2, 3, 4], [[1, 1, 2], [2, 1, 2], [3, 1, 2], [4, 3, 4], [5, 4, 3]]], [[1, 3, 'node'], [2, 3, 'node'], [3, 2, 'pseudo'], [4, 2, 'pseudo']])], [('regression #3', [[7, 8], [[30, 7, 7], [31, 7, 8]]], [[7, 3, 'node'], [8, 1, 'dangle']]), ('control #4', [[1, 2, 3, 4, 5], [[1, 1, 2], [2, 1, 3], [3, 1, 4], [4, 1, 5]]], [[1, 4, 'node'], [2, 1, 'dangle'], [3, 1, 'dangle'], [4, 1, 'dangle'], [5, 1, 'dangle']]), ('regression #5', [[2, 10, 11, 3], [[1, 2, 10], [2, 10, 11], [3, 11, 3], [4, 3, 2]]], [[2, 2, 'pseudo'], [3, 2, 'pseudo'], [10, 2, 'pseudo'], [11, 2, 'pseudo']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('regression #7', [[1, 2, 3, 4], [[1, 1, 2], [2, 1, 2], [3, 1, 2], [4, 3, 4], [5, 4, 3]]], [[1, 3, 'node'], [2, 3, 'node'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('boundary #8', [[5], []], [[5, 0, 'isolated']]), ('control #9', [[1, 2, 3, 4], [[1, 1, 2], [2, 2, 3], [3, 3, 1], [4, 1, 4], [5, 4, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node']]), ('regression #10', [[12, 3, 25, 100], [[1, 3, 12], [2, 12, 25], [3, 25, 3], [4, 100, 3]]], [[3, 3, 'node'], [12, 2, 'pseudo'], [25, 2, 'pseudo'], [100, 1, 'dangle']])], [('control #0', [[1, 2, 3, 4], [[10, 1, 2], [11, 2, 3], [12, 3, 4], [13, 4, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('control #1', [[1, 2, 3], [[10, 1, 2], [11, 2, 3]]], [[1, 1, 'dangle'], [2, 2, 'pseudo'], [3, 1, 'dangle']]), ('regression #5', [[2, 10, 11, 3], [[1, 2, 10], [2, 10, 11], [3, 11, 3], [4, 3, 2]]], [[2, 2, 'pseudo'], [3, 2, 'pseudo'], [10, 2, 'pseudo'], [11, 2, 'pseudo']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('boundary #8', [[5], []], [[5, 0, 'isolated']]), ('control #9', [[1, 2, 3, 4], [[1, 1, 2], [2, 2, 3], [3, 3, 1], [4, 1, 4], [5, 4, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node']]), ('regression #10', [[12, 3, 25, 100], [[1, 3, 12], [2, 12, 25], [3, 25, 3], [4, 100, 3]]], [[3, 3, 'node'], [12, 2, 'pseudo'], [25, 2, 'pseudo'], [100, 1, 'dangle']]), ('control #11', [[1, 2, 3, 4, 5, 6], [[1, 1, 2], [2, 2, 3], [3, 3, 4], [4, 4, 5], [5, 5, 6], [6, 6, 1], [7, 1, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node'], [5, 2, 'pseudo'], [6, 2, 'pseudo']])], [('control #0', [[1, 2, 3, 4], [[10, 1, 2], [11, 2, 3], [12, 3, 4], [13, 4, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('control #1', [[1, 2, 3], [[10, 1, 2], [11, 2, 3]]], [[1, 1, 'dangle'], [2, 2, 'pseudo'], [3, 1, 'dangle']]), ('regression #2', [[7], [[30, 7, 7]]], [[7, 2, 'pseudo']]), ('regression #3', [[7, 8], [[30, 7, 7], [31, 7, 8]]], [[7, 3, 'node'], [8, 1, 'dangle']]), ('control #4', [[1, 2, 3, 4, 5], [[1, 1, 2], [2, 1, 3], [3, 1, 4], [4, 1, 5]]], [[1, 4, 'node'], [2, 1, 'dangle'], [3, 1, 'dangle'], [4, 1, 'dangle'], [5, 1, 'dangle']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('regression #10', [[12, 3, 25, 100], [[1, 3, 12], [2, 12, 25], [3, 25, 3], [4, 100, 3]]], [[3, 3, 'node'], [12, 2, 'pseudo'], [25, 2, 'pseudo'], [100, 1, 'dangle']]), ('control #11', [[1, 2, 3, 4, 5, 6], [[1, 1, 2], [2, 2, 3], [3, 3, 4], [4, 4, 5], [5, 5, 6], [6, 6, 1], [7, 1, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node'], [5, 2, 'pseudo'], [6, 2, 'pseudo']])], [('regression #2', [[7], [[30, 7, 7]]], [[7, 2, 'pseudo']]), ('regression #3', [[7, 8], [[30, 7, 7], [31, 7, 8]]], [[7, 3, 'node'], [8, 1, 'dangle']]), ('control #4', [[1, 2, 3, 4, 5], [[1, 1, 2], [2, 1, 3], [3, 1, 4], [4, 1, 5]]], [[1, 4, 'node'], [2, 1, 'dangle'], [3, 1, 'dangle'], [4, 1, 'dangle'], [5, 1, 'dangle']]), ('regression #5', [[2, 10, 11, 3], [[1, 2, 10], [2, 10, 11], [3, 11, 3], [4, 3, 2]]], [[2, 2, 'pseudo'], [3, 2, 'pseudo'], [10, 2, 'pseudo'], [11, 2, 'pseudo']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('regression #7', [[1, 2, 3, 4], [[1, 1, 2], [2, 1, 2], [3, 1, 2], [4, 3, 4], [5, 4, 3]]], [[1, 3, 'node'], [2, 3, 'node'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('boundary #8', [[5], []], [[5, 0, 'isolated']]), ('control #9', [[1, 2, 3, 4], [[1, 1, 2], [2, 2, 3], [3, 3, 1], [4, 1, 4], [5, 4, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node']])]]\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":"43210123ed9c4810f563a476542b16eb1e4f8975a560f5df0fe7a07da3fb5c4c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    nodes, arcs = x\n    deg = {n: 0 for n in nodes}\n    for aid, u, v in arcs:\n        deg[u] = deg.get(u, 0) + 1\n        deg[v] = deg.get(v, 0) + 1\n    out = []\n    for n in sorted(deg):\n        d = deg[n]\n        if d == 0:\n            label = 'isolated'\n        elif d == 1:\n            label = 'dangle'\n        elif d == 2:\n            label = 'pseudo'\n        else:\n            label = 'node'\n        out.append([n, d, label])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [[1, 2, 3, 4], [[10, 1, 2], [11, 2, 3], [12, 3, 4], [13, 4, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('control #1', [[1, 2, 3], [[10, 1, 2], [11, 2, 3]]], [[1, 1, 'dangle'], [2, 2, 'pseudo'], [3, 1, 'dangle']]), ('regression #2', [[7], [[30, 7, 7]]], [[7, 2, 'pseudo']]), ('regression #3', [[7, 8], [[30, 7, 7], [31, 7, 8]]], [[7, 3, 'node'], [8, 1, 'dangle']]), ('control #4', [[1, 2, 3, 4, 5], [[1, 1, 2], [2, 1, 3], [3, 1, 4], [4, 1, 5]]], [[1, 4, 'node'], [2, 1, 'dangle'], [3, 1, 'dangle'], [4, 1, 'dangle'], [5, 1, 'dangle']]), ('regression #5', [[2, 10, 11, 3], [[1, 2, 10], [2, 10, 11], [3, 11, 3], [4, 3, 2]]], [[2, 2, 'pseudo'], [3, 2, 'pseudo'], [10, 2, 'pseudo'], [11, 2, 'pseudo']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('regression #7', [[1, 2, 3, 4], [[1, 1, 2], [2, 1, 2], [3, 1, 2], [4, 3, 4], [5, 4, 3]]], [[1, 3, 'node'], [2, 3, 'node'], [3, 2, 'pseudo'], [4, 2, 'pseudo']])], [('regression #3', [[7, 8], [[30, 7, 7], [31, 7, 8]]], [[7, 3, 'node'], [8, 1, 'dangle']]), ('control #4', [[1, 2, 3, 4, 5], [[1, 1, 2], [2, 1, 3], [3, 1, 4], [4, 1, 5]]], [[1, 4, 'node'], [2, 1, 'dangle'], [3, 1, 'dangle'], [4, 1, 'dangle'], [5, 1, 'dangle']]), ('regression #5', [[2, 10, 11, 3], [[1, 2, 10], [2, 10, 11], [3, 11, 3], [4, 3, 2]]], [[2, 2, 'pseudo'], [3, 2, 'pseudo'], [10, 2, 'pseudo'], [11, 2, 'pseudo']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('regression #7', [[1, 2, 3, 4], [[1, 1, 2], [2, 1, 2], [3, 1, 2], [4, 3, 4], [5, 4, 3]]], [[1, 3, 'node'], [2, 3, 'node'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('boundary #8', [[5], []], [[5, 0, 'isolated']]), ('control #9', [[1, 2, 3, 4], [[1, 1, 2], [2, 2, 3], [3, 3, 1], [4, 1, 4], [5, 4, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node']]), ('regression #10', [[12, 3, 25, 100], [[1, 3, 12], [2, 12, 25], [3, 25, 3], [4, 100, 3]]], [[3, 3, 'node'], [12, 2, 'pseudo'], [25, 2, 'pseudo'], [100, 1, 'dangle']])], [('control #0', [[1, 2, 3, 4], [[10, 1, 2], [11, 2, 3], [12, 3, 4], [13, 4, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('control #1', [[1, 2, 3], [[10, 1, 2], [11, 2, 3]]], [[1, 1, 'dangle'], [2, 2, 'pseudo'], [3, 1, 'dangle']]), ('regression #5', [[2, 10, 11, 3], [[1, 2, 10], [2, 10, 11], [3, 11, 3], [4, 3, 2]]], [[2, 2, 'pseudo'], [3, 2, 'pseudo'], [10, 2, 'pseudo'], [11, 2, 'pseudo']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('boundary #8', [[5], []], [[5, 0, 'isolated']]), ('control #9', [[1, 2, 3, 4], [[1, 1, 2], [2, 2, 3], [3, 3, 1], [4, 1, 4], [5, 4, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node']]), ('regression #10', [[12, 3, 25, 100], [[1, 3, 12], [2, 12, 25], [3, 25, 3], [4, 100, 3]]], [[3, 3, 'node'], [12, 2, 'pseudo'], [25, 2, 'pseudo'], [100, 1, 'dangle']]), ('control #11', [[1, 2, 3, 4, 5, 6], [[1, 1, 2], [2, 2, 3], [3, 3, 4], [4, 4, 5], [5, 5, 6], [6, 6, 1], [7, 1, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node'], [5, 2, 'pseudo'], [6, 2, 'pseudo']])], [('control #0', [[1, 2, 3, 4], [[10, 1, 2], [11, 2, 3], [12, 3, 4], [13, 4, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('control #1', [[1, 2, 3], [[10, 1, 2], [11, 2, 3]]], [[1, 1, 'dangle'], [2, 2, 'pseudo'], [3, 1, 'dangle']]), ('regression #2', [[7], [[30, 7, 7]]], [[7, 2, 'pseudo']]), ('regression #3', [[7, 8], [[30, 7, 7], [31, 7, 8]]], [[7, 3, 'node'], [8, 1, 'dangle']]), ('control #4', [[1, 2, 3, 4, 5], [[1, 1, 2], [2, 1, 3], [3, 1, 4], [4, 1, 5]]], [[1, 4, 'node'], [2, 1, 'dangle'], [3, 1, 'dangle'], [4, 1, 'dangle'], [5, 1, 'dangle']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('regression #10', [[12, 3, 25, 100], [[1, 3, 12], [2, 12, 25], [3, 25, 3], [4, 100, 3]]], [[3, 3, 'node'], [12, 2, 'pseudo'], [25, 2, 'pseudo'], [100, 1, 'dangle']]), ('control #11', [[1, 2, 3, 4, 5, 6], [[1, 1, 2], [2, 2, 3], [3, 3, 4], [4, 4, 5], [5, 5, 6], [6, 6, 1], [7, 1, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node'], [5, 2, 'pseudo'], [6, 2, 'pseudo']])], [('regression #2', [[7], [[30, 7, 7]]], [[7, 2, 'pseudo']]), ('regression #3', [[7, 8], [[30, 7, 7], [31, 7, 8]]], [[7, 3, 'node'], [8, 1, 'dangle']]), ('control #4', [[1, 2, 3, 4, 5], [[1, 1, 2], [2, 1, 3], [3, 1, 4], [4, 1, 5]]], [[1, 4, 'node'], [2, 1, 'dangle'], [3, 1, 'dangle'], [4, 1, 'dangle'], [5, 1, 'dangle']]), ('regression #5', [[2, 10, 11, 3], [[1, 2, 10], [2, 10, 11], [3, 11, 3], [4, 3, 2]]], [[2, 2, 'pseudo'], [3, 2, 'pseudo'], [10, 2, 'pseudo'], [11, 2, 'pseudo']]), ('regression #6', [[1, 2, 9, 10], [[1, 1, 2], [2, 2, 10], [3, 10, 1]]], [[1, 2, 'pseudo'], [2, 2, 'pseudo'], [9, 0, 'isolated'], [10, 2, 'pseudo']]), ('regression #7', [[1, 2, 3, 4], [[1, 1, 2], [2, 1, 2], [3, 1, 2], [4, 3, 4], [5, 4, 3]]], [[1, 3, 'node'], [2, 3, 'node'], [3, 2, 'pseudo'], [4, 2, 'pseudo']]), ('boundary #8', [[5], []], [[5, 0, 'isolated']]), ('control #9', [[1, 2, 3, 4], [[1, 1, 2], [2, 2, 3], [3, 3, 1], [4, 1, 4], [5, 4, 4]]], [[1, 3, 'node'], [2, 2, 'pseudo'], [3, 2, 'pseudo'], [4, 3, 'node']])]]\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":"Stipulated deterministic toy contract on a bounded input domain; results are rounded as stated and no conformance with any published standard or library is claimed. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-gis-polygon-topology-arc-node-classification-numeric-node-ordering","generated_at":"2026-09-29T14:48:23.613905+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Topology QA flags dangles (undershoots) and pseudo-nodes (unnecessary splits); miscounting loops turns valid island rings into errors.","repair":"At the numeric node ordering step restore `for n in sorted(deg):`, leaving the rest of the model unchanged.","root_cause":"Nodes are reported in dictionary insertion order.","sha256":"932108a8b84fcb4aefd195f0efd0915520610af701b7c7ea5ff3b3484adc24b2","title":"Node degree classification in an arc-node topology: numeric node ordering · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.221,"exit_code":1,"observations":[{"actual":[[1,2,"pseudo"],[2,2,"pseudo"],[3,2,"pseudo"],[4,2,"pseudo"]],"check":"control #0","expected":[[1,2,"pseudo"],[2,2,"pseudo"],[3,2,"pseudo"],[4,2,"pseudo"]],"passed":true},{"actual":[[1,1,"dangle"],[2,2,"pseudo"],[3,1,"dangle"]],"check":"control #1","expected":[[1,1,"dangle"],[2,2,"pseudo"],[3,1,"dangle"]],"passed":true},{"actual":[[7,2,"pseudo"]],"check":"regression #2","expected":[[7,2,"pseudo"]],"passed":true},{"actual":[[7,3,"node"],[8,1,"dangle"]],"check":"regression #3","expected":[[7,3,"node"],[8,1,"dangle"]],"passed":true},{"actual":[[1,4,"node"],[2,1,"dangle"],[3,1,"dangle"],[4,1,"dangle"],[5,1,"dangle"]],"check":"control #4","expected":[[1,4,"node"],[2,1,"dangle"],[3,1,"dangle"],[4,1,"dangle"],[5,1,"dangle"]],"passed":true},{"actual":[[10,2,"pseudo"],[11,2,"pseudo"],[2,2,"pseudo"],[3,2,"pseudo"]],"check":"regression #5","expected":[[2,2,"pseudo"],[3,2,"pseudo"],[10,2,"pseudo"],[11,2,"pseudo"]],"passed":false},{"actual":[[1,2,"pseudo"],[10,2,"pseudo"],[2,2,"pseudo"],[9,0,"isolated"]],"check":"regression #6","expected":[[1,2,"pseudo"],[2,2,"pseudo"],[9,0,"isolated"],[10,2,"pseudo"]],"passed":false},{"actual":[[1,3,"node"],[2,3,"node"],[3,2,"pseudo"],[4,2,"pseudo"]],"check":"regression #7","expected":[[1,3,"node"],[2,3,"node"],[3,2,"pseudo"],[4,2,"pseudo"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [[1, 2, \"pseudo\"], [2, 2, \"pseudo\"], [3, 2, \"pseudo\"], [4, 2, \"pseudo\"]], \"expected\": [[1, 2, \"pseudo\"], [2, 2, \"pseudo\"], [3, 2, \"pseudo\"], [4, 2, \"pseudo\"]], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [[1, 1, \"dangle\"], [2, 2, \"pseudo\"], [3, 1, \"dangle\"]], \"expected\": [[1, 1, \"dangle\"], [2, 2, \"pseudo\"], [3, 1, \"dangle\"]], \"passed\": true}, {\"check\": \"regression #2\", \"actual\": [[7, 2, \"pseudo\"]], \"expected\": [[7, 2, \"pseudo\"]], \"passed\": true}, {\"check\": \"regression #3\", \"actual\": [[7, 3, \"node\"], [8, 1, \"dangle\"]], \"expected\": [[7, 3, \"node\"], [8, 1, \"dangle\"]], \"passed\": true}, {\"check\": \"control #4\", \"actual\": [[1, 4, \"node\"], [2, 1, \"dangle\"], [3, 1, \"dangle\"], [4, 1, \"dangle\"], [5, 1, \"dangle\"]], \"expected\": [[1, 4, \"node\"], [2, 1, \"dangle\"], [3, 1, \"dangle\"], [4, 1, \"dangle\"], [5, 1, \"dangle\"]], \"passed\": true}, {\"check\": \"regression #5\", \"actual\": [[10, 2, \"pseudo\"], [11, 2, \"pseudo\"], [2, 2, \"pseudo\"], [3, 2, \"pseudo\"]], \"expected\": [[2, 2, \"pseudo\"], [3, 2, \"pseudo\"], [10, 2, \"pseudo\"], [11, 2, \"pseudo\"]], \"passed\": false}, {\"check\": \"regression #6\", \"actual\": [[1, 2, \"pseudo\"], [10, 2, \"pseudo\"], [2, 2, \"pseudo\"], [9, 0, \"isolated\"]], \"expected\": [[1, 2, \"pseudo\"], [2, 2, \"pseudo\"], [9, 0, \"isolated\"], [10, 2, \"pseudo\"]], \"passed\": false}, {\"check\": \"regression #7\", \"actual\": [[1, 3, \"node\"], [2, 3, \"node\"], [3, 2, \"pseudo\"], [4, 2, \"pseudo\"]], \"expected\": [[1, 3, \"node\"], [2, 3, \"node\"], [3, 2, \"pseudo\"], [4, 2, \"pseudo\"]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.945,"exit_code":1,"observations":[{"actual":[[1,2,"pseudo"],[2,2,"pseudo"],[3,2,"pseudo"],[4,2,"pseudo"]],"check":"control #0","expected":[[1,2,"pseudo"],[2,2,"pseudo"],[3,2,"pseudo"],[4,2,"pseudo"]],"passed":true},{"actual":[[1,1,"dangle"],[2,2,"pseudo"],[3,1,"dangle"]],"check":"control #1","expected":[[1,1,"dangle"],[2,2,"pseudo"],[3,1,"dangle"]],"passed":true},{"actual":[[7,2,"pseudo"]],"check":"regression #2","expected":[[7,2,"pseudo"]],"passed":true},{"actual":[[7,3,"node"],[8,1,"dangle"]],"check":"regression #3","expected":[[7,3,"node"],[8,1,"dangle"]],"passed":true},{"actual":[[1,4,"node"],[2,1,"dangle"],[3,1,"dangle"],[4,1,"dangle"],[5,1,"dangle"]],"check":"control #4","expected":[[1,4,"node"],[2,1,"dangle"],[3,1,"dangle"],[4,1,"dangle"],[5,1,"dangle"]],"passed":true},{"actual":[[2,2,"pseudo"],[10,2,"pseudo"],[11,2,"pseudo"],[3,2,"pseudo"]],"check":"regression #5","expected":[[2,2,"pseudo"],[3,2,"pseudo"],[10,2,"pseudo"],[11,2,"pseudo"]],"passed":false},{"actual":[[1,2,"pseudo"],[2,2,"pseudo"],[9,0,"isolated"],[10,2,"pseudo"]],"check":"regression #6","expected":[[1,2,"pseudo"],[2,2,"pseudo"],[9,0,"isolated"],[10,2,"pseudo"]],"passed":true},{"actual":[[1,3,"node"],[2,3,"node"],[3,2,"pseudo"],[4,2,"pseudo"]],"check":"regression #7","expected":[[1,3,"node"],[2,3,"node"],[3,2,"pseudo"],[4,2,"pseudo"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [[1, 2, \"pseudo\"], [2, 2, \"pseudo\"], [3, 2, \"pseudo\"], [4, 2, \"pseudo\"]], \"expected\": [[1, 2, \"pseudo\"], [2, 2, \"pseudo\"], [3, 2, \"pseudo\"], [4, 2, \"pseudo\"]], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [[1, 1, \"dangle\"], [2, 2, \"pseudo\"], [3, 1, \"dangle\"]], \"expected\": [[1, 1, \"dangle\"], [2, 2, \"pseudo\"], [3, 1, \"dangle\"]], \"passed\": true}, {\"check\": \"regression #2\", \"actual\": [[7, 2, \"pseudo\"]], \"expected\": [[7, 2, \"pseudo\"]], \"passed\": true}, {\"check\": \"regression #3\", \"actual\": [[7, 3, \"node\"], [8, 1, \"dangle\"]], \"expected\": [[7, 3, \"node\"], [8, 1, \"dangle\"]], \"passed\": true}, {\"check\": \"control #4\", \"actual\": [[1, 4, \"node\"], [2, 1, \"dangle\"], [3, 1, \"dangle\"], [4, 1, \"dangle\"], [5, 1, \"dangle\"]], \"expected\": [[1, 4, \"node\"], [2, 1, \"dangle\"], [3, 1, \"dangle\"], [4, 1, \"dangle\"], [5, 1, \"dangle\"]], \"passed\": true}, {\"check\": \"regression #5\", \"actual\": [[2, 2, \"pseudo\"], [10, 2, \"pseudo\"], [11, 2, \"pseudo\"], [3, 2, \"pseudo\"]], \"expected\": [[2, 2, \"pseudo\"], [3, 2, \"pseudo\"], [10, 2, \"pseudo\"], [11, 2, \"pseudo\"]], \"passed\": false}, {\"check\": \"regression #6\", \"actual\": [[1, 2, \"pseudo\"], [2, 2, \"pseudo\"], [9, 0, \"isolated\"], [10, 2, \"pseudo\"]], \"expected\": [[1, 2, \"pseudo\"], [2, 2, \"pseudo\"], [9, 0, \"isolated\"], [10, 2, \"pseudo\"]], \"passed\": true}, {\"check\": \"regression #7\", \"actual\": [[1, 3, \"node\"], [2, 3, \"node\"], [3, 2, \"pseudo\"], [4, 2, \"pseudo\"]], \"expected\": [[1, 3, \"node\"], [2, 3, \"node\"], [3, 2, \"pseudo\"], [4, 2, \"pseudo\"]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.628,"exit_code":0,"observations":[{"actual":[[1,2,"pseudo"],[2,2,"pseudo"],[3,2,"pseudo"],[4,2,"pseudo"]],"check":"control #0","expected":[[1,2,"pseudo"],[2,2,"pseudo"],[3,2,"pseudo"],[4,2,"pseudo"]],"passed":true},{"actual":[[1,1,"dangle"],[2,2,"pseudo"],[3,1,"dangle"]],"check":"control #1","expected":[[1,1,"dangle"],[2,2,"pseudo"],[3,1,"dangle"]],"passed":true},{"actual":[[7,2,"pseudo"]],"check":"regression #2","expected":[[7,2,"pseudo"]],"passed":true},{"actual":[[7,3,"node"],[8,1,"dangle"]],"check":"regression #3","expected":[[7,3,"node"],[8,1,"dangle"]],"passed":true},{"actual":[[1,4,"node"],[2,1,"dangle"],[3,1,"dangle"],[4,1,"dangle"],[5,1,"dangle"]],"check":"control #4","expected":[[1,4,"node"],[2,1,"dangle"],[3,1,"dangle"],[4,1,"dangle"],[5,1,"dangle"]],"passed":true},{"actual":[[2,2,"pseudo"],[3,2,"pseudo"],[10,2,"pseudo"],[11,2,"pseudo"]],"check":"regression #5","expected":[[2,2,"pseudo"],[3,2,"pseudo"],[10,2,"pseudo"],[11,2,"pseudo"]],"passed":true},{"actual":[[1,2,"pseudo"],[2,2,"pseudo"],[9,0,"isolated"],[10,2,"pseudo"]],"check":"regression #6","expected":[[1,2,"pseudo"],[2,2,"pseudo"],[9,0,"isolated"],[10,2,"pseudo"]],"passed":true},{"actual":[[1,3,"node"],[2,3,"node"],[3,2,"pseudo"],[4,2,"pseudo"]],"check":"regression #7","expected":[[1,3,"node"],[2,3,"node"],[3,2,"pseudo"],[4,2,"pseudo"]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [[1, 2, \"pseudo\"], [2, 2, \"pseudo\"], [3, 2, \"pseudo\"], [4, 2, \"pseudo\"]], \"expected\": [[1, 2, \"pseudo\"], [2, 2, \"pseudo\"], [3, 2, \"pseudo\"], [4, 2, \"pseudo\"]], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [[1, 1, \"dangle\"], [2, 2, \"pseudo\"], [3, 1, \"dangle\"]], \"expected\": [[1, 1, \"dangle\"], [2, 2, \"pseudo\"], [3, 1, \"dangle\"]], \"passed\": true}, {\"check\": \"regression #2\", \"actual\": [[7, 2, \"pseudo\"]], \"expected\": [[7, 2, \"pseudo\"]], \"passed\": true}, {\"check\": \"regression #3\", \"actual\": [[7, 3, \"node\"], [8, 1, \"dangle\"]], \"expected\": [[7, 3, \"node\"], [8, 1, \"dangle\"]], \"passed\": true}, {\"check\": \"control #4\", \"actual\": [[1, 4, \"node\"], [2, 1, \"dangle\"], [3, 1, \"dangle\"], [4, 1, \"dangle\"], [5, 1, \"dangle\"]], \"expected\": [[1, 4, \"node\"], [2, 1, \"dangle\"], [3, 1, \"dangle\"], [4, 1, \"dangle\"], [5, 1, \"dangle\"]], \"passed\": true}, {\"check\": \"regression #5\", \"actual\": [[2, 2, \"pseudo\"], [3, 2, \"pseudo\"], [10, 2, \"pseudo\"], [11, 2, \"pseudo\"]], \"expected\": [[2, 2, \"pseudo\"], [3, 2, \"pseudo\"], [10, 2, \"pseudo\"], [11, 2, \"pseudo\"]], \"passed\": true}, {\"check\": \"regression #6\", \"actual\": [[1, 2, \"pseudo\"], [2, 2, \"pseudo\"], [9, 0, \"isolated\"], [10, 2, \"pseudo\"]], \"expected\": [[1, 2, \"pseudo\"], [2, 2, \"pseudo\"], [9, 0, \"isolated\"], [10, 2, \"pseudo\"]], \"passed\": true}, {\"check\": \"regression #7\", \"actual\": [[1, 3, \"node\"], [2, 3, \"node\"], [3, 2, \"pseudo\"], [4, 2, \"pseudo\"]], \"expected\": [[1, 3, \"node\"], [2, 3, \"node\"], [3, 2, \"pseudo\"], [4, 2, \"pseudo\"]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}