{"abstract":"Stuck-at faults on internal gate outputs are never detected.","category":"Digital logic simulation","checks":9,"contract":"Input [pis, gates, pos, vectors, faults]. Gates [out, op, ins] are topologically ordered (and/or/nand/nor/not). A fault [net, None, v] is a stem stuck-at on a primary input or gate output; [net, reader, v] is a branch fault that forces only the pin of gate 'reader' that reads 'net'. A fault is detected by a vector when any primary output differs from the fault-free circuit. Return [net, reader, v, first detecting vector index or None] per fault.","evaluation_group":"w2-digital-logic-simulation-stuck-at-faultsim","failed_approach":"Injecting whenever the net matches also turns branch faults on that net into stem faults.","family":"w2-digital-logic-simulation-stuck-at-faultsim-gate-output-stem-injection","id":"FA-89011","implementations":{"attempt":{"sha256":"6c100b9a610764511072d622c95e6681a5cfa2e59702c6d46af7aaa2fd4e9d4c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(*args):\n    pis, gates, pos, vectors, faults = args\n    def ev(op, bits):\n        if op == 'and': return int(all(bits))\n        if op == 'or': return int(any(bits))\n        if op == 'nand': return 1 - int(all(bits))\n        if op == 'nor': return 1 - int(any(bits))\n        return 1 - bits[0]\n    def sim(vec, fault):\n        net, pin, sv = fault if fault else (None, None, None)\n        val = {}\n        for p in pis:\n            val[p] = sv if (p == net and pin is None) else vec[p]\n        for out, op, ins in gates:\n            bits = [sv if (i == net and pin == out) else val[i] for i in ins]\n            v = ev(op, bits)\n            val[out] = sv if out == net else v\n        return [val[o] for o in pos]\n    res = []\n    for f in faults:\n        first = None\n        for idx, vec in enumerate(vectors):\n            if sim(vec, f) != sim(vec, None):\n                first = idx\n                break\n        res.append([f[0], f[1], f[2], first])\n    return res\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['a', None, 1]]], [['a', None, 1, 1]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['b', None, 0]]], [['b', None, 0, 1]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 5]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 1]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['n4', None, 1]]], [['n4', None, 1, 0]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 0], ['n3', None, 0, 2]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['c', 'n5', 1]]], [['c', 'n5', 1, 1]])], [('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['a', None, 1]]], [['a', None, 1, 0]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['b', None, 0]]], [['b', None, 0, 0]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 4]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 0]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n4', None, 1]]], [['n4', None, 1, 2]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 1], ['n3', None, 0, 3]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 0}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['c', 'n5', 1]]], [['c', 'n5', 1, 0]])], [('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['a', None, 1]]], [['a', None, 1, 0]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['b', None, 0]]], [['b', None, 0, 0]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 3]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 1]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n4', None, 1]]], [['n4', None, 1, 1]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 0], ['n3', None, 0, 4]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['c', 'n5', 1]]], [['c', 'n5', 1, 1]])], [('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['a', None, 1]]], [['a', None, 1, 6]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['b', None, 0]]], [['b', None, 0, 2]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 2]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 0]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n4', None, 1]]], [['n4', None, 1, 0]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 0], ['n3', None, 0, 5]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 0}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}], [['c', 'n5', 1]]], [['c', 'n5', 1, 0]])], [('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['a', None, 1]]], [['a', None, 1, 5]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['b', None, 0]]], [['b', None, 0, 1]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 1]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 3]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n4', None, 1]]], [['n4', None, 1, 0]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 0], ['n3', None, 0, 6]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}], [['c', 'n5', 1]]], [['c', 'n5', 1, None]])]]\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":"4180b8c8ad6e63aff25c847ce13e1e94685cfe6430f065661a9b4048ac77cdf0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(*args):\n    pis, gates, pos, vectors, faults = args\n    def ev(op, bits):\n        if op == 'and': return int(all(bits))\n        if op == 'or': return int(any(bits))\n        if op == 'nand': return 1 - int(all(bits))\n        if op == 'nor': return 1 - int(any(bits))\n        return 1 - bits[0]\n    def sim(vec, fault):\n        net, pin, sv = fault if fault else (None, None, None)\n        val = {}\n        for p in pis:\n            val[p] = sv if (p == net and pin is None) else vec[p]\n        for out, op, ins in gates:\n            bits = [sv if (i == net and pin == out) else val[i] for i in ins]\n            v = ev(op, bits)\n            val[out] = v\n        return [val[o] for o in pos]\n    res = []\n    for f in faults:\n        first = None\n        for idx, vec in enumerate(vectors):\n            if sim(vec, f) != sim(vec, None):\n                first = idx\n                break\n        res.append([f[0], f[1], f[2], first])\n    return res\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['a', None, 1]]], [['a', None, 1, 1]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['b', None, 0]]], [['b', None, 0, 1]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 5]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 1]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['n4', None, 1]]], [['n4', None, 1, 0]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 0], ['n3', None, 0, 2]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['c', 'n5', 1]]], [['c', 'n5', 1, 1]])], [('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['a', None, 1]]], [['a', None, 1, 0]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['b', None, 0]]], [['b', None, 0, 0]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 4]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 0]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n4', None, 1]]], [['n4', None, 1, 2]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 1], ['n3', None, 0, 3]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 0}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['c', 'n5', 1]]], [['c', 'n5', 1, 0]])], [('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['a', None, 1]]], [['a', None, 1, 0]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['b', None, 0]]], [['b', None, 0, 0]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 3]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 1]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n4', None, 1]]], [['n4', None, 1, 1]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 0], ['n3', None, 0, 4]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['c', 'n5', 1]]], [['c', 'n5', 1, 1]])], [('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['a', None, 1]]], [['a', None, 1, 6]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['b', None, 0]]], [['b', None, 0, 2]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 2]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 0]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n4', None, 1]]], [['n4', None, 1, 0]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 0], ['n3', None, 0, 5]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 0}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}], [['c', 'n5', 1]]], [['c', 'n5', 1, 0]])], [('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['a', None, 1]]], [['a', None, 1, 5]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['b', None, 0]]], [['b', None, 0, 1]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 1]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 3]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n4', None, 1]]], [['n4', None, 1, 0]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 0], ['n3', None, 0, 6]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}], [['c', 'n5', 1]]], [['c', 'n5', 1, None]])]]\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":"65680fcd1e607799f33ecdd104f73ca7cc0258ed1afe4a4508d48db8a65b9aa9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(*args):\n    pis, gates, pos, vectors, faults = args\n    def ev(op, bits):\n        if op == 'and': return int(all(bits))\n        if op == 'or': return int(any(bits))\n        if op == 'nand': return 1 - int(all(bits))\n        if op == 'nor': return 1 - int(any(bits))\n        return 1 - bits[0]\n    def sim(vec, fault):\n        net, pin, sv = fault if fault else (None, None, None)\n        val = {}\n        for p in pis:\n            val[p] = sv if (p == net and pin is None) else vec[p]\n        for out, op, ins in gates:\n            bits = [sv if (i == net and pin == out) else val[i] for i in ins]\n            v = ev(op, bits)\n            val[out] = sv if (out == net and pin is None) else v\n        return [val[o] for o in pos]\n    res = []\n    for f in faults:\n        first = None\n        for idx, vec in enumerate(vectors):\n            if sim(vec, f) != sim(vec, None):\n                first = idx\n                break\n        res.append([f[0], f[1], f[2], first])\n    return res\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['a', None, 1]]], [['a', None, 1, 1]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['b', None, 0]]], [['b', None, 0, 1]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 5]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 1]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['n4', None, 1]]], [['n4', None, 1, 0]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 0], ['n3', None, 0, 2]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['c', 'n5', 1]]], [['c', 'n5', 1, 1]])], [('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['a', None, 1]]], [['a', None, 1, 0]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['b', None, 0]]], [['b', None, 0, 0]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 4]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 0]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n4', None, 1]]], [['n4', None, 1, 2]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 1], ['n3', None, 0, 3]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 0}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['c', 'n5', 1]]], [['c', 'n5', 1, 0]])], [('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['a', None, 1]]], [['a', None, 1, 0]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['b', None, 0]]], [['b', None, 0, 0]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 3]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 1]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n4', None, 1]]], [['n4', None, 1, 1]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 0], ['n3', None, 0, 4]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['c', 'n5', 1]]], [['c', 'n5', 1, 1]])], [('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['a', None, 1]]], [['a', None, 1, 6]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['b', None, 0]]], [['b', None, 0, 2]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 2]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 0]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n4', None, 1]]], [['n4', None, 1, 0]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 0, 'b': 1, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 0], ['n3', None, 0, 5]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 0}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}], [['c', 'n5', 1]]], [['c', 'n5', 1, 0]])], [('primary input stuck-at-1', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['a', None, 1]]], [['a', None, 1, 5]]), ('primary input stuck-at-0', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['b', None, 0]]], [['b', None, 0, 1]]), ('fanout branch fault into n4', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n1', 'n4', 1]]], [['n1', 'n4', 1, 1]]), ('fanout branch fault into n2', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n1', 'n2', 0]]], [['n1', 'n2', 0, 3]]), ('fault visible only at the second output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n4', None, 1]]], [['n4', None, 1, 0]]), ('fault visible only at the first output', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 1, 'b': 0, 'c': 0}], [['n2', None, 0]]], [['n2', None, 0, 0]]), ('stem fault on internal net', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 0, 'b': 1, 'c': 1}, {'a': 0, 'b': 1, 'c': 0}, {'a': 0, 'b': 0, 'c': 1}, {'a': 0, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}, {'a': 1, 'b': 0, 'c': 1}], [['n1', None, 0], ['n3', None, 0]]], [['n1', None, 0, 0], ['n3', None, 0, 6]]), ('branch fault masked on its reader', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 0}, {'a': 1, 'b': 1, 'c': 1}], [['n1', 'n4', 0]]], [['n1', 'n4', 0, None]]), ('input fault masked downstream', [['a', 'b', 'c'], [['n1', 'nand', ['a', 'b']], ['n2', 'or', ['n1', 'c']], ['n3', 'not', ['n1']], ['n4', 'and', ['n1', 'b']], ['n5', 'nor', ['n3', 'c']]], ['n2', 'n4', 'n5'], [{'a': 1, 'b': 0, 'c': 1}, {'a': 1, 'b': 1, 'c': 0}], [['c', 'n5', 1]]], [['c', 'n5', 1, None]])]]\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":"A deterministic bounded teaching model of one simulator rule set; the contract is stipulated and is not a claim of conformance to any HDL standard or commercial simulator. 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-digital-logic-simulation-stuck-at-faultsim-gate-output-stem-injection","generated_at":"2026-09-29T14:51:13.497202+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Fault simulators grade test sets; stem/branch distinction and output comparison determine reported coverage.","repair":"Replace the computed value with the stuck value when the stem fault targets that gate output.","root_cause":"Gate outputs are stored without applying a stem fault on that net.","sha256":"17adb453ab37962524b50d6bb2f7fe20d352fc9dd48c90d48a29485f66272dd3","title":"Stem faults on gate outputs are ignored · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.856,"exit_code":1,"observations":[{"actual":[["a",null,1,1]],"check":"primary input stuck-at-1","expected":[["a",null,1,1]],"passed":true},{"actual":[["b",null,0,1]],"check":"primary input stuck-at-0","expected":[["b",null,0,1]],"passed":true},{"actual":[["n1","n4",1,5]],"check":"fanout branch fault into n4","expected":[["n1","n4",1,5]],"passed":true},{"actual":[["n1","n2",0,1]],"check":"fanout branch fault into n2","expected":[["n1","n2",0,1]],"passed":true},{"actual":[["n4",null,1,0]],"check":"fault visible only at the second output","expected":[["n4",null,1,0]],"passed":true},{"actual":[["n2",null,0,0]],"check":"fault visible only at the first output","expected":[["n2",null,0,0]],"passed":true},{"actual":[["n1",null,0,0],["n3",null,0,2]],"check":"stem fault on internal net","expected":[["n1",null,0,0],["n3",null,0,2]],"passed":true},{"actual":[["n1","n4",0,0]],"check":"branch fault masked on its reader","expected":[["n1","n4",0,null]],"passed":false},{"actual":[["c","n5",1,1]],"check":"input fault masked downstream","expected":[["c","n5",1,1]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"primary input stuck-at-1\", \"actual\": [[\"a\", null, 1, 1]], \"expected\": [[\"a\", null, 1, 1]], \"passed\": true}, {\"check\": \"primary input stuck-at-0\", \"actual\": [[\"b\", null, 0, 1]], \"expected\": [[\"b\", null, 0, 1]], \"passed\": true}, {\"check\": \"fanout branch fault into n4\", \"actual\": [[\"n1\", \"n4\", 1, 5]], \"expected\": [[\"n1\", \"n4\", 1, 5]], \"passed\": true}, {\"check\": \"fanout branch fault into n2\", \"actual\": [[\"n1\", \"n2\", 0, 1]], \"expected\": [[\"n1\", \"n2\", 0, 1]], \"passed\": true}, {\"check\": \"fault visible only at the second output\", \"actual\": [[\"n4\", null, 1, 0]], \"expected\": [[\"n4\", null, 1, 0]], \"passed\": true}, {\"check\": \"fault visible only at the first output\", \"actual\": [[\"n2\", null, 0, 0]], \"expected\": [[\"n2\", null, 0, 0]], \"passed\": true}, {\"check\": \"stem fault on internal net\", \"actual\": [[\"n1\", null, 0, 0], [\"n3\", null, 0, 2]], \"expected\": [[\"n1\", null, 0, 0], [\"n3\", null, 0, 2]], \"passed\": true}, {\"check\": \"branch fault masked on its reader\", \"actual\": [[\"n1\", \"n4\", 0, 0]], \"expected\": [[\"n1\", \"n4\", 0, null]], \"passed\": false}, {\"check\": \"input fault masked downstream\", \"actual\": [[\"c\", \"n5\", 1, 1]], \"expected\": [[\"c\", \"n5\", 1, 1]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":47.241,"exit_code":1,"observations":[{"actual":[["a",null,1,1]],"check":"primary input stuck-at-1","expected":[["a",null,1,1]],"passed":true},{"actual":[["b",null,0,1]],"check":"primary input stuck-at-0","expected":[["b",null,0,1]],"passed":true},{"actual":[["n1","n4",1,5]],"check":"fanout branch fault into n4","expected":[["n1","n4",1,5]],"passed":true},{"actual":[["n1","n2",0,1]],"check":"fanout branch fault into n2","expected":[["n1","n2",0,1]],"passed":true},{"actual":[["n4",null,1,null]],"check":"fault visible only at the second output","expected":[["n4",null,1,0]],"passed":false},{"actual":[["n2",null,0,null]],"check":"fault visible only at the first output","expected":[["n2",null,0,0]],"passed":false},{"actual":[["n1",null,0,null],["n3",null,0,null]],"check":"stem fault on internal net","expected":[["n1",null,0,0],["n3",null,0,2]],"passed":false},{"actual":[["n1","n4",0,null]],"check":"branch fault masked on its reader","expected":[["n1","n4",0,null]],"passed":true},{"actual":[["c","n5",1,1]],"check":"input fault masked downstream","expected":[["c","n5",1,1]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"primary input stuck-at-1\", \"actual\": [[\"a\", null, 1, 1]], \"expected\": [[\"a\", null, 1, 1]], \"passed\": true}, {\"check\": \"primary input stuck-at-0\", \"actual\": [[\"b\", null, 0, 1]], \"expected\": [[\"b\", null, 0, 1]], \"passed\": true}, {\"check\": \"fanout branch fault into n4\", \"actual\": [[\"n1\", \"n4\", 1, 5]], \"expected\": [[\"n1\", \"n4\", 1, 5]], \"passed\": true}, {\"check\": \"fanout branch fault into n2\", \"actual\": [[\"n1\", \"n2\", 0, 1]], \"expected\": [[\"n1\", \"n2\", 0, 1]], \"passed\": true}, {\"check\": \"fault visible only at the second output\", \"actual\": [[\"n4\", null, 1, null]], \"expected\": [[\"n4\", null, 1, 0]], \"passed\": false}, {\"check\": \"fault visible only at the first output\", \"actual\": [[\"n2\", null, 0, null]], \"expected\": [[\"n2\", null, 0, 0]], \"passed\": false}, {\"check\": \"stem fault on internal net\", \"actual\": [[\"n1\", null, 0, null], [\"n3\", null, 0, null]], \"expected\": [[\"n1\", null, 0, 0], [\"n3\", null, 0, 2]], \"passed\": false}, {\"check\": \"branch fault masked on its reader\", \"actual\": [[\"n1\", \"n4\", 0, null]], \"expected\": [[\"n1\", \"n4\", 0, null]], \"passed\": true}, {\"check\": \"input fault masked downstream\", \"actual\": [[\"c\", \"n5\", 1, 1]], \"expected\": [[\"c\", \"n5\", 1, 1]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.142,"exit_code":0,"observations":[{"actual":[["a",null,1,1]],"check":"primary input stuck-at-1","expected":[["a",null,1,1]],"passed":true},{"actual":[["b",null,0,1]],"check":"primary input stuck-at-0","expected":[["b",null,0,1]],"passed":true},{"actual":[["n1","n4",1,5]],"check":"fanout branch fault into n4","expected":[["n1","n4",1,5]],"passed":true},{"actual":[["n1","n2",0,1]],"check":"fanout branch fault into n2","expected":[["n1","n2",0,1]],"passed":true},{"actual":[["n4",null,1,0]],"check":"fault visible only at the second output","expected":[["n4",null,1,0]],"passed":true},{"actual":[["n2",null,0,0]],"check":"fault visible only at the first output","expected":[["n2",null,0,0]],"passed":true},{"actual":[["n1",null,0,0],["n3",null,0,2]],"check":"stem fault on internal net","expected":[["n1",null,0,0],["n3",null,0,2]],"passed":true},{"actual":[["n1","n4",0,null]],"check":"branch fault masked on its reader","expected":[["n1","n4",0,null]],"passed":true},{"actual":[["c","n5",1,1]],"check":"input fault masked downstream","expected":[["c","n5",1,1]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"primary input stuck-at-1\", \"actual\": [[\"a\", null, 1, 1]], \"expected\": [[\"a\", null, 1, 1]], \"passed\": true}, {\"check\": \"primary input stuck-at-0\", \"actual\": [[\"b\", null, 0, 1]], \"expected\": [[\"b\", null, 0, 1]], \"passed\": true}, {\"check\": \"fanout branch fault into n4\", \"actual\": [[\"n1\", \"n4\", 1, 5]], \"expected\": [[\"n1\", \"n4\", 1, 5]], \"passed\": true}, {\"check\": \"fanout branch fault into n2\", \"actual\": [[\"n1\", \"n2\", 0, 1]], \"expected\": [[\"n1\", \"n2\", 0, 1]], \"passed\": true}, {\"check\": \"fault visible only at the second output\", \"actual\": [[\"n4\", null, 1, 0]], \"expected\": [[\"n4\", null, 1, 0]], \"passed\": true}, {\"check\": \"fault visible only at the first output\", \"actual\": [[\"n2\", null, 0, 0]], \"expected\": [[\"n2\", null, 0, 0]], \"passed\": true}, {\"check\": \"stem fault on internal net\", \"actual\": [[\"n1\", null, 0, 0], [\"n3\", null, 0, 2]], \"expected\": [[\"n1\", null, 0, 0], [\"n3\", null, 0, 2]], \"passed\": true}, {\"check\": \"branch fault masked on its reader\", \"actual\": [[\"n1\", \"n4\", 0, null]], \"expected\": [[\"n1\", \"n4\", 0, null]], \"passed\": true}, {\"check\": \"input fault masked downstream\", \"actual\": [[\"c\", \"n5\", 1, 1]], \"expected\": [[\"c\", \"n5\", 1, 1]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}