{"abstract":"Windows sweat and frost on cold days because the humidifier chases the user setpoint.","category":"HVAC thermostat control","checks":8,"contract":"Thermostat humidity functions per sample; samples are [temp tenths F, indoor RH %, outdoor whole F]. Dehumidify-by-overcooling turns on when RH > rh_sp + 5 and off when RH <= rh_sp; while on, the effective cooling setpoint is lowered by min(max_overcool, (RH - rh_sp) * 5) tenths. Cooling starts above effective + 1.0 F and ends at <= effective. Humidifier: allowed RH = 40 + floor((outdoor - 20) / 10) * 5 clamped to 15..45; target = min(hum_sp, allowed); it is off when outdoor >= 50, otherwise starts below target - 3 and stops at >= target. Return [cooling, effective_sp, humidifier].","evaluation_group":"w2-hvac-thermostat-control-humidity-overcool-frost","failed_approach":"Taking the higher of the two still exceeds the frost limit.","family":"w2-hvac-thermostat-control-humidity-overcool-frost-humidifier-target","id":"FA-92626","implementations":{"attempt":{"sha256":"9a2a5aed91a12b606c60ed566392b9542be2f51aec0d7a169933ec8cb32c6408","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(settings, samples):\n    dehum = False\n    cooling = False\n    humid = False\n    out = []\n    for temp, rh, outdoor in samples:\n        if dehum and rh <= settings['rh_sp']:\n            dehum = False\n        elif not dehum and rh > settings['rh_sp'] + 5:\n            dehum = True\n        eff = settings['cool_sp']\n        if dehum:\n            eff -= min(settings['max_overcool'], (rh - settings['rh_sp']) * 5)\n        if cooling and temp <= eff:\n            cooling = False\n        elif not cooling and temp > eff + 10:\n            cooling = True\n        allowed = max(15, min(45, 40 + (outdoor - 20) // 10 * 5))\n        target = max(settings['hum_sp'], allowed)\n        if outdoor >= 50:\n            humid = False\n        elif humid and rh >= target:\n            humid = False\n        elif not humid and rh < target - 3:\n            humid = True\n        out.append([cooling, eff, humid])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['regression: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[738, 41, 24],\n     [734, 38, 21],\n     [725, 33, 9],\n     [726, 34, -2],\n     [733, 39, 7],\n     [743, 36, 7],\n     [740, 38, 7],\n     [752, 32, 19],\n     [742, 34, 11],\n     [732, 32, 9]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[762, 20, -5],\n     [767, 18, -6],\n     [764, 13, -16],\n     [765, 11, -12],\n     [758, 10, -15],\n     [757, 16, -3],\n     [761, 16, 7],\n     [758, 10, 13],\n     [765, 10, 16],\n     [763, 13, 12],\n     [775, 16, 9],\n     [765, 18, 4],\n     [755, 20, 3],\n     [754, 25, -3]]],\n   [[True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, False]]],\n  ['control: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 45},\n    [[741, 31, 49],\n     [750, 36, 55],\n     [739, 36, 59],\n     [734, 34, 55],\n     [728, 33, 56],\n     [717, 35, 48],\n     [715, 34, 60],\n     [726, 38, 57],\n     [726, 39, 57],\n     [719, 34, 54],\n     [726, 39, 57],\n     [729, 41, 61],\n     [732, 39, 66],\n     [743, 40, 75]]],\n   [[False, 750, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]]],\n [['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['control: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[741, 58, -1],\n     [736, 54, -9],\n     [726, 56, 2],\n     [715, 54, 0],\n     [721, 55, 1],\n     [732, 51, -1],\n     [731, 51, -7],\n     [727, 55, -12],\n     [721, 57, -12]]],\n   [[True, 720, False],\n    [True, 730, False],\n    [True, 720, False],\n    [False, 730, False],\n    [False, 725, False],\n    [False, 745, False],\n    [False, 745, False],\n    [False, 725, False],\n    [False, 720, False]]],\n  ['control: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 40},\n    [[749, 37, 58],\n     [756, 33, 55],\n     [768, 38, 65],\n     [771, 41, 72],\n     [780, 47, 71],\n     [774, 50, 64],\n     [770, 54, 73],\n     [777, 59, 73],\n     [786, 63, 85],\n     [788, 59, 90],\n     [790, 61, 90],\n     [782, 58, 85],\n     [790, 53, 80],\n     [790, 48, 82]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 735, False],\n    [True, 750, False]]],\n  ['control: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 45},\n    [[757, 59, 32],\n     [758, 65, 22],\n     [769, 68, 15],\n     [759, 74, 20],\n     [747, 72, 31],\n     [739, 66, 32],\n     [736, 70, 38],\n     [744, 65, 29],\n     [745, 62, 40],\n     [753, 57, 46],\n     [759, 61, 35],\n     [749, 57, 29]]],\n   [[True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False]]]],\n [['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['regression: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 35},\n    [[760, 30, 52],\n     [750, 32, 60],\n     [748, 28, 48],\n     [744, 33, 44],\n     [754, 37, 54],\n     [748, 40, 55],\n     [758, 39, 61],\n     [760, 42, 61],\n     [754, 36, 49],\n     [742, 30, 44],\n     [731, 32, 54],\n     [739, 36, 48],\n     [733, 36, 54]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 45},\n    [[746, 32, -7],\n     [745, 28, -12],\n     [741, 24, -18],\n     [736, 26, -12],\n     [729, 31, 0],\n     [720, 32, 7],\n     [730, 30, 14],\n     [728, 28, 19],\n     [725, 23, 17],\n     [729, 20, 18],\n     [717, 24, 19],\n     [715, 19, 10],\n     [723, 14, 20],\n     [722, 10, 23]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True]]],\n  ['control: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 35},\n    [[757, 58, 62],\n     [767, 52, 71],\n     [773, 56, 59],\n     [776, 56, 64],\n     [765, 59, 59],\n     [759, 53, 53],\n     [771, 51, 47],\n     [775, 55, 38],\n     [773, 53, 28],\n     [777, 59, 17],\n     [785, 57, 9],\n     [777, 61, 4]]],\n   [[True, 730, False],\n    [True, 740, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 735, False],\n    [True, 745, False],\n    [True, 730, False],\n    [True, 735, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False]]]],\n [['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['regression: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[741, 41, 9],\n     [745, 42, 4],\n     [749, 41, 7],\n     [737, 37, 8],\n     [740, 34, 14],\n     [733, 38, 20],\n     [730, 44, 9],\n     [724, 38, 16],\n     [725, 32, 6],\n     [721, 27, -4]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[755, 29, 22],\n     [752, 27, 11],\n     [752, 25, 3],\n     [763, 20, -7],\n     [756, 25, -6],\n     [766, 23, -4],\n     [768, 25, 5],\n     [774, 26, 7],\n     [781, 22, -4]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [True, 750, True],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True]]],\n  ['regression: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[761, 42, -7],\n     [772, 41, 1],\n     [768, 39, 5],\n     [769, 39, -1],\n     [759, 38, 1],\n     [759, 43, -3],\n     [764, 37, -15],\n     [772, 40, -24],\n     [779, 41, -30],\n     [778, 45, -30],\n     [772, 46, -30],\n     [780, 40, -29],\n     [771, 43, -30],\n     [780, 40, -27]]],\n   [[True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False]]]],\n [['regression: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[758, 47, 40],\n     [762, 48, 47],\n     [771, 44, 41],\n     [782, 45, 36],\n     [790, 48, 36],\n     [787, 45, 25],\n     [790, 40, 20],\n     [790, 38, 12],\n     [790, 35, 17],\n     [787, 40, 13],\n     [780, 36, 2],\n     [774, 40, 1],\n     [786, 44, 1],\n     [778, 39, 11]]],\n   [[False, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False]]],\n  ['regression: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 35},\n    [[755, 53, 26],\n     [756, 54, 25],\n     [766, 54, 30],\n     [774, 48, 25],\n     [783, 43, 35],\n     [778, 37, 35],\n     [777, 33, 39],\n     [784, 35, 49],\n     [779, 31, 39],\n     [788, 27, 45],\n     [778, 31, 42],\n     [779, 31, 44],\n     [789, 36, 51]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, False]]],\n  ['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['control: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 45},\n    [[759, 30, 36],\n     [770, 33, 36],\n     [759, 34, 36],\n     [752, 33, 36],\n     [754, 27, 25],\n     [764, 25, 15],\n     [772, 25, 26],\n     [784, 19, 22],\n     [790, 21, 21]]],\n   [[False, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True]]]]]\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":"f1baab75fbf9bb14cb173ba35a014119a110433d34eeb53981837fdd8be7bbc6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(settings, samples):\n    dehum = False\n    cooling = False\n    humid = False\n    out = []\n    for temp, rh, outdoor in samples:\n        if dehum and rh <= settings['rh_sp']:\n            dehum = False\n        elif not dehum and rh > settings['rh_sp'] + 5:\n            dehum = True\n        eff = settings['cool_sp']\n        if dehum:\n            eff -= min(settings['max_overcool'], (rh - settings['rh_sp']) * 5)\n        if cooling and temp <= eff:\n            cooling = False\n        elif not cooling and temp > eff + 10:\n            cooling = True\n        allowed = max(15, min(45, 40 + (outdoor - 20) // 10 * 5))\n        target = settings['hum_sp']\n        if outdoor >= 50:\n            humid = False\n        elif humid and rh >= target:\n            humid = False\n        elif not humid and rh < target - 3:\n            humid = True\n        out.append([cooling, eff, humid])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['regression: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[738, 41, 24],\n     [734, 38, 21],\n     [725, 33, 9],\n     [726, 34, -2],\n     [733, 39, 7],\n     [743, 36, 7],\n     [740, 38, 7],\n     [752, 32, 19],\n     [742, 34, 11],\n     [732, 32, 9]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[762, 20, -5],\n     [767, 18, -6],\n     [764, 13, -16],\n     [765, 11, -12],\n     [758, 10, -15],\n     [757, 16, -3],\n     [761, 16, 7],\n     [758, 10, 13],\n     [765, 10, 16],\n     [763, 13, 12],\n     [775, 16, 9],\n     [765, 18, 4],\n     [755, 20, 3],\n     [754, 25, -3]]],\n   [[True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, False]]],\n  ['control: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 45},\n    [[741, 31, 49],\n     [750, 36, 55],\n     [739, 36, 59],\n     [734, 34, 55],\n     [728, 33, 56],\n     [717, 35, 48],\n     [715, 34, 60],\n     [726, 38, 57],\n     [726, 39, 57],\n     [719, 34, 54],\n     [726, 39, 57],\n     [729, 41, 61],\n     [732, 39, 66],\n     [743, 40, 75]]],\n   [[False, 750, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]]],\n [['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['control: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[741, 58, -1],\n     [736, 54, -9],\n     [726, 56, 2],\n     [715, 54, 0],\n     [721, 55, 1],\n     [732, 51, -1],\n     [731, 51, -7],\n     [727, 55, -12],\n     [721, 57, -12]]],\n   [[True, 720, False],\n    [True, 730, False],\n    [True, 720, False],\n    [False, 730, False],\n    [False, 725, False],\n    [False, 745, False],\n    [False, 745, False],\n    [False, 725, False],\n    [False, 720, False]]],\n  ['control: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 40},\n    [[749, 37, 58],\n     [756, 33, 55],\n     [768, 38, 65],\n     [771, 41, 72],\n     [780, 47, 71],\n     [774, 50, 64],\n     [770, 54, 73],\n     [777, 59, 73],\n     [786, 63, 85],\n     [788, 59, 90],\n     [790, 61, 90],\n     [782, 58, 85],\n     [790, 53, 80],\n     [790, 48, 82]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 735, False],\n    [True, 750, False]]],\n  ['control: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 45},\n    [[757, 59, 32],\n     [758, 65, 22],\n     [769, 68, 15],\n     [759, 74, 20],\n     [747, 72, 31],\n     [739, 66, 32],\n     [736, 70, 38],\n     [744, 65, 29],\n     [745, 62, 40],\n     [753, 57, 46],\n     [759, 61, 35],\n     [749, 57, 29]]],\n   [[True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False]]]],\n [['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['regression: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 35},\n    [[760, 30, 52],\n     [750, 32, 60],\n     [748, 28, 48],\n     [744, 33, 44],\n     [754, 37, 54],\n     [748, 40, 55],\n     [758, 39, 61],\n     [760, 42, 61],\n     [754, 36, 49],\n     [742, 30, 44],\n     [731, 32, 54],\n     [739, 36, 48],\n     [733, 36, 54]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 45},\n    [[746, 32, -7],\n     [745, 28, -12],\n     [741, 24, -18],\n     [736, 26, -12],\n     [729, 31, 0],\n     [720, 32, 7],\n     [730, 30, 14],\n     [728, 28, 19],\n     [725, 23, 17],\n     [729, 20, 18],\n     [717, 24, 19],\n     [715, 19, 10],\n     [723, 14, 20],\n     [722, 10, 23]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True]]],\n  ['control: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 35},\n    [[757, 58, 62],\n     [767, 52, 71],\n     [773, 56, 59],\n     [776, 56, 64],\n     [765, 59, 59],\n     [759, 53, 53],\n     [771, 51, 47],\n     [775, 55, 38],\n     [773, 53, 28],\n     [777, 59, 17],\n     [785, 57, 9],\n     [777, 61, 4]]],\n   [[True, 730, False],\n    [True, 740, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 735, False],\n    [True, 745, False],\n    [True, 730, False],\n    [True, 735, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False]]]],\n [['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['regression: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[741, 41, 9],\n     [745, 42, 4],\n     [749, 41, 7],\n     [737, 37, 8],\n     [740, 34, 14],\n     [733, 38, 20],\n     [730, 44, 9],\n     [724, 38, 16],\n     [725, 32, 6],\n     [721, 27, -4]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[755, 29, 22],\n     [752, 27, 11],\n     [752, 25, 3],\n     [763, 20, -7],\n     [756, 25, -6],\n     [766, 23, -4],\n     [768, 25, 5],\n     [774, 26, 7],\n     [781, 22, -4]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [True, 750, True],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True]]],\n  ['regression: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[761, 42, -7],\n     [772, 41, 1],\n     [768, 39, 5],\n     [769, 39, -1],\n     [759, 38, 1],\n     [759, 43, -3],\n     [764, 37, -15],\n     [772, 40, -24],\n     [779, 41, -30],\n     [778, 45, -30],\n     [772, 46, -30],\n     [780, 40, -29],\n     [771, 43, -30],\n     [780, 40, -27]]],\n   [[True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False]]]],\n [['regression: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[758, 47, 40],\n     [762, 48, 47],\n     [771, 44, 41],\n     [782, 45, 36],\n     [790, 48, 36],\n     [787, 45, 25],\n     [790, 40, 20],\n     [790, 38, 12],\n     [790, 35, 17],\n     [787, 40, 13],\n     [780, 36, 2],\n     [774, 40, 1],\n     [786, 44, 1],\n     [778, 39, 11]]],\n   [[False, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False]]],\n  ['regression: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 35},\n    [[755, 53, 26],\n     [756, 54, 25],\n     [766, 54, 30],\n     [774, 48, 25],\n     [783, 43, 35],\n     [778, 37, 35],\n     [777, 33, 39],\n     [784, 35, 49],\n     [779, 31, 39],\n     [788, 27, 45],\n     [778, 31, 42],\n     [779, 31, 44],\n     [789, 36, 51]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, False]]],\n  ['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['control: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 45},\n    [[759, 30, 36],\n     [770, 33, 36],\n     [759, 34, 36],\n     [752, 33, 36],\n     [754, 27, 25],\n     [764, 25, 15],\n     [772, 25, 26],\n     [784, 19, 22],\n     [790, 21, 21]]],\n   [[False, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True]]]]]\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":"db9a62a6354bbbd93bcec08456132d4f7dbac966be93ce599ee450bc2f70bb8a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(settings, samples):\n    dehum = False\n    cooling = False\n    humid = False\n    out = []\n    for temp, rh, outdoor in samples:\n        if dehum and rh <= settings['rh_sp']:\n            dehum = False\n        elif not dehum and rh > settings['rh_sp'] + 5:\n            dehum = True\n        eff = settings['cool_sp']\n        if dehum:\n            eff -= min(settings['max_overcool'], (rh - settings['rh_sp']) * 5)\n        if cooling and temp <= eff:\n            cooling = False\n        elif not cooling and temp > eff + 10:\n            cooling = True\n        allowed = max(15, min(45, 40 + (outdoor - 20) // 10 * 5))\n        target = min(settings['hum_sp'], allowed)\n        if outdoor >= 50:\n            humid = False\n        elif humid and rh >= target:\n            humid = False\n        elif not humid and rh < target - 3:\n            humid = True\n        out.append([cooling, eff, humid])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['regression: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[738, 41, 24],\n     [734, 38, 21],\n     [725, 33, 9],\n     [726, 34, -2],\n     [733, 39, 7],\n     [743, 36, 7],\n     [740, 38, 7],\n     [752, 32, 19],\n     [742, 34, 11],\n     [732, 32, 9]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[762, 20, -5],\n     [767, 18, -6],\n     [764, 13, -16],\n     [765, 11, -12],\n     [758, 10, -15],\n     [757, 16, -3],\n     [761, 16, 7],\n     [758, 10, 13],\n     [765, 10, 16],\n     [763, 13, 12],\n     [775, 16, 9],\n     [765, 18, 4],\n     [755, 20, 3],\n     [754, 25, -3]]],\n   [[True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, False]]],\n  ['control: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 45},\n    [[741, 31, 49],\n     [750, 36, 55],\n     [739, 36, 59],\n     [734, 34, 55],\n     [728, 33, 56],\n     [717, 35, 48],\n     [715, 34, 60],\n     [726, 38, 57],\n     [726, 39, 57],\n     [719, 34, 54],\n     [726, 39, 57],\n     [729, 41, 61],\n     [732, 39, 66],\n     [743, 40, 75]]],\n   [[False, 750, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]]],\n [['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['control: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[741, 58, -1],\n     [736, 54, -9],\n     [726, 56, 2],\n     [715, 54, 0],\n     [721, 55, 1],\n     [732, 51, -1],\n     [731, 51, -7],\n     [727, 55, -12],\n     [721, 57, -12]]],\n   [[True, 720, False],\n    [True, 730, False],\n    [True, 720, False],\n    [False, 730, False],\n    [False, 725, False],\n    [False, 745, False],\n    [False, 745, False],\n    [False, 725, False],\n    [False, 720, False]]],\n  ['control: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 40},\n    [[749, 37, 58],\n     [756, 33, 55],\n     [768, 38, 65],\n     [771, 41, 72],\n     [780, 47, 71],\n     [774, 50, 64],\n     [770, 54, 73],\n     [777, 59, 73],\n     [786, 63, 85],\n     [788, 59, 90],\n     [790, 61, 90],\n     [782, 58, 85],\n     [790, 53, 80],\n     [790, 48, 82]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 735, False],\n    [True, 750, False]]],\n  ['control: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 45},\n    [[757, 59, 32],\n     [758, 65, 22],\n     [769, 68, 15],\n     [759, 74, 20],\n     [747, 72, 31],\n     [739, 66, 32],\n     [736, 70, 38],\n     [744, 65, 29],\n     [745, 62, 40],\n     [753, 57, 46],\n     [759, 61, 35],\n     [749, 57, 29]]],\n   [[True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False]]]],\n [['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['regression: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 35},\n    [[760, 30, 52],\n     [750, 32, 60],\n     [748, 28, 48],\n     [744, 33, 44],\n     [754, 37, 54],\n     [748, 40, 55],\n     [758, 39, 61],\n     [760, 42, 61],\n     [754, 36, 49],\n     [742, 30, 44],\n     [731, 32, 54],\n     [739, 36, 48],\n     [733, 36, 54]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 45},\n    [[746, 32, -7],\n     [745, 28, -12],\n     [741, 24, -18],\n     [736, 26, -12],\n     [729, 31, 0],\n     [720, 32, 7],\n     [730, 30, 14],\n     [728, 28, 19],\n     [725, 23, 17],\n     [729, 20, 18],\n     [717, 24, 19],\n     [715, 19, 10],\n     [723, 14, 20],\n     [722, 10, 23]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, True]]],\n  ['control: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 35},\n    [[757, 58, 62],\n     [767, 52, 71],\n     [773, 56, 59],\n     [776, 56, 64],\n     [765, 59, 59],\n     [759, 53, 53],\n     [771, 51, 47],\n     [775, 55, 38],\n     [773, 53, 28],\n     [777, 59, 17],\n     [785, 57, 9],\n     [777, 61, 4]]],\n   [[True, 730, False],\n    [True, 740, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 735, False],\n    [True, 745, False],\n    [True, 730, False],\n    [True, 735, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False]]]],\n [['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['regression: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[741, 41, 9],\n     [745, 42, 4],\n     [749, 41, 7],\n     [737, 37, 8],\n     [740, 34, 14],\n     [733, 38, 20],\n     [730, 44, 9],\n     [724, 38, 16],\n     [725, 32, 6],\n     [721, 27, -4]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[755, 29, 22],\n     [752, 27, 11],\n     [752, 25, 3],\n     [763, 20, -7],\n     [756, 25, -6],\n     [766, 23, -4],\n     [768, 25, 5],\n     [774, 26, 7],\n     [781, 22, -4]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [True, 750, True],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True]]],\n  ['regression: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[761, 42, -7],\n     [772, 41, 1],\n     [768, 39, 5],\n     [769, 39, -1],\n     [759, 38, 1],\n     [759, 43, -3],\n     [764, 37, -15],\n     [772, 40, -24],\n     [779, 41, -30],\n     [778, 45, -30],\n     [772, 46, -30],\n     [780, 40, -29],\n     [771, 43, -30],\n     [780, 40, -27]]],\n   [[True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False]]]],\n [['regression: scenario 3',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[758, 47, 40],\n     [762, 48, 47],\n     [771, 44, 41],\n     [782, 45, 36],\n     [790, 48, 36],\n     [787, 45, 25],\n     [790, 40, 20],\n     [790, 38, 12],\n     [790, 35, 17],\n     [787, 40, 13],\n     [780, 36, 2],\n     [774, 40, 1],\n     [786, 44, 1],\n     [778, 39, 11]]],\n   [[False, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False]]],\n  ['regression: scenario 1',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 35},\n    [[755, 53, 26],\n     [756, 54, 25],\n     [766, 54, 30],\n     [774, 48, 25],\n     [783, 43, 35],\n     [778, 37, 35],\n     [777, 33, 39],\n     [784, 35, 49],\n     [779, 31, 39],\n     [788, 27, 45],\n     [778, 31, 42],\n     [779, 31, 44],\n     [789, 36, 51]]],\n   [[False, 750, False],\n    [False, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, False]]],\n  ['regression: summer then winter',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[765, 52, 80],\n     [762, 58, 80],\n     [745, 58, 80],\n     [738, 50, 80],\n     [700, 25, 10],\n     [700, 29, 10],\n     [700, 36, 10],\n     [700, 10, -15]]],\n   [[True, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True]]],\n  ['control: dehumidify band',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[760, 56, 80],\n     [752, 53, 80],\n     [745, 52, 80],\n     [741, 51, 80],\n     [741, 50, 80],\n     [752, 52, 80],\n     [749, 52, 80]]],\n   [[True, 720, False],\n    [True, 735, False],\n    [True, 740, False],\n    [False, 745, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: frost limit steps',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 30, 25], [700, 33, 29], [700, 36, 30], [700, 36, -5], [700, 10, -40], [700, 30, 55]]],\n   [[False, 750, True],\n    [False, 750, True],\n    [False, 750, True],\n    [False, 750, False],\n    [False, 750, True],\n    [False, 750, False]]],\n  ['regression: mild dry day',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[700, 40, 45], [700, 43, 45], [700, 46, 45], [700, 48, 45]]],\n   [[False, 750, True], [False, 750, True], [False, 750, False], [False, 750, False]]],\n  ['regression: cold snap',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 45},\n    [[700, 12, -60], [700, 14, -60], [700, 16, -60], [700, 20, 50], [700, 20, 49]]],\n   [[False, 750, False], [False, 750, False], [False, 750, False], [False, 750, False], [False, 750, True]]],\n  ['control: scenario 2',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 45},\n    [[759, 30, 36],\n     [770, 33, 36],\n     [759, 34, 36],\n     [752, 33, 36],\n     [754, 27, 25],\n     [764, 25, 15],\n     [772, 25, 26],\n     [784, 19, 22],\n     [790, 21, 21]]],\n   [[False, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True],\n    [True, 750, True]]]]]\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-humidity-overcool-frost-humidifier-target","generated_at":"2026-09-29T14:51:47.624999+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":"Use the lower of the user setpoint and the frost-protection limit.","root_cause":"The target is the user setpoint alone.","sha256":"0dda3e2d40dc65c7b3348e182fbc6321e2045a8e77a2af3e9513bc2e357de97b","title":"Humidifier ignores the frost-protection limit · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.633,"exit_code":1,"observations":[{"actual":[[true,750,false],[true,720,false],[true,720,false],[false,750,false],[false,750,true],[false,750,true],[false,750,true],[false,750,true]],"check":"regression: summer then winter","expected":[[true,750,false],[true,720,false],[true,720,false],[false,750,false],[false,750,true],[false,750,true],[false,750,false],[false,750,true]],"passed":false},{"actual":[[false,750,true],[false,750,true],[false,750,true],[false,750,true],[false,750,true],[false,750,false]],"check":"regression: frost limit steps","expected":[[false,750,true],[false,750,true],[false,750,true],[false,750,false],[false,750,true],[false,750,false]],"passed":false},{"actual":[[true,720,false],[true,735,false],[true,740,false],[false,745,false],[false,750,false],[false,750,false],[false,750,false]],"check":"control: dehumidify band","expected":[[true,720,false],[true,735,false],[true,740,false],[false,745,false],[false,750,false],[false,750,false],[false,750,false]],"passed":true},{"actual":[[false,750,true],[false,750,true],[false,750,true],[false,750,true]],"check":"regression: mild dry day","expected":[[false,750,true],[false,750,true],[false,750,false],[false,750,false]],"passed":false},{"actual":[[false,750,true],[false,750,true],[false,750,true],[false,750,false],[false,750,true]],"check":"regression: cold snap","expected":[[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,true]],"passed":false},{"actual":[[false,750,false],[false,750,false],[false,750,true],[false,750,true],[false,750,true],[false,750,true],[false,750,true],[false,750,true],[false,750,true],[false,750,true]],"check":"regression: scenario 1","expected":[[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false]],"passed":false},{"actual":[[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true]],"check":"regression: scenario 2","expected":[[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,false]],"passed":false},{"actual":[[false,750,true],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,true],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false]],"check":"control: scenario 3","expected":[[false,750,true],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,true],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: summer then winter\", \"actual\": [[true, 750, false], [true, 720, false], [true, 720, false], [false, 750, false], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true]], \"expected\": [[true, 750, false], [true, 720, false], [true, 720, false], [false, 750, false], [false, 750, true], [false, 750, true], [false, 750, false], [false, 750, true]], \"passed\": false}, {\"check\": \"regression: frost limit steps\", \"actual\": [[false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, false]], \"expected\": [[false, 750, true], [false, 750, true], [false, 750, true], [false, 750, false], [false, 750, true], [false, 750, false]], \"passed\": false}, {\"check\": \"control: dehumidify band\", \"actual\": [[true, 720, false], [true, 735, false], [true, 740, false], [false, 745, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"expected\": [[true, 720, false], [true, 735, false], [true, 740, false], [false, 745, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"passed\": true}, {\"check\": \"regression: mild dry day\", \"actual\": [[false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true]], \"expected\": [[false, 750, true], [false, 750, true], [false, 750, false], [false, 750, false]], \"passed\": false}, {\"check\": \"regression: cold snap\", \"actual\": [[false, 750, true], [false, 750, true], [false, 750, true], [false, 750, false], [false, 750, true]], \"expected\": [[false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, true]], \"passed\": false}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, 750, false], [false, 750, false], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true]], \"expected\": [[false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"passed\": false}, {\"check\": \"regression: scenario 2\", \"actual\": [[true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true]], \"expected\": [[true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, false]], \"passed\": false}, {\"check\": \"control: scenario 3\", \"actual\": [[false, 750, true], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, true], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"expected\": [[false, 750, true], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, true], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":46.332,"exit_code":1,"observations":[{"actual":[[true,750,false],[true,720,false],[true,720,false],[false,750,false],[false,750,true],[false,750,true],[false,750,true],[false,750,true]],"check":"regression: summer then winter","expected":[[true,750,false],[true,720,false],[true,720,false],[false,750,false],[false,750,true],[false,750,true],[false,750,false],[false,750,true]],"passed":false},{"actual":[[false,750,true],[false,750,true],[false,750,true],[false,750,true],[false,750,true],[false,750,false]],"check":"regression: frost limit steps","expected":[[false,750,true],[false,750,true],[false,750,true],[false,750,false],[false,750,true],[false,750,false]],"passed":false},{"actual":[[true,720,false],[true,735,false],[true,740,false],[false,745,false],[false,750,false],[false,750,false],[false,750,false]],"check":"control: dehumidify band","expected":[[true,720,false],[true,735,false],[true,740,false],[false,745,false],[false,750,false],[false,750,false],[false,750,false]],"passed":true},{"actual":[[false,750,true],[false,750,true],[false,750,true],[false,750,true]],"check":"regression: mild dry day","expected":[[false,750,true],[false,750,true],[false,750,false],[false,750,false]],"passed":false},{"actual":[[false,750,true],[false,750,true],[false,750,true],[false,750,false],[false,750,true]],"check":"regression: cold snap","expected":[[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,true]],"passed":false},{"actual":[[false,750,false],[false,750,false],[false,750,true],[false,750,true],[false,750,true],[false,750,true],[false,750,true],[false,750,true],[false,750,true],[false,750,true]],"check":"regression: scenario 1","expected":[[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false]],"passed":false},{"actual":[[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true]],"check":"regression: scenario 2","expected":[[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,false]],"passed":false},{"actual":[[false,750,true],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,true],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false]],"check":"control: scenario 3","expected":[[false,750,true],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,true],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: summer then winter\", \"actual\": [[true, 750, false], [true, 720, false], [true, 720, false], [false, 750, false], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true]], \"expected\": [[true, 750, false], [true, 720, false], [true, 720, false], [false, 750, false], [false, 750, true], [false, 750, true], [false, 750, false], [false, 750, true]], \"passed\": false}, {\"check\": \"regression: frost limit steps\", \"actual\": [[false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, false]], \"expected\": [[false, 750, true], [false, 750, true], [false, 750, true], [false, 750, false], [false, 750, true], [false, 750, false]], \"passed\": false}, {\"check\": \"control: dehumidify band\", \"actual\": [[true, 720, false], [true, 735, false], [true, 740, false], [false, 745, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"expected\": [[true, 720, false], [true, 735, false], [true, 740, false], [false, 745, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"passed\": true}, {\"check\": \"regression: mild dry day\", \"actual\": [[false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true]], \"expected\": [[false, 750, true], [false, 750, true], [false, 750, false], [false, 750, false]], \"passed\": false}, {\"check\": \"regression: cold snap\", \"actual\": [[false, 750, true], [false, 750, true], [false, 750, true], [false, 750, false], [false, 750, true]], \"expected\": [[false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, true]], \"passed\": false}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, 750, false], [false, 750, false], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true], [false, 750, true]], \"expected\": [[false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"passed\": false}, {\"check\": \"regression: scenario 2\", \"actual\": [[true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true]], \"expected\": [[true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, false]], \"passed\": false}, {\"check\": \"control: scenario 3\", \"actual\": [[false, 750, true], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, true], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"expected\": [[false, 750, true], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, true], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.101,"exit_code":0,"observations":[{"actual":[[true,750,false],[true,720,false],[true,720,false],[false,750,false],[false,750,true],[false,750,true],[false,750,false],[false,750,true]],"check":"regression: summer then winter","expected":[[true,750,false],[true,720,false],[true,720,false],[false,750,false],[false,750,true],[false,750,true],[false,750,false],[false,750,true]],"passed":true},{"actual":[[false,750,true],[false,750,true],[false,750,true],[false,750,false],[false,750,true],[false,750,false]],"check":"regression: frost limit steps","expected":[[false,750,true],[false,750,true],[false,750,true],[false,750,false],[false,750,true],[false,750,false]],"passed":true},{"actual":[[true,720,false],[true,735,false],[true,740,false],[false,745,false],[false,750,false],[false,750,false],[false,750,false]],"check":"control: dehumidify band","expected":[[true,720,false],[true,735,false],[true,740,false],[false,745,false],[false,750,false],[false,750,false],[false,750,false]],"passed":true},{"actual":[[false,750,true],[false,750,true],[false,750,false],[false,750,false]],"check":"regression: mild dry day","expected":[[false,750,true],[false,750,true],[false,750,false],[false,750,false]],"passed":true},{"actual":[[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,true]],"check":"regression: cold snap","expected":[[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,true]],"passed":true},{"actual":[[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false]],"check":"regression: scenario 1","expected":[[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false]],"passed":true},{"actual":[[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,false]],"check":"regression: scenario 2","expected":[[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,true],[true,750,false]],"passed":true},{"actual":[[false,750,true],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,true],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false]],"check":"control: scenario 3","expected":[[false,750,true],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,true],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: summer then winter\", \"actual\": [[true, 750, false], [true, 720, false], [true, 720, false], [false, 750, false], [false, 750, true], [false, 750, true], [false, 750, false], [false, 750, true]], \"expected\": [[true, 750, false], [true, 720, false], [true, 720, false], [false, 750, false], [false, 750, true], [false, 750, true], [false, 750, false], [false, 750, true]], \"passed\": true}, {\"check\": \"regression: frost limit steps\", \"actual\": [[false, 750, true], [false, 750, true], [false, 750, true], [false, 750, false], [false, 750, true], [false, 750, false]], \"expected\": [[false, 750, true], [false, 750, true], [false, 750, true], [false, 750, false], [false, 750, true], [false, 750, false]], \"passed\": true}, {\"check\": \"control: dehumidify band\", \"actual\": [[true, 720, false], [true, 735, false], [true, 740, false], [false, 745, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"expected\": [[true, 720, false], [true, 735, false], [true, 740, false], [false, 745, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"passed\": true}, {\"check\": \"regression: mild dry day\", \"actual\": [[false, 750, true], [false, 750, true], [false, 750, false], [false, 750, false]], \"expected\": [[false, 750, true], [false, 750, true], [false, 750, false], [false, 750, false]], \"passed\": true}, {\"check\": \"regression: cold snap\", \"actual\": [[false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, true]], \"expected\": [[false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, true]], \"passed\": true}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"expected\": [[false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"passed\": true}, {\"check\": \"regression: scenario 2\", \"actual\": [[true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, false]], \"expected\": [[true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, true], [true, 750, false]], \"passed\": true}, {\"check\": \"control: scenario 3\", \"actual\": [[false, 750, true], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, true], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"expected\": [[false, 750, true], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, true], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}