{"abstract":"Every start and stop happens one minute late.","category":"HVAC thermostat control","checks":8,"contract":"Hydronic heat pump degree-minute controller, one sample per minute of [supply_temp, target_supply] in whole F. Degree-minutes DM accumulate supply - target each minute and are clamped to [floor, 100]. The compressor starts when DM <= start_dm and stops when DM >= stop_dm. Auxiliary heat starts when DM <= aux_dm and stops when DM >= start_dm. Decisions use the DM value after this minute's update. Return [DM, compressor, aux] per minute.","evaluation_group":"w2-hvac-thermostat-control-degree-minute-heat-pump","failed_approach":"Updating DM between the compressor and aux decisions still delays aux by a minute.","family":"w2-hvac-thermostat-control-degree-minute-heat-pump-update-order","id":"FA-92676","implementations":{"attempt":{"sha256":"b6e7f4710b75e4d107121e480351128deadd1cef16501a2f6baaff1be2a7afbe","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(settings, samples):\n    dm = 0\n    comp = False\n    aux = False\n    out = []\n    for supply, target in samples:\n        if comp and dm >= settings['stop_dm']:\n            comp = False\n        elif not comp and dm <= settings['start_dm']:\n            comp = True\n        dm = max(settings['floor'], min(100, dm + supply - target))\n        if aux and dm >= settings['start_dm']:\n            aux = False\n        elif not aux and dm <= settings['aux_dm']:\n            aux = True\n        out.append([dm, comp, aux])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['control: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[11, 40],\n     [50, 40],\n     [49, 40],\n     [53, 40],\n     [49, 40],\n     [71, 40],\n     [105, 40],\n     [100, 40],\n     [17, 40],\n     [13, 40],\n     [102, 40],\n     [102, 40],\n     [99, 40],\n     [105, 40],\n     [96, 40],\n     [50, 40],\n     [48, 40],\n     [46, 40],\n     [47, 40],\n     [50, 40],\n     [52, 40],\n     [48, 40],\n     [71, 40]]],\n   [[-29, False, False],\n    [-19, False, False],\n    [-10, False, False],\n    [3, False, False],\n    [12, False, False],\n    [43, False, False],\n    [100, False, False],\n    [100, False, False],\n    [77, False, False],\n    [50, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['control: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -250},\n    [[67, 40],\n     [67, 40],\n     [73, 40],\n     [71, 40],\n     [11, 40],\n     [19, 40],\n     [69, 40],\n     [70, 40],\n     [65, 40],\n     [70, 40],\n     [66, 40],\n     [66, 40],\n     [71, 40],\n     [68, 40],\n     [70, 40],\n     [73, 40],\n     [74, 40],\n     [73, 40],\n     [65, 40],\n     [75, 40],\n     [104, 40]]],\n   [[27, False, False],\n    [54, False, False],\n    [87, False, False],\n    [100, False, False],\n    [71, False, False],\n    [50, False, False],\n    [79, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['regression: scenario 3',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[71, 40],\n     [75, 40],\n     [72, 40],\n     [68, 40],\n     [75, 40],\n     [48, 40],\n     [45, 40],\n     [30, 40],\n     [18, 40],\n     [19, 40],\n     [12, 40],\n     [16, 40],\n     [10, 40],\n     [18, 40],\n     [18, 40],\n     [18, 40],\n     [72, 40],\n     [20, 40],\n     [20, 40],\n     [17, 40]]],\n   [[31, False, False],\n    [66, False, False],\n    [98, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [90, False, False],\n    [68, False, False],\n    [47, False, False],\n    [19, False, False],\n    [-5, False, False],\n    [-35, False, False],\n    [-57, False, False],\n    [-79, True, False],\n    [-101, True, False],\n    [-69, True, False],\n    [-89, True, False],\n    [-109, True, False],\n    [-132, True, False]]],\n  ['regression: scenario 4',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[27, 40],\n     [23, 40],\n     [28, 40],\n     [67, 40],\n     [96, 40],\n     [101, 40],\n     [18, 40],\n     [11, 40],\n     [16, 40],\n     [18, 40],\n     [13, 40],\n     [16, 40],\n     [18, 40],\n     [16, 40],\n     [17, 40],\n     [10, 40],\n     [15, 40]]],\n   [[-13, False, False],\n    [-30, False, False],\n    [-42, False, False],\n    [-15, False, False],\n    [41, False, False],\n    [100, False, False],\n    [78, False, False],\n    [49, False, False],\n    [25, False, False],\n    [3, False, False],\n    [-24, False, False],\n    [-48, False, False],\n    [-70, True, False],\n    [-94, True, False],\n    [-117, True, False],\n    [-147, True, False],\n    [-172, True, True]]]],\n [['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['control: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -250},\n    [[57, 40],\n     [101, 40],\n     [100, 40],\n     [98, 40],\n     [95, 40],\n     [100, 40],\n     [101, 40],\n     [103, 40],\n     [96, 40],\n     [97, 40],\n     [14, 40],\n     [17, 40],\n     [12, 40],\n     [20, 40],\n     [13, 40]]],\n   [[17, False, False],\n    [78, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [74, False, False],\n    [51, False, False],\n    [23, False, False],\n    [3, False, False],\n    [-24, False, False]]],\n  ['regression: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[10, 40],\n     [10, 40],\n     [19, 40],\n     [28, 40],\n     [26, 40],\n     [27, 40],\n     [28, 40],\n     [26, 40],\n     [75, 40],\n     [65, 40],\n     [73, 40],\n     [71, 40],\n     [71, 40],\n     [72, 40],\n     [11, 40],\n     [13, 40],\n     [19, 40],\n     [15, 40],\n     [27, 40],\n     [30, 40]]],\n   [[-30, False, False],\n    [-60, True, False],\n    [-81, True, False],\n    [-93, True, False],\n    [-107, True, False],\n    [-120, True, False],\n    [-132, True, False],\n    [-146, True, False],\n    [-111, True, False],\n    [-86, True, False],\n    [-53, True, False],\n    [-22, True, False],\n    [9, False, False],\n    [41, False, False],\n    [12, False, False],\n    [-15, False, False],\n    [-36, False, False],\n    [-61, True, False],\n    [-74, True, False],\n    [-84, True, False]]],\n  ['control: scenario 3',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[13, 40],\n     [95, 40],\n     [100, 40],\n     [49, 40],\n     [97, 40],\n     [103, 40],\n     [97, 40],\n     [101, 40],\n     [99, 40],\n     [99, 40],\n     [105, 40],\n     [101, 40]]],\n   [[-27, False, False],\n    [28, False, False],\n    [88, False, False],\n    [97, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['regression: scenario 4',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[21, 40],\n     [25, 40],\n     [46, 40],\n     [48, 40],\n     [21, 40],\n     [24, 40],\n     [26, 40],\n     [25, 40],\n     [25, 40],\n     [45, 40],\n     [49, 40],\n     [50, 40],\n     [50, 40],\n     [48, 40],\n     [45, 40],\n     [55, 40],\n     [20, 40],\n     [23, 40],\n     [103, 40],\n     [102, 40],\n     [73, 40],\n     [75, 40]]],\n   [[-19, False, False],\n    [-34, False, False],\n    [-28, False, False],\n    [-20, False, False],\n    [-39, False, False],\n    [-55, False, False],\n    [-69, True, False],\n    [-84, True, False],\n    [-99, True, False],\n    [-94, True, False],\n    [-85, True, False],\n    [-75, True, False],\n    [-65, True, False],\n    [-57, True, False],\n    [-52, True, False],\n    [-37, True, False],\n    [-57, True, False],\n    [-74, True, False],\n    [-11, True, False],\n    [51, False, False],\n    [84, False, False],\n    [100, False, False]]]],\n [['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['regression: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[14, 40],\n     [17, 40],\n     [19, 40],\n     [12, 40],\n     [16, 40],\n     [10, 40],\n     [16, 40],\n     [12, 40],\n     [16, 40],\n     [19, 40],\n     [16, 40],\n     [12, 40],\n     [20, 40],\n     [10, 40],\n     [20, 40],\n     [11, 40],\n     [20, 40]]],\n   [[-26, False, False],\n    [-49, False, False],\n    [-70, True, False],\n    [-98, True, False],\n    [-122, True, False],\n    [-152, True, True],\n    [-176, True, True],\n    [-204, True, True],\n    [-228, True, True],\n    [-249, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True]]],\n  ['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['control: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[68, 40],\n     [72, 40],\n     [75, 40],\n     [69, 40],\n     [70, 40],\n     [66, 40],\n     [65, 40],\n     [68, 40],\n     [75, 40],\n     [71, 40],\n     [70, 40],\n     [74, 40],\n     [68, 40],\n     [74, 40],\n     [68, 40],\n     [67, 40],\n     [69, 40],\n     [72, 40],\n     [68, 40],\n     [70, 40],\n     [75, 40],\n     [72, 40],\n     [75, 40],\n     [66, 40]]],\n   [[28, False, False],\n    [60, False, False],\n    [95, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['control: scenario 3',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -250},\n    [[67, 40],\n     [23, 40],\n     [22, 40],\n     [25, 40],\n     [49, 40],\n     [10, 40],\n     [100, 40],\n     [95, 40],\n     [103, 40],\n     [100, 40],\n     [104, 40],\n     [14, 40],\n     [50, 40],\n     [48, 40],\n     [51, 40],\n     [48, 40],\n     [46, 40],\n     [53, 40],\n     [52, 40],\n     [47, 40],\n     [52, 40]]],\n   [[27, False, False],\n    [10, False, False],\n    [-8, False, False],\n    [-23, False, False],\n    [-14, False, False],\n    [-44, False, False],\n    [16, False, False],\n    [71, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [74, False, False],\n    [84, False, False],\n    [92, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['control: scenario 4',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[57, 40],\n     [54, 40],\n     [54, 40],\n     [50, 40],\n     [55, 40],\n     [52, 40],\n     [53, 40],\n     [50, 40],\n     [59, 40],\n     [50, 40],\n     [51, 40],\n     [57, 40],\n     [73, 40],\n     [67, 40],\n     [15, 40],\n     [71, 40],\n     [65, 40],\n     [74, 40]]],\n   [[17, False, False],\n    [31, False, False],\n    [45, False, False],\n    [55, False, False],\n    [70, False, False],\n    [82, False, False],\n    [95, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [75, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]]],\n [['regression: scenario 4',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[14, 40], [17, 40], [17, 40], [13, 40], [12, 40], [20, 40], [12, 40], [19, 40], [14, 40], [20, 40]]],\n   [[-26, False, False],\n    [-49, False, False],\n    [-72, True, False],\n    [-99, True, False],\n    [-127, True, False],\n    [-147, True, False],\n    [-175, True, False],\n    [-196, True, False],\n    [-222, True, False],\n    [-242, True, False]]],\n  ['regression: scenario 6',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[22, 40],\n     [29, 40],\n     [20, 40],\n     [19, 40],\n     [12, 40],\n     [10, 40],\n     [20, 40],\n     [17, 40],\n     [19, 40],\n     [17, 40],\n     [10, 40],\n     [10, 40],\n     [13, 40],\n     [65, 40],\n     [66, 40],\n     [67, 40],\n     [73, 40],\n     [65, 40],\n     [68, 40]]],\n   [[-18, False, False],\n    [-29, False, False],\n    [-49, False, False],\n    [-70, True, False],\n    [-98, True, False],\n    [-128, True, False],\n    [-148, True, False],\n    [-171, True, True],\n    [-192, True, True],\n    [-215, True, True],\n    [-245, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-225, True, True],\n    [-199, True, True],\n    [-172, True, True],\n    [-139, True, True],\n    [-114, True, True],\n    [-86, True, True]]],\n  ['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['control: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[55, 40],\n     [51, 40],\n     [74, 40],\n     [47, 40],\n     [27, 40],\n     [24, 40],\n     [105, 40],\n     [55, 40],\n     [46, 40],\n     [45, 40],\n     [55, 40],\n     [53, 40],\n     [101, 40],\n     [105, 40],\n     [95, 40],\n     [54, 40]]],\n   [[15, False, False],\n    [26, False, False],\n    [60, False, False],\n    [67, False, False],\n    [54, False, False],\n    [38, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['control: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[52, 40],\n     [102, 40],\n     [104, 40],\n     [97, 40],\n     [46, 40],\n     [49, 40],\n     [53, 40],\n     [53, 40],\n     [51, 40],\n     [50, 40],\n     [47, 40],\n     [52, 40]]],\n   [[12, False, False],\n    [74, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]]],\n [['regression: scenario 3',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[10, 40],\n     [18, 40],\n     [24, 40],\n     [27, 40],\n     [27, 40],\n     [27, 40],\n     [30, 40],\n     [25, 40],\n     [26, 40],\n     [103, 40],\n     [99, 40],\n     [97, 40],\n     [101, 40],\n     [14, 40],\n     [19, 40],\n     [17, 40]]],\n   [[-30, False, False],\n    [-52, False, False],\n    [-68, True, False],\n    [-81, True, False],\n    [-94, True, False],\n    [-107, True, False],\n    [-117, True, False],\n    [-132, True, False],\n    [-146, True, False],\n    [-83, True, False],\n    [-24, True, False],\n    [33, False, False],\n    [94, False, False],\n    [68, False, False],\n    [47, False, False],\n    [24, False, False]]],\n  ['regression: scenario 5',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[16, 40],\n     [10, 40],\n     [17, 40],\n     [20, 40],\n     [11, 40],\n     [20, 40],\n     [104, 40],\n     [102, 40],\n     [103, 40],\n     [97, 40],\n     [101, 40],\n     [102, 40],\n     [95, 40],\n     [103, 40],\n     [99, 40],\n     [101, 40],\n     [17, 40],\n     [17, 40],\n     [14, 40],\n     [67, 40],\n     [72, 40],\n     [74, 40]]],\n   [[-24, False, False],\n    [-54, False, False],\n    [-77, True, False],\n    [-97, True, False],\n    [-126, True, False],\n    [-146, True, False],\n    [-82, True, False],\n    [-20, True, False],\n    [43, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [77, False, False],\n    [54, False, False],\n    [28, False, False],\n    [55, False, False],\n    [87, False, False],\n    [100, False, False]]],\n  ['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['control: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[67, 40],\n     [73, 40],\n     [101, 40],\n     [96, 40],\n     [104, 40],\n     [99, 40],\n     [101, 40],\n     [98, 40],\n     [95, 40],\n     [95, 40],\n     [65, 40],\n     [71, 40]]],\n   [[27, False, False],\n    [60, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['regression: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[20, 40], [25, 40], [21, 40], [22, 40], [26, 40], [25, 40], [26, 40], [24, 40], [73, 40], [71, 40]]],\n   [[-20, False, False],\n    [-35, False, False],\n    [-54, False, False],\n    [-72, True, False],\n    [-86, True, False],\n    [-101, True, False],\n    [-115, True, False],\n    [-131, True, False],\n    [-98, True, False],\n    [-67, True, False]]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"d81c8a9ad8cb2ea7c392690ab07760bf6fd29a27c565268422d65f593d74d025","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(settings, samples):\n    dm = 0\n    comp = False\n    aux = False\n    out = []\n    for supply, target in samples:\n        if comp and dm >= settings['stop_dm']:\n            comp = False\n        elif not comp and dm <= settings['start_dm']:\n            comp = True\n        if aux and dm >= settings['start_dm']:\n            aux = False\n        elif not aux and dm <= settings['aux_dm']:\n            aux = True\n        dm = max(settings['floor'], min(100, dm + supply - target))\n        out.append([dm, comp, aux])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['control: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[11, 40],\n     [50, 40],\n     [49, 40],\n     [53, 40],\n     [49, 40],\n     [71, 40],\n     [105, 40],\n     [100, 40],\n     [17, 40],\n     [13, 40],\n     [102, 40],\n     [102, 40],\n     [99, 40],\n     [105, 40],\n     [96, 40],\n     [50, 40],\n     [48, 40],\n     [46, 40],\n     [47, 40],\n     [50, 40],\n     [52, 40],\n     [48, 40],\n     [71, 40]]],\n   [[-29, False, False],\n    [-19, False, False],\n    [-10, False, False],\n    [3, False, False],\n    [12, False, False],\n    [43, False, False],\n    [100, False, False],\n    [100, False, False],\n    [77, False, False],\n    [50, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['control: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -250},\n    [[67, 40],\n     [67, 40],\n     [73, 40],\n     [71, 40],\n     [11, 40],\n     [19, 40],\n     [69, 40],\n     [70, 40],\n     [65, 40],\n     [70, 40],\n     [66, 40],\n     [66, 40],\n     [71, 40],\n     [68, 40],\n     [70, 40],\n     [73, 40],\n     [74, 40],\n     [73, 40],\n     [65, 40],\n     [75, 40],\n     [104, 40]]],\n   [[27, False, False],\n    [54, False, False],\n    [87, False, False],\n    [100, False, False],\n    [71, False, False],\n    [50, False, False],\n    [79, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['regression: scenario 3',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[71, 40],\n     [75, 40],\n     [72, 40],\n     [68, 40],\n     [75, 40],\n     [48, 40],\n     [45, 40],\n     [30, 40],\n     [18, 40],\n     [19, 40],\n     [12, 40],\n     [16, 40],\n     [10, 40],\n     [18, 40],\n     [18, 40],\n     [18, 40],\n     [72, 40],\n     [20, 40],\n     [20, 40],\n     [17, 40]]],\n   [[31, False, False],\n    [66, False, False],\n    [98, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [90, False, False],\n    [68, False, False],\n    [47, False, False],\n    [19, False, False],\n    [-5, False, False],\n    [-35, False, False],\n    [-57, False, False],\n    [-79, True, False],\n    [-101, True, False],\n    [-69, True, False],\n    [-89, True, False],\n    [-109, True, False],\n    [-132, True, False]]],\n  ['regression: scenario 4',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[27, 40],\n     [23, 40],\n     [28, 40],\n     [67, 40],\n     [96, 40],\n     [101, 40],\n     [18, 40],\n     [11, 40],\n     [16, 40],\n     [18, 40],\n     [13, 40],\n     [16, 40],\n     [18, 40],\n     [16, 40],\n     [17, 40],\n     [10, 40],\n     [15, 40]]],\n   [[-13, False, False],\n    [-30, False, False],\n    [-42, False, False],\n    [-15, False, False],\n    [41, False, False],\n    [100, False, False],\n    [78, False, False],\n    [49, False, False],\n    [25, False, False],\n    [3, False, False],\n    [-24, False, False],\n    [-48, False, False],\n    [-70, True, False],\n    [-94, True, False],\n    [-117, True, False],\n    [-147, True, False],\n    [-172, True, True]]]],\n [['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['control: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -250},\n    [[57, 40],\n     [101, 40],\n     [100, 40],\n     [98, 40],\n     [95, 40],\n     [100, 40],\n     [101, 40],\n     [103, 40],\n     [96, 40],\n     [97, 40],\n     [14, 40],\n     [17, 40],\n     [12, 40],\n     [20, 40],\n     [13, 40]]],\n   [[17, False, False],\n    [78, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [74, False, False],\n    [51, False, False],\n    [23, False, False],\n    [3, False, False],\n    [-24, False, False]]],\n  ['regression: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[10, 40],\n     [10, 40],\n     [19, 40],\n     [28, 40],\n     [26, 40],\n     [27, 40],\n     [28, 40],\n     [26, 40],\n     [75, 40],\n     [65, 40],\n     [73, 40],\n     [71, 40],\n     [71, 40],\n     [72, 40],\n     [11, 40],\n     [13, 40],\n     [19, 40],\n     [15, 40],\n     [27, 40],\n     [30, 40]]],\n   [[-30, False, False],\n    [-60, True, False],\n    [-81, True, False],\n    [-93, True, False],\n    [-107, True, False],\n    [-120, True, False],\n    [-132, True, False],\n    [-146, True, False],\n    [-111, True, False],\n    [-86, True, False],\n    [-53, True, False],\n    [-22, True, False],\n    [9, False, False],\n    [41, False, False],\n    [12, False, False],\n    [-15, False, False],\n    [-36, False, False],\n    [-61, True, False],\n    [-74, True, False],\n    [-84, True, False]]],\n  ['control: scenario 3',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[13, 40],\n     [95, 40],\n     [100, 40],\n     [49, 40],\n     [97, 40],\n     [103, 40],\n     [97, 40],\n     [101, 40],\n     [99, 40],\n     [99, 40],\n     [105, 40],\n     [101, 40]]],\n   [[-27, False, False],\n    [28, False, False],\n    [88, False, False],\n    [97, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['regression: scenario 4',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[21, 40],\n     [25, 40],\n     [46, 40],\n     [48, 40],\n     [21, 40],\n     [24, 40],\n     [26, 40],\n     [25, 40],\n     [25, 40],\n     [45, 40],\n     [49, 40],\n     [50, 40],\n     [50, 40],\n     [48, 40],\n     [45, 40],\n     [55, 40],\n     [20, 40],\n     [23, 40],\n     [103, 40],\n     [102, 40],\n     [73, 40],\n     [75, 40]]],\n   [[-19, False, False],\n    [-34, False, False],\n    [-28, False, False],\n    [-20, False, False],\n    [-39, False, False],\n    [-55, False, False],\n    [-69, True, False],\n    [-84, True, False],\n    [-99, True, False],\n    [-94, True, False],\n    [-85, True, False],\n    [-75, True, False],\n    [-65, True, False],\n    [-57, True, False],\n    [-52, True, False],\n    [-37, True, False],\n    [-57, True, False],\n    [-74, True, False],\n    [-11, True, False],\n    [51, False, False],\n    [84, False, False],\n    [100, False, False]]]],\n [['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['regression: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[14, 40],\n     [17, 40],\n     [19, 40],\n     [12, 40],\n     [16, 40],\n     [10, 40],\n     [16, 40],\n     [12, 40],\n     [16, 40],\n     [19, 40],\n     [16, 40],\n     [12, 40],\n     [20, 40],\n     [10, 40],\n     [20, 40],\n     [11, 40],\n     [20, 40]]],\n   [[-26, False, False],\n    [-49, False, False],\n    [-70, True, False],\n    [-98, True, False],\n    [-122, True, False],\n    [-152, True, True],\n    [-176, True, True],\n    [-204, True, True],\n    [-228, True, True],\n    [-249, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True]]],\n  ['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['control: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[68, 40],\n     [72, 40],\n     [75, 40],\n     [69, 40],\n     [70, 40],\n     [66, 40],\n     [65, 40],\n     [68, 40],\n     [75, 40],\n     [71, 40],\n     [70, 40],\n     [74, 40],\n     [68, 40],\n     [74, 40],\n     [68, 40],\n     [67, 40],\n     [69, 40],\n     [72, 40],\n     [68, 40],\n     [70, 40],\n     [75, 40],\n     [72, 40],\n     [75, 40],\n     [66, 40]]],\n   [[28, False, False],\n    [60, False, False],\n    [95, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['control: scenario 3',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -250},\n    [[67, 40],\n     [23, 40],\n     [22, 40],\n     [25, 40],\n     [49, 40],\n     [10, 40],\n     [100, 40],\n     [95, 40],\n     [103, 40],\n     [100, 40],\n     [104, 40],\n     [14, 40],\n     [50, 40],\n     [48, 40],\n     [51, 40],\n     [48, 40],\n     [46, 40],\n     [53, 40],\n     [52, 40],\n     [47, 40],\n     [52, 40]]],\n   [[27, False, False],\n    [10, False, False],\n    [-8, False, False],\n    [-23, False, False],\n    [-14, False, False],\n    [-44, False, False],\n    [16, False, False],\n    [71, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [74, False, False],\n    [84, False, False],\n    [92, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['control: scenario 4',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[57, 40],\n     [54, 40],\n     [54, 40],\n     [50, 40],\n     [55, 40],\n     [52, 40],\n     [53, 40],\n     [50, 40],\n     [59, 40],\n     [50, 40],\n     [51, 40],\n     [57, 40],\n     [73, 40],\n     [67, 40],\n     [15, 40],\n     [71, 40],\n     [65, 40],\n     [74, 40]]],\n   [[17, False, False],\n    [31, False, False],\n    [45, False, False],\n    [55, False, False],\n    [70, False, False],\n    [82, False, False],\n    [95, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [75, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]]],\n [['regression: scenario 4',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[14, 40], [17, 40], [17, 40], [13, 40], [12, 40], [20, 40], [12, 40], [19, 40], [14, 40], [20, 40]]],\n   [[-26, False, False],\n    [-49, False, False],\n    [-72, True, False],\n    [-99, True, False],\n    [-127, True, False],\n    [-147, True, False],\n    [-175, True, False],\n    [-196, True, False],\n    [-222, True, False],\n    [-242, True, False]]],\n  ['regression: scenario 6',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[22, 40],\n     [29, 40],\n     [20, 40],\n     [19, 40],\n     [12, 40],\n     [10, 40],\n     [20, 40],\n     [17, 40],\n     [19, 40],\n     [17, 40],\n     [10, 40],\n     [10, 40],\n     [13, 40],\n     [65, 40],\n     [66, 40],\n     [67, 40],\n     [73, 40],\n     [65, 40],\n     [68, 40]]],\n   [[-18, False, False],\n    [-29, False, False],\n    [-49, False, False],\n    [-70, True, False],\n    [-98, True, False],\n    [-128, True, False],\n    [-148, True, False],\n    [-171, True, True],\n    [-192, True, True],\n    [-215, True, True],\n    [-245, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-225, True, True],\n    [-199, True, True],\n    [-172, True, True],\n    [-139, True, True],\n    [-114, True, True],\n    [-86, True, True]]],\n  ['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['control: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[55, 40],\n     [51, 40],\n     [74, 40],\n     [47, 40],\n     [27, 40],\n     [24, 40],\n     [105, 40],\n     [55, 40],\n     [46, 40],\n     [45, 40],\n     [55, 40],\n     [53, 40],\n     [101, 40],\n     [105, 40],\n     [95, 40],\n     [54, 40]]],\n   [[15, False, False],\n    [26, False, False],\n    [60, False, False],\n    [67, False, False],\n    [54, False, False],\n    [38, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['control: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[52, 40],\n     [102, 40],\n     [104, 40],\n     [97, 40],\n     [46, 40],\n     [49, 40],\n     [53, 40],\n     [53, 40],\n     [51, 40],\n     [50, 40],\n     [47, 40],\n     [52, 40]]],\n   [[12, False, False],\n    [74, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]]],\n [['regression: scenario 3',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[10, 40],\n     [18, 40],\n     [24, 40],\n     [27, 40],\n     [27, 40],\n     [27, 40],\n     [30, 40],\n     [25, 40],\n     [26, 40],\n     [103, 40],\n     [99, 40],\n     [97, 40],\n     [101, 40],\n     [14, 40],\n     [19, 40],\n     [17, 40]]],\n   [[-30, False, False],\n    [-52, False, False],\n    [-68, True, False],\n    [-81, True, False],\n    [-94, True, False],\n    [-107, True, False],\n    [-117, True, False],\n    [-132, True, False],\n    [-146, True, False],\n    [-83, True, False],\n    [-24, True, False],\n    [33, False, False],\n    [94, False, False],\n    [68, False, False],\n    [47, False, False],\n    [24, False, False]]],\n  ['regression: scenario 5',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[16, 40],\n     [10, 40],\n     [17, 40],\n     [20, 40],\n     [11, 40],\n     [20, 40],\n     [104, 40],\n     [102, 40],\n     [103, 40],\n     [97, 40],\n     [101, 40],\n     [102, 40],\n     [95, 40],\n     [103, 40],\n     [99, 40],\n     [101, 40],\n     [17, 40],\n     [17, 40],\n     [14, 40],\n     [67, 40],\n     [72, 40],\n     [74, 40]]],\n   [[-24, False, False],\n    [-54, False, False],\n    [-77, True, False],\n    [-97, True, False],\n    [-126, True, False],\n    [-146, True, False],\n    [-82, True, False],\n    [-20, True, False],\n    [43, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [77, False, False],\n    [54, False, False],\n    [28, False, False],\n    [55, False, False],\n    [87, False, False],\n    [100, False, False]]],\n  ['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['control: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[67, 40],\n     [73, 40],\n     [101, 40],\n     [96, 40],\n     [104, 40],\n     [99, 40],\n     [101, 40],\n     [98, 40],\n     [95, 40],\n     [95, 40],\n     [65, 40],\n     [71, 40]]],\n   [[27, False, False],\n    [60, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['regression: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[20, 40], [25, 40], [21, 40], [22, 40], [26, 40], [25, 40], [26, 40], [24, 40], [73, 40], [71, 40]]],\n   [[-20, False, False],\n    [-35, False, False],\n    [-54, False, False],\n    [-72, True, False],\n    [-86, True, False],\n    [-101, True, False],\n    [-115, True, False],\n    [-131, True, False],\n    [-98, True, False],\n    [-67, True, False]]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"7e4730f6ef98e7ceab2e6ad7b52e77c68abd58a3006fdb25f8272f9c79aed63e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(settings, samples):\n    dm = 0\n    comp = False\n    aux = False\n    out = []\n    for supply, target in samples:\n        dm = max(settings['floor'], min(100, dm + supply - target))\n        if comp and dm >= settings['stop_dm']:\n            comp = False\n        elif not comp and dm <= settings['start_dm']:\n            comp = True\n        if aux and dm >= settings['start_dm']:\n            aux = False\n        elif not aux and dm <= settings['aux_dm']:\n            aux = True\n        out.append([dm, comp, aux])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['control: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[11, 40],\n     [50, 40],\n     [49, 40],\n     [53, 40],\n     [49, 40],\n     [71, 40],\n     [105, 40],\n     [100, 40],\n     [17, 40],\n     [13, 40],\n     [102, 40],\n     [102, 40],\n     [99, 40],\n     [105, 40],\n     [96, 40],\n     [50, 40],\n     [48, 40],\n     [46, 40],\n     [47, 40],\n     [50, 40],\n     [52, 40],\n     [48, 40],\n     [71, 40]]],\n   [[-29, False, False],\n    [-19, False, False],\n    [-10, False, False],\n    [3, False, False],\n    [12, False, False],\n    [43, False, False],\n    [100, False, False],\n    [100, False, False],\n    [77, False, False],\n    [50, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['control: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -250},\n    [[67, 40],\n     [67, 40],\n     [73, 40],\n     [71, 40],\n     [11, 40],\n     [19, 40],\n     [69, 40],\n     [70, 40],\n     [65, 40],\n     [70, 40],\n     [66, 40],\n     [66, 40],\n     [71, 40],\n     [68, 40],\n     [70, 40],\n     [73, 40],\n     [74, 40],\n     [73, 40],\n     [65, 40],\n     [75, 40],\n     [104, 40]]],\n   [[27, False, False],\n    [54, False, False],\n    [87, False, False],\n    [100, False, False],\n    [71, False, False],\n    [50, False, False],\n    [79, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['regression: scenario 3',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[71, 40],\n     [75, 40],\n     [72, 40],\n     [68, 40],\n     [75, 40],\n     [48, 40],\n     [45, 40],\n     [30, 40],\n     [18, 40],\n     [19, 40],\n     [12, 40],\n     [16, 40],\n     [10, 40],\n     [18, 40],\n     [18, 40],\n     [18, 40],\n     [72, 40],\n     [20, 40],\n     [20, 40],\n     [17, 40]]],\n   [[31, False, False],\n    [66, False, False],\n    [98, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [90, False, False],\n    [68, False, False],\n    [47, False, False],\n    [19, False, False],\n    [-5, False, False],\n    [-35, False, False],\n    [-57, False, False],\n    [-79, True, False],\n    [-101, True, False],\n    [-69, True, False],\n    [-89, True, False],\n    [-109, True, False],\n    [-132, True, False]]],\n  ['regression: scenario 4',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[27, 40],\n     [23, 40],\n     [28, 40],\n     [67, 40],\n     [96, 40],\n     [101, 40],\n     [18, 40],\n     [11, 40],\n     [16, 40],\n     [18, 40],\n     [13, 40],\n     [16, 40],\n     [18, 40],\n     [16, 40],\n     [17, 40],\n     [10, 40],\n     [15, 40]]],\n   [[-13, False, False],\n    [-30, False, False],\n    [-42, False, False],\n    [-15, False, False],\n    [41, False, False],\n    [100, False, False],\n    [78, False, False],\n    [49, False, False],\n    [25, False, False],\n    [3, False, False],\n    [-24, False, False],\n    [-48, False, False],\n    [-70, True, False],\n    [-94, True, False],\n    [-117, True, False],\n    [-147, True, False],\n    [-172, True, True]]]],\n [['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['control: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -250},\n    [[57, 40],\n     [101, 40],\n     [100, 40],\n     [98, 40],\n     [95, 40],\n     [100, 40],\n     [101, 40],\n     [103, 40],\n     [96, 40],\n     [97, 40],\n     [14, 40],\n     [17, 40],\n     [12, 40],\n     [20, 40],\n     [13, 40]]],\n   [[17, False, False],\n    [78, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [74, False, False],\n    [51, False, False],\n    [23, False, False],\n    [3, False, False],\n    [-24, False, False]]],\n  ['regression: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[10, 40],\n     [10, 40],\n     [19, 40],\n     [28, 40],\n     [26, 40],\n     [27, 40],\n     [28, 40],\n     [26, 40],\n     [75, 40],\n     [65, 40],\n     [73, 40],\n     [71, 40],\n     [71, 40],\n     [72, 40],\n     [11, 40],\n     [13, 40],\n     [19, 40],\n     [15, 40],\n     [27, 40],\n     [30, 40]]],\n   [[-30, False, False],\n    [-60, True, False],\n    [-81, True, False],\n    [-93, True, False],\n    [-107, True, False],\n    [-120, True, False],\n    [-132, True, False],\n    [-146, True, False],\n    [-111, True, False],\n    [-86, True, False],\n    [-53, True, False],\n    [-22, True, False],\n    [9, False, False],\n    [41, False, False],\n    [12, False, False],\n    [-15, False, False],\n    [-36, False, False],\n    [-61, True, False],\n    [-74, True, False],\n    [-84, True, False]]],\n  ['control: scenario 3',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[13, 40],\n     [95, 40],\n     [100, 40],\n     [49, 40],\n     [97, 40],\n     [103, 40],\n     [97, 40],\n     [101, 40],\n     [99, 40],\n     [99, 40],\n     [105, 40],\n     [101, 40]]],\n   [[-27, False, False],\n    [28, False, False],\n    [88, False, False],\n    [97, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['regression: scenario 4',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[21, 40],\n     [25, 40],\n     [46, 40],\n     [48, 40],\n     [21, 40],\n     [24, 40],\n     [26, 40],\n     [25, 40],\n     [25, 40],\n     [45, 40],\n     [49, 40],\n     [50, 40],\n     [50, 40],\n     [48, 40],\n     [45, 40],\n     [55, 40],\n     [20, 40],\n     [23, 40],\n     [103, 40],\n     [102, 40],\n     [73, 40],\n     [75, 40]]],\n   [[-19, False, False],\n    [-34, False, False],\n    [-28, False, False],\n    [-20, False, False],\n    [-39, False, False],\n    [-55, False, False],\n    [-69, True, False],\n    [-84, True, False],\n    [-99, True, False],\n    [-94, True, False],\n    [-85, True, False],\n    [-75, True, False],\n    [-65, True, False],\n    [-57, True, False],\n    [-52, True, False],\n    [-37, True, False],\n    [-57, True, False],\n    [-74, True, False],\n    [-11, True, False],\n    [51, False, False],\n    [84, False, False],\n    [100, False, False]]]],\n [['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['regression: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[14, 40],\n     [17, 40],\n     [19, 40],\n     [12, 40],\n     [16, 40],\n     [10, 40],\n     [16, 40],\n     [12, 40],\n     [16, 40],\n     [19, 40],\n     [16, 40],\n     [12, 40],\n     [20, 40],\n     [10, 40],\n     [20, 40],\n     [11, 40],\n     [20, 40]]],\n   [[-26, False, False],\n    [-49, False, False],\n    [-70, True, False],\n    [-98, True, False],\n    [-122, True, False],\n    [-152, True, True],\n    [-176, True, True],\n    [-204, True, True],\n    [-228, True, True],\n    [-249, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-250, True, True]]],\n  ['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['control: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[68, 40],\n     [72, 40],\n     [75, 40],\n     [69, 40],\n     [70, 40],\n     [66, 40],\n     [65, 40],\n     [68, 40],\n     [75, 40],\n     [71, 40],\n     [70, 40],\n     [74, 40],\n     [68, 40],\n     [74, 40],\n     [68, 40],\n     [67, 40],\n     [69, 40],\n     [72, 40],\n     [68, 40],\n     [70, 40],\n     [75, 40],\n     [72, 40],\n     [75, 40],\n     [66, 40]]],\n   [[28, False, False],\n    [60, False, False],\n    [95, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['control: scenario 3',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -250},\n    [[67, 40],\n     [23, 40],\n     [22, 40],\n     [25, 40],\n     [49, 40],\n     [10, 40],\n     [100, 40],\n     [95, 40],\n     [103, 40],\n     [100, 40],\n     [104, 40],\n     [14, 40],\n     [50, 40],\n     [48, 40],\n     [51, 40],\n     [48, 40],\n     [46, 40],\n     [53, 40],\n     [52, 40],\n     [47, 40],\n     [52, 40]]],\n   [[27, False, False],\n    [10, False, False],\n    [-8, False, False],\n    [-23, False, False],\n    [-14, False, False],\n    [-44, False, False],\n    [16, False, False],\n    [71, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [74, False, False],\n    [84, False, False],\n    [92, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['control: scenario 4',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[57, 40],\n     [54, 40],\n     [54, 40],\n     [50, 40],\n     [55, 40],\n     [52, 40],\n     [53, 40],\n     [50, 40],\n     [59, 40],\n     [50, 40],\n     [51, 40],\n     [57, 40],\n     [73, 40],\n     [67, 40],\n     [15, 40],\n     [71, 40],\n     [65, 40],\n     [74, 40]]],\n   [[17, False, False],\n    [31, False, False],\n    [45, False, False],\n    [55, False, False],\n    [70, False, False],\n    [82, False, False],\n    [95, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [75, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]]],\n [['regression: scenario 4',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[14, 40], [17, 40], [17, 40], [13, 40], [12, 40], [20, 40], [12, 40], [19, 40], [14, 40], [20, 40]]],\n   [[-26, False, False],\n    [-49, False, False],\n    [-72, True, False],\n    [-99, True, False],\n    [-127, True, False],\n    [-147, True, False],\n    [-175, True, False],\n    [-196, True, False],\n    [-222, True, False],\n    [-242, True, False]]],\n  ['regression: scenario 6',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[22, 40],\n     [29, 40],\n     [20, 40],\n     [19, 40],\n     [12, 40],\n     [10, 40],\n     [20, 40],\n     [17, 40],\n     [19, 40],\n     [17, 40],\n     [10, 40],\n     [10, 40],\n     [13, 40],\n     [65, 40],\n     [66, 40],\n     [67, 40],\n     [73, 40],\n     [65, 40],\n     [68, 40]]],\n   [[-18, False, False],\n    [-29, False, False],\n    [-49, False, False],\n    [-70, True, False],\n    [-98, True, False],\n    [-128, True, False],\n    [-148, True, False],\n    [-171, True, True],\n    [-192, True, True],\n    [-215, True, True],\n    [-245, True, True],\n    [-250, True, True],\n    [-250, True, True],\n    [-225, True, True],\n    [-199, True, True],\n    [-172, True, True],\n    [-139, True, True],\n    [-114, True, True],\n    [-86, True, True]]],\n  ['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['control: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[55, 40],\n     [51, 40],\n     [74, 40],\n     [47, 40],\n     [27, 40],\n     [24, 40],\n     [105, 40],\n     [55, 40],\n     [46, 40],\n     [45, 40],\n     [55, 40],\n     [53, 40],\n     [101, 40],\n     [105, 40],\n     [95, 40],\n     [54, 40]]],\n   [[15, False, False],\n    [26, False, False],\n    [60, False, False],\n    [67, False, False],\n    [54, False, False],\n    [38, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['control: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[52, 40],\n     [102, 40],\n     [104, 40],\n     [97, 40],\n     [46, 40],\n     [49, 40],\n     [53, 40],\n     [53, 40],\n     [51, 40],\n     [50, 40],\n     [47, 40],\n     [52, 40]]],\n   [[12, False, False],\n    [74, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]]],\n [['regression: scenario 3',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[10, 40],\n     [18, 40],\n     [24, 40],\n     [27, 40],\n     [27, 40],\n     [27, 40],\n     [30, 40],\n     [25, 40],\n     [26, 40],\n     [103, 40],\n     [99, 40],\n     [97, 40],\n     [101, 40],\n     [14, 40],\n     [19, 40],\n     [17, 40]]],\n   [[-30, False, False],\n    [-52, False, False],\n    [-68, True, False],\n    [-81, True, False],\n    [-94, True, False],\n    [-107, True, False],\n    [-117, True, False],\n    [-132, True, False],\n    [-146, True, False],\n    [-83, True, False],\n    [-24, True, False],\n    [33, False, False],\n    [94, False, False],\n    [68, False, False],\n    [47, False, False],\n    [24, False, False]]],\n  ['regression: scenario 5',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -300, 'floor': -400},\n    [[16, 40],\n     [10, 40],\n     [17, 40],\n     [20, 40],\n     [11, 40],\n     [20, 40],\n     [104, 40],\n     [102, 40],\n     [103, 40],\n     [97, 40],\n     [101, 40],\n     [102, 40],\n     [95, 40],\n     [103, 40],\n     [99, 40],\n     [101, 40],\n     [17, 40],\n     [17, 40],\n     [14, 40],\n     [67, 40],\n     [72, 40],\n     [74, 40]]],\n   [[-24, False, False],\n    [-54, False, False],\n    [-77, True, False],\n    [-97, True, False],\n    [-126, True, False],\n    [-146, True, False],\n    [-82, True, False],\n    [-20, True, False],\n    [43, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [77, False, False],\n    [54, False, False],\n    [28, False, False],\n    [55, False, False],\n    [87, False, False],\n    [100, False, False]]],\n  ['regression: deficit and recovery',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40],\n     [60, 40]]],\n   [[-20, False, False],\n    [-40, False, False],\n    [-60, True, False],\n    [-80, True, False],\n    [-100, True, True],\n    [-120, True, True],\n    [-140, True, True],\n    [-120, True, True],\n    [-100, True, True],\n    [-80, True, True],\n    [-60, True, False],\n    [-40, True, False],\n    [-20, True, False],\n    [0, False, False]]],\n  ['control: long surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [70, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40],\n     [20, 40]]],\n   [[30, False, False],\n    [60, False, False],\n    [90, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [80, False, False],\n    [60, False, False],\n    [40, False, False],\n    [20, False, False],\n    [0, False, False]]],\n  ['regression: deep deficit floor',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [0, 40], [80, 40], [80, 40], [80, 40], [80, 40]]],\n   [[-40, False, False],\n    [-80, True, False],\n    [-120, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-150, True, True],\n    [-110, True, True],\n    [-70, True, True],\n    [-30, True, False],\n    [10, False, False]]],\n  ['regression: start then immediate surplus',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -100, 'floor': -150},\n    [[0, 40], [20, 40], [70, 40], [70, 40], [45, 40]]],\n   [[-40, False, False], [-60, True, False], [-30, True, False], [0, False, False], [5, False, False]]],\n  ['control: scenario 1',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -400},\n    [[67, 40],\n     [73, 40],\n     [101, 40],\n     [96, 40],\n     [104, 40],\n     [99, 40],\n     [101, 40],\n     [98, 40],\n     [95, 40],\n     [95, 40],\n     [65, 40],\n     [71, 40]]],\n   [[27, False, False],\n    [60, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False],\n    [100, False, False]]],\n  ['regression: scenario 2',\n   [{'start_dm': -60, 'stop_dm': 0, 'aux_dm': -150, 'floor': -250},\n    [[20, 40], [25, 40], [21, 40], [22, 40], [26, 40], [25, 40], [26, 40], [24, 40], [73, 40], [71, 40]]],\n   [[-20, False, False],\n    [-35, False, False],\n    [-54, False, False],\n    [-72, True, False],\n    [-86, True, False],\n    [-101, True, False],\n    [-115, True, False],\n    [-131, True, False],\n    [-98, True, False],\n    [-67, True, False]]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic bounded teaching model of one thermostat or HVAC controller decision evaluated per sample. Temperatures are integer tenths of a degree Fahrenheit unless stated otherwise. The contract is a stipulated toy convention, not a claim of conformance to any manufacturer, ASHRAE guideline or code. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-hvac-thermostat-control-degree-minute-heat-pump-update-order","generated_at":"2026-09-29T14:51:47.901984+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Residential and light-commercial thermostats make these decisions sample by sample; each defect changes equipment calls in a way that shows up as short cycling, comfort complaints or equipment stress.","repair":"Update DM first, then evaluate the thresholds.","root_cause":"The compressor and aux decisions are evaluated before this minute's DM update.","sha256":"ab36b55699a86e7abd6122d9f94e0dbc2241c3873f1abfba708cdaaeff6279ba","title":"Degree-minute decisions use the previous minute's integral · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.548,"exit_code":1,"observations":[{"actual":[[-20,false,false],[-40,false,false],[-60,false,false],[-80,true,false],[-100,true,true],[-120,true,true],[-140,true,true],[-120,true,true],[-100,true,true],[-80,true,true],[-60,true,false],[-40,true,false],[-20,true,false],[0,true,false]],"check":"regression: deficit and recovery","expected":[[-20,false,false],[-40,false,false],[-60,true,false],[-80,true,false],[-100,true,true],[-120,true,true],[-140,true,true],[-120,true,true],[-100,true,true],[-80,true,true],[-60,true,false],[-40,true,false],[-20,true,false],[0,false,false]],"passed":false},{"actual":[[-40,false,false],[-80,false,false],[-120,true,true],[-150,true,true],[-150,true,true],[-150,true,true],[-110,true,true],[-70,true,true],[-30,true,false],[10,true,false]],"check":"regression: deep deficit floor","expected":[[-40,false,false],[-80,true,false],[-120,true,true],[-150,true,true],[-150,true,true],[-150,true,true],[-110,true,true],[-70,true,true],[-30,true,false],[10,false,false]],"passed":false},{"actual":[[30,false,false],[60,false,false],[90,false,false],[100,false,false],[100,false,false],[100,false,false],[80,false,false],[60,false,false],[40,false,false],[20,false,false],[0,false,false]],"check":"control: long surplus","expected":[[30,false,false],[60,false,false],[90,false,false],[100,false,false],[100,false,false],[100,false,false],[80,false,false],[60,false,false],[40,false,false],[20,false,false],[0,false,false]],"passed":true},{"actual":[[-40,false,false],[-60,false,false],[-30,true,false],[0,true,false],[5,false,false]],"check":"regression: start then immediate surplus","expected":[[-40,false,false],[-60,true,false],[-30,true,false],[0,false,false],[5,false,false]],"passed":false},{"actual":[[-29,false,false],[-19,false,false],[-10,false,false],[3,false,false],[12,false,false],[43,false,false],[100,false,false],[100,false,false],[77,false,false],[50,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false]],"check":"control: scenario 1","expected":[[-29,false,false],[-19,false,false],[-10,false,false],[3,false,false],[12,false,false],[43,false,false],[100,false,false],[100,false,false],[77,false,false],[50,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false]],"passed":true},{"actual":[[27,false,false],[54,false,false],[87,false,false],[100,false,false],[71,false,false],[50,false,false],[79,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false]],"check":"control: scenario 2","expected":[[27,false,false],[54,false,false],[87,false,false],[100,false,false],[71,false,false],[50,false,false],[79,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false]],"passed":true},{"actual":[[31,false,false],[66,false,false],[98,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[90,false,false],[68,false,false],[47,false,false],[19,false,false],[-5,false,false],[-35,false,false],[-57,false,false],[-79,false,false],[-101,true,false],[-69,true,false],[-89,true,false],[-109,true,false],[-132,true,false]],"check":"regression: scenario 3","expected":[[31,false,false],[66,false,false],[98,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[90,false,false],[68,false,false],[47,false,false],[19,false,false],[-5,false,false],[-35,false,false],[-57,false,false],[-79,true,false],[-101,true,false],[-69,true,false],[-89,true,false],[-109,true,false],[-132,true,false]],"passed":false},{"actual":[[-13,false,false],[-30,false,false],[-42,false,false],[-15,false,false],[41,false,false],[100,false,false],[78,false,false],[49,false,false],[25,false,false],[3,false,false],[-24,false,false],[-48,false,false],[-70,false,false],[-94,true,false],[-117,true,false],[-147,true,false],[-172,true,true]],"check":"regression: scenario 4","expected":[[-13,false,false],[-30,false,false],[-42,false,false],[-15,false,false],[41,false,false],[100,false,false],[78,false,false],[49,false,false],[25,false,false],[3,false,false],[-24,false,false],[-48,false,false],[-70,true,false],[-94,true,false],[-117,true,false],[-147,true,false],[-172,true,true]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: deficit and recovery\", \"actual\": [[-20, false, false], [-40, false, false], [-60, false, false], [-80, true, false], [-100, true, true], [-120, true, true], [-140, true, true], [-120, true, true], [-100, true, true], [-80, true, true], [-60, true, false], [-40, true, false], [-20, true, false], [0, true, false]], \"expected\": [[-20, false, false], [-40, false, false], [-60, true, false], [-80, true, false], [-100, true, true], [-120, true, true], [-140, true, true], [-120, true, true], [-100, true, true], [-80, true, true], [-60, true, false], [-40, true, false], [-20, true, false], [0, false, false]], \"passed\": false}, {\"check\": \"regression: deep deficit floor\", \"actual\": [[-40, false, false], [-80, false, false], [-120, true, true], [-150, true, true], [-150, true, true], [-150, true, true], [-110, true, true], [-70, true, true], [-30, true, false], [10, true, false]], \"expected\": [[-40, false, false], [-80, true, false], [-120, true, true], [-150, true, true], [-150, true, true], [-150, true, true], [-110, true, true], [-70, true, true], [-30, true, false], [10, false, false]], \"passed\": false}, {\"check\": \"control: long surplus\", \"actual\": [[30, false, false], [60, false, false], [90, false, false], [100, false, false], [100, false, false], [100, false, false], [80, false, false], [60, false, false], [40, false, false], [20, false, false], [0, false, false]], \"expected\": [[30, false, false], [60, false, false], [90, false, false], [100, false, false], [100, false, false], [100, false, false], [80, false, false], [60, false, false], [40, false, false], [20, false, false], [0, false, false]], \"passed\": true}, {\"check\": \"regression: start then immediate surplus\", \"actual\": [[-40, false, false], [-60, false, false], [-30, true, false], [0, true, false], [5, false, false]], \"expected\": [[-40, false, false], [-60, true, false], [-30, true, false], [0, false, false], [5, false, false]], \"passed\": false}, {\"check\": \"control: scenario 1\", \"actual\": [[-29, false, false], [-19, false, false], [-10, false, false], [3, false, false], [12, false, false], [43, false, false], [100, false, false], [100, false, false], [77, false, false], [50, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false]], \"expected\": [[-29, false, false], [-19, false, false], [-10, false, false], [3, false, false], [12, false, false], [43, false, false], [100, false, false], [100, false, false], [77, false, false], [50, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false]], \"passed\": true}, {\"check\": \"control: scenario 2\", \"actual\": [[27, false, false], [54, false, false], [87, false, false], [100, false, false], [71, false, false], [50, false, false], [79, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false]], \"expected\": [[27, false, false], [54, false, false], [87, false, false], [100, false, false], [71, false, false], [50, false, false], [79, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false]], \"passed\": true}, {\"check\": \"regression: scenario 3\", \"actual\": [[31, false, false], [66, false, false], [98, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [90, false, false], [68, false, false], [47, false, false], [19, false, false], [-5, false, false], [-35, false, false], [-57, false, false], [-79, false, false], [-101, true, false], [-69, true, false], [-89, true, false], [-109, true, false], [-132, true, false]], \"expected\": [[31, false, false], [66, false, false], [98, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [90, false, false], [68, false, false], [47, false, false], [19, false, false], [-5, false, false], [-35, false, false], [-57, false, false], [-79, true, false], [-101, true, false], [-69, true, false], [-89, true, false], [-109, true, false], [-132, true, false]], \"passed\": false}, {\"check\": \"regression: scenario 4\", \"actual\": [[-13, false, false], [-30, false, false], [-42, false, false], [-15, false, false], [41, false, false], [100, false, false], [78, false, false], [49, false, false], [25, false, false], [3, false, false], [-24, false, false], [-48, false, false], [-70, false, false], [-94, true, false], [-117, true, false], [-147, true, false], [-172, true, true]], \"expected\": [[-13, false, false], [-30, false, false], [-42, false, false], [-15, false, false], [41, false, false], [100, false, false], [78, false, false], [49, false, false], [25, false, false], [3, false, false], [-24, false, false], [-48, false, false], [-70, true, false], [-94, true, false], [-117, true, false], [-147, true, false], [-172, true, true]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.77,"exit_code":1,"observations":[{"actual":[[-20,false,false],[-40,false,false],[-60,false,false],[-80,true,false],[-100,true,false],[-120,true,true],[-140,true,true],[-120,true,true],[-100,true,true],[-80,true,true],[-60,true,true],[-40,true,false],[-20,true,false],[0,true,false]],"check":"regression: deficit and recovery","expected":[[-20,false,false],[-40,false,false],[-60,true,false],[-80,true,false],[-100,true,true],[-120,true,true],[-140,true,true],[-120,true,true],[-100,true,true],[-80,true,true],[-60,true,false],[-40,true,false],[-20,true,false],[0,false,false]],"passed":false},{"actual":[[-40,false,false],[-80,false,false],[-120,true,false],[-150,true,true],[-150,true,true],[-150,true,true],[-110,true,true],[-70,true,true],[-30,true,true],[10,true,false]],"check":"regression: deep deficit floor","expected":[[-40,false,false],[-80,true,false],[-120,true,true],[-150,true,true],[-150,true,true],[-150,true,true],[-110,true,true],[-70,true,true],[-30,true,false],[10,false,false]],"passed":false},{"actual":[[30,false,false],[60,false,false],[90,false,false],[100,false,false],[100,false,false],[100,false,false],[80,false,false],[60,false,false],[40,false,false],[20,false,false],[0,false,false]],"check":"control: long surplus","expected":[[30,false,false],[60,false,false],[90,false,false],[100,false,false],[100,false,false],[100,false,false],[80,false,false],[60,false,false],[40,false,false],[20,false,false],[0,false,false]],"passed":true},{"actual":[[-40,false,false],[-60,false,false],[-30,true,false],[0,true,false],[5,false,false]],"check":"regression: start then immediate surplus","expected":[[-40,false,false],[-60,true,false],[-30,true,false],[0,false,false],[5,false,false]],"passed":false},{"actual":[[-29,false,false],[-19,false,false],[-10,false,false],[3,false,false],[12,false,false],[43,false,false],[100,false,false],[100,false,false],[77,false,false],[50,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false]],"check":"control: scenario 1","expected":[[-29,false,false],[-19,false,false],[-10,false,false],[3,false,false],[12,false,false],[43,false,false],[100,false,false],[100,false,false],[77,false,false],[50,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false]],"passed":true},{"actual":[[27,false,false],[54,false,false],[87,false,false],[100,false,false],[71,false,false],[50,false,false],[79,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false]],"check":"control: scenario 2","expected":[[27,false,false],[54,false,false],[87,false,false],[100,false,false],[71,false,false],[50,false,false],[79,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false]],"passed":true},{"actual":[[31,false,false],[66,false,false],[98,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[90,false,false],[68,false,false],[47,false,false],[19,false,false],[-5,false,false],[-35,false,false],[-57,false,false],[-79,false,false],[-101,true,false],[-69,true,false],[-89,true,false],[-109,true,false],[-132,true,false]],"check":"regression: scenario 3","expected":[[31,false,false],[66,false,false],[98,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[90,false,false],[68,false,false],[47,false,false],[19,false,false],[-5,false,false],[-35,false,false],[-57,false,false],[-79,true,false],[-101,true,false],[-69,true,false],[-89,true,false],[-109,true,false],[-132,true,false]],"passed":false},{"actual":[[-13,false,false],[-30,false,false],[-42,false,false],[-15,false,false],[41,false,false],[100,false,false],[78,false,false],[49,false,false],[25,false,false],[3,false,false],[-24,false,false],[-48,false,false],[-70,false,false],[-94,true,false],[-117,true,false],[-147,true,false],[-172,true,false]],"check":"regression: scenario 4","expected":[[-13,false,false],[-30,false,false],[-42,false,false],[-15,false,false],[41,false,false],[100,false,false],[78,false,false],[49,false,false],[25,false,false],[3,false,false],[-24,false,false],[-48,false,false],[-70,true,false],[-94,true,false],[-117,true,false],[-147,true,false],[-172,true,true]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: deficit and recovery\", \"actual\": [[-20, false, false], [-40, false, false], [-60, false, false], [-80, true, false], [-100, true, false], [-120, true, true], [-140, true, true], [-120, true, true], [-100, true, true], [-80, true, true], [-60, true, true], [-40, true, false], [-20, true, false], [0, true, false]], \"expected\": [[-20, false, false], [-40, false, false], [-60, true, false], [-80, true, false], [-100, true, true], [-120, true, true], [-140, true, true], [-120, true, true], [-100, true, true], [-80, true, true], [-60, true, false], [-40, true, false], [-20, true, false], [0, false, false]], \"passed\": false}, {\"check\": \"regression: deep deficit floor\", \"actual\": [[-40, false, false], [-80, false, false], [-120, true, false], [-150, true, true], [-150, true, true], [-150, true, true], [-110, true, true], [-70, true, true], [-30, true, true], [10, true, false]], \"expected\": [[-40, false, false], [-80, true, false], [-120, true, true], [-150, true, true], [-150, true, true], [-150, true, true], [-110, true, true], [-70, true, true], [-30, true, false], [10, false, false]], \"passed\": false}, {\"check\": \"control: long surplus\", \"actual\": [[30, false, false], [60, false, false], [90, false, false], [100, false, false], [100, false, false], [100, false, false], [80, false, false], [60, false, false], [40, false, false], [20, false, false], [0, false, false]], \"expected\": [[30, false, false], [60, false, false], [90, false, false], [100, false, false], [100, false, false], [100, false, false], [80, false, false], [60, false, false], [40, false, false], [20, false, false], [0, false, false]], \"passed\": true}, {\"check\": \"regression: start then immediate surplus\", \"actual\": [[-40, false, false], [-60, false, false], [-30, true, false], [0, true, false], [5, false, false]], \"expected\": [[-40, false, false], [-60, true, false], [-30, true, false], [0, false, false], [5, false, false]], \"passed\": false}, {\"check\": \"control: scenario 1\", \"actual\": [[-29, false, false], [-19, false, false], [-10, false, false], [3, false, false], [12, false, false], [43, false, false], [100, false, false], [100, false, false], [77, false, false], [50, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false]], \"expected\": [[-29, false, false], [-19, false, false], [-10, false, false], [3, false, false], [12, false, false], [43, false, false], [100, false, false], [100, false, false], [77, false, false], [50, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false]], \"passed\": true}, {\"check\": \"control: scenario 2\", \"actual\": [[27, false, false], [54, false, false], [87, false, false], [100, false, false], [71, false, false], [50, false, false], [79, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false]], \"expected\": [[27, false, false], [54, false, false], [87, false, false], [100, false, false], [71, false, false], [50, false, false], [79, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false]], \"passed\": true}, {\"check\": \"regression: scenario 3\", \"actual\": [[31, false, false], [66, false, false], [98, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [90, false, false], [68, false, false], [47, false, false], [19, false, false], [-5, false, false], [-35, false, false], [-57, false, false], [-79, false, false], [-101, true, false], [-69, true, false], [-89, true, false], [-109, true, false], [-132, true, false]], \"expected\": [[31, false, false], [66, false, false], [98, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [90, false, false], [68, false, false], [47, false, false], [19, false, false], [-5, false, false], [-35, false, false], [-57, false, false], [-79, true, false], [-101, true, false], [-69, true, false], [-89, true, false], [-109, true, false], [-132, true, false]], \"passed\": false}, {\"check\": \"regression: scenario 4\", \"actual\": [[-13, false, false], [-30, false, false], [-42, false, false], [-15, false, false], [41, false, false], [100, false, false], [78, false, false], [49, false, false], [25, false, false], [3, false, false], [-24, false, false], [-48, false, false], [-70, false, false], [-94, true, false], [-117, true, false], [-147, true, false], [-172, true, false]], \"expected\": [[-13, false, false], [-30, false, false], [-42, false, false], [-15, false, false], [41, false, false], [100, false, false], [78, false, false], [49, false, false], [25, false, false], [3, false, false], [-24, false, false], [-48, false, false], [-70, true, false], [-94, true, false], [-117, true, false], [-147, true, false], [-172, true, true]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.659,"exit_code":0,"observations":[{"actual":[[-20,false,false],[-40,false,false],[-60,true,false],[-80,true,false],[-100,true,true],[-120,true,true],[-140,true,true],[-120,true,true],[-100,true,true],[-80,true,true],[-60,true,false],[-40,true,false],[-20,true,false],[0,false,false]],"check":"regression: deficit and recovery","expected":[[-20,false,false],[-40,false,false],[-60,true,false],[-80,true,false],[-100,true,true],[-120,true,true],[-140,true,true],[-120,true,true],[-100,true,true],[-80,true,true],[-60,true,false],[-40,true,false],[-20,true,false],[0,false,false]],"passed":true},{"actual":[[-40,false,false],[-80,true,false],[-120,true,true],[-150,true,true],[-150,true,true],[-150,true,true],[-110,true,true],[-70,true,true],[-30,true,false],[10,false,false]],"check":"regression: deep deficit floor","expected":[[-40,false,false],[-80,true,false],[-120,true,true],[-150,true,true],[-150,true,true],[-150,true,true],[-110,true,true],[-70,true,true],[-30,true,false],[10,false,false]],"passed":true},{"actual":[[30,false,false],[60,false,false],[90,false,false],[100,false,false],[100,false,false],[100,false,false],[80,false,false],[60,false,false],[40,false,false],[20,false,false],[0,false,false]],"check":"control: long surplus","expected":[[30,false,false],[60,false,false],[90,false,false],[100,false,false],[100,false,false],[100,false,false],[80,false,false],[60,false,false],[40,false,false],[20,false,false],[0,false,false]],"passed":true},{"actual":[[-40,false,false],[-60,true,false],[-30,true,false],[0,false,false],[5,false,false]],"check":"regression: start then immediate surplus","expected":[[-40,false,false],[-60,true,false],[-30,true,false],[0,false,false],[5,false,false]],"passed":true},{"actual":[[-29,false,false],[-19,false,false],[-10,false,false],[3,false,false],[12,false,false],[43,false,false],[100,false,false],[100,false,false],[77,false,false],[50,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false]],"check":"control: scenario 1","expected":[[-29,false,false],[-19,false,false],[-10,false,false],[3,false,false],[12,false,false],[43,false,false],[100,false,false],[100,false,false],[77,false,false],[50,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false]],"passed":true},{"actual":[[27,false,false],[54,false,false],[87,false,false],[100,false,false],[71,false,false],[50,false,false],[79,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false]],"check":"control: scenario 2","expected":[[27,false,false],[54,false,false],[87,false,false],[100,false,false],[71,false,false],[50,false,false],[79,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false]],"passed":true},{"actual":[[31,false,false],[66,false,false],[98,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[90,false,false],[68,false,false],[47,false,false],[19,false,false],[-5,false,false],[-35,false,false],[-57,false,false],[-79,true,false],[-101,true,false],[-69,true,false],[-89,true,false],[-109,true,false],[-132,true,false]],"check":"regression: scenario 3","expected":[[31,false,false],[66,false,false],[98,false,false],[100,false,false],[100,false,false],[100,false,false],[100,false,false],[90,false,false],[68,false,false],[47,false,false],[19,false,false],[-5,false,false],[-35,false,false],[-57,false,false],[-79,true,false],[-101,true,false],[-69,true,false],[-89,true,false],[-109,true,false],[-132,true,false]],"passed":true},{"actual":[[-13,false,false],[-30,false,false],[-42,false,false],[-15,false,false],[41,false,false],[100,false,false],[78,false,false],[49,false,false],[25,false,false],[3,false,false],[-24,false,false],[-48,false,false],[-70,true,false],[-94,true,false],[-117,true,false],[-147,true,false],[-172,true,true]],"check":"regression: scenario 4","expected":[[-13,false,false],[-30,false,false],[-42,false,false],[-15,false,false],[41,false,false],[100,false,false],[78,false,false],[49,false,false],[25,false,false],[3,false,false],[-24,false,false],[-48,false,false],[-70,true,false],[-94,true,false],[-117,true,false],[-147,true,false],[-172,true,true]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: deficit and recovery\", \"actual\": [[-20, false, false], [-40, false, false], [-60, true, false], [-80, true, false], [-100, true, true], [-120, true, true], [-140, true, true], [-120, true, true], [-100, true, true], [-80, true, true], [-60, true, false], [-40, true, false], [-20, true, false], [0, false, false]], \"expected\": [[-20, false, false], [-40, false, false], [-60, true, false], [-80, true, false], [-100, true, true], [-120, true, true], [-140, true, true], [-120, true, true], [-100, true, true], [-80, true, true], [-60, true, false], [-40, true, false], [-20, true, false], [0, false, false]], \"passed\": true}, {\"check\": \"regression: deep deficit floor\", \"actual\": [[-40, false, false], [-80, true, false], [-120, true, true], [-150, true, true], [-150, true, true], [-150, true, true], [-110, true, true], [-70, true, true], [-30, true, false], [10, false, false]], \"expected\": [[-40, false, false], [-80, true, false], [-120, true, true], [-150, true, true], [-150, true, true], [-150, true, true], [-110, true, true], [-70, true, true], [-30, true, false], [10, false, false]], \"passed\": true}, {\"check\": \"control: long surplus\", \"actual\": [[30, false, false], [60, false, false], [90, false, false], [100, false, false], [100, false, false], [100, false, false], [80, false, false], [60, false, false], [40, false, false], [20, false, false], [0, false, false]], \"expected\": [[30, false, false], [60, false, false], [90, false, false], [100, false, false], [100, false, false], [100, false, false], [80, false, false], [60, false, false], [40, false, false], [20, false, false], [0, false, false]], \"passed\": true}, {\"check\": \"regression: start then immediate surplus\", \"actual\": [[-40, false, false], [-60, true, false], [-30, true, false], [0, false, false], [5, false, false]], \"expected\": [[-40, false, false], [-60, true, false], [-30, true, false], [0, false, false], [5, false, false]], \"passed\": true}, {\"check\": \"control: scenario 1\", \"actual\": [[-29, false, false], [-19, false, false], [-10, false, false], [3, false, false], [12, false, false], [43, false, false], [100, false, false], [100, false, false], [77, false, false], [50, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false]], \"expected\": [[-29, false, false], [-19, false, false], [-10, false, false], [3, false, false], [12, false, false], [43, false, false], [100, false, false], [100, false, false], [77, false, false], [50, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false]], \"passed\": true}, {\"check\": \"control: scenario 2\", \"actual\": [[27, false, false], [54, false, false], [87, false, false], [100, false, false], [71, false, false], [50, false, false], [79, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false]], \"expected\": [[27, false, false], [54, false, false], [87, false, false], [100, false, false], [71, false, false], [50, false, false], [79, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false]], \"passed\": true}, {\"check\": \"regression: scenario 3\", \"actual\": [[31, false, false], [66, false, false], [98, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [90, false, false], [68, false, false], [47, false, false], [19, false, false], [-5, false, false], [-35, false, false], [-57, false, false], [-79, true, false], [-101, true, false], [-69, true, false], [-89, true, false], [-109, true, false], [-132, true, false]], \"expected\": [[31, false, false], [66, false, false], [98, false, false], [100, false, false], [100, false, false], [100, false, false], [100, false, false], [90, false, false], [68, false, false], [47, false, false], [19, false, false], [-5, false, false], [-35, false, false], [-57, false, false], [-79, true, false], [-101, true, false], [-69, true, false], [-89, true, false], [-109, true, false], [-132, true, false]], \"passed\": true}, {\"check\": \"regression: scenario 4\", \"actual\": [[-13, false, false], [-30, false, false], [-42, false, false], [-15, false, false], [41, false, false], [100, false, false], [78, false, false], [49, false, false], [25, false, false], [3, false, false], [-24, false, false], [-48, false, false], [-70, true, false], [-94, true, false], [-117, true, false], [-147, true, false], [-172, true, true]], \"expected\": [[-13, false, false], [-30, false, false], [-42, false, false], [-15, false, false], [41, false, false], [100, false, false], [78, false, false], [49, false, false], [25, false, false], [3, false, false], [-24, false, false], [-48, false, false], [-70, true, false], [-94, true, false], [-117, true, false], [-147, true, false], [-172, true, true]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}