{"abstract":"After one pulse the instruction never fires again because its storage bit is never refreshed to the input.","category":"PLC ladder logic scan cycles","checks":8,"contract":"One-shot rising (OSR) and one-shot falling (OSF) instructions executed in program order each scan; instrs is a list of [kind, input_tag, storage_tag] and scans a list of {tag: bool} (missing tags are false). Prescan initializes each OSR storage bit true and each OSF storage bit false (later instructions overwrite shared storage), so nothing pulses on the first scan merely because an input is already in its steady state. OSR pulses when input is true and storage false; OSF pulses when storage is true and input false; the storage bit is then set to the input. Instructions that share a storage tag share its state. Return the pulse list per scan.","evaluation_group":"w2-plc-ladder-logic-scan-cycles-osr-osf-one-shots","failed_approach":"Deriving storage from the pulse and the old storage works for OSR but never arms OSF.","family":"w2-plc-ladder-logic-scan-cycles-osr-osf-one-shots-storage-update","id":"FA-91986","implementations":{"attempt":{"sha256":"a3ae98fd91383e6b731ca140c6f19820fa6be5c59b87f70d129991c78d9d8c92","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(instrs, scans):\n    store = {}\n    for kind, tag, st in instrs:\n        store[st] = kind != 'OSF'\n    out = []\n    for inputs in scans:\n        pulses = []\n        for kind, tag, st in instrs:\n            cur = bool(inputs.get(tag, False))\n            if kind == 'OSF':\n                pulse = store[st] and not cur\n            else:\n                pulse = cur and not store[st]\n            store[st] = pulse or (store[st] and cur)\n            pulses.append(pulse)\n        out.append(pulses)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: scenario 1',\n   [[['OSR', 'I:1', 'B:10'], ['OSR', 'I:1', 'B:10'], ['OSF', 'B:3', 'B:12']],\n    [{'B:3': False},\n     {'I:0': False, 'I:1': True},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False, False],\n    [True, False, False],\n    [False, False, False],\n    [False, False, False],\n    [True, False, False],\n    [False, False, False],\n    [False, False, True],\n    [True, False, False]]],\n  ['regression: scenario 2',\n   [[['OSF', 'I:1', 'B:13'], ['OSF', 'B:3', 'B:10']],\n    [{'I:0': True, 'B:3': False},\n     {'I:0': False, 'B:3': False},\n     {'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False], [False, False], [False, False], [False, True], [True, False], [False, False]]],\n  ['regression: scenario 3',\n   [[['OSF', 'I:0', 'B:12'], ['OSF', 'B:3', 'B:12']],\n    [{'I:0': True, 'I:1': True},\n     {'I:1': False, 'B:3': True},\n     {'I:1': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'B:3': False}]],\n   [[False, True], [False, False], [True, False], [False, False], [False, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:12'], ['OSF', 'B:3', 'B:12'], ['OSR', 'I:0', 'B:11'], ['OSR', 'B:3', 'B:12']],\n    [{'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': True},\n     {'I:0': False, 'I:1': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True}]],\n   [[True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [True, False, True, False],\n    [False, False, False, False],\n    [False, False, True, False],\n    [False, False, False, False]]],\n  ['control: scenario 5',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'B:3', 'B:12']],\n    [{'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False], [False, False], [False, False], [False, False], [False, False]]]],\n [['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: scenario 1',\n   [[['OSF', 'B:3', 'B:11'], ['OSR', 'B:3', 'B:10']],\n    [{'I:0': False, 'B:3': True},\n     {'I:0': True, 'I:1': True},\n     {'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': False}]],\n   [[False, False], [True, False], [False, False], [False, False], [False, False], [False, False]]],\n  ['regression: scenario 2',\n   [[['OSR', 'I:1', 'B:11'], ['OSR', 'I:0', 'B:11']],\n    [{'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': False},\n     {'I:0': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False],\n    [False, False],\n    [False, True],\n    [False, False],\n    [False, False],\n    [False, False],\n    [False, True],\n    [False, False]]],\n  ['regression: scenario 3',\n   [[['OSR', 'I:0', 'B:11'], ['OSF', 'I:0', 'B:12'], ['OSR', 'I:1', 'B:13'], ['OSR', 'I:0', 'B:12']],\n    [{'I:0': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:1': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True}]],\n   [[False, False, False, False],\n    [False, False, True, False],\n    [False, True, False, False],\n    [False, False, True, False],\n    [True, False, False, False],\n    [False, True, True, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:12'], ['OSR', 'B:3', 'B:12'], ['OSR', 'I:0', 'B:10']],\n    [{'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': False},\n     {'I:0': False, 'I:1': True},\n     {'I:0': True, 'I:1': True, 'B:3': False}]],\n   [[True, False, False],\n    [False, False, True],\n    [False, False, False],\n    [False, False, False],\n    [False, False, True]]],\n  ['regression: scenario 5',\n   [[['OSF', 'B:3', 'B:13'], ['OSF', 'I:1', 'B:13']],\n    [{'I:0': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'B:3': False},\n     {'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:1': False, 'B:3': True},\n     {'I:1': False, 'B:3': True}]],\n   [[False, False],\n    [False, False],\n    [False, True],\n    [False, False],\n    [True, False],\n    [True, False],\n    [False, False],\n    [True, False],\n    [False, True],\n    [False, True]]]],\n [['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: scenario 2',\n   [[['OSF', 'I:1', 'B:11'], ['OSF', 'B:3', 'B:10'], ['OSF', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:10']],\n    [{'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': True},\n     {'I:0': False, 'B:3': True},\n     {'I:1': False}]],\n   [[False, False, False, False],\n    [False, False, False, False],\n    [False, False, True, False],\n    [False, False, False, False],\n    [True, False, True, False],\n    [False, False, False, False]]],\n  ['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: scenario 1',\n   [[['OSF', 'B:3', 'B:12'], ['OSR', 'I:1', 'B:13'], ['OSR', 'I:1', 'B:12']],\n    [{'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': False},\n     {'I:0': True},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'B:3': True},\n     {'I:1': True, 'B:3': True},\n     {'I:1': True}]],\n   [[False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, True, False],\n    [True, False, True]]],\n  ['regression: scenario 3',\n   [[['OSR', 'I:0', 'B:13'], ['OSR', 'I:0', 'B:11'], ['OSF', 'B:3', 'B:10'], ['OSF', 'B:3', 'B:10']],\n    [{'I:1': True, 'B:3': False},\n     {'I:0': True, 'B:3': True},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': True},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': False}]],\n   [[False, False, False, False],\n    [True, True, False, False],\n    [False, False, True, False],\n    [True, True, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [True, True, False, False],\n    [False, False, False, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:11'], ['OSF', 'I:0', 'B:13'], ['OSR', 'I:1', 'B:12']],\n    [{'I:0': False, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'B:3': True},\n     {'I:1': True},\n     {'I:0': True, 'I:1': True, 'B:3': False}]],\n   [[False, False, False],\n    [False, False, True],\n    [False, True, False],\n    [True, False, True],\n    [False, False, False]]],\n  ['regression: scenario 5',\n   [[['OSR', 'I:1', 'B:13'], ['OSF', 'I:1', 'B:12'], ['OSF', 'I:1', 'B:12']],\n    [{'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:1': True, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, True, False],\n    [True, False, False]]]],\n [['regression: scenario 1',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:0', 'B:13'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True},\n     {'I:1': False},\n     {'I:0': False, 'I:1': False}]],\n   [[False, False, False],\n    [True, True, False],\n    [False, False, False],\n    [False, False, True],\n    [False, True, False],\n    [True, False, False],\n    [False, False, False],\n    [False, False, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:13'], ['OSF', 'I:0', 'B:11'], ['OSR', 'I:1', 'B:13'], ['OSR', 'I:0', 'B:10']],\n    [{'I:0': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'I:1': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False, 'B:3': False},\n     {'I:0': False, 'B:3': False},\n     {'I:0': False}]],\n   [[True, False, False, False],\n    [False, False, True, True],\n    [True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, True, False, False],\n    [True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False]]],\n  ['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: scenario 2',\n   [[['OSR', 'I:1', 'B:11'], ['OSR', 'I:1', 'B:12'], ['OSR', 'I:0', 'B:13'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True}]],\n   [[False, False, False, False],\n    [False, False, True, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, False, True, False]]],\n  ['regression: scenario 3',\n   [[['OSF', 'I:1', 'B:10'], ['OSR', 'I:1', 'B:10'], ['OSF', 'B:3', 'B:11'], ['OSR', 'I:0', 'B:11']],\n    [{'I:0': True, 'B:3': False},\n     {'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False},\n     {'I:0': False, 'B:3': False},\n     {'I:1': True, 'B:3': False},\n     {'I:0': False, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'B:3': False}]],\n   [[True, False, True, True],\n    [False, False, True, False],\n    [True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [True, False, False, False],\n    [False, False, False, True],\n    [True, False, True, False]]],\n  ['regression: scenario 5',\n   [[['OSR', 'I:0', 'B:11'], ['OSF', 'I:1', 'B:12'], ['OSR', 'I:0', 'B:10'], ['OSR', 'I:0', 'B:13']],\n    [{'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False, 'B:3': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:1': False, 'B:3': False},\n     {'I:0': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': False}]],\n   [[False, False, False, False],\n    [False, True, False, False],\n    [True, False, True, True],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, True, False, False],\n    [True, False, True, True],\n    [False, False, False, False],\n    [True, True, True, True]]]],\n [['regression: scenario 2',\n   [[['OSF', 'I:0', 'B:13'], ['OSF', 'B:3', 'B:10'], ['OSF', 'B:3', 'B:10'], ['OSF', 'B:3', 'B:10']],\n    [{'I:0': True, 'I:1': False},\n     {'B:3': False},\n     {'I:1': False},\n     {'B:3': True},\n     {'I:0': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:1': False, 'B:3': False},\n     {'I:0': False, 'B:3': True}]],\n   [[False, False, False, False],\n    [True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, True, False, False],\n    [False, False, False, False],\n    [False, True, False, False],\n    [True, False, False, False],\n    [False, True, False, False],\n    [False, False, False, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:11'], ['OSF', 'I:0', 'B:12'], ['OSF', 'I:0', 'B:13']],\n    [{'I:1': True},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': True}]],\n   [[False, False, False],\n    [False, False, False],\n    [True, False, False],\n    [False, True, True],\n    [False, False, False],\n    [False, False, False]]],\n  ['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: scenario 1',\n   [[['OSF', 'I:1', 'B:12'], ['OSR', 'B:3', 'B:11'], ['OSR', 'I:0', 'B:13'], ['OSR', 'I:0', 'B:11']],\n    [{'I:0': True, 'I:1': True, 'B:3': True},\n     {'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'B:3': True}]],\n   [[False, False, False, False],\n    [True, False, False, False],\n    [False, False, True, True],\n    [True, False, False, False],\n    [False, True, False, False]]],\n  ['regression: scenario 3',\n   [[['OSR', 'I:1', 'B:11'], ['OSF', 'I:1', 'B:12']],\n    [{'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:1': True, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': True}]],\n   [[False, False],\n    [True, False],\n    [False, False],\n    [False, False],\n    [False, True],\n    [False, False],\n    [True, False],\n    [False, False],\n    [False, True]]],\n  ['regression: scenario 5',\n   [[['OSR', 'B:3', 'B:12'], ['OSF', 'B:3', 'B:12']],\n    [{'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'B:3': True},\n     {'I:1': True, 'B:3': True},\n     {'I:0': False, 'I:1': False}]],\n   [[False, False], [False, False], [True, False], [False, False], [False, False], [False, False]]]]]\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":"cb2e3b1962ed5deaa2e98bccfc097b27b80c4a16ecc7f796e26066f76dc57c02","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(instrs, scans):\n    store = {}\n    for kind, tag, st in instrs:\n        store[st] = kind != 'OSF'\n    out = []\n    for inputs in scans:\n        pulses = []\n        for kind, tag, st in instrs:\n            cur = bool(inputs.get(tag, False))\n            if kind == 'OSF':\n                pulse = store[st] and not cur\n            else:\n                pulse = cur and not store[st]\n            if pulse:\n                store[st] = cur\n            pulses.append(pulse)\n        out.append(pulses)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: scenario 1',\n   [[['OSR', 'I:1', 'B:10'], ['OSR', 'I:1', 'B:10'], ['OSF', 'B:3', 'B:12']],\n    [{'B:3': False},\n     {'I:0': False, 'I:1': True},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False, False],\n    [True, False, False],\n    [False, False, False],\n    [False, False, False],\n    [True, False, False],\n    [False, False, False],\n    [False, False, True],\n    [True, False, False]]],\n  ['regression: scenario 2',\n   [[['OSF', 'I:1', 'B:13'], ['OSF', 'B:3', 'B:10']],\n    [{'I:0': True, 'B:3': False},\n     {'I:0': False, 'B:3': False},\n     {'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False], [False, False], [False, False], [False, True], [True, False], [False, False]]],\n  ['regression: scenario 3',\n   [[['OSF', 'I:0', 'B:12'], ['OSF', 'B:3', 'B:12']],\n    [{'I:0': True, 'I:1': True},\n     {'I:1': False, 'B:3': True},\n     {'I:1': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'B:3': False}]],\n   [[False, True], [False, False], [True, False], [False, False], [False, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:12'], ['OSF', 'B:3', 'B:12'], ['OSR', 'I:0', 'B:11'], ['OSR', 'B:3', 'B:12']],\n    [{'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': True},\n     {'I:0': False, 'I:1': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True}]],\n   [[True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [True, False, True, False],\n    [False, False, False, False],\n    [False, False, True, False],\n    [False, False, False, False]]],\n  ['control: scenario 5',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'B:3', 'B:12']],\n    [{'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False], [False, False], [False, False], [False, False], [False, False]]]],\n [['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: scenario 1',\n   [[['OSF', 'B:3', 'B:11'], ['OSR', 'B:3', 'B:10']],\n    [{'I:0': False, 'B:3': True},\n     {'I:0': True, 'I:1': True},\n     {'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': False}]],\n   [[False, False], [True, False], [False, False], [False, False], [False, False], [False, False]]],\n  ['regression: scenario 2',\n   [[['OSR', 'I:1', 'B:11'], ['OSR', 'I:0', 'B:11']],\n    [{'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': False},\n     {'I:0': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False],\n    [False, False],\n    [False, True],\n    [False, False],\n    [False, False],\n    [False, False],\n    [False, True],\n    [False, False]]],\n  ['regression: scenario 3',\n   [[['OSR', 'I:0', 'B:11'], ['OSF', 'I:0', 'B:12'], ['OSR', 'I:1', 'B:13'], ['OSR', 'I:0', 'B:12']],\n    [{'I:0': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:1': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True}]],\n   [[False, False, False, False],\n    [False, False, True, False],\n    [False, True, False, False],\n    [False, False, True, False],\n    [True, False, False, False],\n    [False, True, True, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:12'], ['OSR', 'B:3', 'B:12'], ['OSR', 'I:0', 'B:10']],\n    [{'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': False},\n     {'I:0': False, 'I:1': True},\n     {'I:0': True, 'I:1': True, 'B:3': False}]],\n   [[True, False, False],\n    [False, False, True],\n    [False, False, False],\n    [False, False, False],\n    [False, False, True]]],\n  ['regression: scenario 5',\n   [[['OSF', 'B:3', 'B:13'], ['OSF', 'I:1', 'B:13']],\n    [{'I:0': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'B:3': False},\n     {'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:1': False, 'B:3': True},\n     {'I:1': False, 'B:3': True}]],\n   [[False, False],\n    [False, False],\n    [False, True],\n    [False, False],\n    [True, False],\n    [True, False],\n    [False, False],\n    [True, False],\n    [False, True],\n    [False, True]]]],\n [['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: scenario 2',\n   [[['OSF', 'I:1', 'B:11'], ['OSF', 'B:3', 'B:10'], ['OSF', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:10']],\n    [{'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': True},\n     {'I:0': False, 'B:3': True},\n     {'I:1': False}]],\n   [[False, False, False, False],\n    [False, False, False, False],\n    [False, False, True, False],\n    [False, False, False, False],\n    [True, False, True, False],\n    [False, False, False, False]]],\n  ['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: scenario 1',\n   [[['OSF', 'B:3', 'B:12'], ['OSR', 'I:1', 'B:13'], ['OSR', 'I:1', 'B:12']],\n    [{'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': False},\n     {'I:0': True},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'B:3': True},\n     {'I:1': True, 'B:3': True},\n     {'I:1': True}]],\n   [[False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, True, False],\n    [True, False, True]]],\n  ['regression: scenario 3',\n   [[['OSR', 'I:0', 'B:13'], ['OSR', 'I:0', 'B:11'], ['OSF', 'B:3', 'B:10'], ['OSF', 'B:3', 'B:10']],\n    [{'I:1': True, 'B:3': False},\n     {'I:0': True, 'B:3': True},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': True},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': False}]],\n   [[False, False, False, False],\n    [True, True, False, False],\n    [False, False, True, False],\n    [True, True, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [True, True, False, False],\n    [False, False, False, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:11'], ['OSF', 'I:0', 'B:13'], ['OSR', 'I:1', 'B:12']],\n    [{'I:0': False, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'B:3': True},\n     {'I:1': True},\n     {'I:0': True, 'I:1': True, 'B:3': False}]],\n   [[False, False, False],\n    [False, False, True],\n    [False, True, False],\n    [True, False, True],\n    [False, False, False]]],\n  ['regression: scenario 5',\n   [[['OSR', 'I:1', 'B:13'], ['OSF', 'I:1', 'B:12'], ['OSF', 'I:1', 'B:12']],\n    [{'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:1': True, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, True, False],\n    [True, False, False]]]],\n [['regression: scenario 1',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:0', 'B:13'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True},\n     {'I:1': False},\n     {'I:0': False, 'I:1': False}]],\n   [[False, False, False],\n    [True, True, False],\n    [False, False, False],\n    [False, False, True],\n    [False, True, False],\n    [True, False, False],\n    [False, False, False],\n    [False, False, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:13'], ['OSF', 'I:0', 'B:11'], ['OSR', 'I:1', 'B:13'], ['OSR', 'I:0', 'B:10']],\n    [{'I:0': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'I:1': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False, 'B:3': False},\n     {'I:0': False, 'B:3': False},\n     {'I:0': False}]],\n   [[True, False, False, False],\n    [False, False, True, True],\n    [True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, True, False, False],\n    [True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False]]],\n  ['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: scenario 2',\n   [[['OSR', 'I:1', 'B:11'], ['OSR', 'I:1', 'B:12'], ['OSR', 'I:0', 'B:13'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True}]],\n   [[False, False, False, False],\n    [False, False, True, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, False, True, False]]],\n  ['regression: scenario 3',\n   [[['OSF', 'I:1', 'B:10'], ['OSR', 'I:1', 'B:10'], ['OSF', 'B:3', 'B:11'], ['OSR', 'I:0', 'B:11']],\n    [{'I:0': True, 'B:3': False},\n     {'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False},\n     {'I:0': False, 'B:3': False},\n     {'I:1': True, 'B:3': False},\n     {'I:0': False, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'B:3': False}]],\n   [[True, False, True, True],\n    [False, False, True, False],\n    [True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [True, False, False, False],\n    [False, False, False, True],\n    [True, False, True, False]]],\n  ['regression: scenario 5',\n   [[['OSR', 'I:0', 'B:11'], ['OSF', 'I:1', 'B:12'], ['OSR', 'I:0', 'B:10'], ['OSR', 'I:0', 'B:13']],\n    [{'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False, 'B:3': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:1': False, 'B:3': False},\n     {'I:0': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': False}]],\n   [[False, False, False, False],\n    [False, True, False, False],\n    [True, False, True, True],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, True, False, False],\n    [True, False, True, True],\n    [False, False, False, False],\n    [True, True, True, True]]]],\n [['regression: scenario 2',\n   [[['OSF', 'I:0', 'B:13'], ['OSF', 'B:3', 'B:10'], ['OSF', 'B:3', 'B:10'], ['OSF', 'B:3', 'B:10']],\n    [{'I:0': True, 'I:1': False},\n     {'B:3': False},\n     {'I:1': False},\n     {'B:3': True},\n     {'I:0': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:1': False, 'B:3': False},\n     {'I:0': False, 'B:3': True}]],\n   [[False, False, False, False],\n    [True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, True, False, False],\n    [False, False, False, False],\n    [False, True, False, False],\n    [True, False, False, False],\n    [False, True, False, False],\n    [False, False, False, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:11'], ['OSF', 'I:0', 'B:12'], ['OSF', 'I:0', 'B:13']],\n    [{'I:1': True},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': True}]],\n   [[False, False, False],\n    [False, False, False],\n    [True, False, False],\n    [False, True, True],\n    [False, False, False],\n    [False, False, False]]],\n  ['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: scenario 1',\n   [[['OSF', 'I:1', 'B:12'], ['OSR', 'B:3', 'B:11'], ['OSR', 'I:0', 'B:13'], ['OSR', 'I:0', 'B:11']],\n    [{'I:0': True, 'I:1': True, 'B:3': True},\n     {'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'B:3': True}]],\n   [[False, False, False, False],\n    [True, False, False, False],\n    [False, False, True, True],\n    [True, False, False, False],\n    [False, True, False, False]]],\n  ['regression: scenario 3',\n   [[['OSR', 'I:1', 'B:11'], ['OSF', 'I:1', 'B:12']],\n    [{'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:1': True, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': True}]],\n   [[False, False],\n    [True, False],\n    [False, False],\n    [False, False],\n    [False, True],\n    [False, False],\n    [True, False],\n    [False, False],\n    [False, True]]],\n  ['regression: scenario 5',\n   [[['OSR', 'B:3', 'B:12'], ['OSF', 'B:3', 'B:12']],\n    [{'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'B:3': True},\n     {'I:1': True, 'B:3': True},\n     {'I:0': False, 'I:1': False}]],\n   [[False, False], [False, False], [True, False], [False, False], [False, False], [False, False]]]]]\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":"b1ccedf6a2e8675d1384c138e69d4e4f94ea2b759c94dacbfb317b78f53f5873","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(instrs, scans):\n    store = {}\n    for kind, tag, st in instrs:\n        store[st] = kind != 'OSF'\n    out = []\n    for inputs in scans:\n        pulses = []\n        for kind, tag, st in instrs:\n            cur = bool(inputs.get(tag, False))\n            if kind == 'OSF':\n                pulse = store[st] and not cur\n            else:\n                pulse = cur and not store[st]\n            store[st] = cur\n            pulses.append(pulse)\n        out.append(pulses)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: scenario 1',\n   [[['OSR', 'I:1', 'B:10'], ['OSR', 'I:1', 'B:10'], ['OSF', 'B:3', 'B:12']],\n    [{'B:3': False},\n     {'I:0': False, 'I:1': True},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False, False],\n    [True, False, False],\n    [False, False, False],\n    [False, False, False],\n    [True, False, False],\n    [False, False, False],\n    [False, False, True],\n    [True, False, False]]],\n  ['regression: scenario 2',\n   [[['OSF', 'I:1', 'B:13'], ['OSF', 'B:3', 'B:10']],\n    [{'I:0': True, 'B:3': False},\n     {'I:0': False, 'B:3': False},\n     {'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False], [False, False], [False, False], [False, True], [True, False], [False, False]]],\n  ['regression: scenario 3',\n   [[['OSF', 'I:0', 'B:12'], ['OSF', 'B:3', 'B:12']],\n    [{'I:0': True, 'I:1': True},\n     {'I:1': False, 'B:3': True},\n     {'I:1': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'B:3': False}]],\n   [[False, True], [False, False], [True, False], [False, False], [False, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:12'], ['OSF', 'B:3', 'B:12'], ['OSR', 'I:0', 'B:11'], ['OSR', 'B:3', 'B:12']],\n    [{'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': True},\n     {'I:0': False, 'I:1': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True}]],\n   [[True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [True, False, True, False],\n    [False, False, False, False],\n    [False, False, True, False],\n    [False, False, False, False]]],\n  ['control: scenario 5',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'B:3', 'B:12']],\n    [{'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False], [False, False], [False, False], [False, False], [False, False]]]],\n [['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: scenario 1',\n   [[['OSF', 'B:3', 'B:11'], ['OSR', 'B:3', 'B:10']],\n    [{'I:0': False, 'B:3': True},\n     {'I:0': True, 'I:1': True},\n     {'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': False}]],\n   [[False, False], [True, False], [False, False], [False, False], [False, False], [False, False]]],\n  ['regression: scenario 2',\n   [[['OSR', 'I:1', 'B:11'], ['OSR', 'I:0', 'B:11']],\n    [{'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': False},\n     {'I:0': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False],\n    [False, False],\n    [False, True],\n    [False, False],\n    [False, False],\n    [False, False],\n    [False, True],\n    [False, False]]],\n  ['regression: scenario 3',\n   [[['OSR', 'I:0', 'B:11'], ['OSF', 'I:0', 'B:12'], ['OSR', 'I:1', 'B:13'], ['OSR', 'I:0', 'B:12']],\n    [{'I:0': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:1': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True}]],\n   [[False, False, False, False],\n    [False, False, True, False],\n    [False, True, False, False],\n    [False, False, True, False],\n    [True, False, False, False],\n    [False, True, True, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:12'], ['OSR', 'B:3', 'B:12'], ['OSR', 'I:0', 'B:10']],\n    [{'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': False},\n     {'I:0': False, 'I:1': True},\n     {'I:0': True, 'I:1': True, 'B:3': False}]],\n   [[True, False, False],\n    [False, False, True],\n    [False, False, False],\n    [False, False, False],\n    [False, False, True]]],\n  ['regression: scenario 5',\n   [[['OSF', 'B:3', 'B:13'], ['OSF', 'I:1', 'B:13']],\n    [{'I:0': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'B:3': False},\n     {'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:1': False, 'B:3': True},\n     {'I:1': False, 'B:3': True}]],\n   [[False, False],\n    [False, False],\n    [False, True],\n    [False, False],\n    [True, False],\n    [True, False],\n    [False, False],\n    [True, False],\n    [False, True],\n    [False, True]]]],\n [['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: scenario 2',\n   [[['OSF', 'I:1', 'B:11'], ['OSF', 'B:3', 'B:10'], ['OSF', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:10']],\n    [{'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': True},\n     {'I:0': False, 'B:3': True},\n     {'I:1': False}]],\n   [[False, False, False, False],\n    [False, False, False, False],\n    [False, False, True, False],\n    [False, False, False, False],\n    [True, False, True, False],\n    [False, False, False, False]]],\n  ['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: scenario 1',\n   [[['OSF', 'B:3', 'B:12'], ['OSR', 'I:1', 'B:13'], ['OSR', 'I:1', 'B:12']],\n    [{'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': False},\n     {'I:0': True},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'B:3': True},\n     {'I:1': True, 'B:3': True},\n     {'I:1': True}]],\n   [[False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, True, False],\n    [True, False, True]]],\n  ['regression: scenario 3',\n   [[['OSR', 'I:0', 'B:13'], ['OSR', 'I:0', 'B:11'], ['OSF', 'B:3', 'B:10'], ['OSF', 'B:3', 'B:10']],\n    [{'I:1': True, 'B:3': False},\n     {'I:0': True, 'B:3': True},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': True},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': False}]],\n   [[False, False, False, False],\n    [True, True, False, False],\n    [False, False, True, False],\n    [True, True, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [True, True, False, False],\n    [False, False, False, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:11'], ['OSF', 'I:0', 'B:13'], ['OSR', 'I:1', 'B:12']],\n    [{'I:0': False, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'B:3': True},\n     {'I:1': True},\n     {'I:0': True, 'I:1': True, 'B:3': False}]],\n   [[False, False, False],\n    [False, False, True],\n    [False, True, False],\n    [True, False, True],\n    [False, False, False]]],\n  ['regression: scenario 5',\n   [[['OSR', 'I:1', 'B:13'], ['OSF', 'I:1', 'B:12'], ['OSF', 'I:1', 'B:12']],\n    [{'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:1': True, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True}]],\n   [[False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, False, False],\n    [False, True, False],\n    [True, False, False]]]],\n [['regression: scenario 1',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:0', 'B:13'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True},\n     {'I:1': False},\n     {'I:0': False, 'I:1': False}]],\n   [[False, False, False],\n    [True, True, False],\n    [False, False, False],\n    [False, False, True],\n    [False, True, False],\n    [True, False, False],\n    [False, False, False],\n    [False, False, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:13'], ['OSF', 'I:0', 'B:11'], ['OSR', 'I:1', 'B:13'], ['OSR', 'I:0', 'B:10']],\n    [{'I:0': False},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'I:1': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False, 'B:3': False},\n     {'I:0': False, 'B:3': False},\n     {'I:0': False}]],\n   [[True, False, False, False],\n    [False, False, True, True],\n    [True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, True, False, False],\n    [True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False]]],\n  ['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: scenario 2',\n   [[['OSR', 'I:1', 'B:11'], ['OSR', 'I:1', 'B:12'], ['OSR', 'I:0', 'B:13'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True}]],\n   [[False, False, False, False],\n    [False, False, True, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, False, True, False]]],\n  ['regression: scenario 3',\n   [[['OSF', 'I:1', 'B:10'], ['OSR', 'I:1', 'B:10'], ['OSF', 'B:3', 'B:11'], ['OSR', 'I:0', 'B:11']],\n    [{'I:0': True, 'B:3': False},\n     {'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False},\n     {'I:0': False, 'B:3': False},\n     {'I:1': True, 'B:3': False},\n     {'I:0': False, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'B:3': False}]],\n   [[True, False, True, True],\n    [False, False, True, False],\n    [True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [True, False, False, False],\n    [False, False, False, True],\n    [True, False, True, False]]],\n  ['regression: scenario 5',\n   [[['OSR', 'I:0', 'B:11'], ['OSF', 'I:1', 'B:12'], ['OSR', 'I:0', 'B:10'], ['OSR', 'I:0', 'B:13']],\n    [{'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': False, 'B:3': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:1': False, 'B:3': False},\n     {'I:0': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': False}]],\n   [[False, False, False, False],\n    [False, True, False, False],\n    [True, False, True, True],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, True, False, False],\n    [True, False, True, True],\n    [False, False, False, False],\n    [True, True, True, True]]]],\n [['regression: scenario 2',\n   [[['OSF', 'I:0', 'B:13'], ['OSF', 'B:3', 'B:10'], ['OSF', 'B:3', 'B:10'], ['OSF', 'B:3', 'B:10']],\n    [{'I:0': True, 'I:1': False},\n     {'B:3': False},\n     {'I:1': False},\n     {'B:3': True},\n     {'I:0': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'B:3': False},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:1': False, 'B:3': False},\n     {'I:0': False, 'B:3': True}]],\n   [[False, False, False, False],\n    [True, False, False, False],\n    [False, False, False, False],\n    [False, False, False, False],\n    [False, True, False, False],\n    [False, False, False, False],\n    [False, True, False, False],\n    [True, False, False, False],\n    [False, True, False, False],\n    [False, False, False, False]]],\n  ['regression: scenario 4',\n   [[['OSF', 'B:3', 'B:11'], ['OSF', 'I:0', 'B:12'], ['OSF', 'I:0', 'B:13']],\n    [{'I:1': True},\n     {'I:0': False, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': False},\n     {'I:1': False, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': True}]],\n   [[False, False, False],\n    [False, False, False],\n    [True, False, False],\n    [False, True, True],\n    [False, False, False],\n    [False, False, False]]],\n  ['regression: input on at power-up',\n   [[['OSR', 'I:0', 'B:10'], ['OSF', 'I:1', 'B:11']],\n    [{'I:0': True}, {'I:0': True}, {'I:0': False}, {'I:0': True, 'I:1': True}, {}]],\n   [[False, False], [False, False], [False, False], [True, False], [False, True]]],\n  ['regression: shared storage',\n   [[['OSR', 'I:0', 'B:10'], ['OSR', 'I:1', 'B:10']],\n    [{'I:0': True}, {'I:0': False, 'I:1': True}, {'I:1': True}, {}]],\n   [[False, False], [False, True], [False, True], [False, False]]],\n  ['regression: falling edge train',\n   [[['OSF', 'I:0', 'B:12']],\n    [{'I:0': True}, {'I:0': False}, {'I:0': False}, {'I:0': True}, {'I:0': False}, {}]],\n   [[False], [True], [False], [False], [True], [False]]],\n  ['regression: scenario 1',\n   [[['OSF', 'I:1', 'B:12'], ['OSR', 'B:3', 'B:11'], ['OSR', 'I:0', 'B:13'], ['OSR', 'I:0', 'B:11']],\n    [{'I:0': True, 'I:1': True, 'B:3': True},\n     {'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': True, 'B:3': False},\n     {'I:0': False, 'I:1': False, 'B:3': False},\n     {'B:3': True}]],\n   [[False, False, False, False],\n    [True, False, False, False],\n    [False, False, True, True],\n    [True, False, False, False],\n    [False, True, False, False]]],\n  ['regression: scenario 3',\n   [[['OSR', 'I:1', 'B:11'], ['OSF', 'I:1', 'B:12']],\n    [{'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:1': True, 'B:3': True},\n     {'I:0': False, 'I:1': True, 'B:3': False},\n     {'I:0': True, 'I:1': True, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'I:1': True},\n     {'I:0': False, 'I:1': True, 'B:3': True},\n     {'I:0': True}]],\n   [[False, False],\n    [True, False],\n    [False, False],\n    [False, False],\n    [False, True],\n    [False, False],\n    [True, False],\n    [False, False],\n    [False, True]]],\n  ['regression: scenario 5',\n   [[['OSR', 'B:3', 'B:12'], ['OSF', 'B:3', 'B:12']],\n    [{'I:0': False, 'I:1': False, 'B:3': False},\n     {'I:0': False, 'B:3': False},\n     {'I:0': True, 'I:1': False, 'B:3': True},\n     {'I:0': False, 'B:3': True},\n     {'I:1': True, 'B:3': True},\n     {'I:0': False, 'I:1': False}]],\n   [[False, False], [False, False], [True, False], [False, False], [False, False], [False, False]]]]]\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 PLC instruction or rung pattern evaluated scan by scan. The stated contract is a stipulated toy convention, not a claim of conformance to any vendor controller or IEC 61131-3 runtime. 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-plc-ladder-logic-scan-cycles-osr-osf-one-shots-storage-update","generated_at":"2026-09-29T14:51:41.377758+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Ladder programs are executed as repeated scans; each defect here changes what a rung, timer, counter or data-table instruction reports on a particular scan, which is how commissioning and field faults are actually observed.","repair":"Write the input state into the storage bit on every execution.","root_cause":"The storage write is placed inside the pulse condition.","sha256":"5c92dba039416cfb8982f038ec7b0c9f1921661c30b233b912399affce40bc95","title":"One-shot storage bit only updates when a pulse is produced · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.065,"exit_code":1,"observations":[{"actual":[[false,false],[false,false],[false,false],[true,false],[false,false]],"check":"regression: input on at power-up","expected":[[false,false],[false,false],[false,false],[true,false],[false,true]],"passed":false},{"actual":[[false],[false],[false],[false],[false],[false]],"check":"regression: falling edge train","expected":[[false],[true],[false],[false],[true],[false]],"passed":false},{"actual":[[false,false],[false,true],[false,true],[false,false]],"check":"regression: shared storage","expected":[[false,false],[false,true],[false,true],[false,false]],"passed":true},{"actual":[[false,false,false],[true,false,false],[false,false,false],[false,false,false],[true,false,false],[false,false,false],[false,false,false],[true,false,false]],"check":"regression: scenario 1","expected":[[false,false,false],[true,false,false],[false,false,false],[false,false,false],[true,false,false],[false,false,false],[false,false,true],[true,false,false]],"passed":false},{"actual":[[false,false],[false,false],[false,false],[false,false],[false,false],[false,false]],"check":"regression: scenario 2","expected":[[false,false],[false,false],[false,false],[false,true],[true,false],[false,false]],"passed":false},{"actual":[[false,false],[false,false],[false,false],[false,false],[false,false]],"check":"regression: scenario 3","expected":[[false,true],[false,false],[true,false],[false,false],[false,false]],"passed":false},{"actual":[[true,true,false,false],[false,false,false,false],[false,false,false,true],[true,true,true,false],[false,false,false,false],[false,false,true,false],[false,false,false,true]],"check":"regression: scenario 4","expected":[[true,false,false,false],[false,false,false,false],[false,false,false,false],[true,false,true,false],[false,false,false,false],[false,false,true,false],[false,false,false,false]],"passed":false},{"actual":[[false,false],[false,false],[false,false],[false,false],[false,false]],"check":"control: scenario 5","expected":[[false,false],[false,false],[false,false],[false,false],[false,false]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: input on at power-up\", \"actual\": [[false, false], [false, false], [false, false], [true, false], [false, false]], \"expected\": [[false, false], [false, false], [false, false], [true, false], [false, true]], \"passed\": false}, {\"check\": \"regression: falling edge train\", \"actual\": [[false], [false], [false], [false], [false], [false]], \"expected\": [[false], [true], [false], [false], [true], [false]], \"passed\": false}, {\"check\": \"regression: shared storage\", \"actual\": [[false, false], [false, true], [false, true], [false, false]], \"expected\": [[false, false], [false, true], [false, true], [false, false]], \"passed\": true}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, false, false], [true, false, false], [false, false, false], [false, false, false], [true, false, false], [false, false, false], [false, false, false], [true, false, false]], \"expected\": [[false, false, false], [true, false, false], [false, false, false], [false, false, false], [true, false, false], [false, false, false], [false, false, true], [true, false, false]], \"passed\": false}, {\"check\": \"regression: scenario 2\", \"actual\": [[false, false], [false, false], [false, false], [false, false], [false, false], [false, false]], \"expected\": [[false, false], [false, false], [false, false], [false, true], [true, false], [false, false]], \"passed\": false}, {\"check\": \"regression: scenario 3\", \"actual\": [[false, false], [false, false], [false, false], [false, false], [false, false]], \"expected\": [[false, true], [false, false], [true, false], [false, false], [false, false]], \"passed\": false}, {\"check\": \"regression: scenario 4\", \"actual\": [[true, true, false, false], [false, false, false, false], [false, false, false, true], [true, true, true, false], [false, false, false, false], [false, false, true, false], [false, false, false, true]], \"expected\": [[true, false, false, false], [false, false, false, false], [false, false, false, false], [true, false, true, false], [false, false, false, false], [false, false, true, false], [false, false, false, false]], \"passed\": false}, {\"check\": \"control: scenario 5\", \"actual\": [[false, false], [false, false], [false, false], [false, false], [false, false]], \"expected\": [[false, false], [false, false], [false, false], [false, false], [false, false]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.01,"exit_code":1,"observations":[{"actual":[[false,false],[false,false],[false,false],[false,false],[false,false]],"check":"regression: input on at power-up","expected":[[false,false],[false,false],[false,false],[true,false],[false,true]],"passed":false},{"actual":[[false],[false],[false],[false],[false],[false]],"check":"regression: falling edge train","expected":[[false],[true],[false],[false],[true],[false]],"passed":false},{"actual":[[false,false],[false,false],[false,false],[false,false]],"check":"regression: shared storage","expected":[[false,false],[false,true],[false,true],[false,false]],"passed":false},{"actual":[[false,false,false],[false,false,false],[false,false,false],[false,false,false],[false,false,false],[false,false,false],[false,false,false],[false,false,false]],"check":"regression: scenario 1","expected":[[false,false,false],[true,false,false],[false,false,false],[false,false,false],[true,false,false],[false,false,false],[false,false,true],[true,false,false]],"passed":false},{"actual":[[false,false],[false,false],[false,false],[false,false],[false,false],[false,false]],"check":"regression: scenario 2","expected":[[false,false],[false,false],[false,false],[false,true],[true,false],[false,false]],"passed":false},{"actual":[[false,false],[false,false],[false,false],[false,false],[false,false]],"check":"regression: scenario 3","expected":[[false,true],[false,false],[true,false],[false,false],[false,false]],"passed":false},{"actual":[[true,false,false,false],[false,false,false,false],[false,false,false,true],[true,false,false,false],[false,false,false,false],[false,false,false,false],[false,false,false,true]],"check":"regression: scenario 4","expected":[[true,false,false,false],[false,false,false,false],[false,false,false,false],[true,false,true,false],[false,false,false,false],[false,false,true,false],[false,false,false,false]],"passed":false},{"actual":[[false,false],[false,false],[false,false],[false,false],[false,false]],"check":"control: scenario 5","expected":[[false,false],[false,false],[false,false],[false,false],[false,false]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: input on at power-up\", \"actual\": [[false, false], [false, false], [false, false], [false, false], [false, false]], \"expected\": [[false, false], [false, false], [false, false], [true, false], [false, true]], \"passed\": false}, {\"check\": \"regression: falling edge train\", \"actual\": [[false], [false], [false], [false], [false], [false]], \"expected\": [[false], [true], [false], [false], [true], [false]], \"passed\": false}, {\"check\": \"regression: shared storage\", \"actual\": [[false, false], [false, false], [false, false], [false, false]], \"expected\": [[false, false], [false, true], [false, true], [false, false]], \"passed\": false}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, false, false], [false, false, false], [false, false, false], [false, false, false], [false, false, false], [false, false, false], [false, false, false], [false, false, false]], \"expected\": [[false, false, false], [true, false, false], [false, false, false], [false, false, false], [true, false, false], [false, false, false], [false, false, true], [true, false, false]], \"passed\": false}, {\"check\": \"regression: scenario 2\", \"actual\": [[false, false], [false, false], [false, false], [false, false], [false, false], [false, false]], \"expected\": [[false, false], [false, false], [false, false], [false, true], [true, false], [false, false]], \"passed\": false}, {\"check\": \"regression: scenario 3\", \"actual\": [[false, false], [false, false], [false, false], [false, false], [false, false]], \"expected\": [[false, true], [false, false], [true, false], [false, false], [false, false]], \"passed\": false}, {\"check\": \"regression: scenario 4\", \"actual\": [[true, false, false, false], [false, false, false, false], [false, false, false, true], [true, false, false, false], [false, false, false, false], [false, false, false, false], [false, false, false, true]], \"expected\": [[true, false, false, false], [false, false, false, false], [false, false, false, false], [true, false, true, false], [false, false, false, false], [false, false, true, false], [false, false, false, false]], \"passed\": false}, {\"check\": \"control: scenario 5\", \"actual\": [[false, false], [false, false], [false, false], [false, false], [false, false]], \"expected\": [[false, false], [false, false], [false, false], [false, false], [false, false]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.695,"exit_code":0,"observations":[{"actual":[[false,false],[false,false],[false,false],[true,false],[false,true]],"check":"regression: input on at power-up","expected":[[false,false],[false,false],[false,false],[true,false],[false,true]],"passed":true},{"actual":[[false],[true],[false],[false],[true],[false]],"check":"regression: falling edge train","expected":[[false],[true],[false],[false],[true],[false]],"passed":true},{"actual":[[false,false],[false,true],[false,true],[false,false]],"check":"regression: shared storage","expected":[[false,false],[false,true],[false,true],[false,false]],"passed":true},{"actual":[[false,false,false],[true,false,false],[false,false,false],[false,false,false],[true,false,false],[false,false,false],[false,false,true],[true,false,false]],"check":"regression: scenario 1","expected":[[false,false,false],[true,false,false],[false,false,false],[false,false,false],[true,false,false],[false,false,false],[false,false,true],[true,false,false]],"passed":true},{"actual":[[false,false],[false,false],[false,false],[false,true],[true,false],[false,false]],"check":"regression: scenario 2","expected":[[false,false],[false,false],[false,false],[false,true],[true,false],[false,false]],"passed":true},{"actual":[[false,true],[false,false],[true,false],[false,false],[false,false]],"check":"regression: scenario 3","expected":[[false,true],[false,false],[true,false],[false,false],[false,false]],"passed":true},{"actual":[[true,false,false,false],[false,false,false,false],[false,false,false,false],[true,false,true,false],[false,false,false,false],[false,false,true,false],[false,false,false,false]],"check":"regression: scenario 4","expected":[[true,false,false,false],[false,false,false,false],[false,false,false,false],[true,false,true,false],[false,false,false,false],[false,false,true,false],[false,false,false,false]],"passed":true},{"actual":[[false,false],[false,false],[false,false],[false,false],[false,false]],"check":"control: scenario 5","expected":[[false,false],[false,false],[false,false],[false,false],[false,false]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: input on at power-up\", \"actual\": [[false, false], [false, false], [false, false], [true, false], [false, true]], \"expected\": [[false, false], [false, false], [false, false], [true, false], [false, true]], \"passed\": true}, {\"check\": \"regression: falling edge train\", \"actual\": [[false], [true], [false], [false], [true], [false]], \"expected\": [[false], [true], [false], [false], [true], [false]], \"passed\": true}, {\"check\": \"regression: shared storage\", \"actual\": [[false, false], [false, true], [false, true], [false, false]], \"expected\": [[false, false], [false, true], [false, true], [false, false]], \"passed\": true}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, false, false], [true, false, false], [false, false, false], [false, false, false], [true, false, false], [false, false, false], [false, false, true], [true, false, false]], \"expected\": [[false, false, false], [true, false, false], [false, false, false], [false, false, false], [true, false, false], [false, false, false], [false, false, true], [true, false, false]], \"passed\": true}, {\"check\": \"regression: scenario 2\", \"actual\": [[false, false], [false, false], [false, false], [false, true], [true, false], [false, false]], \"expected\": [[false, false], [false, false], [false, false], [false, true], [true, false], [false, false]], \"passed\": true}, {\"check\": \"regression: scenario 3\", \"actual\": [[false, true], [false, false], [true, false], [false, false], [false, false]], \"expected\": [[false, true], [false, false], [true, false], [false, false], [false, false]], \"passed\": true}, {\"check\": \"regression: scenario 4\", \"actual\": [[true, false, false, false], [false, false, false, false], [false, false, false, false], [true, false, true, false], [false, false, false, false], [false, false, true, false], [false, false, false, false]], \"expected\": [[true, false, false, false], [false, false, false, false], [false, false, false, false], [true, false, true, false], [false, false, false, false], [false, false, true, false], [false, false, false, false]], \"passed\": true}, {\"check\": \"control: scenario 5\", \"actual\": [[false, false], [false, false], [false, false], [false, false], [false, false]], \"expected\": [[false, false], [false, false], [false, false], [false, false], [false, false]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}