{"abstract":"Dehumidification cycles on and off around rh_sp + 5 and never pulls humidity down to 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":"Requiring RH strictly below rh_sp keeps overcooling one sample too long.","family":"w2-hvac-thermostat-control-humidity-overcool-frost-dehumidify-release","id":"FA-92596","implementations":{"attempt":{"sha256":"a895d013b9898df6d63aaf767a589191b28d12faf118f0cc1922f8252f4e0ba6","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: 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: scenario 52',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 50},\n    [[742, 60, 46],\n     [749, 57, 40],\n     [738, 52, 29],\n     [742, 55, 32],\n     [736, 50, 28],\n     [747, 52, 16],\n     [748, 51, 17],\n     [758, 56, 29],\n     [763, 59, 33],\n     [774, 56, 21],\n     [776, 55, 14],\n     [778, 55, 18],\n     [771, 53, 27],\n     [783, 51, 23]]],\n   [[True, 720, False],\n    [True, 720, False],\n    [False, 740, False],\n    [True, 725, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 725, False],\n    [True, 725, False],\n    [True, 735, False],\n    [True, 745, False]]],\n  ['control: 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: 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: 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  ['control: 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    [[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  ['control: 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 [['regression: 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  ['regression: scenario 15',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 40},\n    [[744, 62, 26],\n     [743, 65, 35],\n     [741, 60, 47],\n     [753, 57, 53],\n     [760, 51, 55],\n     [760, 51, 47],\n     [765, 50, 45],\n     [768, 52, 53],\n     [767, 56, 63],\n     [769, 52, 66],\n     [772, 51, 67],\n     [771, 53, 63],\n     [770, 47, 74],\n     [762, 51, 66]]],\n   [[True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 745, False],\n    [True, 745, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 730, False],\n    [True, 740, False],\n    [True, 745, False],\n    [True, 735, False],\n    [True, 750, False],\n    [True, 750, False]]],\n  ['control: 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: 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  ['control: 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: 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  ['control: 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 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 [['regression: scenario 6',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 35},\n    [[761, 55, 45],\n     [751, 61, 36],\n     [763, 61, 26],\n     [766, 62, 24],\n     [770, 64, 24],\n     [763, 60, 36],\n     [775, 60, 31],\n     [777, 55, 33],\n     [774, 53, 39],\n     [786, 52, 45],\n     [780, 55, 49]]],\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, 730, False],\n    [True, 730, False],\n    [True, 735, False],\n    [True, 740, False],\n    [True, 730, False]]],\n  ['regression: 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  ['control: 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: 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: 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  ['control: 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': 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  ['control: 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 [['regression: scenario 28',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[759, 56, 52],\n     [769, 60, 63],\n     [759, 57, 75],\n     [770, 55, 70],\n     [767, 56, 82],\n     [768, 56, 70],\n     [767, 56, 67],\n     [757, 52, 61],\n     [745, 49, 68],\n     [735, 43, 67],\n     [726, 44, 78],\n     [721, 46, 78],\n     [715, 52, 75]]],\n   [[True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 725, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 740, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: 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  ['control: 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: 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: 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  ['control: 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': 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  ['control: 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 16',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[752, 42, -13],\n     [740, 38, -2],\n     [734, 33, -5],\n     [734, 39, -6],\n     [732, 38, 3],\n     [733, 33, 3],\n     [729, 35, 7],\n     [729, 30, 12],\n     [724, 36, 13],\n     [718, 39, 8],\n     [719, 45, 18],\n     [729, 51, 20],\n     [739, 57, 17],\n     [739, 55, 16]]],\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, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 730, False],\n    [False, 730, False]]],\n  ['regression: 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  ['control: 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: 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: 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  ['control: 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': 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  ['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":"c7c3946f23f8918e5c4f48ed5decf338bfa7bd727f60a900399b3c4f20c3d5f6","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'] + 5:\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: 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: scenario 52',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 50},\n    [[742, 60, 46],\n     [749, 57, 40],\n     [738, 52, 29],\n     [742, 55, 32],\n     [736, 50, 28],\n     [747, 52, 16],\n     [748, 51, 17],\n     [758, 56, 29],\n     [763, 59, 33],\n     [774, 56, 21],\n     [776, 55, 14],\n     [778, 55, 18],\n     [771, 53, 27],\n     [783, 51, 23]]],\n   [[True, 720, False],\n    [True, 720, False],\n    [False, 740, False],\n    [True, 725, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 725, False],\n    [True, 725, False],\n    [True, 735, False],\n    [True, 745, False]]],\n  ['control: 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: 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: 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  ['control: 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    [[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  ['control: 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 [['regression: 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  ['regression: scenario 15',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 40},\n    [[744, 62, 26],\n     [743, 65, 35],\n     [741, 60, 47],\n     [753, 57, 53],\n     [760, 51, 55],\n     [760, 51, 47],\n     [765, 50, 45],\n     [768, 52, 53],\n     [767, 56, 63],\n     [769, 52, 66],\n     [772, 51, 67],\n     [771, 53, 63],\n     [770, 47, 74],\n     [762, 51, 66]]],\n   [[True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 745, False],\n    [True, 745, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 730, False],\n    [True, 740, False],\n    [True, 745, False],\n    [True, 735, False],\n    [True, 750, False],\n    [True, 750, False]]],\n  ['control: 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: 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  ['control: 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: 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  ['control: 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 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 [['regression: scenario 6',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 35},\n    [[761, 55, 45],\n     [751, 61, 36],\n     [763, 61, 26],\n     [766, 62, 24],\n     [770, 64, 24],\n     [763, 60, 36],\n     [775, 60, 31],\n     [777, 55, 33],\n     [774, 53, 39],\n     [786, 52, 45],\n     [780, 55, 49]]],\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, 730, False],\n    [True, 730, False],\n    [True, 735, False],\n    [True, 740, False],\n    [True, 730, False]]],\n  ['regression: 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  ['control: 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: 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: 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  ['control: 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': 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  ['control: 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 [['regression: scenario 28',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[759, 56, 52],\n     [769, 60, 63],\n     [759, 57, 75],\n     [770, 55, 70],\n     [767, 56, 82],\n     [768, 56, 70],\n     [767, 56, 67],\n     [757, 52, 61],\n     [745, 49, 68],\n     [735, 43, 67],\n     [726, 44, 78],\n     [721, 46, 78],\n     [715, 52, 75]]],\n   [[True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 725, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 740, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: 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  ['control: 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: 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: 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  ['control: 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': 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  ['control: 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 16',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[752, 42, -13],\n     [740, 38, -2],\n     [734, 33, -5],\n     [734, 39, -6],\n     [732, 38, 3],\n     [733, 33, 3],\n     [729, 35, 7],\n     [729, 30, 12],\n     [724, 36, 13],\n     [718, 39, 8],\n     [719, 45, 18],\n     [729, 51, 20],\n     [739, 57, 17],\n     [739, 55, 16]]],\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, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 730, False],\n    [False, 730, False]]],\n  ['regression: 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  ['control: 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: 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: 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  ['control: 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': 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  ['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":"6231243f0599302441bce1b662b59ec72b43fe488490593a61c2f508a7b2ad2d","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: 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: scenario 52',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 50},\n    [[742, 60, 46],\n     [749, 57, 40],\n     [738, 52, 29],\n     [742, 55, 32],\n     [736, 50, 28],\n     [747, 52, 16],\n     [748, 51, 17],\n     [758, 56, 29],\n     [763, 59, 33],\n     [774, 56, 21],\n     [776, 55, 14],\n     [778, 55, 18],\n     [771, 53, 27],\n     [783, 51, 23]]],\n   [[True, 720, False],\n    [True, 720, False],\n    [False, 740, False],\n    [True, 725, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 725, False],\n    [True, 725, False],\n    [True, 735, False],\n    [True, 745, False]]],\n  ['control: 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: 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: 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  ['control: 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    [[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  ['control: 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 [['regression: 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  ['regression: scenario 15',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 40},\n    [[744, 62, 26],\n     [743, 65, 35],\n     [741, 60, 47],\n     [753, 57, 53],\n     [760, 51, 55],\n     [760, 51, 47],\n     [765, 50, 45],\n     [768, 52, 53],\n     [767, 56, 63],\n     [769, 52, 66],\n     [772, 51, 67],\n     [771, 53, 63],\n     [770, 47, 74],\n     [762, 51, 66]]],\n   [[True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 730, False],\n    [True, 745, False],\n    [True, 745, False],\n    [True, 750, False],\n    [True, 750, False],\n    [True, 730, False],\n    [True, 740, False],\n    [True, 745, False],\n    [True, 735, False],\n    [True, 750, False],\n    [True, 750, False]]],\n  ['control: 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: 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  ['control: 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: 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  ['control: 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 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 [['regression: scenario 6',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 35},\n    [[761, 55, 45],\n     [751, 61, 36],\n     [763, 61, 26],\n     [766, 62, 24],\n     [770, 64, 24],\n     [763, 60, 36],\n     [775, 60, 31],\n     [777, 55, 33],\n     [774, 53, 39],\n     [786, 52, 45],\n     [780, 55, 49]]],\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, 730, False],\n    [True, 730, False],\n    [True, 735, False],\n    [True, 740, False],\n    [True, 730, False]]],\n  ['regression: 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  ['control: 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: 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: 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  ['control: 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': 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  ['control: 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 [['regression: scenario 28',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 30, 'hum_sp': 40},\n    [[759, 56, 52],\n     [769, 60, 63],\n     [759, 57, 75],\n     [770, 55, 70],\n     [767, 56, 82],\n     [768, 56, 70],\n     [767, 56, 67],\n     [757, 52, 61],\n     [745, 49, 68],\n     [735, 43, 67],\n     [726, 44, 78],\n     [721, 46, 78],\n     [715, 52, 75]]],\n   [[True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 725, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 720, False],\n    [True, 740, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False]]],\n  ['regression: 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  ['control: 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: 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: 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  ['control: 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': 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  ['control: 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 16',\n   [{'cool_sp': 750, 'rh_sp': 50, 'max_overcool': 20, 'hum_sp': 50},\n    [[752, 42, -13],\n     [740, 38, -2],\n     [734, 33, -5],\n     [734, 39, -6],\n     [732, 38, 3],\n     [733, 33, 3],\n     [729, 35, 7],\n     [729, 30, 12],\n     [724, 36, 13],\n     [718, 39, 8],\n     [719, 45, 18],\n     [729, 51, 20],\n     [739, 57, 17],\n     [739, 55, 16]]],\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, True],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 750, False],\n    [False, 730, False],\n    [False, 730, False]]],\n  ['regression: 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  ['control: 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: 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: 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  ['control: 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': 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  ['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-dehumidify-release","generated_at":"2026-09-29T14:51:47.168161+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":"Stop overcooling only once RH <= rh_sp.","root_cause":"The release test uses rh <= rh_sp + 5.","sha256":"acfb03a6938ef9837eae2e13a897545fa9e2baa578817cf68e591e1cbcb1d7a1","title":"Overcooling stops as soon as humidity falls back into the start band · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.7,"exit_code":1,"observations":[{"actual":[[true,720,false],[true,735,false],[true,740,false],[false,745,false],[false,750,false],[true,740,false],[true,740,false]],"check":"regression: 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":false},{"actual":[[true,720,false],[true,720,false],[false,740,false],[true,725,false],[false,750,false],[false,740,false],[false,745,false],[true,720,false],[true,720,false],[true,720,false],[true,725,false],[true,725,false],[true,735,false],[true,745,false]],"check":"regression: scenario 52","expected":[[true,720,false],[true,720,false],[false,740,false],[true,725,false],[false,750,false],[false,750,false],[false,750,false],[true,720,false],[true,720,false],[true,720,false],[true,725,false],[true,725,false],[true,735,false],[true,745,false]],"passed":false},{"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":"control: 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":"control: 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":[[false,750,true],[false,750,true],[false,750,false],[false,750,false]],"check":"control: 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":"control: 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":"control: 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":"control: 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}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: dehumidify band\", \"actual\": [[true, 720, false], [true, 735, false], [true, 740, false], [false, 745, false], [false, 750, false], [true, 740, false], [true, 740, false]], \"expected\": [[true, 720, false], [true, 735, false], [true, 740, false], [false, 745, false], [false, 750, false], [false, 750, false], [false, 750, false]], \"passed\": false}, {\"check\": \"regression: scenario 52\", \"actual\": [[true, 720, false], [true, 720, false], [false, 740, false], [true, 725, false], [false, 750, false], [false, 740, false], [false, 745, false], [true, 720, false], [true, 720, false], [true, 720, false], [true, 725, false], [true, 725, false], [true, 735, false], [true, 745, false]], \"expected\": [[true, 720, false], [true, 720, false], [false, 740, false], [true, 725, false], [false, 750, false], [false, 750, false], [false, 750, false], [true, 720, false], [true, 720, false], [true, 720, false], [true, 725, false], [true, 725, false], [true, 735, false], [true, 745, false]], \"passed\": false}, {\"check\": \"control: 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\": \"control: 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: 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\": \"control: 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\": \"control: 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\": \"control: 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}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.795,"exit_code":1,"observations":[{"actual":[[true,720,false],[true,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false]],"check":"regression: 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":false},{"actual":[[true,720,false],[true,720,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[false,750,false],[true,720,false],[true,720,false],[true,720,false],[true,750,false],[true,750,false],[true,750,false],[true,750,false]],"check":"regression: scenario 52","expected":[[true,720,false],[true,720,false],[false,740,false],[true,725,false],[false,750,false],[false,750,false],[false,750,false],[true,720,false],[true,720,false],[true,720,false],[true,725,false],[true,725,false],[true,735,false],[true,745,false]],"passed":false},{"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":"control: 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":"control: 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":[[false,750,true],[false,750,true],[false,750,false],[false,750,false]],"check":"control: 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":"control: 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":"control: 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":"control: 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}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: dehumidify band\", \"actual\": [[true, 720, false], [true, 750, false], [false, 750, false], [false, 750, 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\": false}, {\"check\": \"regression: scenario 52\", \"actual\": [[true, 720, false], [true, 720, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [false, 750, false], [true, 720, false], [true, 720, false], [true, 720, false], [true, 750, false], [true, 750, false], [true, 750, false], [true, 750, false]], \"expected\": [[true, 720, false], [true, 720, false], [false, 740, false], [true, 725, false], [false, 750, false], [false, 750, false], [false, 750, false], [true, 720, false], [true, 720, false], [true, 720, false], [true, 725, false], [true, 725, false], [true, 735, false], [true, 745, false]], \"passed\": false}, {\"check\": \"control: 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\": \"control: 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: 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\": \"control: 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\": \"control: 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\": \"control: 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}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.974,"exit_code":0,"observations":[{"actual":[[true,720,false],[true,735,false],[true,740,false],[false,745,false],[false,750,false],[false,750,false],[false,750,false]],"check":"regression: 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":[[true,720,false],[true,720,false],[false,740,false],[true,725,false],[false,750,false],[false,750,false],[false,750,false],[true,720,false],[true,720,false],[true,720,false],[true,725,false],[true,725,false],[true,735,false],[true,745,false]],"check":"regression: scenario 52","expected":[[true,720,false],[true,720,false],[false,740,false],[true,725,false],[false,750,false],[false,750,false],[false,750,false],[true,720,false],[true,720,false],[true,720,false],[true,725,false],[true,725,false],[true,735,false],[true,745,false]],"passed":true},{"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":"control: 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":"control: 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":[[false,750,true],[false,750,true],[false,750,false],[false,750,false]],"check":"control: 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":"control: 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":"control: 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":"control: 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}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: 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: scenario 52\", \"actual\": [[true, 720, false], [true, 720, false], [false, 740, false], [true, 725, false], [false, 750, false], [false, 750, false], [false, 750, false], [true, 720, false], [true, 720, false], [true, 720, false], [true, 725, false], [true, 725, false], [true, 735, false], [true, 745, false]], \"expected\": [[true, 720, false], [true, 720, false], [false, 740, false], [true, 725, false], [false, 750, false], [false, 750, false], [false, 750, false], [true, 720, false], [true, 720, false], [true, 720, false], [true, 725, false], [true, 725, false], [true, 735, false], [true, 745, false]], \"passed\": true}, {\"check\": \"control: 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\": \"control: 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: 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\": \"control: 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\": \"control: 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\": \"control: 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}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}