FA-92681 / HVAC thermostat control / Open access
Low-pressure switch trips the compressor during startup · case 01
In cold weather the unit soft-locks on every start because suction pressure is briefly low.
ROOT CAUSE
The low-pressure fault is evaluated from the first running minute.
VERIFIED REPAIR
Ignore the low-pressure switch for the first 2 minutes after start.
Unsuccessful approach: A 3-minute bypass masks a genuine low-pressure fault for an extra minute.
Case contract
Compressor pressure-switch lockout per minute; samples are [call, hp_ok, lp_ok] where call may also be "reset". While running, an open high-pressure switch trips at once; the low-pressure switch is ignored for the first 2 minutes after start. A trip enters a 5-minute soft lockout, after which the unit retries automatically if still called. The third trip within a sliding 60-minute window (trips older than 60 minutes are forgotten) causes a hard lockout that only reset clears; reset also clears the trip history. Return run, idle, soft or hard 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(samples):
state = 'idle'
trips = []
start_at = None
soft_until = None
out = []
for minute, (call, hp_ok, lp_ok) in enumerate(samples):
if call == 'reset':
state = 'idle'
trips = []
out.append(state)
continue
if state == 'soft' and minute >= soft_until:
state = 'idle'
if state == 'run':
lp_fault = not lp_ok
if not hp_ok or lp_fault:
trips = [t for t in trips if minute - t < 60] + [minute]
if len(trips) >= 3:
state = 'hard'
else:
state = 'soft'
soft_until = minute + 5
elif not call:
state = 'idle'
if state == 'idle' and call:
state = 'run'
start_at = minute
out.append(state)
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['regression: scenario 1',
[[[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, 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, False],
[True, True, False],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, False],
[False, True, True],
[True, True, False],
[True, False, True],
[True, True, True],
[True, True, True]]],
['run',
'run',
'run',
'idle',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']],
['control: trip late in long run',
[[[True, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run']]],
[['regression: scenario 3',
[[[False, False, True],
['reset', True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[False, False, False],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[False, 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, False],
[True, True, False],
[True, True, False],
[True, True, True],
[True, False, True],
[True, True, False],
[True, True, False],
[True, True, False],
[True, True, False],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
['reset', True, False],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, True]]],
['idle',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'run',
'idle',
'idle',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'idle',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'run']],
['regression: scenario 2',
[[[True, True, True],
[True, False, True],
[True, False, True],
[True, True, True],
[False, True, True],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, False, True],
[False, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, False, False],
[True, True, True],
[False, True, True],
[False, True, True],
[False, True, False],
[True, True, False],
[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, True],
[True, False, False],
[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'idle',
'run',
'run']],
['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']]],
[['regression: scenario 2',
[[[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, False],
[True, True, True],
['reset', True, False],
[True, True, True],
[True, True, True],
[False, True, True],
[False, False, True],
[True, True, True],
[True, False, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[False, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, False],
[False, True, True],
[True, True, False],
[True, True, True],
[False, True, False],
[True, True, True],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, False],
[True, True, False],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, False]]],
['run',
'run',
'idle',
'run',
'run',
'idle',
'run',
'run',
'idle',
'idle',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'idle',
'idle',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'run',
'run',
'idle',
'run',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard']],
['regression: scenario 3',
[[[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, False, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, False],
[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, True, True],
[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, False, False],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[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, True],
[True, False, True],
[False, True, True],
['reset', True, False],
[True, True, True],
[False, True, True],
[True, True, False],
[True, True, False]]],
['run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'idle',
'run',
'idle',
'run',
'run']],
['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']]],
[['regression: scenario 4',
[[[True, True, True],
[False, True, False],
[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],
[True, True, True],
[False, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, False],
[True, True, True],
[False, False, False],
[True, True, True],
[False, True, True],
[True, True, True],
['reset', True, True],
[True, True, False],
[False, True, True]]],
['run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'idle',
'run',
'idle']],
['regression: scenario 5',
[[[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, False],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, False],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, False],
[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, True, True]]],
['run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'idle',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft']],
['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']]],
[['regression: scenario 5',
[[[True, True, True],
[False, True, True],
['reset', True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
['reset', False, False],
[False, True, True],
[True, True, False],
[True, True, False],
[True, False, True],
[False, True, True],
[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, False],
[False, False, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[False, True, 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]]],
['run',
'idle',
'idle',
'idle',
'idle',
'run',
'run',
'run',
'idle',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'soft',
'idle',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run']],
['regression: scenario 11',
[[[False, True, True],
[True, False, True],
[True, True, True],
['reset', True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, False],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[False, True, 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],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, False, True],
[True, True, True],
[False, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
['reset', True, True],
[True, True, True],
[True, True, True],
[False, True, False]]],
['idle',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'idle',
'run',
'idle',
'run',
'idle',
'run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'idle',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'idle',
'idle',
'run',
'run',
'soft']],
['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: low pressure bypass and retry | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft'] | ['run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft'] | Failed |
| regression: scenario 1 | ['run', 'run', 'run', 'idle', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'hard', 'hard', 'hard', 'hard', 'hard', 'hard'] | ['run', 'run', 'run', 'idle', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'hard', 'hard', 'hard', 'hard', 'hard', 'hard'] | Passed |
| control: three trips hard lockout | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'hard', 'hard', 'idle', 'run', 'soft', 'soft'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'hard', 'hard', 'idle', 'run', 'soft', 'soft'] | Passed |
| control: high pressure during suction dip | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run'] | Passed |
| control: high pressure at start | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run'] | Passed |
| control: trip exactly an hour old | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft'] | Passed |
| control: old trips expire | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft'] | Passed |
| control: trip late in long run | ['run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run'] | ['run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run'] | Passed |
SHA-256 / 2bc07ebc80ec495f5b76d28305ff022b50b5ebde0cea345127d995b81fa313dd
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(samples):
state = 'idle'
trips = []
start_at = None
soft_until = None
out = []
for minute, (call, hp_ok, lp_ok) in enumerate(samples):
if call == 'reset':
state = 'idle'
trips = []
out.append(state)
continue
if state == 'soft' and minute >= soft_until:
state = 'idle'
if state == 'run':
lp_fault = not lp_ok and minute - start_at > 2
if not hp_ok or lp_fault:
trips = [t for t in trips if minute - t < 60] + [minute]
if len(trips) >= 3:
state = 'hard'
else:
state = 'soft'
soft_until = minute + 5
elif not call:
state = 'idle'
if state == 'idle' and call:
state = 'run'
start_at = minute
out.append(state)
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['regression: scenario 1',
[[[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, 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, False],
[True, True, False],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, False],
[False, True, True],
[True, True, False],
[True, False, True],
[True, True, True],
[True, True, True]]],
['run',
'run',
'run',
'idle',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']],
['control: trip late in long run',
[[[True, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run']]],
[['regression: scenario 3',
[[[False, False, True],
['reset', True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[False, False, False],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[False, 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, False],
[True, True, False],
[True, True, False],
[True, True, True],
[True, False, True],
[True, True, False],
[True, True, False],
[True, True, False],
[True, True, False],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
['reset', True, False],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, True]]],
['idle',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'run',
'idle',
'idle',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'idle',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'run']],
['regression: scenario 2',
[[[True, True, True],
[True, False, True],
[True, False, True],
[True, True, True],
[False, True, True],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, False, True],
[False, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, False, False],
[True, True, True],
[False, True, True],
[False, True, True],
[False, True, False],
[True, True, False],
[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, True],
[True, False, False],
[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'idle',
'run',
'run']],
['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']]],
[['regression: scenario 2',
[[[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, False],
[True, True, True],
['reset', True, False],
[True, True, True],
[True, True, True],
[False, True, True],
[False, False, True],
[True, True, True],
[True, False, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[False, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, False],
[False, True, True],
[True, True, False],
[True, True, True],
[False, True, False],
[True, True, True],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, False],
[True, True, False],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, False]]],
['run',
'run',
'idle',
'run',
'run',
'idle',
'run',
'run',
'idle',
'idle',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'idle',
'idle',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'run',
'run',
'idle',
'run',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard']],
['regression: scenario 3',
[[[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, False, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, False],
[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, True, True],
[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, False, False],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[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, True],
[True, False, True],
[False, True, True],
['reset', True, False],
[True, True, True],
[False, True, True],
[True, True, False],
[True, True, False]]],
['run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'idle',
'run',
'idle',
'run',
'run']],
['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']]],
[['regression: scenario 4',
[[[True, True, True],
[False, True, False],
[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],
[True, True, True],
[False, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, False],
[True, True, True],
[False, False, False],
[True, True, True],
[False, True, True],
[True, True, True],
['reset', True, True],
[True, True, False],
[False, True, True]]],
['run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'idle',
'run',
'idle']],
['regression: scenario 5',
[[[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, False],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, False],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, False],
[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, True, True]]],
['run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'idle',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft']],
['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']]],
[['regression: scenario 5',
[[[True, True, True],
[False, True, True],
['reset', True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
['reset', False, False],
[False, True, True],
[True, True, False],
[True, True, False],
[True, False, True],
[False, True, True],
[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, False],
[False, False, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[False, True, 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]]],
['run',
'idle',
'idle',
'idle',
'idle',
'run',
'run',
'run',
'idle',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'soft',
'idle',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run']],
['regression: scenario 11',
[[[False, True, True],
[True, False, True],
[True, True, True],
['reset', True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, False],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[False, True, 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],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, False, True],
[True, True, True],
[False, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
['reset', True, True],
[True, True, True],
[True, True, True],
[False, True, False]]],
['idle',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'idle',
'run',
'idle',
'run',
'idle',
'run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'idle',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'idle',
'idle',
'run',
'run',
'soft']],
['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: low pressure bypass and retry | ['run', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'soft', 'soft', 'soft'] | ['run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft'] | Failed |
| regression: scenario 1 | ['run', 'run', 'run', 'idle', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'idle', 'idle', 'run', 'hard', 'hard', 'hard'] | ['run', 'run', 'run', 'idle', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'hard', 'hard', 'hard', 'hard', 'hard', 'hard'] | Failed |
| control: three trips hard lockout | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'hard', 'hard', 'idle', 'run', 'soft', 'soft'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'hard', 'hard', 'idle', 'run', 'soft', 'soft'] | Passed |
| control: high pressure during suction dip | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run'] | Passed |
| control: high pressure at start | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run'] | Passed |
| control: trip exactly an hour old | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft'] | Passed |
| control: old trips expire | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft'] | Passed |
| control: trip late in long run | ['run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run'] | ['run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run'] | Passed |
SHA-256 / 0941e6f3cefef0291efad029a534739207b11ef661c8e87a67d25f48ae54db5f
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(samples):
state = 'idle'
trips = []
start_at = None
soft_until = None
out = []
for minute, (call, hp_ok, lp_ok) in enumerate(samples):
if call == 'reset':
state = 'idle'
trips = []
out.append(state)
continue
if state == 'soft' and minute >= soft_until:
state = 'idle'
if state == 'run':
lp_fault = not lp_ok and minute - start_at >= 2
if not hp_ok or lp_fault:
trips = [t for t in trips if minute - t < 60] + [minute]
if len(trips) >= 3:
state = 'hard'
else:
state = 'soft'
soft_until = minute + 5
elif not call:
state = 'idle'
if state == 'idle' and call:
state = 'run'
start_at = minute
out.append(state)
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['regression: scenario 1',
[[[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, 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, False],
[True, True, False],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, False],
[False, True, True],
[True, True, False],
[True, False, True],
[True, True, True],
[True, True, True]]],
['run',
'run',
'run',
'idle',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']],
['control: trip late in long run',
[[[True, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run']]],
[['regression: scenario 3',
[[[False, False, True],
['reset', True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[False, False, False],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[False, 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, False],
[True, True, False],
[True, True, False],
[True, True, True],
[True, False, True],
[True, True, False],
[True, True, False],
[True, True, False],
[True, True, False],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
['reset', True, False],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, True]]],
['idle',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'run',
'idle',
'idle',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'idle',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'run']],
['regression: scenario 2',
[[[True, True, True],
[True, False, True],
[True, False, True],
[True, True, True],
[False, True, True],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, False, True],
[False, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, False, False],
[True, True, True],
[False, True, True],
[False, True, True],
[False, True, False],
[True, True, False],
[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, True],
[True, False, False],
[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'idle',
'run',
'run']],
['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']]],
[['regression: scenario 2',
[[[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, False],
[True, True, True],
['reset', True, False],
[True, True, True],
[True, True, True],
[False, True, True],
[False, False, True],
[True, True, True],
[True, False, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[False, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, False],
[False, True, True],
[True, True, False],
[True, True, True],
[False, True, False],
[True, True, True],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, False],
[True, True, False],
[True, True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, False]]],
['run',
'run',
'idle',
'run',
'run',
'idle',
'run',
'run',
'idle',
'idle',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'idle',
'idle',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'run',
'run',
'idle',
'run',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard']],
['regression: scenario 3',
[[[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, False, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, False],
[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, True, True],
[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, False, False],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[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, True],
[True, False, True],
[False, True, True],
['reset', True, False],
[True, True, True],
[False, True, True],
[True, True, False],
[True, True, False]]],
['run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'idle',
'run',
'idle',
'run',
'run']],
['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']]],
[['regression: scenario 4',
[[[True, True, True],
[False, True, False],
[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],
[True, True, True],
[False, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, False],
[True, True, True],
[False, False, False],
[True, True, True],
[False, True, True],
[True, True, True],
['reset', True, True],
[True, True, False],
[False, True, True]]],
['run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'idle',
'run',
'idle']],
['regression: scenario 5',
[[[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, False],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, False],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, False],
[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, True, True]]],
['run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'hard',
'idle',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft']],
['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']]],
[['regression: scenario 5',
[[[True, True, True],
[False, True, True],
['reset', True, True],
[False, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
['reset', False, False],
[False, True, True],
[True, True, False],
[True, True, False],
[True, False, True],
[False, True, True],
[True, True, True],
[True, True, True],
['reset', True, True],
[True, True, False],
[False, False, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[False, True, 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]]],
['run',
'idle',
'idle',
'idle',
'idle',
'run',
'run',
'run',
'idle',
'idle',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'idle',
'run',
'soft',
'idle',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run']],
['regression: scenario 11',
[[[False, True, True],
[True, False, True],
[True, True, True],
['reset', True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, False],
[False, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[False, True, 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],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, False],
[True, True, True],
[True, False, True],
[True, True, True],
[False, True, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[False, True, True],
['reset', True, True],
[True, True, True],
[True, True, True],
[False, True, False]]],
['idle',
'run',
'run',
'idle',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'idle',
'run',
'idle',
'run',
'idle',
'run',
'idle',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'idle',
'run',
'run',
'idle',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'idle',
'idle',
'run',
'run',
'soft']],
['regression: low pressure bypass and retry',
[[[True, True, True],
[True, True, False],
[True, True, False],
[True, 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, False],
[True, True, False],
[True, True, False],
[True, True, True]]],
['run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft',
'soft']],
['control: three trips hard lockout',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, False, True],
[True, True, True],
['reset', True, True],
[True, True, True],
[True, False, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'hard',
'hard',
'idle',
'run',
'soft',
'soft']],
['control: high pressure during suction dip',
[[[True, True, True],
[True, False, False],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run']],
['control: high pressure at start',
[[[True, True, True],
[True, False, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True]]],
['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run']],
['control: trip exactly an hour old',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft',
'soft']],
['control: old trips expire',
[[[True, True, True],
[True, False, 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, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, True, True],
[True, 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, True],
[True, True, True]]],
['run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'soft',
'soft',
'soft',
'soft',
'soft',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'run',
'soft',
'soft']]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: low pressure bypass and retry | ['run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft'] | ['run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft'] | Passed |
| regression: scenario 1 | ['run', 'run', 'run', 'idle', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'hard', 'hard', 'hard', 'hard', 'hard', 'hard'] | ['run', 'run', 'run', 'idle', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'hard', 'hard', 'hard', 'hard', 'hard', 'hard'] | Passed |
| control: three trips hard lockout | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'hard', 'hard', 'idle', 'run', 'soft', 'soft'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'hard', 'hard', 'idle', 'run', 'soft', 'soft'] | Passed |
| control: high pressure during suction dip | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run'] | Passed |
| control: high pressure at start | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run'] | Passed |
| control: trip exactly an hour old | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft'] | Passed |
| control: old trips expire | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft'] | ['run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft'] | Passed |
| control: trip late in long run | ['run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run'] | ['run', 'run', 'run', 'run', 'run', 'run', 'run', 'run', 'soft', 'soft', 'soft', 'soft', 'soft', 'run', 'run', 'run'] | Passed |
SHA-256 / ae4f192b27119e3b67b4fbca080e496913e317370967fa05e5868d93f4b69065
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:47.954874+00:00.
Case digest / 9bdb5053323c3197356fad7a08165010a8fba7e4117acc7d28e39f4d6e2f066c