{"abstract":"A relative profile applies before any transaction has started.","category":"EV charging session scheduling","checks":7,"contract":"Each profile has purpose max/default/tx, stack level, validity [valid_from, valid_to) (valid_to None = open), kind absolute (origin valid_from) or relative (origin session_start; skipped when no session) and periods [[offset, amps]] in any order. A profile yields the amps of the last period with offset <= t-origin, or nothing before its first period. Per purpose the highest stack wins (ties: earlier profile). tx replaces default. Effective limit is the minimum of max, tx-or-default and hw_max, ties resolved in that order. Return [amps, source].","evaluation_group":"w2-ev_charging_session_scheduling-charging-profile-stack","failed_approach":"Anchoring at the current time applies the first period immediately.","family":"w2-ev_charging_session_scheduling-charging-profile-stack-relative-profile-without-session","id":"FA-92971","implementations":{"attempt":{"sha256":"8b88469402d265e587ab8f62274d829931de9acf958022e543237de08afc3146","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(profiles, t, session_start, hw_max):\n    best = {}\n    for p in profiles:\n        if not (p['valid_from'] <= t and (p['valid_to'] is None or t < p['valid_to'])):\n            continue\n        if p['kind'] == 'relative':\n            if session_start is None:\n                session_start = t\n            origin = session_start\n        else:\n            origin = p['valid_from']\n        el = t - origin\n        lim = None\n        for off, val in sorted(p['periods']):\n            if off <= el:\n                lim = val\n        if lim is None:\n            continue\n        cur = best.get(p['purpose'])\n        if cur is None or p['stack'] > cur[0]:\n            best[p['purpose']] = [p['stack'], lim]\n    cands = []\n    if 'max' in best:\n        cands.append(['max', best['max'][1]])\n    if 'tx' in best:\n        cands.append(['tx', best['tx'][1]])\n    elif 'default' in best:\n        cands.append(['default', best['default'][1]])\n    cands.append(['hw', hw_max])\n    win = cands[0]\n    for c in cands[1:]:\n        if c[1] < win[1]:\n            win = c\n    return [win[1], win[0]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 45,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 32], [45, 20], [5, 16]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 58,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 10], [45, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 42,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 10], [0, 32]]}],\n    56, None, 24],\n   [24, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 37,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 32]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 57,\n      'valid_to': 117,\n      'kind': 'absolute',\n      'periods': [[5, 6], [10, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 32,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 10]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 38,\n      'valid_to': 95,\n      'kind': 'absolute',\n      'periods': [[45, 6], [45, 20]]}],\n    64, None, 32],\n   [6, 'default']],\n  ['control 1',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 44,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 10], [0, 10], [5, 10]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 7,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [30, 20]]}],\n    3, None, 24],\n   [24, 'hw']],\n  ['control 2',\n   [[{'purpose': 'max',\n      'stack': 2,\n      'valid_from': 11,\n      'valid_to': 21,\n      'kind': 'relative',\n      'periods': [[30, 32], [10, 20], [45, 6]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 14,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 19,\n      'valid_to': 56,\n      'kind': 'absolute',\n      'periods': [[0, 6], [45, 10], [20, 16]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 53,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [0, 32], [0, 20]]}],\n    97, None, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 60,\n      'valid_to': 108,\n      'kind': 'absolute',\n      'periods': [[45, 16]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 29,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[45, 20]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 35,\n      'valid_to': 81,\n      'kind': 'relative',\n      'periods': [[5, 16]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 19,\n      'valid_to': 86,\n      'kind': 'absolute',\n      'periods': [[10, 16], [30, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 50,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6], [5, 10], [10, 10]]}],\n    55, None, 24],\n   [24, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 37,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 16], [20, 6]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 43,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 6], [45, 6]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 4,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [45, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 39,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 16]]}],\n    5, None, 16],\n   [16, 'hw']],\n  ['control 1',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 20,\n      'valid_to': 56,\n      'kind': 'relative',\n      'periods': [[20, 10], [10, 20]]}],\n    53, 38, 24],\n   [20, 'default']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 43,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 44,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 32], [45, 6], [20, 20]]}],\n    88, 57, 24],\n   [24, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': 101,\n      'kind': 'relative',\n      'periods': [[20, 16]]}],\n    50, None, 32],\n   [32, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 60,\n      'valid_to': 84,\n      'kind': 'absolute',\n      'periods': [[20, 10], [20, 6]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 19,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 20], [10, 16]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 45,\n      'valid_to': 120,\n      'kind': 'relative',\n      'periods': [[30, 16], [5, 20]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 34,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 16]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 31,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 20], [0, 10]]}],\n    90, None, 16],\n   [16, 'tx']],\n  ['control 1',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': 52,\n      'kind': 'absolute',\n      'periods': [[30, 16], [45, 32], [0, 16]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6], [0, 10], [45, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 58,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 16]]}],\n    74, None, 24],\n   [16, 'max']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 6], [10, 6], [20, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 59,\n      'valid_to': 85,\n      'kind': 'absolute',\n      'periods': [[5, 6], [5, 20], [30, 20]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 10], [30, 10]]}],\n    15, 48, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 12,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 16], [5, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 49,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 16], [0, 32], [20, 16]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 7,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 16], [10, 20], [45, 10]]}],\n    58, None, 16],\n   [16, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 39,\n      'valid_to': 47,\n      'kind': 'relative',\n      'periods': [[20, 20]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 43,\n      'valid_to': 101,\n      'kind': 'relative',\n      'periods': [[5, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 1,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32], [30, 16], [0, 20]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 39,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 16]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 59,\n      'valid_to': 64,\n      'kind': 'absolute',\n      'periods': [[0, 16], [5, 16]]}],\n    8, None, 32],\n   [32, 'hw']],\n  ['control 1',\n   [[{'purpose': 'max',\n      'stack': 2,\n      'valid_from': 22,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[30, 6]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 34,\n      'valid_to': 106,\n      'kind': 'absolute',\n      'periods': [[30, 16], [30, 10]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 11,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 6], [30, 20]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 26,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 6], [5, 6], [45, 10]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 32], [20, 6]]}],\n    77, None, 24],\n   [20, 'tx']],\n  ['control 2',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 55,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[5, 10], [30, 10]]}],\n    25, 14, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 8,\n      'valid_to': 18,\n      'kind': 'relative',\n      'periods': [[20, 6]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 21,\n      'valid_to': 76,\n      'kind': 'relative',\n      'periods': [[10, 16]]}],\n    57, None, 16],\n   [16, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 30,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 10], [45, 20]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 36,\n      'valid_to': 103,\n      'kind': 'absolute',\n      'periods': [[20, 32], [0, 16]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 1,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [0, 16], [20, 16]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 45,\n      'valid_to': 92,\n      'kind': 'relative',\n      'periods': [[45, 10], [20, 20], [10, 20]]}],\n    69, None, 24],\n   [24, 'hw']],\n  ['control 1',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 6]]}],\n    71, 15, 16],\n   [6, 'tx']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 39,\n      'valid_to': 108,\n      'kind': 'absolute',\n      'periods': [[20, 16], [30, 32], [20, 20]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 45,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 20]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 21,\n      'valid_to': 46,\n      'kind': 'absolute',\n      'periods': [[5, 20]]}],\n    34, None, 24],\n   [20, 'default']]]]\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":"301c0e8cef3d142bed048d3681d8f91e9394893498342e19360d1dd5fe5ef5dd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(profiles, t, session_start, hw_max):\n    best = {}\n    for p in profiles:\n        if not (p['valid_from'] <= t and (p['valid_to'] is None or t < p['valid_to'])):\n            continue\n        if p['kind'] == 'relative':\n            if session_start is None:\n                session_start = 0\n            origin = session_start\n        else:\n            origin = p['valid_from']\n        el = t - origin\n        lim = None\n        for off, val in sorted(p['periods']):\n            if off <= el:\n                lim = val\n        if lim is None:\n            continue\n        cur = best.get(p['purpose'])\n        if cur is None or p['stack'] > cur[0]:\n            best[p['purpose']] = [p['stack'], lim]\n    cands = []\n    if 'max' in best:\n        cands.append(['max', best['max'][1]])\n    if 'tx' in best:\n        cands.append(['tx', best['tx'][1]])\n    elif 'default' in best:\n        cands.append(['default', best['default'][1]])\n    cands.append(['hw', hw_max])\n    win = cands[0]\n    for c in cands[1:]:\n        if c[1] < win[1]:\n            win = c\n    return [win[1], win[0]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 45,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 32], [45, 20], [5, 16]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 58,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 10], [45, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 42,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 10], [0, 32]]}],\n    56, None, 24],\n   [24, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 37,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 32]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 57,\n      'valid_to': 117,\n      'kind': 'absolute',\n      'periods': [[5, 6], [10, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 32,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 10]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 38,\n      'valid_to': 95,\n      'kind': 'absolute',\n      'periods': [[45, 6], [45, 20]]}],\n    64, None, 32],\n   [6, 'default']],\n  ['control 1',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 44,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 10], [0, 10], [5, 10]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 7,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [30, 20]]}],\n    3, None, 24],\n   [24, 'hw']],\n  ['control 2',\n   [[{'purpose': 'max',\n      'stack': 2,\n      'valid_from': 11,\n      'valid_to': 21,\n      'kind': 'relative',\n      'periods': [[30, 32], [10, 20], [45, 6]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 14,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 19,\n      'valid_to': 56,\n      'kind': 'absolute',\n      'periods': [[0, 6], [45, 10], [20, 16]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 53,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [0, 32], [0, 20]]}],\n    97, None, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 60,\n      'valid_to': 108,\n      'kind': 'absolute',\n      'periods': [[45, 16]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 29,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[45, 20]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 35,\n      'valid_to': 81,\n      'kind': 'relative',\n      'periods': [[5, 16]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 19,\n      'valid_to': 86,\n      'kind': 'absolute',\n      'periods': [[10, 16], [30, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 50,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6], [5, 10], [10, 10]]}],\n    55, None, 24],\n   [24, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 37,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 16], [20, 6]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 43,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 6], [45, 6]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 4,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [45, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 39,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 16]]}],\n    5, None, 16],\n   [16, 'hw']],\n  ['control 1',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 20,\n      'valid_to': 56,\n      'kind': 'relative',\n      'periods': [[20, 10], [10, 20]]}],\n    53, 38, 24],\n   [20, 'default']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 43,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 44,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 32], [45, 6], [20, 20]]}],\n    88, 57, 24],\n   [24, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': 101,\n      'kind': 'relative',\n      'periods': [[20, 16]]}],\n    50, None, 32],\n   [32, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 60,\n      'valid_to': 84,\n      'kind': 'absolute',\n      'periods': [[20, 10], [20, 6]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 19,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 20], [10, 16]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 45,\n      'valid_to': 120,\n      'kind': 'relative',\n      'periods': [[30, 16], [5, 20]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 34,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 16]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 31,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 20], [0, 10]]}],\n    90, None, 16],\n   [16, 'tx']],\n  ['control 1',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': 52,\n      'kind': 'absolute',\n      'periods': [[30, 16], [45, 32], [0, 16]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6], [0, 10], [45, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 58,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 16]]}],\n    74, None, 24],\n   [16, 'max']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 6], [10, 6], [20, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 59,\n      'valid_to': 85,\n      'kind': 'absolute',\n      'periods': [[5, 6], [5, 20], [30, 20]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 10], [30, 10]]}],\n    15, 48, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 12,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 16], [5, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 49,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 16], [0, 32], [20, 16]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 7,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 16], [10, 20], [45, 10]]}],\n    58, None, 16],\n   [16, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 39,\n      'valid_to': 47,\n      'kind': 'relative',\n      'periods': [[20, 20]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 43,\n      'valid_to': 101,\n      'kind': 'relative',\n      'periods': [[5, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 1,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32], [30, 16], [0, 20]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 39,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 16]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 59,\n      'valid_to': 64,\n      'kind': 'absolute',\n      'periods': [[0, 16], [5, 16]]}],\n    8, None, 32],\n   [32, 'hw']],\n  ['control 1',\n   [[{'purpose': 'max',\n      'stack': 2,\n      'valid_from': 22,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[30, 6]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 34,\n      'valid_to': 106,\n      'kind': 'absolute',\n      'periods': [[30, 16], [30, 10]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 11,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 6], [30, 20]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 26,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 6], [5, 6], [45, 10]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 32], [20, 6]]}],\n    77, None, 24],\n   [20, 'tx']],\n  ['control 2',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 55,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[5, 10], [30, 10]]}],\n    25, 14, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 8,\n      'valid_to': 18,\n      'kind': 'relative',\n      'periods': [[20, 6]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 21,\n      'valid_to': 76,\n      'kind': 'relative',\n      'periods': [[10, 16]]}],\n    57, None, 16],\n   [16, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 30,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 10], [45, 20]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 36,\n      'valid_to': 103,\n      'kind': 'absolute',\n      'periods': [[20, 32], [0, 16]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 1,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [0, 16], [20, 16]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 45,\n      'valid_to': 92,\n      'kind': 'relative',\n      'periods': [[45, 10], [20, 20], [10, 20]]}],\n    69, None, 24],\n   [24, 'hw']],\n  ['control 1',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 6]]}],\n    71, 15, 16],\n   [6, 'tx']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 39,\n      'valid_to': 108,\n      'kind': 'absolute',\n      'periods': [[20, 16], [30, 32], [20, 20]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 45,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 20]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 21,\n      'valid_to': 46,\n      'kind': 'absolute',\n      'periods': [[5, 20]]}],\n    34, None, 24],\n   [20, 'default']]]]\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":"1e2c38c543082d91d75a9ae5ffc8c32388088f968bcf68554188dc5950a01ac1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(profiles, t, session_start, hw_max):\n    best = {}\n    for p in profiles:\n        if not (p['valid_from'] <= t and (p['valid_to'] is None or t < p['valid_to'])):\n            continue\n        if p['kind'] == 'relative':\n            if session_start is None:\n                continue\n            origin = session_start\n        else:\n            origin = p['valid_from']\n        el = t - origin\n        lim = None\n        for off, val in sorted(p['periods']):\n            if off <= el:\n                lim = val\n        if lim is None:\n            continue\n        cur = best.get(p['purpose'])\n        if cur is None or p['stack'] > cur[0]:\n            best[p['purpose']] = [p['stack'], lim]\n    cands = []\n    if 'max' in best:\n        cands.append(['max', best['max'][1]])\n    if 'tx' in best:\n        cands.append(['tx', best['tx'][1]])\n    elif 'default' in best:\n        cands.append(['default', best['default'][1]])\n    cands.append(['hw', hw_max])\n    win = cands[0]\n    for c in cands[1:]:\n        if c[1] < win[1]:\n            win = c\n    return [win[1], win[0]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 45,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 32], [45, 20], [5, 16]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 58,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 10], [45, 32], [0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 42,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 10], [0, 32]]}],\n    56, None, 24],\n   [24, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 37,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 20], [30, 32]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 57,\n      'valid_to': 117,\n      'kind': 'absolute',\n      'periods': [[5, 6], [10, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 32,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 10]]},\n     {'purpose': 'max',\n      'stack': 2,\n      'valid_from': 38,\n      'valid_to': 95,\n      'kind': 'absolute',\n      'periods': [[45, 6], [45, 20]]}],\n    64, None, 32],\n   [6, 'default']],\n  ['control 1',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 44,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 10], [0, 10], [5, 10]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 7,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [30, 20]]}],\n    3, None, 24],\n   [24, 'hw']],\n  ['control 2',\n   [[{'purpose': 'max',\n      'stack': 2,\n      'valid_from': 11,\n      'valid_to': 21,\n      'kind': 'relative',\n      'periods': [[30, 32], [10, 20], [45, 6]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 14,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 19,\n      'valid_to': 56,\n      'kind': 'absolute',\n      'periods': [[0, 6], [45, 10], [20, 16]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 53,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [0, 32], [0, 20]]}],\n    97, None, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 60,\n      'valid_to': 108,\n      'kind': 'absolute',\n      'periods': [[45, 16]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 29,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[45, 20]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 35,\n      'valid_to': 81,\n      'kind': 'relative',\n      'periods': [[5, 16]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 19,\n      'valid_to': 86,\n      'kind': 'absolute',\n      'periods': [[10, 16], [30, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 50,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6], [5, 10], [10, 10]]}],\n    55, None, 24],\n   [24, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 37,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 16], [20, 6]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 43,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 6], [45, 6]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 4,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [45, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 39,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 16]]}],\n    5, None, 16],\n   [16, 'hw']],\n  ['control 1',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 20,\n      'valid_to': 56,\n      'kind': 'relative',\n      'periods': [[20, 10], [10, 20]]}],\n    53, 38, 24],\n   [20, 'default']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 43,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 44,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 32], [45, 6], [20, 20]]}],\n    88, 57, 24],\n   [24, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': 101,\n      'kind': 'relative',\n      'periods': [[20, 16]]}],\n    50, None, 32],\n   [32, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'max',\n      'stack': 1,\n      'valid_from': 60,\n      'valid_to': 84,\n      'kind': 'absolute',\n      'periods': [[20, 10], [20, 6]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 19,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 20], [10, 16]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 45,\n      'valid_to': 120,\n      'kind': 'relative',\n      'periods': [[30, 16], [5, 20]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 34,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 16]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 31,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 20], [0, 10]]}],\n    90, None, 16],\n   [16, 'tx']],\n  ['control 1',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': 52,\n      'kind': 'absolute',\n      'periods': [[30, 16], [45, 32], [0, 16]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 13,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6], [0, 10], [45, 16]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 58,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 16]]}],\n    74, None, 24],\n   [16, 'max']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 6], [10, 6], [20, 32]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 59,\n      'valid_to': 85,\n      'kind': 'absolute',\n      'periods': [[5, 6], [5, 20], [30, 20]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 29,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 10], [30, 10]]}],\n    15, 48, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 12,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[45, 16], [5, 6]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 49,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 16], [0, 32], [20, 16]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 7,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 16], [10, 20], [45, 10]]}],\n    58, None, 16],\n   [16, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 39,\n      'valid_to': 47,\n      'kind': 'relative',\n      'periods': [[20, 20]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 43,\n      'valid_to': 101,\n      'kind': 'relative',\n      'periods': [[5, 32]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 1,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 32], [30, 16], [0, 20]]},\n     {'purpose': 'max',\n      'stack': 1,\n      'valid_from': 39,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 16]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 59,\n      'valid_to': 64,\n      'kind': 'absolute',\n      'periods': [[0, 16], [5, 16]]}],\n    8, None, 32],\n   [32, 'hw']],\n  ['control 1',\n   [[{'purpose': 'max',\n      'stack': 2,\n      'valid_from': 22,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[30, 6]]},\n     {'purpose': 'default',\n      'stack': 0,\n      'valid_from': 34,\n      'valid_to': 106,\n      'kind': 'absolute',\n      'periods': [[30, 16], [30, 10]]},\n     {'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 11,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[10, 6], [30, 20]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 26,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 6], [5, 6], [45, 10]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 12,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[20, 32], [20, 6]]}],\n    77, None, 24],\n   [20, 'tx']],\n  ['control 2',\n   [[{'purpose': 'default',\n      'stack': 2,\n      'valid_from': 55,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[5, 10], [30, 10]]}],\n    25, 14, 16],\n   [16, 'hw']]],\n [['boundary: profile expires at t',\n   [[{'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': 30,\n      'kind': 'absolute',\n      'periods': [[0, 10]]}],\n    30, None, 32],\n   [32, 'hw']],\n  ['boundary: relative profile without session',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 8]]}],\n    20, None, 32],\n   [32, 'hw']],\n  ['boundary: tx overrides lower default',\n   [[{'purpose': 'default',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 6]]},\n     {'purpose': 'tx',\n      'stack': 0,\n      'valid_from': 0,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[0, 20]]}],\n    5, 0, 32],\n   [20, 'tx']],\n  ['regression: relative profile without session',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 8,\n      'valid_to': 18,\n      'kind': 'relative',\n      'periods': [[20, 6]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 21,\n      'valid_to': 76,\n      'kind': 'relative',\n      'periods': [[10, 16]]}],\n    57, None, 16],\n   [16, 'hw']],\n  ['regression: relative profile without session (partial repair)',\n   [[{'purpose': 'default',\n      'stack': 1,\n      'valid_from': 30,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[10, 10], [45, 20]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 36,\n      'valid_to': 103,\n      'kind': 'absolute',\n      'periods': [[20, 32], [0, 16]]},\n     {'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 1,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[0, 10], [0, 16], [20, 16]]},\n     {'purpose': 'default',\n      'stack': 2,\n      'valid_from': 45,\n      'valid_to': 92,\n      'kind': 'relative',\n      'periods': [[45, 10], [20, 20], [10, 20]]}],\n    69, None, 24],\n   [24, 'hw']],\n  ['control 1',\n   [[{'purpose': 'tx',\n      'stack': 1,\n      'valid_from': 8,\n      'valid_to': None,\n      'kind': 'absolute',\n      'periods': [[30, 6]]}],\n    71, 15, 16],\n   [6, 'tx']],\n  ['control 2',\n   [[{'purpose': 'tx',\n      'stack': 2,\n      'valid_from': 39,\n      'valid_to': 108,\n      'kind': 'absolute',\n      'periods': [[20, 16], [30, 32], [20, 20]]},\n     {'purpose': 'max',\n      'stack': 0,\n      'valid_from': 45,\n      'valid_to': None,\n      'kind': 'relative',\n      'periods': [[5, 20]]},\n     {'purpose': 'default',\n      'stack': 1,\n      'valid_from': 21,\n      'valid_to': 46,\n      'kind': 'absolute',\n      'periods': [[5, 20]]}],\n    34, None, 24],\n   [20, 'default']]]]\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":"Deterministic stipulated toy contract for teaching; no claim of conformance with any standard, vendor protocol or production controller. 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-ev_charging_session_scheduling-charging-profile-stack-relative-profile-without-session","generated_at":"2026-09-29T14:51:50.987163+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Depot, workplace and public EV chargers schedule sessions against prices, circuit limits and departure deadlines; a wrong decision silently strands a driver or overloads a feeder.","repair":"Skip relative profiles when there is no session.","root_cause":"A missing session start is defaulted to zero instead of skipping the relative profile.","sha256":"f16ef5232ee92bac02ec0e7dfbac21d4a0b90e399c2f3bd0ad839d3d5533e7ea","title":"Charging profile stack resolution: relative profile without session · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.278,"exit_code":1,"observations":[{"actual":[32,"hw"],"check":"boundary: profile expires at t","expected":[32,"hw"],"passed":true},{"actual":[8,"default"],"check":"boundary: relative profile without session","expected":[32,"hw"],"passed":false},{"actual":[20,"tx"],"check":"boundary: tx overrides lower default","expected":[20,"tx"],"passed":true},{"actual":[24,"hw"],"check":"regression: relative profile without session","expected":[24,"hw"],"passed":true},{"actual":[20,"default"],"check":"regression: relative profile without session (partial repair)","expected":[6,"default"],"passed":false},{"actual":[24,"hw"],"check":"control 1","expected":[24,"hw"],"passed":true},{"actual":[16,"hw"],"check":"control 2","expected":[16,"hw"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: profile expires at t\", \"actual\": [32, \"hw\"], \"expected\": [32, \"hw\"], \"passed\": true}, {\"check\": \"boundary: relative profile without session\", \"actual\": [8, \"default\"], \"expected\": [32, \"hw\"], \"passed\": false}, {\"check\": \"boundary: tx overrides lower default\", \"actual\": [20, \"tx\"], \"expected\": [20, \"tx\"], \"passed\": true}, {\"check\": \"regression: relative profile without session\", \"actual\": [24, \"hw\"], \"expected\": [24, \"hw\"], \"passed\": true}, {\"check\": \"regression: relative profile without session (partial repair)\", \"actual\": [20, \"default\"], \"expected\": [6, \"default\"], \"passed\": false}, {\"check\": \"control 1\", \"actual\": [24, \"hw\"], \"expected\": [24, \"hw\"], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [16, \"hw\"], \"expected\": [16, \"hw\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.431,"exit_code":1,"observations":[{"actual":[32,"hw"],"check":"boundary: profile expires at t","expected":[32,"hw"],"passed":true},{"actual":[8,"default"],"check":"boundary: relative profile without session","expected":[32,"hw"],"passed":false},{"actual":[20,"tx"],"check":"boundary: tx overrides lower default","expected":[20,"tx"],"passed":true},{"actual":[10,"tx"],"check":"regression: relative profile without session","expected":[24,"hw"],"passed":false},{"actual":[10,"tx"],"check":"regression: relative profile without session (partial repair)","expected":[6,"default"],"passed":false},{"actual":[24,"hw"],"check":"control 1","expected":[24,"hw"],"passed":true},{"actual":[16,"hw"],"check":"control 2","expected":[16,"hw"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: profile expires at t\", \"actual\": [32, \"hw\"], \"expected\": [32, \"hw\"], \"passed\": true}, {\"check\": \"boundary: relative profile without session\", \"actual\": [8, \"default\"], \"expected\": [32, \"hw\"], \"passed\": false}, {\"check\": \"boundary: tx overrides lower default\", \"actual\": [20, \"tx\"], \"expected\": [20, \"tx\"], \"passed\": true}, {\"check\": \"regression: relative profile without session\", \"actual\": [10, \"tx\"], \"expected\": [24, \"hw\"], \"passed\": false}, {\"check\": \"regression: relative profile without session (partial repair)\", \"actual\": [10, \"tx\"], \"expected\": [6, \"default\"], \"passed\": false}, {\"check\": \"control 1\", \"actual\": [24, \"hw\"], \"expected\": [24, \"hw\"], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [16, \"hw\"], \"expected\": [16, \"hw\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.133,"exit_code":0,"observations":[{"actual":[32,"hw"],"check":"boundary: profile expires at t","expected":[32,"hw"],"passed":true},{"actual":[32,"hw"],"check":"boundary: relative profile without session","expected":[32,"hw"],"passed":true},{"actual":[20,"tx"],"check":"boundary: tx overrides lower default","expected":[20,"tx"],"passed":true},{"actual":[24,"hw"],"check":"regression: relative profile without session","expected":[24,"hw"],"passed":true},{"actual":[6,"default"],"check":"regression: relative profile without session (partial repair)","expected":[6,"default"],"passed":true},{"actual":[24,"hw"],"check":"control 1","expected":[24,"hw"],"passed":true},{"actual":[16,"hw"],"check":"control 2","expected":[16,"hw"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: profile expires at t\", \"actual\": [32, \"hw\"], \"expected\": [32, \"hw\"], \"passed\": true}, {\"check\": \"boundary: relative profile without session\", \"actual\": [32, \"hw\"], \"expected\": [32, \"hw\"], \"passed\": true}, {\"check\": \"boundary: tx overrides lower default\", \"actual\": [20, \"tx\"], \"expected\": [20, \"tx\"], \"passed\": true}, {\"check\": \"regression: relative profile without session\", \"actual\": [24, \"hw\"], \"expected\": [24, \"hw\"], \"passed\": true}, {\"check\": \"regression: relative profile without session (partial repair)\", \"actual\": [6, \"default\"], \"expected\": [6, \"default\"], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [24, \"hw\"], \"expected\": [24, \"hw\"], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [16, \"hw\"], \"expected\": [16, \"hw\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}