FAILURE MAP
← Case archive

FA-92571 / HVAC thermostat control / Open access

Heat post-purge runs even when the blower never started · case 01

A one-minute heat call is followed by three minutes of fan with a cold heat exchanger.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The heat off-delay is armed regardless of whether the fan came on.

THE FAILURE

The heat off-delay is armed regardless of whether the fan came on.

Unsuccessful approach: Arming it only after more than two heat minutes skips purge for a normal short call.

Case contract

Thermostat G (blower) output per minute; samples are the equipment call per minute (None, heat or cool). Cooling runs the fan immediately and keeps it on 2 minutes after the call ends. Heating starts the fan only from the second minute of a heat call (heat exchanger warm-up) and, if the fan had started, keeps it on 3 minutes after the call. Fan mode on forces the fan on. Circulate mode ensures at least 20 fan minutes per clock hour (minutes 0-59, 60-119, ...), counting all fan minutes, by running the fan once the remaining minutes in the hour equal the remaining requirement. Return the fan state per minute.

Why this case matters

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.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(mode, samples):
    fan_after = 0
    heat_run = 0
    ran = 0
    out = []
    for minute, call in enumerate(samples):
        if minute % 60 == 0:
            ran = 0
        if call == 'cool':
            fan = True
            fan_after = 2
            heat_run = 0
        elif call == 'heat':
            heat_run += 1
            fan = heat_run > 1
            fan_after = 3
        else:
            heat_run = 0
            fan = fan_after > 0
            if fan_after > 0:
                fan_after -= 1
        if mode == 'on':
            fan = True
        elif mode == 'circ' and not fan and 20 - ran >= 60 - minute % 60:
            fan = True
        if fan:
            ran += 1
        out.append(fan)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: short heat call',
   ['auto', ['heat', None, None, 'heat', 'heat', None, None, None, None]],
   [False, False, False, False, True, True, True, True, False]],
  ['regression: heat right after cool',
   ['auto', ['cool', 'heat', 'heat', None, None, None, None]],
   [True, False, True, True, True, True, False]],
  ['control: cool and heat purge',
   ['auto', ['cool', 'cool', None, None, None, 'heat', 'heat', 'heat', None, None, None, None]],
   [True, True, True, True, False, False, True, True, True, True, True, False]],
  ['control: circulate fills hour',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['control: scenario 1',
   ['circ',
    [None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False]],
  ['control: scenario 2',
   ['on', [None, None, None, None, None, None, None, None, None, None, None, None]],
   [True, True, True, True, True, True, True, True, True, True, True, True]],
  ['control: scenario 3',
   ['on',
    [None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     'cool',
     'cool',
     'cool',
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat']],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['control: scenario 4',
   ['on',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]]],
 [['regression: scenario 20',
   ['auto',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     'heat',
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False]],
  ['regression: short heat call',
   ['auto', ['heat', None, None, 'heat', 'heat', None, None, None, None]],
   [False, False, False, False, True, True, True, True, False]],
  ['control: cool and heat purge',
   ['auto', ['cool', 'cool', None, None, None, 'heat', 'heat', 'heat', None, None, None, None]],
   [True, True, True, True, False, False, True, True, True, True, True, False]],
  ['control: circulate fills hour',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['regression: heat right after cool',
   ['auto', ['cool', 'heat', 'heat', None, None, None, None]],
   [True, False, True, True, True, True, False]],
  ['control: scenario 1',
   ['on',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None]],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['control: scenario 2',
   ['on',
    ['cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['control: scenario 3',
   ['on',
    [None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool']],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]]],
 [['regression: scenario 6',
   ['circ',
    ['cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['regression: scenario 11',
   ['auto',
    [None,
     None,
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False]],
  ['control: cool and heat purge',
   ['auto', ['cool', 'cool', None, None, None, 'heat', 'heat', 'heat', None, None, None, None]],
   [True, True, True, True, False, False, True, True, True, True, True, False]],
  ['control: circulate fills hour',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['regression: heat right after cool',
   ['auto', ['cool', 'heat', 'heat', None, None, None, None]],
   [True, False, True, True, True, True, False]],
  ['regression: short heat call',
   ['auto', ['heat', None, None, 'heat', 'heat', None, None, None, None]],
   [False, False, False, False, True, True, True, True, False]],
  ['control: scenario 1',
   ['auto',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['control: scenario 2',
   ['on',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     'heat',
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None]],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]]],
 [['regression: scenario 40',
   ['auto',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False]],
  ['regression: scenario 3',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False]],
  ['control: cool and heat purge',
   ['auto', ['cool', 'cool', None, None, None, 'heat', 'heat', 'heat', None, None, None, None]],
   [True, True, True, True, False, False, True, True, True, True, True, False]],
  ['control: circulate fills hour',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['regression: heat right after cool',
   ['auto', ['cool', 'heat', 'heat', None, None, None, None]],
   [True, False, True, True, True, True, False]],
  ['regression: short heat call',
   ['auto', ['heat', None, None, 'heat', 'heat', None, None, None, None]],
   [False, False, False, False, True, True, True, True, False]],
  ['regression: scenario 1',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'heat',
     'cool',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    False,
    True,
    False,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False]],
  ['control: scenario 2',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    False]]],
 [['regression: scenario 37',
   ['auto',
    [None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     'heat',
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool']],
   [False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True]],
  ['regression: short heat call',
   ['auto', ['heat', None, None, 'heat', 'heat', None, None, None, None]],
   [False, False, False, False, True, True, True, True, False]],
  ['control: cool and heat purge',
   ['auto', ['cool', 'cool', None, None, None, 'heat', 'heat', 'heat', None, None, None, None]],
   [True, True, True, True, False, False, True, True, True, True, True, False]],
  ['control: circulate fills hour',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['regression: heat right after cool',
   ['auto', ['cool', 'heat', 'heat', None, None, None, None]],
   [True, False, True, True, True, True, False]],
  ['control: scenario 1',
   ['auto',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool']],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['control: scenario 2',
   ['auto', [None, None, None, None, None, None, None, None, None, None, None, None]],
   [False, False, False, False, False, False, False, False, False, False, False, False]],
  ['control: scenario 3',
   ['auto', [None, None, None, None, None, None, None, None, None, None, None, None, None]],
   [False, False, False, False, False, False, False, False, False, False, False, False, False]]]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: short heat call[False, True, True, False, True, True, True, True, False][False, False, False, False, True, True, True, True, False]Failed
regression: heat right after cool[True, False, True, True, True, True, False][True, False, True, True, True, True, False]Passed
control: cool and heat purge[True, True, True, True, False, False, True, True, True, True, True, False][True, True, True, True, False, False, True, True, True, True, True, False]Passed
control: circulate fills hour[False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True][False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True]Passed
control: scenario 1[False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False][False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False]Passed
control: scenario 2[True, True, True, True, True, True, True, True, True, True, True, True][True, True, True, True, True, True, True, True, True, True, True, True]Passed
control: scenario 3[True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True][True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True]Passed
control: scenario 4[True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True][True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True]Passed

SHA-256 / bb44bc322ed5923423646e579496e5f10ca19805cac3ac5eaacb9a68a42df92f

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(mode, samples):
    fan_after = 0
    heat_run = 0
    ran = 0
    out = []
    for minute, call in enumerate(samples):
        if minute % 60 == 0:
            ran = 0
        if call == 'cool':
            fan = True
            fan_after = 2
            heat_run = 0
        elif call == 'heat':
            heat_run += 1
            fan = heat_run > 1
            fan_after = 3 if heat_run > 2 else 0
        else:
            heat_run = 0
            fan = fan_after > 0
            if fan_after > 0:
                fan_after -= 1
        if mode == 'on':
            fan = True
        elif mode == 'circ' and not fan and 20 - ran >= 60 - minute % 60:
            fan = True
        if fan:
            ran += 1
        out.append(fan)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: short heat call',
   ['auto', ['heat', None, None, 'heat', 'heat', None, None, None, None]],
   [False, False, False, False, True, True, True, True, False]],
  ['regression: heat right after cool',
   ['auto', ['cool', 'heat', 'heat', None, None, None, None]],
   [True, False, True, True, True, True, False]],
  ['control: cool and heat purge',
   ['auto', ['cool', 'cool', None, None, None, 'heat', 'heat', 'heat', None, None, None, None]],
   [True, True, True, True, False, False, True, True, True, True, True, False]],
  ['control: circulate fills hour',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['control: scenario 1',
   ['circ',
    [None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False]],
  ['control: scenario 2',
   ['on', [None, None, None, None, None, None, None, None, None, None, None, None]],
   [True, True, True, True, True, True, True, True, True, True, True, True]],
  ['control: scenario 3',
   ['on',
    [None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     'cool',
     'cool',
     'cool',
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat']],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['control: scenario 4',
   ['on',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]]],
 [['regression: scenario 20',
   ['auto',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     'heat',
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False]],
  ['regression: short heat call',
   ['auto', ['heat', None, None, 'heat', 'heat', None, None, None, None]],
   [False, False, False, False, True, True, True, True, False]],
  ['control: cool and heat purge',
   ['auto', ['cool', 'cool', None, None, None, 'heat', 'heat', 'heat', None, None, None, None]],
   [True, True, True, True, False, False, True, True, True, True, True, False]],
  ['control: circulate fills hour',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['regression: heat right after cool',
   ['auto', ['cool', 'heat', 'heat', None, None, None, None]],
   [True, False, True, True, True, True, False]],
  ['control: scenario 1',
   ['on',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None]],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['control: scenario 2',
   ['on',
    ['cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['control: scenario 3',
   ['on',
    [None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool']],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]]],
 [['regression: scenario 6',
   ['circ',
    ['cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['regression: scenario 11',
   ['auto',
    [None,
     None,
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False]],
  ['control: cool and heat purge',
   ['auto', ['cool', 'cool', None, None, None, 'heat', 'heat', 'heat', None, None, None, None]],
   [True, True, True, True, False, False, True, True, True, True, True, False]],
  ['control: circulate fills hour',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['regression: heat right after cool',
   ['auto', ['cool', 'heat', 'heat', None, None, None, None]],
   [True, False, True, True, True, True, False]],
  ['regression: short heat call',
   ['auto', ['heat', None, None, 'heat', 'heat', None, None, None, None]],
   [False, False, False, False, True, True, True, True, False]],
  ['control: scenario 1',
   ['auto',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['control: scenario 2',
   ['on',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     'heat',
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None]],
   [True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]]],
 [['regression: scenario 40',
   ['auto',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False]],
  ['regression: scenario 3',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False]],
  ['control: cool and heat purge',
   ['auto', ['cool', 'cool', None, None, None, 'heat', 'heat', 'heat', None, None, None, None]],
   [True, True, True, True, False, False, True, True, True, True, True, False]],
  ['control: circulate fills hour',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['regression: heat right after cool',
   ['auto', ['cool', 'heat', 'heat', None, None, None, None]],
   [True, False, True, True, True, True, False]],
  ['regression: short heat call',
   ['auto', ['heat', None, None, 'heat', 'heat', None, None, None, None]],
   [False, False, False, False, True, True, True, True, False]],
  ['regression: scenario 1',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'heat',
     'cool',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    False,
    True,
    False,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False]],
  ['control: scenario 2',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    False]]],
 [['regression: scenario 37',
   ['auto',
    [None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     'heat',
     None,
     None,
     None,
     None,
     None,
     'heat',
     'heat',
     'heat',
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool']],
   [False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True]],
  ['regression: short heat call',
   ['auto', ['heat', None, None, 'heat', 'heat', None, None, None, None]],
   [False, False, False, False, True, True, True, True, False]],
  ['control: cool and heat purge',
   ['auto', ['cool', 'cool', None, None, None, 'heat', 'heat', 'heat', None, None, None, None]],
   [True, True, True, True, False, False, True, True, True, True, True, False]],
  ['control: circulate fills hour',
   ['circ',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None]],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['regression: heat right after cool',
   ['auto', ['cool', 'heat', 'heat', None, None, None, None]],
   [True, False, True, True, True, True, False]],
  ['control: scenario 1',
   ['auto',
    [None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool',
     'cool']],
   [False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    False,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True,
    True]],
  ['control: scenario 2',
   ['auto', [None, None, None, None, None, None, None, None, None, None, None, None]],
   [False, False, False, False, False, False, False, False, False, False, False, False]],
  ['control: scenario 3',
   ['auto', [None, None, None, None, None, None, None, None, None, None, None, None, None]],
   [False, False, False, False, False, False, False, False, False, False, False, False, False]]]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: short heat call[False, False, False, False, True, False, False, False, False][False, False, False, False, True, True, True, True, False]Failed
regression: heat right after cool[True, False, True, False, False, False, False][True, False, True, True, True, True, False]Failed
control: cool and heat purge[True, True, True, True, False, False, True, True, True, True, True, False][True, True, True, True, False, False, True, True, True, True, True, False]Passed
control: circulate fills hour[False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True][False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True]Passed
control: scenario 1[False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False][False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False]Passed
control: scenario 2[True, True, True, True, True, True, True, True, True, True, True, True][True, True, True, True, True, True, True, True, True, True, True, True]Passed
control: scenario 3[True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True][True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True]Passed
control: scenario 4[True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True][True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True]Passed

SHA-256 / b76c3a1604888893156b41da6648184a8d4e80833f6c4411e557f8ada2142134

HELD IN THE MEMBER ARCHIVE

The verified repair and its recorded checks are member-only.

This mechanism has 8 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.

Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.

Member access is invitation-based. Sign in with your invited account to inspect the repair.

Sign in to the archive ↗

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:51:46.968346+00:00.

Case digest / 7f54516a465966024d764ed83f425750ab2b90df4e83080d3e69ad9d580b5ffd