{"abstract":"Loop detector count and occupancy binning returns a wrong result when vehicles present before period start are counted in the last bin.","category":"Traffic signal timing plans","checks":8,"contract":"Input {interval s, bins, events: [[on, off]] seconds relative to period start (on may be negative), max_presence, no_activity}. A vehicle is counted in the bin of its on time if inside the period; occupied time is split across bins by overlap; occupancy percent is floor(occupied*100/interval). Status is 'stuck-on' if any presence lasts >= max_presence, 'no-activity' if there are no events and the period (bins*interval) is >= no_activity, else 'ok'. Return {counts, occ_pct, status}.","evaluation_group":"w2-traffic_signal_timing_plans-detector-bins","failed_approach":"Excluding bin zero drops every vehicle arriving in the first bin.","family":"w2-traffic_signal_timing_plans-detector-bins-count-range","id":"FA-68256","implementations":{"attempt":{"sha256":"9b80f59592bc342692434d7d212cca3b671672db3ec0def4a91460b9daf942ae","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    I = x['interval']\n    B = x['bins']\n    counts = [0] * B\n    occ = [0] * B\n    status = 'ok'\n    for on, off in sorted(x['events']):\n        b = on // I\n        if 0 < b < B:\n            counts[b] += 1\n        if off - on >= x['max_presence']:\n            status = 'stuck-on'\n        for k in range(B):\n            lo, hi = k * I, (k + 1) * I\n            occ[k] += max(0, min(off, hi) - max(on, lo))\n    if not x['events'] and B * I >= x['no_activity']:\n        status = 'no-activity'\n    return {'counts': counts, 'occ_pct': [o * 100 // I for o in occ], 'status': status}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 100, 'no_activity': 60}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 4, 'events': [], 'max_presence': 100, 'no_activity': 240}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 120, 'bins': 3, 'events': [], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 3, 'events': [[-15, -14], [11, 19]], 'max_presence': 180, 'no_activity': 600}, {'counts': [1, 0, 0], 'occ_pct': [13, 0, 0], 'status': 'ok'}), ({'interval': 120, 'bins': 5, 'events': [[-14, 26], [43, 46], [71, 73]], 'max_presence': 180, 'no_activity': 240}, {'counts': [2, 0, 0, 0, 0], 'occ_pct': [25, 0, 0, 0, 0], 'status': 'ok'})], [({'interval': 60, 'bins': 5, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 120, 'bins': 3, 'events': [[-2, 1], [37, 77], [91, 99], [130, 135]], 'max_presence': 180, 'no_activity': 60}, {'counts': [2, 1, 0], 'occ_pct': [40, 4, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 100, 'no_activity': 120}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 5, 'events': [], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [[-2, 0], [1, 2], [36, 44], [74, 114], [143, 183], [203, 208], [246, 251]], 'max_presence': 100, 'no_activity': 240}, {'counts': [2, 1, 1], 'occ_pct': [15, 66, 61], 'status': 'ok'})], [({'interval': 120, 'bins': 2, 'events': [], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 180, 'no_activity': 600}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 3, 'events': [], 'max_presence': 240, 'no_activity': 120}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [[-10, 30], [34, 35], [51, 52]], 'max_presence': 240, 'no_activity': 120}, {'counts': [2, 0, 0], 'occ_pct': [53, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [[-14, 26], [34, 37], [49, 446], [455, 458], [489, 490]], 'max_presence': 100, 'no_activity': 120}, {'counts': [2, 0, 0, 0], 'occ_pct': [66, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'})], [({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 100, 'no_activity': 240}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 4, 'events': [[-4, -3], [34, 39], [74, 114], [136, 141], [164, 169], [183, 191], [224, 229]], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 1, 1, 0], 'occ_pct': [0, 16, 53, 80], 'status': 'ok'}), ({'interval': 120, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 240}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 2, 'events': [[-8, 32], [68, 69], [90, 130], [132, 134], [165, 205], [216, 219], [243, 246], [269, 274]], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [100, 6], 'status': 'ok'})], [({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [], 'max_presence': 240, 'no_activity': 600}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [[-1, 7], [39, 79], [101, 103], [118, 121], [157, 158], [173, 178], [208, 248], [288, 293]], 'max_presence': 180, 'no_activity': 600}, {'counts': [1, 2, 2], 'occ_pct': [46, 38, 11], 'status': 'ok'}), ({'interval': 30, 'bins': 2, 'events': [], 'max_presence': 240, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [[-10, 114], [147, 152], [-18, -16]], 'max_presence': 100, 'no_activity': 60}, {'counts': [0, 0, 1], 'occ_pct': [100, 90, 8], 'status': 'stuck-on'})]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('timing oracle' + ' %d' % i, 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":"f3826ef0e1de4621b5e76460cf1c5a9d094be206fad78ec08abb3dbd52c0cd68","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    I = x['interval']\n    B = x['bins']\n    counts = [0] * B\n    occ = [0] * B\n    status = 'ok'\n    for on, off in sorted(x['events']):\n        b = on // I\n        if b < B:\n            counts[b] += 1\n        if off - on >= x['max_presence']:\n            status = 'stuck-on'\n        for k in range(B):\n            lo, hi = k * I, (k + 1) * I\n            occ[k] += max(0, min(off, hi) - max(on, lo))\n    if not x['events'] and B * I >= x['no_activity']:\n        status = 'no-activity'\n    return {'counts': counts, 'occ_pct': [o * 100 // I for o in occ], 'status': status}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 100, 'no_activity': 60}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 4, 'events': [], 'max_presence': 100, 'no_activity': 240}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 120, 'bins': 3, 'events': [], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 3, 'events': [[-15, -14], [11, 19]], 'max_presence': 180, 'no_activity': 600}, {'counts': [1, 0, 0], 'occ_pct': [13, 0, 0], 'status': 'ok'}), ({'interval': 120, 'bins': 5, 'events': [[-14, 26], [43, 46], [71, 73]], 'max_presence': 180, 'no_activity': 240}, {'counts': [2, 0, 0, 0, 0], 'occ_pct': [25, 0, 0, 0, 0], 'status': 'ok'})], [({'interval': 60, 'bins': 5, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 120, 'bins': 3, 'events': [[-2, 1], [37, 77], [91, 99], [130, 135]], 'max_presence': 180, 'no_activity': 60}, {'counts': [2, 1, 0], 'occ_pct': [40, 4, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 100, 'no_activity': 120}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 5, 'events': [], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [[-2, 0], [1, 2], [36, 44], [74, 114], [143, 183], [203, 208], [246, 251]], 'max_presence': 100, 'no_activity': 240}, {'counts': [2, 1, 1], 'occ_pct': [15, 66, 61], 'status': 'ok'})], [({'interval': 120, 'bins': 2, 'events': [], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 180, 'no_activity': 600}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 3, 'events': [], 'max_presence': 240, 'no_activity': 120}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [[-10, 30], [34, 35], [51, 52]], 'max_presence': 240, 'no_activity': 120}, {'counts': [2, 0, 0], 'occ_pct': [53, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [[-14, 26], [34, 37], [49, 446], [455, 458], [489, 490]], 'max_presence': 100, 'no_activity': 120}, {'counts': [2, 0, 0, 0], 'occ_pct': [66, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'})], [({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 100, 'no_activity': 240}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 4, 'events': [[-4, -3], [34, 39], [74, 114], [136, 141], [164, 169], [183, 191], [224, 229]], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 1, 1, 0], 'occ_pct': [0, 16, 53, 80], 'status': 'ok'}), ({'interval': 120, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 240}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 2, 'events': [[-8, 32], [68, 69], [90, 130], [132, 134], [165, 205], [216, 219], [243, 246], [269, 274]], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [100, 6], 'status': 'ok'})], [({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [], 'max_presence': 240, 'no_activity': 600}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [[-1, 7], [39, 79], [101, 103], [118, 121], [157, 158], [173, 178], [208, 248], [288, 293]], 'max_presence': 180, 'no_activity': 600}, {'counts': [1, 2, 2], 'occ_pct': [46, 38, 11], 'status': 'ok'}), ({'interval': 30, 'bins': 2, 'events': [], 'max_presence': 240, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [[-10, 114], [147, 152], [-18, -16]], 'max_presence': 100, 'no_activity': 60}, {'counts': [0, 0, 1], 'occ_pct': [100, 90, 8], 'status': 'stuck-on'})]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('timing oracle' + ' %d' % i, 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":"cdcff2ce62a0389c536a24027dcb4eba1bf3d08da460592168a8140c3e5c8788","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    I = x['interval']\n    B = x['bins']\n    counts = [0] * B\n    occ = [0] * B\n    status = 'ok'\n    for on, off in sorted(x['events']):\n        b = on // I\n        if 0 <= b < B:\n            counts[b] += 1\n        if off - on >= x['max_presence']:\n            status = 'stuck-on'\n        for k in range(B):\n            lo, hi = k * I, (k + 1) * I\n            occ[k] += max(0, min(off, hi) - max(on, lo))\n    if not x['events'] and B * I >= x['no_activity']:\n        status = 'no-activity'\n    return {'counts': counts, 'occ_pct': [o * 100 // I for o in occ], 'status': status}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 100, 'no_activity': 60}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 4, 'events': [], 'max_presence': 100, 'no_activity': 240}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 120, 'bins': 3, 'events': [], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 3, 'events': [[-15, -14], [11, 19]], 'max_presence': 180, 'no_activity': 600}, {'counts': [1, 0, 0], 'occ_pct': [13, 0, 0], 'status': 'ok'}), ({'interval': 120, 'bins': 5, 'events': [[-14, 26], [43, 46], [71, 73]], 'max_presence': 180, 'no_activity': 240}, {'counts': [2, 0, 0, 0, 0], 'occ_pct': [25, 0, 0, 0, 0], 'status': 'ok'})], [({'interval': 60, 'bins': 5, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 120, 'bins': 3, 'events': [[-2, 1], [37, 77], [91, 99], [130, 135]], 'max_presence': 180, 'no_activity': 60}, {'counts': [2, 1, 0], 'occ_pct': [40, 4, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 100, 'no_activity': 120}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 5, 'events': [], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [[-2, 0], [1, 2], [36, 44], [74, 114], [143, 183], [203, 208], [246, 251]], 'max_presence': 100, 'no_activity': 240}, {'counts': [2, 1, 1], 'occ_pct': [15, 66, 61], 'status': 'ok'})], [({'interval': 120, 'bins': 2, 'events': [], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 180, 'no_activity': 600}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 3, 'events': [], 'max_presence': 240, 'no_activity': 120}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [[-10, 30], [34, 35], [51, 52]], 'max_presence': 240, 'no_activity': 120}, {'counts': [2, 0, 0], 'occ_pct': [53, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 4, 'events': [[-14, 26], [34, 37], [49, 446], [455, 458], [489, 490]], 'max_presence': 100, 'no_activity': 120}, {'counts': [2, 0, 0, 0], 'occ_pct': [66, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'})], [({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 100, 'no_activity': 240}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [], 'max_presence': 240, 'no_activity': 240}, {'counts': [0, 0, 0], 'occ_pct': [0, 0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 4, 'events': [[-4, -3], [34, 39], [74, 114], [136, 141], [164, 169], [183, 191], [224, 229]], 'max_presence': 240, 'no_activity': 60}, {'counts': [0, 1, 1, 0], 'occ_pct': [0, 16, 53, 80], 'status': 'ok'}), ({'interval': 120, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 240}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 30, 'bins': 2, 'events': [[-8, 32], [68, 69], [90, 130], [132, 134], [165, 205], [216, 219], [243, 246], [269, 274]], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [100, 6], 'status': 'ok'})], [({'interval': 60, 'bins': 2, 'events': [[-5, 3], [58, 63], [70, 71]], 'max_presence': 180, 'no_activity': 120}, {'counts': [1, 1], 'occ_pct': [8, 6], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [], 'max_presence': 240, 'no_activity': 600}, {'counts': [0, 0, 0, 0], 'occ_pct': [0, 0, 0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'ok'}), ({'interval': 60, 'bins': 3, 'events': [[-1, 7], [39, 79], [101, 103], [118, 121], [157, 158], [173, 178], [208, 248], [288, 293]], 'max_presence': 180, 'no_activity': 600}, {'counts': [1, 2, 2], 'occ_pct': [46, 38, 11], 'status': 'ok'}), ({'interval': 30, 'bins': 2, 'events': [], 'max_presence': 240, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'ok'}), ({'interval': 30, 'bins': 4, 'events': [[0, 180]], 'max_presence': 180, 'no_activity': 60}, {'counts': [1, 0, 0, 0], 'occ_pct': [100, 100, 100, 100], 'status': 'stuck-on'}), ({'interval': 60, 'bins': 2, 'events': [], 'max_presence': 180, 'no_activity': 120}, {'counts': [0, 0], 'occ_pct': [0, 0], 'status': 'no-activity'}), ({'interval': 60, 'bins': 3, 'events': [[-10, 114], [147, 152], [-18, -16]], 'max_presence': 100, 'no_activity': 60}, {'counts': [0, 0, 1], 'occ_pct': [100, 90, 8], 'status': 'stuck-on'})]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('timing oracle' + ' %d' % i, 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 toy model with a stipulated contract; it makes no claim of conformance to any agency manual or standard. 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-traffic_signal_timing_plans-detector-bins-count-range","generated_at":"2026-09-29T14:48:00.498944+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Signal timing arithmetic is exact and integer or rational; a wrong rule silently produces unsafe or inefficient timing plans.","repair":"Restore the count period range rule so that the step reads `if 0 <= b < B:`.","root_cause":"A negative bin index wraps to the last bin, counting a vehicle that arrived before the period.","sha256":"844e23fb92f120b08b1ad2923994411969274da291efdb5cbb4e83a92154c7d5","title":"Loop detector count and occupancy binning: vehicles present before period start are counted in the last bin · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.844,"exit_code":1,"observations":[{"actual":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"check":"timing oracle 0","expected":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[0,0,0],"occ_pct":[0,0,0],"status":"no-activity"},"check":"timing oracle 1","expected":{"counts":[0,0,0],"occ_pct":[0,0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[0,0,0,0],"occ_pct":[0,0,0,0],"status":"no-activity"},"check":"timing oracle 2","expected":{"counts":[0,0,0,0],"occ_pct":[0,0,0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[0,1],"occ_pct":[8,6],"status":"ok"},"check":"timing oracle 3","expected":{"counts":[1,1],"occ_pct":[8,6],"status":"ok"},"passed":false},{"actual":{"counts":[0,0,0],"occ_pct":[0,0,0],"status":"no-activity"},"check":"timing oracle 4","expected":{"counts":[0,0,0],"occ_pct":[0,0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[0,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"check":"timing oracle 5","expected":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"passed":false},{"actual":{"counts":[0,0,0],"occ_pct":[13,0,0],"status":"ok"},"check":"timing oracle 6","expected":{"counts":[1,0,0],"occ_pct":[13,0,0],"status":"ok"},"passed":false},{"actual":{"counts":[0,0,0,0,0],"occ_pct":[25,0,0,0,0],"status":"ok"},"check":"timing oracle 7","expected":{"counts":[2,0,0,0,0],"occ_pct":[25,0,0,0,0],"status":"ok"},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"timing oracle 0\", \"actual\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 1\", \"actual\": {\"counts\": [0, 0, 0], \"occ_pct\": [0, 0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0, 0], \"occ_pct\": [0, 0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 2\", \"actual\": {\"counts\": [0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 3\", \"actual\": {\"counts\": [0, 1], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 1], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 4\", \"actual\": {\"counts\": [0, 0, 0], \"occ_pct\": [0, 0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0, 0], \"occ_pct\": [0, 0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 5\", \"actual\": {\"counts\": [0, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"passed\": false}, {\"check\": \"timing oracle 6\", \"actual\": {\"counts\": [0, 0, 0], \"occ_pct\": [13, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 0, 0], \"occ_pct\": [13, 0, 0], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 7\", \"actual\": {\"counts\": [0, 0, 0, 0, 0], \"occ_pct\": [25, 0, 0, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [2, 0, 0, 0, 0], \"occ_pct\": [25, 0, 0, 0, 0], \"status\": \"ok\"}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.977,"exit_code":1,"observations":[{"actual":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"check":"timing oracle 0","expected":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[0,0,0],"occ_pct":[0,0,0],"status":"no-activity"},"check":"timing oracle 1","expected":{"counts":[0,0,0],"occ_pct":[0,0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[0,0,0,0],"occ_pct":[0,0,0,0],"status":"no-activity"},"check":"timing oracle 2","expected":{"counts":[0,0,0,0],"occ_pct":[0,0,0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[1,2],"occ_pct":[8,6],"status":"ok"},"check":"timing oracle 3","expected":{"counts":[1,1],"occ_pct":[8,6],"status":"ok"},"passed":false},{"actual":{"counts":[0,0,0],"occ_pct":[0,0,0],"status":"no-activity"},"check":"timing oracle 4","expected":{"counts":[0,0,0],"occ_pct":[0,0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"check":"timing oracle 5","expected":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"passed":true},{"actual":{"counts":[1,0,1],"occ_pct":[13,0,0],"status":"ok"},"check":"timing oracle 6","expected":{"counts":[1,0,0],"occ_pct":[13,0,0],"status":"ok"},"passed":false},{"actual":{"counts":[2,0,0,0,1],"occ_pct":[25,0,0,0,0],"status":"ok"},"check":"timing oracle 7","expected":{"counts":[2,0,0,0,0],"occ_pct":[25,0,0,0,0],"status":"ok"},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"timing oracle 0\", \"actual\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 1\", \"actual\": {\"counts\": [0, 0, 0], \"occ_pct\": [0, 0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0, 0], \"occ_pct\": [0, 0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 2\", \"actual\": {\"counts\": [0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 3\", \"actual\": {\"counts\": [1, 2], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 1], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 4\", \"actual\": {\"counts\": [0, 0, 0], \"occ_pct\": [0, 0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0, 0], \"occ_pct\": [0, 0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 5\", \"actual\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"passed\": true}, {\"check\": \"timing oracle 6\", \"actual\": {\"counts\": [1, 0, 1], \"occ_pct\": [13, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 0, 0], \"occ_pct\": [13, 0, 0], \"status\": \"ok\"}, \"passed\": false}, {\"check\": \"timing oracle 7\", \"actual\": {\"counts\": [2, 0, 0, 0, 1], \"occ_pct\": [25, 0, 0, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [2, 0, 0, 0, 0], \"occ_pct\": [25, 0, 0, 0, 0], \"status\": \"ok\"}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.435,"exit_code":0,"observations":[{"actual":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"check":"timing oracle 0","expected":{"counts":[0,0],"occ_pct":[0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[0,0,0],"occ_pct":[0,0,0],"status":"no-activity"},"check":"timing oracle 1","expected":{"counts":[0,0,0],"occ_pct":[0,0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[0,0,0,0],"occ_pct":[0,0,0,0],"status":"no-activity"},"check":"timing oracle 2","expected":{"counts":[0,0,0,0],"occ_pct":[0,0,0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[1,1],"occ_pct":[8,6],"status":"ok"},"check":"timing oracle 3","expected":{"counts":[1,1],"occ_pct":[8,6],"status":"ok"},"passed":true},{"actual":{"counts":[0,0,0],"occ_pct":[0,0,0],"status":"no-activity"},"check":"timing oracle 4","expected":{"counts":[0,0,0],"occ_pct":[0,0,0],"status":"no-activity"},"passed":true},{"actual":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"check":"timing oracle 5","expected":{"counts":[1,0,0,0],"occ_pct":[100,100,100,100],"status":"stuck-on"},"passed":true},{"actual":{"counts":[1,0,0],"occ_pct":[13,0,0],"status":"ok"},"check":"timing oracle 6","expected":{"counts":[1,0,0],"occ_pct":[13,0,0],"status":"ok"},"passed":true},{"actual":{"counts":[2,0,0,0,0],"occ_pct":[25,0,0,0,0],"status":"ok"},"check":"timing oracle 7","expected":{"counts":[2,0,0,0,0],"occ_pct":[25,0,0,0,0],"status":"ok"},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"timing oracle 0\", \"actual\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0], \"occ_pct\": [0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 1\", \"actual\": {\"counts\": [0, 0, 0], \"occ_pct\": [0, 0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0, 0], \"occ_pct\": [0, 0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 2\", \"actual\": {\"counts\": [0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0, 0, 0], \"occ_pct\": [0, 0, 0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 3\", \"actual\": {\"counts\": [1, 1], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 1], \"occ_pct\": [8, 6], \"status\": \"ok\"}, \"passed\": true}, {\"check\": \"timing oracle 4\", \"actual\": {\"counts\": [0, 0, 0], \"occ_pct\": [0, 0, 0], \"status\": \"no-activity\"}, \"expected\": {\"counts\": [0, 0, 0], \"occ_pct\": [0, 0, 0], \"status\": \"no-activity\"}, \"passed\": true}, {\"check\": \"timing oracle 5\", \"actual\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"expected\": {\"counts\": [1, 0, 0, 0], \"occ_pct\": [100, 100, 100, 100], \"status\": \"stuck-on\"}, \"passed\": true}, {\"check\": \"timing oracle 6\", \"actual\": {\"counts\": [1, 0, 0], \"occ_pct\": [13, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [1, 0, 0], \"occ_pct\": [13, 0, 0], \"status\": \"ok\"}, \"passed\": true}, {\"check\": \"timing oracle 7\", \"actual\": {\"counts\": [2, 0, 0, 0, 0], \"occ_pct\": [25, 0, 0, 0, 0], \"status\": \"ok\"}, \"expected\": {\"counts\": [2, 0, 0, 0, 0], \"occ_pct\": [25, 0, 0, 0, 0], \"status\": \"ok\"}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}