{"abstract":"Defrosts repeat back to back because the accumulated runtime is still above the interval.","category":"HVAC thermostat control","checks":8,"contract":"Heat pump time-temperature defrost sampled per minute (degrees F); samples are [compressor_running, coil_temp, outdoor_temp]. Compressor run minutes accumulate only while coil <= 32. When the accumulation reaches interval and outdoor <= 50, defrost starts that minute and the accumulation resets; otherwise the accumulation keeps growing. Defrost ends on the first later minute with coil >= 57 or when it has lasted max_minutes minutes; that minute reports normal operation. Return heat, off or defrost per minute.","evaluation_group":"w2-hvac-thermostat-control-demand-defrost","failed_approach":"Subtracting half the interval still triggers the next defrost too soon.","family":"w2-hvac-thermostat-control-demand-defrost-accumulator-reset","id":"FA-92451","implementations":{"attempt":{"sha256":"53412464fba61ec34ae96caa240f936c96329decbcf85f9e0592a8e635e2be31","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(interval, max_minutes, samples):\n    acc = 0\n    defrost_min = None\n    out = []\n    for running, coil, outdoor in samples:\n        if defrost_min is not None:\n            defrost_min += 1\n            if coil >= 57 or defrost_min >= max_minutes:\n                defrost_min = None\n                out.append('heat' if running else 'off')\n            else:\n                out.append('defrost')\n            continue\n        if running and coil <= 32:\n            acc += 1\n        if acc >= interval and outdoor <= 50:\n            acc = acc - interval // 2\n            defrost_min = 0\n            out.append('defrost')\n            continue\n        out.append('heat' if running else 'off')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['control: scenario 1',\n   [3,\n    3,\n    [[True, 40, 35],\n     [True, 40, 50],\n     [True, 40, 51],\n     [True, 40, 51],\n     [True, 40, 50],\n     [True, 40, 50],\n     [False, 20, 35],\n     [False, 20, 51],\n     [True, 20, 50],\n     [True, 50, 20],\n     [True, 50, 50],\n     [True, 56, 50],\n     [True, 40, 50],\n     [True, 40, 50],\n     [False, 40, 51],\n     [True, 40, 50],\n     [False, 20, 51],\n     [False, 20, 60],\n     [True, 57, 51],\n     [False, 57, 51]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'off']],\n  ['regression: scenario 2',\n   [4,\n    3,\n    [[True, 33, 60],\n     [False, 57, 20],\n     [True, 57, 50],\n     [True, 60, 20],\n     [True, 60, 35],\n     [True, 60, 50],\n     [True, 28, 50],\n     [True, 28, 20],\n     [True, 28, 20],\n     [False, 28, 50],\n     [True, 28, 51],\n     [True, 28, 35],\n     [True, 28, 60],\n     [True, 28, 50],\n     [True, 40, 50],\n     [True, 40, 50],\n     [False, 40, 60]]],\n   ['heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'off']],\n  ['regression: scenario 3',\n   [5,\n    3,\n    [[True, 20, 20],\n     [True, 20, 50],\n     [True, 20, 50],\n     [True, 20, 50],\n     [True, 20, 35],\n     [True, 40, 50],\n     [False, 40, 20],\n     [True, 40, 50],\n     [True, 40, 50],\n     [True, 33, 60],\n     [False, 33, 60],\n     [True, 60, 50]]],\n   ['heat', 'heat', 'heat', 'heat', 'defrost', 'defrost', 'defrost', 'heat', 'heat', 'heat', 'off', 'heat']],\n  ['regression: scenario 4',\n   [3,\n    4,\n    [[True, 20, 50],\n     [True, 20, 35],\n     [True, 20, 60],\n     [True, 20, 50],\n     [False, 20, 50],\n     [True, 20, 35],\n     [True, 20, 60],\n     [True, 20, 51],\n     [False, 20, 20],\n     [True, 50, 50],\n     [True, 50, 50],\n     [False, 50, 50],\n     [True, 50, 35],\n     [False, 33, 60],\n     [True, 33, 60],\n     [True, 33, 50],\n     [True, 20, 35],\n     [True, 20, 35],\n     [True, 20, 50],\n     [True, 50, 20]]],\n   ['heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost']]],\n [['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: scenario 1',\n   [3,\n    3,\n    [[True, 28, 20],\n     [True, 28, 50],\n     [True, 32, 50],\n     [False, 32, 35],\n     [True, 60, 20],\n     [True, 60, 35],\n     [True, 60, 50],\n     [True, 60, 50],\n     [True, 57, 50],\n     [True, 57, 50],\n     [True, 60, 60],\n     [False, 60, 50],\n     [True, 60, 35],\n     [True, 33, 50]]],\n   ['heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat']],\n  ['regression: scenario 2',\n   [4,\n    4,\n    [[True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 60],\n     [False, 56, 60],\n     [True, 56, 35],\n     [True, 50, 50],\n     [True, 32, 35],\n     [True, 32, 51],\n     [True, 32, 20],\n     [True, 32, 51],\n     [True, 32, 60],\n     [True, 57, 35],\n     [True, 32, 50],\n     [True, 32, 35],\n     [True, 20, 35],\n     [True, 50, 35],\n     [True, 57, 35],\n     [True, 57, 51],\n     [False, 57, 50]]],\n   ['heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'off']],\n  ['control: scenario 3',\n   [3,\n    6,\n    [[False, 56, 51],\n     [True, 56, 35],\n     [False, 56, 35],\n     [True, 56, 35],\n     [True, 56, 35],\n     [True, 33, 50],\n     [True, 33, 20],\n     [True, 33, 50],\n     [False, 33, 60],\n     [True, 33, 35],\n     [True, 33, 35],\n     [True, 33, 50],\n     [True, 33, 60],\n     [True, 33, 35],\n     [True, 33, 35],\n     [True, 20, 50],\n     [True, 20, 51]]],\n   ['off',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: scenario 4',\n   [4,\n    4,\n    [[False, 40, 50],\n     [True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 50],\n     [True, 40, 50],\n     [True, 28, 50],\n     [True, 28, 50],\n     [False, 28, 60],\n     [False, 28, 20],\n     [True, 28, 60],\n     [True, 28, 50],\n     [False, 28, 60],\n     [True, 28, 50],\n     [True, 28, 35],\n     [False, 28, 50],\n     [True, 28, 20],\n     [True, 28, 51],\n     [True, 33, 20]]],\n   ['off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'off',\n    'heat',\n    'heat',\n    'heat']]],\n [['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['regression: scenario 4',\n   [3,\n    3,\n    [[True, 28, 51],\n     [True, 28, 35],\n     [True, 56, 50],\n     [False, 56, 51],\n     [True, 56, 50],\n     [True, 56, 20],\n     [False, 40, 50],\n     [True, 40, 20],\n     [False, 60, 20],\n     [True, 50, 50],\n     [True, 56, 35],\n     [True, 56, 35],\n     [True, 56, 51],\n     [True, 32, 60],\n     [True, 32, 60],\n     [True, 32, 35],\n     [True, 32, 60],\n     [True, 32, 20],\n     [True, 32, 50],\n     [True, 32, 60],\n     [True, 32, 51],\n     [True, 40, 20],\n     [True, 40, 20],\n     [True, 40, 20]]],\n   ['heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: scenario 1',\n   [4,\n    6,\n    [[True, 33, 20],\n     [True, 28, 50],\n     [True, 56, 51],\n     [True, 33, 51],\n     [True, 28, 35],\n     [False, 28, 50],\n     [True, 28, 60],\n     [True, 28, 20],\n     [True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 51],\n     [True, 40, 50],\n     [True, 28, 60],\n     [True, 28, 50],\n     [True, 50, 35],\n     [True, 60, 50],\n     [True, 57, 20],\n     [True, 40, 50]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['control: scenario 2',\n   [4,\n    3,\n    [[True, 32, 20],\n     [True, 57, 60],\n     [True, 57, 60],\n     [True, 57, 20],\n     [False, 40, 51],\n     [True, 50, 50],\n     [True, 50, 51],\n     [True, 50, 50],\n     [True, 56, 60],\n     [True, 40, 20],\n     [False, 40, 35],\n     [True, 50, 35],\n     [False, 50, 51],\n     [False, 50, 35],\n     [True, 57, 35],\n     [True, 57, 20],\n     [True, 57, 20],\n     [True, 57, 50],\n     [True, 57, 60]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: scenario 3',\n   [3,\n    6,\n    [[True, 20, 60],\n     [True, 33, 20],\n     [True, 33, 60],\n     [True, 33, 51],\n     [True, 33, 35],\n     [True, 32, 50],\n     [True, 32, 35],\n     [True, 32, 35],\n     [True, 32, 60],\n     [True, 32, 60],\n     [False, 32, 60],\n     [True, 32, 35],\n     [False, 32, 50],\n     [True, 40, 50]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'off',\n    'heat']]],\n [['regression: scenario 3',\n   [5,\n    4,\n    [[False, 32, 51],\n     [False, 32, 50],\n     [True, 32, 20],\n     [True, 32, 50],\n     [True, 32, 50],\n     [True, 32, 51],\n     [True, 32, 20],\n     [True, 56, 50],\n     [False, 56, 50],\n     [True, 56, 51],\n     [True, 56, 51],\n     [False, 56, 35],\n     [True, 20, 20],\n     [True, 20, 35],\n     [True, 20, 60],\n     [True, 20, 50]]],\n   ['off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: scenario 7',\n   [4,\n    6,\n    [[True, 28, 50],\n     [True, 28, 35],\n     [True, 28, 50],\n     [True, 28, 50],\n     [True, 28, 50],\n     [True, 28, 50],\n     [True, 28, 60],\n     [True, 28, 20],\n     [True, 32, 60],\n     [False, 40, 60],\n     [True, 40, 60],\n     [True, 40, 35],\n     [True, 32, 60],\n     [True, 32, 50]]],\n   ['heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['control: scenario 1',\n   [5,\n    4,\n    [[True, 57, 60],\n     [True, 57, 50],\n     [True, 57, 50],\n     [True, 57, 35],\n     [True, 33, 50],\n     [True, 33, 50],\n     [True, 32, 50],\n     [True, 50, 51],\n     [True, 50, 51],\n     [False, 50, 20],\n     [False, 33, 50],\n     [True, 56, 20],\n     [True, 32, 60],\n     [True, 32, 35],\n     [True, 32, 20]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['control: scenario 2',\n   [4,\n    6,\n    [[False, 28, 50],\n     [True, 28, 51],\n     [True, 28, 35],\n     [True, 28, 50],\n     [True, 57, 50],\n     [True, 57, 20],\n     [True, 57, 50],\n     [True, 57, 50],\n     [True, 56, 50],\n     [True, 56, 35],\n     [True, 56, 51],\n     [True, 56, 50]]],\n   ['off', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat']]],\n [['regression: scenario 5',\n   [5,\n    4,\n    [[True, 28, 51],\n     [True, 28, 51],\n     [False, 28, 50],\n     [True, 28, 35],\n     [True, 28, 35],\n     [True, 40, 60],\n     [True, 56, 20],\n     [False, 40, 35],\n     [False, 40, 50],\n     [True, 40, 50],\n     [True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 50],\n     [True, 28, 51],\n     [False, 28, 50],\n     [True, 28, 50],\n     [True, 56, 35],\n     [True, 33, 35],\n     [True, 50, 50],\n     [False, 50, 50],\n     [True, 50, 50]]],\n   ['heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'off',\n    'heat']],\n  ['regression: scenario 7',\n   [3,\n    4,\n    [[True, 32, 35],\n     [True, 32, 50],\n     [True, 32, 60],\n     [True, 32, 35],\n     [True, 56, 20],\n     [True, 20, 50],\n     [True, 20, 20],\n     [False, 20, 35],\n     [True, 28, 20],\n     [True, 20, 35],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'off',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost']],\n  ['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['control: scenario 1',\n   [4,\n    6,\n    [[True, 32, 50],\n     [True, 50, 50],\n     [True, 50, 35],\n     [True, 57, 51],\n     [True, 57, 20],\n     [False, 57, 51],\n     [True, 57, 50],\n     [True, 57, 51],\n     [True, 32, 50],\n     [True, 32, 51],\n     [True, 32, 50],\n     [False, 28, 50]]],\n   ['heat', 'heat', 'heat', 'heat', 'heat', 'off', 'heat', 'heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: scenario 2',\n   [3,\n    4,\n    [[True, 32, 35],\n     [True, 32, 35],\n     [True, 33, 60],\n     [True, 33, 50],\n     [True, 33, 60],\n     [True, 57, 51],\n     [True, 20, 60],\n     [True, 20, 50],\n     [True, 33, 50],\n     [False, 33, 51],\n     [False, 33, 20],\n     [True, 33, 20],\n     [True, 40, 50],\n     [True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 35],\n     [True, 40, 51],\n     [True, 28, 35],\n     [True, 28, 51],\n     [True, 33, 60],\n     [False, 33, 60],\n     [True, 56, 51],\n     [True, 56, 60],\n     [False, 56, 60]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'off']]]]\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":"4eb55b3aec1fdc4c582f246928f3ebff730fcede48a8cd3ccd4ba9c74950f524","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(interval, max_minutes, samples):\n    acc = 0\n    defrost_min = None\n    out = []\n    for running, coil, outdoor in samples:\n        if defrost_min is not None:\n            defrost_min += 1\n            if coil >= 57 or defrost_min >= max_minutes:\n                defrost_min = None\n                out.append('heat' if running else 'off')\n            else:\n                out.append('defrost')\n            continue\n        if running and coil <= 32:\n            acc += 1\n        if acc >= interval and outdoor <= 50:\n            defrost_min = 0\n            out.append('defrost')\n            continue\n        out.append('heat' if running else 'off')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['control: scenario 1',\n   [3,\n    3,\n    [[True, 40, 35],\n     [True, 40, 50],\n     [True, 40, 51],\n     [True, 40, 51],\n     [True, 40, 50],\n     [True, 40, 50],\n     [False, 20, 35],\n     [False, 20, 51],\n     [True, 20, 50],\n     [True, 50, 20],\n     [True, 50, 50],\n     [True, 56, 50],\n     [True, 40, 50],\n     [True, 40, 50],\n     [False, 40, 51],\n     [True, 40, 50],\n     [False, 20, 51],\n     [False, 20, 60],\n     [True, 57, 51],\n     [False, 57, 51]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'off']],\n  ['regression: scenario 2',\n   [4,\n    3,\n    [[True, 33, 60],\n     [False, 57, 20],\n     [True, 57, 50],\n     [True, 60, 20],\n     [True, 60, 35],\n     [True, 60, 50],\n     [True, 28, 50],\n     [True, 28, 20],\n     [True, 28, 20],\n     [False, 28, 50],\n     [True, 28, 51],\n     [True, 28, 35],\n     [True, 28, 60],\n     [True, 28, 50],\n     [True, 40, 50],\n     [True, 40, 50],\n     [False, 40, 60]]],\n   ['heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'off']],\n  ['regression: scenario 3',\n   [5,\n    3,\n    [[True, 20, 20],\n     [True, 20, 50],\n     [True, 20, 50],\n     [True, 20, 50],\n     [True, 20, 35],\n     [True, 40, 50],\n     [False, 40, 20],\n     [True, 40, 50],\n     [True, 40, 50],\n     [True, 33, 60],\n     [False, 33, 60],\n     [True, 60, 50]]],\n   ['heat', 'heat', 'heat', 'heat', 'defrost', 'defrost', 'defrost', 'heat', 'heat', 'heat', 'off', 'heat']],\n  ['regression: scenario 4',\n   [3,\n    4,\n    [[True, 20, 50],\n     [True, 20, 35],\n     [True, 20, 60],\n     [True, 20, 50],\n     [False, 20, 50],\n     [True, 20, 35],\n     [True, 20, 60],\n     [True, 20, 51],\n     [False, 20, 20],\n     [True, 50, 50],\n     [True, 50, 50],\n     [False, 50, 50],\n     [True, 50, 35],\n     [False, 33, 60],\n     [True, 33, 60],\n     [True, 33, 50],\n     [True, 20, 35],\n     [True, 20, 35],\n     [True, 20, 50],\n     [True, 50, 20]]],\n   ['heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost']]],\n [['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: scenario 1',\n   [3,\n    3,\n    [[True, 28, 20],\n     [True, 28, 50],\n     [True, 32, 50],\n     [False, 32, 35],\n     [True, 60, 20],\n     [True, 60, 35],\n     [True, 60, 50],\n     [True, 60, 50],\n     [True, 57, 50],\n     [True, 57, 50],\n     [True, 60, 60],\n     [False, 60, 50],\n     [True, 60, 35],\n     [True, 33, 50]]],\n   ['heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat']],\n  ['regression: scenario 2',\n   [4,\n    4,\n    [[True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 60],\n     [False, 56, 60],\n     [True, 56, 35],\n     [True, 50, 50],\n     [True, 32, 35],\n     [True, 32, 51],\n     [True, 32, 20],\n     [True, 32, 51],\n     [True, 32, 60],\n     [True, 57, 35],\n     [True, 32, 50],\n     [True, 32, 35],\n     [True, 20, 35],\n     [True, 50, 35],\n     [True, 57, 35],\n     [True, 57, 51],\n     [False, 57, 50]]],\n   ['heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'off']],\n  ['control: scenario 3',\n   [3,\n    6,\n    [[False, 56, 51],\n     [True, 56, 35],\n     [False, 56, 35],\n     [True, 56, 35],\n     [True, 56, 35],\n     [True, 33, 50],\n     [True, 33, 20],\n     [True, 33, 50],\n     [False, 33, 60],\n     [True, 33, 35],\n     [True, 33, 35],\n     [True, 33, 50],\n     [True, 33, 60],\n     [True, 33, 35],\n     [True, 33, 35],\n     [True, 20, 50],\n     [True, 20, 51]]],\n   ['off',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: scenario 4',\n   [4,\n    4,\n    [[False, 40, 50],\n     [True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 50],\n     [True, 40, 50],\n     [True, 28, 50],\n     [True, 28, 50],\n     [False, 28, 60],\n     [False, 28, 20],\n     [True, 28, 60],\n     [True, 28, 50],\n     [False, 28, 60],\n     [True, 28, 50],\n     [True, 28, 35],\n     [False, 28, 50],\n     [True, 28, 20],\n     [True, 28, 51],\n     [True, 33, 20]]],\n   ['off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'off',\n    'heat',\n    'heat',\n    'heat']]],\n [['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['regression: scenario 4',\n   [3,\n    3,\n    [[True, 28, 51],\n     [True, 28, 35],\n     [True, 56, 50],\n     [False, 56, 51],\n     [True, 56, 50],\n     [True, 56, 20],\n     [False, 40, 50],\n     [True, 40, 20],\n     [False, 60, 20],\n     [True, 50, 50],\n     [True, 56, 35],\n     [True, 56, 35],\n     [True, 56, 51],\n     [True, 32, 60],\n     [True, 32, 60],\n     [True, 32, 35],\n     [True, 32, 60],\n     [True, 32, 20],\n     [True, 32, 50],\n     [True, 32, 60],\n     [True, 32, 51],\n     [True, 40, 20],\n     [True, 40, 20],\n     [True, 40, 20]]],\n   ['heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: scenario 1',\n   [4,\n    6,\n    [[True, 33, 20],\n     [True, 28, 50],\n     [True, 56, 51],\n     [True, 33, 51],\n     [True, 28, 35],\n     [False, 28, 50],\n     [True, 28, 60],\n     [True, 28, 20],\n     [True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 51],\n     [True, 40, 50],\n     [True, 28, 60],\n     [True, 28, 50],\n     [True, 50, 35],\n     [True, 60, 50],\n     [True, 57, 20],\n     [True, 40, 50]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['control: scenario 2',\n   [4,\n    3,\n    [[True, 32, 20],\n     [True, 57, 60],\n     [True, 57, 60],\n     [True, 57, 20],\n     [False, 40, 51],\n     [True, 50, 50],\n     [True, 50, 51],\n     [True, 50, 50],\n     [True, 56, 60],\n     [True, 40, 20],\n     [False, 40, 35],\n     [True, 50, 35],\n     [False, 50, 51],\n     [False, 50, 35],\n     [True, 57, 35],\n     [True, 57, 20],\n     [True, 57, 20],\n     [True, 57, 50],\n     [True, 57, 60]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: scenario 3',\n   [3,\n    6,\n    [[True, 20, 60],\n     [True, 33, 20],\n     [True, 33, 60],\n     [True, 33, 51],\n     [True, 33, 35],\n     [True, 32, 50],\n     [True, 32, 35],\n     [True, 32, 35],\n     [True, 32, 60],\n     [True, 32, 60],\n     [False, 32, 60],\n     [True, 32, 35],\n     [False, 32, 50],\n     [True, 40, 50]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'off',\n    'heat']]],\n [['regression: scenario 3',\n   [5,\n    4,\n    [[False, 32, 51],\n     [False, 32, 50],\n     [True, 32, 20],\n     [True, 32, 50],\n     [True, 32, 50],\n     [True, 32, 51],\n     [True, 32, 20],\n     [True, 56, 50],\n     [False, 56, 50],\n     [True, 56, 51],\n     [True, 56, 51],\n     [False, 56, 35],\n     [True, 20, 20],\n     [True, 20, 35],\n     [True, 20, 60],\n     [True, 20, 50]]],\n   ['off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: scenario 7',\n   [4,\n    6,\n    [[True, 28, 50],\n     [True, 28, 35],\n     [True, 28, 50],\n     [True, 28, 50],\n     [True, 28, 50],\n     [True, 28, 50],\n     [True, 28, 60],\n     [True, 28, 20],\n     [True, 32, 60],\n     [False, 40, 60],\n     [True, 40, 60],\n     [True, 40, 35],\n     [True, 32, 60],\n     [True, 32, 50]]],\n   ['heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['control: scenario 1',\n   [5,\n    4,\n    [[True, 57, 60],\n     [True, 57, 50],\n     [True, 57, 50],\n     [True, 57, 35],\n     [True, 33, 50],\n     [True, 33, 50],\n     [True, 32, 50],\n     [True, 50, 51],\n     [True, 50, 51],\n     [False, 50, 20],\n     [False, 33, 50],\n     [True, 56, 20],\n     [True, 32, 60],\n     [True, 32, 35],\n     [True, 32, 20]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['control: scenario 2',\n   [4,\n    6,\n    [[False, 28, 50],\n     [True, 28, 51],\n     [True, 28, 35],\n     [True, 28, 50],\n     [True, 57, 50],\n     [True, 57, 20],\n     [True, 57, 50],\n     [True, 57, 50],\n     [True, 56, 50],\n     [True, 56, 35],\n     [True, 56, 51],\n     [True, 56, 50]]],\n   ['off', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat']]],\n [['regression: scenario 5',\n   [5,\n    4,\n    [[True, 28, 51],\n     [True, 28, 51],\n     [False, 28, 50],\n     [True, 28, 35],\n     [True, 28, 35],\n     [True, 40, 60],\n     [True, 56, 20],\n     [False, 40, 35],\n     [False, 40, 50],\n     [True, 40, 50],\n     [True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 50],\n     [True, 28, 51],\n     [False, 28, 50],\n     [True, 28, 50],\n     [True, 56, 35],\n     [True, 33, 35],\n     [True, 50, 50],\n     [False, 50, 50],\n     [True, 50, 50]]],\n   ['heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'off',\n    'heat']],\n  ['regression: scenario 7',\n   [3,\n    4,\n    [[True, 32, 35],\n     [True, 32, 50],\n     [True, 32, 60],\n     [True, 32, 35],\n     [True, 56, 20],\n     [True, 20, 50],\n     [True, 20, 20],\n     [False, 20, 35],\n     [True, 28, 20],\n     [True, 20, 35],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'off',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost']],\n  ['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['control: scenario 1',\n   [4,\n    6,\n    [[True, 32, 50],\n     [True, 50, 50],\n     [True, 50, 35],\n     [True, 57, 51],\n     [True, 57, 20],\n     [False, 57, 51],\n     [True, 57, 50],\n     [True, 57, 51],\n     [True, 32, 50],\n     [True, 32, 51],\n     [True, 32, 50],\n     [False, 28, 50]]],\n   ['heat', 'heat', 'heat', 'heat', 'heat', 'off', 'heat', 'heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: scenario 2',\n   [3,\n    4,\n    [[True, 32, 35],\n     [True, 32, 35],\n     [True, 33, 60],\n     [True, 33, 50],\n     [True, 33, 60],\n     [True, 57, 51],\n     [True, 20, 60],\n     [True, 20, 50],\n     [True, 33, 50],\n     [False, 33, 51],\n     [False, 33, 20],\n     [True, 33, 20],\n     [True, 40, 50],\n     [True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 35],\n     [True, 40, 51],\n     [True, 28, 35],\n     [True, 28, 51],\n     [True, 33, 60],\n     [False, 33, 60],\n     [True, 56, 51],\n     [True, 56, 60],\n     [False, 56, 60]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'off']]]]\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":"7d8c4731eed824c323249843600022a18b500149bdce88bd7c9857aee1eb0c96","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(interval, max_minutes, samples):\n    acc = 0\n    defrost_min = None\n    out = []\n    for running, coil, outdoor in samples:\n        if defrost_min is not None:\n            defrost_min += 1\n            if coil >= 57 or defrost_min >= max_minutes:\n                defrost_min = None\n                out.append('heat' if running else 'off')\n            else:\n                out.append('defrost')\n            continue\n        if running and coil <= 32:\n            acc += 1\n        if acc >= interval and outdoor <= 50:\n            acc = 0\n            defrost_min = 0\n            out.append('defrost')\n            continue\n        out.append('heat' if running else 'off')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['control: scenario 1',\n   [3,\n    3,\n    [[True, 40, 35],\n     [True, 40, 50],\n     [True, 40, 51],\n     [True, 40, 51],\n     [True, 40, 50],\n     [True, 40, 50],\n     [False, 20, 35],\n     [False, 20, 51],\n     [True, 20, 50],\n     [True, 50, 20],\n     [True, 50, 50],\n     [True, 56, 50],\n     [True, 40, 50],\n     [True, 40, 50],\n     [False, 40, 51],\n     [True, 40, 50],\n     [False, 20, 51],\n     [False, 20, 60],\n     [True, 57, 51],\n     [False, 57, 51]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'off']],\n  ['regression: scenario 2',\n   [4,\n    3,\n    [[True, 33, 60],\n     [False, 57, 20],\n     [True, 57, 50],\n     [True, 60, 20],\n     [True, 60, 35],\n     [True, 60, 50],\n     [True, 28, 50],\n     [True, 28, 20],\n     [True, 28, 20],\n     [False, 28, 50],\n     [True, 28, 51],\n     [True, 28, 35],\n     [True, 28, 60],\n     [True, 28, 50],\n     [True, 40, 50],\n     [True, 40, 50],\n     [False, 40, 60]]],\n   ['heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'off']],\n  ['regression: scenario 3',\n   [5,\n    3,\n    [[True, 20, 20],\n     [True, 20, 50],\n     [True, 20, 50],\n     [True, 20, 50],\n     [True, 20, 35],\n     [True, 40, 50],\n     [False, 40, 20],\n     [True, 40, 50],\n     [True, 40, 50],\n     [True, 33, 60],\n     [False, 33, 60],\n     [True, 60, 50]]],\n   ['heat', 'heat', 'heat', 'heat', 'defrost', 'defrost', 'defrost', 'heat', 'heat', 'heat', 'off', 'heat']],\n  ['regression: scenario 4',\n   [3,\n    4,\n    [[True, 20, 50],\n     [True, 20, 35],\n     [True, 20, 60],\n     [True, 20, 50],\n     [False, 20, 50],\n     [True, 20, 35],\n     [True, 20, 60],\n     [True, 20, 51],\n     [False, 20, 20],\n     [True, 50, 50],\n     [True, 50, 50],\n     [False, 50, 50],\n     [True, 50, 35],\n     [False, 33, 60],\n     [True, 33, 60],\n     [True, 33, 50],\n     [True, 20, 35],\n     [True, 20, 35],\n     [True, 20, 50],\n     [True, 50, 20]]],\n   ['heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost']]],\n [['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: scenario 1',\n   [3,\n    3,\n    [[True, 28, 20],\n     [True, 28, 50],\n     [True, 32, 50],\n     [False, 32, 35],\n     [True, 60, 20],\n     [True, 60, 35],\n     [True, 60, 50],\n     [True, 60, 50],\n     [True, 57, 50],\n     [True, 57, 50],\n     [True, 60, 60],\n     [False, 60, 50],\n     [True, 60, 35],\n     [True, 33, 50]]],\n   ['heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat']],\n  ['regression: scenario 2',\n   [4,\n    4,\n    [[True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 60],\n     [False, 56, 60],\n     [True, 56, 35],\n     [True, 50, 50],\n     [True, 32, 35],\n     [True, 32, 51],\n     [True, 32, 20],\n     [True, 32, 51],\n     [True, 32, 60],\n     [True, 57, 35],\n     [True, 32, 50],\n     [True, 32, 35],\n     [True, 20, 35],\n     [True, 50, 35],\n     [True, 57, 35],\n     [True, 57, 51],\n     [False, 57, 50]]],\n   ['heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'off']],\n  ['control: scenario 3',\n   [3,\n    6,\n    [[False, 56, 51],\n     [True, 56, 35],\n     [False, 56, 35],\n     [True, 56, 35],\n     [True, 56, 35],\n     [True, 33, 50],\n     [True, 33, 20],\n     [True, 33, 50],\n     [False, 33, 60],\n     [True, 33, 35],\n     [True, 33, 35],\n     [True, 33, 50],\n     [True, 33, 60],\n     [True, 33, 35],\n     [True, 33, 35],\n     [True, 20, 50],\n     [True, 20, 51]]],\n   ['off',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: scenario 4',\n   [4,\n    4,\n    [[False, 40, 50],\n     [True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 50],\n     [True, 40, 50],\n     [True, 28, 50],\n     [True, 28, 50],\n     [False, 28, 60],\n     [False, 28, 20],\n     [True, 28, 60],\n     [True, 28, 50],\n     [False, 28, 60],\n     [True, 28, 50],\n     [True, 28, 35],\n     [False, 28, 50],\n     [True, 28, 20],\n     [True, 28, 51],\n     [True, 33, 20]]],\n   ['off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'off',\n    'heat',\n    'heat',\n    'heat']]],\n [['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['regression: scenario 4',\n   [3,\n    3,\n    [[True, 28, 51],\n     [True, 28, 35],\n     [True, 56, 50],\n     [False, 56, 51],\n     [True, 56, 50],\n     [True, 56, 20],\n     [False, 40, 50],\n     [True, 40, 20],\n     [False, 60, 20],\n     [True, 50, 50],\n     [True, 56, 35],\n     [True, 56, 35],\n     [True, 56, 51],\n     [True, 32, 60],\n     [True, 32, 60],\n     [True, 32, 35],\n     [True, 32, 60],\n     [True, 32, 20],\n     [True, 32, 50],\n     [True, 32, 60],\n     [True, 32, 51],\n     [True, 40, 20],\n     [True, 40, 20],\n     [True, 40, 20]]],\n   ['heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: scenario 1',\n   [4,\n    6,\n    [[True, 33, 20],\n     [True, 28, 50],\n     [True, 56, 51],\n     [True, 33, 51],\n     [True, 28, 35],\n     [False, 28, 50],\n     [True, 28, 60],\n     [True, 28, 20],\n     [True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 51],\n     [True, 40, 50],\n     [True, 28, 60],\n     [True, 28, 50],\n     [True, 50, 35],\n     [True, 60, 50],\n     [True, 57, 20],\n     [True, 40, 50]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['control: scenario 2',\n   [4,\n    3,\n    [[True, 32, 20],\n     [True, 57, 60],\n     [True, 57, 60],\n     [True, 57, 20],\n     [False, 40, 51],\n     [True, 50, 50],\n     [True, 50, 51],\n     [True, 50, 50],\n     [True, 56, 60],\n     [True, 40, 20],\n     [False, 40, 35],\n     [True, 50, 35],\n     [False, 50, 51],\n     [False, 50, 35],\n     [True, 57, 35],\n     [True, 57, 20],\n     [True, 57, 20],\n     [True, 57, 50],\n     [True, 57, 60]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: scenario 3',\n   [3,\n    6,\n    [[True, 20, 60],\n     [True, 33, 20],\n     [True, 33, 60],\n     [True, 33, 51],\n     [True, 33, 35],\n     [True, 32, 50],\n     [True, 32, 35],\n     [True, 32, 35],\n     [True, 32, 60],\n     [True, 32, 60],\n     [False, 32, 60],\n     [True, 32, 35],\n     [False, 32, 50],\n     [True, 40, 50]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'off',\n    'heat']]],\n [['regression: scenario 3',\n   [5,\n    4,\n    [[False, 32, 51],\n     [False, 32, 50],\n     [True, 32, 20],\n     [True, 32, 50],\n     [True, 32, 50],\n     [True, 32, 51],\n     [True, 32, 20],\n     [True, 56, 50],\n     [False, 56, 50],\n     [True, 56, 51],\n     [True, 56, 51],\n     [False, 56, 35],\n     [True, 20, 20],\n     [True, 20, 35],\n     [True, 20, 60],\n     [True, 20, 50]]],\n   ['off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: scenario 7',\n   [4,\n    6,\n    [[True, 28, 50],\n     [True, 28, 35],\n     [True, 28, 50],\n     [True, 28, 50],\n     [True, 28, 50],\n     [True, 28, 50],\n     [True, 28, 60],\n     [True, 28, 20],\n     [True, 32, 60],\n     [False, 40, 60],\n     [True, 40, 60],\n     [True, 40, 35],\n     [True, 32, 60],\n     [True, 32, 50]]],\n   ['heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['control: scenario 1',\n   [5,\n    4,\n    [[True, 57, 60],\n     [True, 57, 50],\n     [True, 57, 50],\n     [True, 57, 35],\n     [True, 33, 50],\n     [True, 33, 50],\n     [True, 32, 50],\n     [True, 50, 51],\n     [True, 50, 51],\n     [False, 50, 20],\n     [False, 33, 50],\n     [True, 56, 20],\n     [True, 32, 60],\n     [True, 32, 35],\n     [True, 32, 20]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat']],\n  ['control: scenario 2',\n   [4,\n    6,\n    [[False, 28, 50],\n     [True, 28, 51],\n     [True, 28, 35],\n     [True, 28, 50],\n     [True, 57, 50],\n     [True, 57, 20],\n     [True, 57, 50],\n     [True, 57, 50],\n     [True, 56, 50],\n     [True, 56, 35],\n     [True, 56, 51],\n     [True, 56, 50]]],\n   ['off', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat', 'heat']]],\n [['regression: scenario 5',\n   [5,\n    4,\n    [[True, 28, 51],\n     [True, 28, 51],\n     [False, 28, 50],\n     [True, 28, 35],\n     [True, 28, 35],\n     [True, 40, 60],\n     [True, 56, 20],\n     [False, 40, 35],\n     [False, 40, 50],\n     [True, 40, 50],\n     [True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 50],\n     [True, 28, 51],\n     [False, 28, 50],\n     [True, 28, 50],\n     [True, 56, 35],\n     [True, 33, 35],\n     [True, 50, 50],\n     [False, 50, 50],\n     [True, 50, 50]]],\n   ['heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'off',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'off',\n    'heat']],\n  ['regression: scenario 7',\n   [3,\n    4,\n    [[True, 32, 35],\n     [True, 32, 50],\n     [True, 32, 60],\n     [True, 32, 35],\n     [True, 56, 20],\n     [True, 20, 50],\n     [True, 20, 20],\n     [False, 20, 35],\n     [True, 28, 20],\n     [True, 20, 35],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'off',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost']],\n  ['regression: two defrosts',\n   [3,\n    4,\n    [[True, 30, 20],\n     [True, 30, 20],\n     [False, 30, 20],\n     [True, 32, 20],\n     [True, 40, 20],\n     [True, 45, 20],\n     [True, 57, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20],\n     [True, 20, 20]]],\n   ['heat',\n    'heat',\n    'off',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat']],\n  ['regression: warm outdoor inhibits',\n   [2, 3, [[True, 30, 55], [True, 30, 55], [True, 30, 50], [True, 60, 50], [True, 30, 50]]],\n   ['heat', 'heat', 'defrost', 'heat', 'heat']],\n  ['control: dry coil runtime',\n   [2, 3, [[True, 40, 20], [True, 33, 20], [True, 32, 20], [True, 31, 20], [True, 50, 20]]],\n   ['heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: exact termination temperature',\n   [1, 5, [[True, 30, 20], [True, 56, 20], [True, 57, 20], [False, 30, 20], [True, 30, 20]]],\n   ['defrost', 'defrost', 'heat', 'off', 'defrost']],\n  ['control: scenario 1',\n   [4,\n    6,\n    [[True, 32, 50],\n     [True, 50, 50],\n     [True, 50, 35],\n     [True, 57, 51],\n     [True, 57, 20],\n     [False, 57, 51],\n     [True, 57, 50],\n     [True, 57, 51],\n     [True, 32, 50],\n     [True, 32, 51],\n     [True, 32, 50],\n     [False, 28, 50]]],\n   ['heat', 'heat', 'heat', 'heat', 'heat', 'off', 'heat', 'heat', 'heat', 'heat', 'defrost', 'defrost']],\n  ['regression: scenario 2',\n   [3,\n    4,\n    [[True, 32, 35],\n     [True, 32, 35],\n     [True, 33, 60],\n     [True, 33, 50],\n     [True, 33, 60],\n     [True, 57, 51],\n     [True, 20, 60],\n     [True, 20, 50],\n     [True, 33, 50],\n     [False, 33, 51],\n     [False, 33, 20],\n     [True, 33, 20],\n     [True, 40, 50],\n     [True, 40, 50],\n     [True, 40, 35],\n     [True, 40, 35],\n     [True, 40, 51],\n     [True, 28, 35],\n     [True, 28, 51],\n     [True, 33, 60],\n     [False, 33, 60],\n     [True, 56, 51],\n     [True, 56, 60],\n     [False, 56, 60]]],\n   ['heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'defrost',\n    'defrost',\n    'defrost',\n    'defrost',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'heat',\n    'off',\n    'heat',\n    'heat',\n    'off']]]]\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 thermostat or HVAC controller decision evaluated per sample. Temperatures are integer tenths of a degree Fahrenheit unless stated otherwise. The contract is a stipulated toy convention, not a claim of conformance to any manufacturer, ASHRAE guideline or code. 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-hvac-thermostat-control-demand-defrost-accumulator-reset","generated_at":"2026-09-29T14:51:45.832248+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Residential and light-commercial thermostats make these decisions sample by sample; each defect changes equipment calls in a way that shows up as short cycling, comfort complaints or equipment stress.","repair":"Reset the frost runtime accumulator when defrost starts.","root_cause":"Initiation leaves the accumulator untouched.","sha256":"e595040b9aab62459dffa5e1c3a9edfbae3c239ca750f6a6bdc46f10e7ea20b3","title":"Defrost runtime accumulator is not cleared at initiation · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.518,"exit_code":1,"observations":[{"actual":["heat","heat","off","defrost","defrost","defrost","heat","defrost","defrost","defrost","defrost","heat","defrost","defrost"],"check":"regression: two defrosts","expected":["heat","heat","off","defrost","defrost","defrost","heat","heat","heat","defrost","defrost","defrost","defrost","heat"],"passed":false},{"actual":["heat","heat","defrost","heat","defrost"],"check":"regression: warm outdoor inhibits","expected":["heat","heat","defrost","heat","heat"],"passed":false},{"actual":["heat","heat","heat","defrost","defrost"],"check":"control: dry coil runtime","expected":["heat","heat","heat","defrost","defrost"],"passed":true},{"actual":["defrost","defrost","heat","defrost","defrost"],"check":"regression: exact termination temperature","expected":["defrost","defrost","heat","off","defrost"],"passed":false},{"actual":["heat","heat","heat","heat","heat","heat","off","off","heat","heat","heat","heat","heat","heat","off","heat","off","off","heat","off"],"check":"control: scenario 1","expected":["heat","heat","heat","heat","heat","heat","off","off","heat","heat","heat","heat","heat","heat","off","heat","off","off","heat","off"],"passed":true},{"actual":["heat","off","heat","heat","heat","heat","heat","heat","heat","off","heat","defrost","defrost","defrost","heat","heat","off"],"check":"regression: scenario 2","expected":["heat","off","heat","heat","heat","heat","heat","heat","heat","off","heat","defrost","defrost","defrost","heat","heat","off"],"passed":true},{"actual":["heat","heat","heat","heat","defrost","defrost","defrost","heat","heat","heat","off","heat"],"check":"regression: scenario 3","expected":["heat","heat","heat","heat","defrost","defrost","defrost","heat","heat","heat","off","heat"],"passed":true},{"actual":["heat","heat","heat","defrost","defrost","defrost","defrost","heat","defrost","defrost","defrost","defrost","heat","off","heat","heat","defrost","defrost","defrost","defrost"],"check":"regression: scenario 4","expected":["heat","heat","heat","defrost","defrost","defrost","defrost","heat","off","heat","heat","off","heat","off","heat","heat","heat","heat","defrost","defrost"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: two defrosts\", \"actual\": [\"heat\", \"heat\", \"off\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"defrost\", \"defrost\"], \"expected\": [\"heat\", \"heat\", \"off\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\"], \"passed\": false}, {\"check\": \"regression: warm outdoor inhibits\", \"actual\": [\"heat\", \"heat\", \"defrost\", \"heat\", \"defrost\"], \"expected\": [\"heat\", \"heat\", \"defrost\", \"heat\", \"heat\"], \"passed\": false}, {\"check\": \"control: dry coil runtime\", \"actual\": [\"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\"], \"expected\": [\"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\"], \"passed\": true}, {\"check\": \"regression: exact termination temperature\", \"actual\": [\"defrost\", \"defrost\", \"heat\", \"defrost\", \"defrost\"], \"expected\": [\"defrost\", \"defrost\", \"heat\", \"off\", \"defrost\"], \"passed\": false}, {\"check\": \"control: scenario 1\", \"actual\": [\"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\", \"off\", \"off\", \"heat\", \"off\"], \"expected\": [\"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\", \"off\", \"off\", \"heat\", \"off\"], \"passed\": true}, {\"check\": \"regression: scenario 2\", \"actual\": [\"heat\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"off\"], \"expected\": [\"heat\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"off\"], \"passed\": true}, {\"check\": \"regression: scenario 3\", \"actual\": [\"heat\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\"], \"expected\": [\"heat\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\"], \"passed\": true}, {\"check\": \"regression: scenario 4\", \"actual\": [\"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"off\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\"], \"expected\": [\"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"off\", \"heat\", \"heat\", \"off\", \"heat\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.147,"exit_code":1,"observations":[{"actual":["heat","heat","off","defrost","defrost","defrost","heat","defrost","defrost","defrost","defrost","heat","defrost","defrost"],"check":"regression: two defrosts","expected":["heat","heat","off","defrost","defrost","defrost","heat","heat","heat","defrost","defrost","defrost","defrost","heat"],"passed":false},{"actual":["heat","heat","defrost","heat","defrost"],"check":"regression: warm outdoor inhibits","expected":["heat","heat","defrost","heat","heat"],"passed":false},{"actual":["heat","heat","heat","defrost","defrost"],"check":"control: dry coil runtime","expected":["heat","heat","heat","defrost","defrost"],"passed":true},{"actual":["defrost","defrost","heat","defrost","defrost"],"check":"regression: exact termination temperature","expected":["defrost","defrost","heat","off","defrost"],"passed":false},{"actual":["heat","heat","heat","heat","heat","heat","off","off","heat","heat","heat","heat","heat","heat","off","heat","off","off","heat","off"],"check":"control: scenario 1","expected":["heat","heat","heat","heat","heat","heat","off","off","heat","heat","heat","heat","heat","heat","off","heat","off","off","heat","off"],"passed":true},{"actual":["heat","off","heat","heat","heat","heat","heat","heat","heat","off","heat","defrost","defrost","defrost","heat","defrost","defrost"],"check":"regression: scenario 2","expected":["heat","off","heat","heat","heat","heat","heat","heat","heat","off","heat","defrost","defrost","defrost","heat","heat","off"],"passed":false},{"actual":["heat","heat","heat","heat","defrost","defrost","defrost","heat","defrost","defrost","defrost","heat"],"check":"regression: scenario 3","expected":["heat","heat","heat","heat","defrost","defrost","defrost","heat","heat","heat","off","heat"],"passed":false},{"actual":["heat","heat","heat","defrost","defrost","defrost","defrost","heat","defrost","defrost","defrost","defrost","heat","off","heat","defrost","defrost","defrost","defrost","heat"],"check":"regression: scenario 4","expected":["heat","heat","heat","defrost","defrost","defrost","defrost","heat","off","heat","heat","off","heat","off","heat","heat","heat","heat","defrost","defrost"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: two defrosts\", \"actual\": [\"heat\", \"heat\", \"off\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"defrost\", \"defrost\"], \"expected\": [\"heat\", \"heat\", \"off\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\"], \"passed\": false}, {\"check\": \"regression: warm outdoor inhibits\", \"actual\": [\"heat\", \"heat\", \"defrost\", \"heat\", \"defrost\"], \"expected\": [\"heat\", \"heat\", \"defrost\", \"heat\", \"heat\"], \"passed\": false}, {\"check\": \"control: dry coil runtime\", \"actual\": [\"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\"], \"expected\": [\"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\"], \"passed\": true}, {\"check\": \"regression: exact termination temperature\", \"actual\": [\"defrost\", \"defrost\", \"heat\", \"defrost\", \"defrost\"], \"expected\": [\"defrost\", \"defrost\", \"heat\", \"off\", \"defrost\"], \"passed\": false}, {\"check\": \"control: scenario 1\", \"actual\": [\"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\", \"off\", \"off\", \"heat\", \"off\"], \"expected\": [\"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\", \"off\", \"off\", \"heat\", \"off\"], \"passed\": true}, {\"check\": \"regression: scenario 2\", \"actual\": [\"heat\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"defrost\", \"defrost\"], \"expected\": [\"heat\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"off\"], \"passed\": false}, {\"check\": \"regression: scenario 3\", \"actual\": [\"heat\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\"], \"expected\": [\"heat\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\"], \"passed\": false}, {\"check\": \"regression: scenario 4\", \"actual\": [\"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"off\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\"], \"expected\": [\"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"off\", \"heat\", \"heat\", \"off\", \"heat\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\"], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.178,"exit_code":0,"observations":[{"actual":["heat","heat","off","defrost","defrost","defrost","heat","heat","heat","defrost","defrost","defrost","defrost","heat"],"check":"regression: two defrosts","expected":["heat","heat","off","defrost","defrost","defrost","heat","heat","heat","defrost","defrost","defrost","defrost","heat"],"passed":true},{"actual":["heat","heat","defrost","heat","heat"],"check":"regression: warm outdoor inhibits","expected":["heat","heat","defrost","heat","heat"],"passed":true},{"actual":["heat","heat","heat","defrost","defrost"],"check":"control: dry coil runtime","expected":["heat","heat","heat","defrost","defrost"],"passed":true},{"actual":["defrost","defrost","heat","off","defrost"],"check":"regression: exact termination temperature","expected":["defrost","defrost","heat","off","defrost"],"passed":true},{"actual":["heat","heat","heat","heat","heat","heat","off","off","heat","heat","heat","heat","heat","heat","off","heat","off","off","heat","off"],"check":"control: scenario 1","expected":["heat","heat","heat","heat","heat","heat","off","off","heat","heat","heat","heat","heat","heat","off","heat","off","off","heat","off"],"passed":true},{"actual":["heat","off","heat","heat","heat","heat","heat","heat","heat","off","heat","defrost","defrost","defrost","heat","heat","off"],"check":"regression: scenario 2","expected":["heat","off","heat","heat","heat","heat","heat","heat","heat","off","heat","defrost","defrost","defrost","heat","heat","off"],"passed":true},{"actual":["heat","heat","heat","heat","defrost","defrost","defrost","heat","heat","heat","off","heat"],"check":"regression: scenario 3","expected":["heat","heat","heat","heat","defrost","defrost","defrost","heat","heat","heat","off","heat"],"passed":true},{"actual":["heat","heat","heat","defrost","defrost","defrost","defrost","heat","off","heat","heat","off","heat","off","heat","heat","heat","heat","defrost","defrost"],"check":"regression: scenario 4","expected":["heat","heat","heat","defrost","defrost","defrost","defrost","heat","off","heat","heat","off","heat","off","heat","heat","heat","heat","defrost","defrost"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: two defrosts\", \"actual\": [\"heat\", \"heat\", \"off\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\"], \"expected\": [\"heat\", \"heat\", \"off\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\"], \"passed\": true}, {\"check\": \"regression: warm outdoor inhibits\", \"actual\": [\"heat\", \"heat\", \"defrost\", \"heat\", \"heat\"], \"expected\": [\"heat\", \"heat\", \"defrost\", \"heat\", \"heat\"], \"passed\": true}, {\"check\": \"control: dry coil runtime\", \"actual\": [\"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\"], \"expected\": [\"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\"], \"passed\": true}, {\"check\": \"regression: exact termination temperature\", \"actual\": [\"defrost\", \"defrost\", \"heat\", \"off\", \"defrost\"], \"expected\": [\"defrost\", \"defrost\", \"heat\", \"off\", \"defrost\"], \"passed\": true}, {\"check\": \"control: scenario 1\", \"actual\": [\"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\", \"off\", \"off\", \"heat\", \"off\"], \"expected\": [\"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\", \"off\", \"off\", \"heat\", \"off\"], \"passed\": true}, {\"check\": \"regression: scenario 2\", \"actual\": [\"heat\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"off\"], \"expected\": [\"heat\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"off\"], \"passed\": true}, {\"check\": \"regression: scenario 3\", \"actual\": [\"heat\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\"], \"expected\": [\"heat\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"heat\", \"heat\", \"off\", \"heat\"], \"passed\": true}, {\"check\": \"regression: scenario 4\", \"actual\": [\"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"off\", \"heat\", \"heat\", \"off\", \"heat\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\"], \"expected\": [\"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\", \"defrost\", \"defrost\", \"heat\", \"off\", \"heat\", \"heat\", \"off\", \"heat\", \"off\", \"heat\", \"heat\", \"heat\", \"heat\", \"defrost\", \"defrost\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}