FA-68131 / Traffic signal timing plans / Open access
Uniform delay level of service: capacity ignores the number of lanes · case 01
Uniform delay level of service returns a wrong result when capacity ignores the number of lanes.
ROOT CAUSE
Capacity uses a single lane of saturation flow, so multi-lane approaches look oversaturated.
VERIFIED REPAIR
Restore the lane group capacity rule so that the step reads `x['sat_per_lane'] * x['lanes'] * lam`.
Unsuccessful approach: Dropping the green ratio instead reports full-hour capacity for a signal that is green only part of the cycle.
Case contract
Input {cycle, green, volume, sat_per_lane, lanes}. lam = green/cycle, capacity = sat*lanes*lam, X = volume/capacity, uniform delay d = 0.5*C*(1-lam)^2/(1 - min(1,X)*lam) rounded half up to tenths. LOS thresholds on tenths: <=100 A, <=200 B, <=350 C, <=550 D, <=800 E, else F; any X > 1 is F. Return {vc_milli: floor(1000X), delay_tenths, los}.
Why this case matters
Signal timing arithmetic is exact and integer or rational; a wrong rule silently produces unsafe or inefficient timing plans.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
import math
N = 1
observations = []
def solve(x):
C, g = x['cycle'], x['green']
lam = Fraction(g, C)
cap = x['sat_per_lane'] * lam
X = Fraction(x['volume']) / cap
d = Fraction(1, 2) * C * (1 - lam) ** 2 / (1 - min(1, X) * lam)
tenths = int(d * 10 + Fraction(1, 2))
if X > 1:
los = 'F'
else:
los = 'F'
for lim, lab in ((100, 'A'), (200, 'B'), (350, 'C'), (550, 'D'), (800, 'E')):
if tenths <= lim:
los = lab
break
return {'vc_milli': int(X * 1000), 'delay_tenths': tenths, 'los': los}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 90, 'green': 39, 'volume': 1363, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1747, 'delay_tenths': 255, 'los': 'F'}), ({'cycle': 110, 'green': 28, 'volume': 242, 'sat_per_lane': 1900, 'lanes': 1}, {'vc_milli': 500, 'delay_tenths': 350, 'los': 'C'}), ({'cycle': 90, 'green': 53, 'volume': 1841, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1838, 'delay_tenths': 185, 'los': 'F'}), ({'cycle': 60, 'green': 43, 'volume': 5888, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 1610, 'delay_tenths': 85, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 60, 'green': 13, 'volume': 1105, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 1000, 'delay_tenths': 235, 'los': 'C'})], [({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 120, 'green': 65, 'volume': 959, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1041, 'delay_tenths': 275, 'los': 'F'}), ({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 90, 'green': 40, 'volume': 2870, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 1899, 'delay_tenths': 250, 'los': 'F'}), ({'cycle': 80, 'green': 36, 'volume': 1197, 'sat_per_lane': 1900, 'lanes': 1}, {'vc_milli': 1400, 'delay_tenths': 220, 'los': 'F'}), ({'cycle': 110, 'green': 87, 'volume': 3733, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 925, 'delay_tenths': 90, 'los': 'A'}), ({'cycle': 100, 'green': 65, 'volume': 4446, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1266, 'delay_tenths': 175, 'los': 'F'})], [({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 110, 'green': 53, 'volume': 2572, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1404, 'delay_tenths': 285, 'los': 'F'}), ({'cycle': 130, 'green': 50, 'volume': 2066, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 1492, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 60, 'green': 33, 'volume': 2090, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1000, 'delay_tenths': 135, 'los': 'B'}), ({'cycle': 60, 'green': 30, 'volume': 1709, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 632, 'delay_tenths': 110, 'los': 'B'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 90, 'green': 31, 'volume': 2169, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1166, 'delay_tenths': 295, 'los': 'F'})], [({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 150, 'green': 128, 'volume': 8698, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 1998, 'delay_tenths': 110, 'los': 'F'}), ({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 100, 'green': 12, 'volume': 741, 'sat_per_lane': 1900, 'lanes': 3}, {'vc_milli': 1083, 'delay_tenths': 440, 'los': 'F'}), ({'cycle': 90, 'green': 34, 'volume': 468, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 326, 'delay_tenths': 199, 'los': 'B'}), ({'cycle': 60, 'green': 20, 'volume': 609, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 480, 'delay_tenths': 159, 'los': 'B'}), ({'cycle': 60, 'green': 20, 'volume': 1312, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 1157, 'delay_tenths': 200, 'los': 'F'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'})], [({'cycle': 60, 'green': 39, 'volume': 799, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 227, 'delay_tenths': 43, 'los': 'A'}), ({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 60, 'green': 18, 'volume': 334, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 618, 'delay_tenths': 180, 'los': 'B'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 90, 'green': 30, 'volume': 700, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 583, 'delay_tenths': 248, 'los': 'C'}), ({'cycle': 110, 'green': 42, 'volume': 3430, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 1761, 'delay_tenths': 340, 'los': 'F'}), ({'cycle': 150, 'green': 123, 'volume': 8406, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1898, 'delay_tenths': 135, 'los': 'F'}), ({'cycle': 90, 'green': 15, 'volume': 411, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1450, 'delay_tenths': 375, 'los': 'F'})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check('timing oracle' + ' %d' % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| timing oracle 0 | {'delay_tenths': 60, 'los': 'A', 'vc_milli': 666} | {'delay_tenths': 60, 'los': 'A', 'vc_milli': 666} | Passed |
| timing oracle 1 | {'delay_tenths': 255, 'los': 'F', 'vc_milli': 1747} | {'delay_tenths': 255, 'los': 'F', 'vc_milli': 1747} | Passed |
| timing oracle 2 | {'delay_tenths': 350, 'los': 'C', 'vc_milli': 500} | {'delay_tenths': 350, 'los': 'C', 'vc_milli': 500} | Passed |
| timing oracle 3 | {'delay_tenths': 185, 'los': 'F', 'vc_milli': 1838} | {'delay_tenths': 185, 'los': 'F', 'vc_milli': 1838} | Passed |
| timing oracle 4 | {'delay_tenths': 85, 'los': 'F', 'vc_milli': 4832} | {'delay_tenths': 85, 'los': 'F', 'vc_milli': 1610} | Failed |
| timing oracle 5 | {'delay_tenths': 250, 'los': 'C', 'vc_milli': 1000} | {'delay_tenths': 250, 'los': 'C', 'vc_milli': 1000} | Passed |
| timing oracle 6 | {'delay_tenths': 400, 'los': 'F', 'vc_milli': 2052} | {'delay_tenths': 400, 'los': 'F', 'vc_milli': 1026} | Failed |
| timing oracle 7 | {'delay_tenths': 235, 'los': 'F', 'vc_milli': 3000} | {'delay_tenths': 235, 'los': 'C', 'vc_milli': 1000} | Failed |
SHA-256 / 5965ab285e23110c66c9777588d47b534d6ea10aa1caf446b0635a698f09ec79
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
import math
N = 1
observations = []
def solve(x):
C, g = x['cycle'], x['green']
lam = Fraction(g, C)
cap = x['sat_per_lane'] * x['lanes']
X = Fraction(x['volume']) / cap
d = Fraction(1, 2) * C * (1 - lam) ** 2 / (1 - min(1, X) * lam)
tenths = int(d * 10 + Fraction(1, 2))
if X > 1:
los = 'F'
else:
los = 'F'
for lim, lab in ((100, 'A'), (200, 'B'), (350, 'C'), (550, 'D'), (800, 'E')):
if tenths <= lim:
los = lab
break
return {'vc_milli': int(X * 1000), 'delay_tenths': tenths, 'los': los}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 90, 'green': 39, 'volume': 1363, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1747, 'delay_tenths': 255, 'los': 'F'}), ({'cycle': 110, 'green': 28, 'volume': 242, 'sat_per_lane': 1900, 'lanes': 1}, {'vc_milli': 500, 'delay_tenths': 350, 'los': 'C'}), ({'cycle': 90, 'green': 53, 'volume': 1841, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1838, 'delay_tenths': 185, 'los': 'F'}), ({'cycle': 60, 'green': 43, 'volume': 5888, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 1610, 'delay_tenths': 85, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 60, 'green': 13, 'volume': 1105, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 1000, 'delay_tenths': 235, 'los': 'C'})], [({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 120, 'green': 65, 'volume': 959, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1041, 'delay_tenths': 275, 'los': 'F'}), ({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 90, 'green': 40, 'volume': 2870, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 1899, 'delay_tenths': 250, 'los': 'F'}), ({'cycle': 80, 'green': 36, 'volume': 1197, 'sat_per_lane': 1900, 'lanes': 1}, {'vc_milli': 1400, 'delay_tenths': 220, 'los': 'F'}), ({'cycle': 110, 'green': 87, 'volume': 3733, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 925, 'delay_tenths': 90, 'los': 'A'}), ({'cycle': 100, 'green': 65, 'volume': 4446, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1266, 'delay_tenths': 175, 'los': 'F'})], [({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 110, 'green': 53, 'volume': 2572, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1404, 'delay_tenths': 285, 'los': 'F'}), ({'cycle': 130, 'green': 50, 'volume': 2066, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 1492, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 60, 'green': 33, 'volume': 2090, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1000, 'delay_tenths': 135, 'los': 'B'}), ({'cycle': 60, 'green': 30, 'volume': 1709, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 632, 'delay_tenths': 110, 'los': 'B'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 90, 'green': 31, 'volume': 2169, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1166, 'delay_tenths': 295, 'los': 'F'})], [({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 150, 'green': 128, 'volume': 8698, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 1998, 'delay_tenths': 110, 'los': 'F'}), ({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 100, 'green': 12, 'volume': 741, 'sat_per_lane': 1900, 'lanes': 3}, {'vc_milli': 1083, 'delay_tenths': 440, 'los': 'F'}), ({'cycle': 90, 'green': 34, 'volume': 468, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 326, 'delay_tenths': 199, 'los': 'B'}), ({'cycle': 60, 'green': 20, 'volume': 609, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 480, 'delay_tenths': 159, 'los': 'B'}), ({'cycle': 60, 'green': 20, 'volume': 1312, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 1157, 'delay_tenths': 200, 'los': 'F'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'})], [({'cycle': 60, 'green': 39, 'volume': 799, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 227, 'delay_tenths': 43, 'los': 'A'}), ({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 60, 'green': 18, 'volume': 334, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 618, 'delay_tenths': 180, 'los': 'B'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 90, 'green': 30, 'volume': 700, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 583, 'delay_tenths': 248, 'los': 'C'}), ({'cycle': 110, 'green': 42, 'volume': 3430, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 1761, 'delay_tenths': 340, 'los': 'F'}), ({'cycle': 150, 'green': 123, 'volume': 8406, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1898, 'delay_tenths': 135, 'los': 'F'}), ({'cycle': 90, 'green': 15, 'volume': 411, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1450, 'delay_tenths': 375, 'los': 'F'})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check('timing oracle' + ' %d' % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| timing oracle 0 | {'delay_tenths': 47, 'los': 'A', 'vc_milli': 444} | {'delay_tenths': 60, 'los': 'A', 'vc_milli': 666} | Failed |
| timing oracle 1 | {'delay_tenths': 215, 'los': 'C', 'vc_milli': 757} | {'delay_tenths': 255, 'los': 'F', 'vc_milli': 1747} | Failed |
| timing oracle 2 | {'delay_tenths': 316, 'los': 'C', 'vc_milli': 127} | {'delay_tenths': 350, 'los': 'C', 'vc_milli': 500} | Failed |
| timing oracle 3 | {'delay_tenths': 185, 'los': 'F', 'vc_milli': 1082} | {'delay_tenths': 185, 'los': 'F', 'vc_milli': 1838} | Failed |
| timing oracle 4 | {'delay_tenths': 85, 'los': 'F', 'vc_milli': 1154} | {'delay_tenths': 85, 'los': 'F', 'vc_milli': 1610} | Failed |
| timing oracle 5 | {'delay_tenths': 167, 'los': 'B', 'vc_milli': 500} | {'delay_tenths': 250, 'los': 'C', 'vc_milli': 1000} | Failed |
| timing oracle 6 | {'delay_tenths': 301, 'los': 'C', 'vc_milli': 342} | {'delay_tenths': 400, 'los': 'F', 'vc_milli': 1026} | Failed |
| timing oracle 7 | {'delay_tenths': 193, 'los': 'B', 'vc_milli': 216} | {'delay_tenths': 235, 'los': 'C', 'vc_milli': 1000} | Failed |
SHA-256 / d08c3430bfd62b7d694f1131a3066e9729830c338c46ac59afed25b5bf381cae
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
import math
N = 1
observations = []
def solve(x):
C, g = x['cycle'], x['green']
lam = Fraction(g, C)
cap = x['sat_per_lane'] * x['lanes'] * lam
X = Fraction(x['volume']) / cap
d = Fraction(1, 2) * C * (1 - lam) ** 2 / (1 - min(1, X) * lam)
tenths = int(d * 10 + Fraction(1, 2))
if X > 1:
los = 'F'
else:
los = 'F'
for lim, lab in ((100, 'A'), (200, 'B'), (350, 'C'), (550, 'D'), (800, 'E')):
if tenths <= lim:
los = lab
break
return {'vc_milli': int(X * 1000), 'delay_tenths': tenths, 'los': los}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 90, 'green': 39, 'volume': 1363, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1747, 'delay_tenths': 255, 'los': 'F'}), ({'cycle': 110, 'green': 28, 'volume': 242, 'sat_per_lane': 1900, 'lanes': 1}, {'vc_milli': 500, 'delay_tenths': 350, 'los': 'C'}), ({'cycle': 90, 'green': 53, 'volume': 1841, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1838, 'delay_tenths': 185, 'los': 'F'}), ({'cycle': 60, 'green': 43, 'volume': 5888, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 1610, 'delay_tenths': 85, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 60, 'green': 13, 'volume': 1105, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 1000, 'delay_tenths': 235, 'los': 'C'})], [({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 120, 'green': 65, 'volume': 959, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1041, 'delay_tenths': 275, 'los': 'F'}), ({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 90, 'green': 40, 'volume': 2870, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 1899, 'delay_tenths': 250, 'los': 'F'}), ({'cycle': 80, 'green': 36, 'volume': 1197, 'sat_per_lane': 1900, 'lanes': 1}, {'vc_milli': 1400, 'delay_tenths': 220, 'los': 'F'}), ({'cycle': 110, 'green': 87, 'volume': 3733, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 925, 'delay_tenths': 90, 'los': 'A'}), ({'cycle': 100, 'green': 65, 'volume': 4446, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1266, 'delay_tenths': 175, 'los': 'F'})], [({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 110, 'green': 53, 'volume': 2572, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1404, 'delay_tenths': 285, 'los': 'F'}), ({'cycle': 130, 'green': 50, 'volume': 2066, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 1492, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 60, 'green': 33, 'volume': 2090, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1000, 'delay_tenths': 135, 'los': 'B'}), ({'cycle': 60, 'green': 30, 'volume': 1709, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 632, 'delay_tenths': 110, 'los': 'B'}), ({'cycle': 100, 'green': 50, 'volume': 675, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 750, 'delay_tenths': 200, 'los': 'B'}), ({'cycle': 90, 'green': 31, 'volume': 2169, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1166, 'delay_tenths': 295, 'los': 'F'})], [({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 150, 'green': 128, 'volume': 8698, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 1998, 'delay_tenths': 110, 'los': 'F'}), ({'cycle': 120, 'green': 40, 'volume': 1300, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 1026, 'delay_tenths': 400, 'los': 'F'}), ({'cycle': 100, 'green': 12, 'volume': 741, 'sat_per_lane': 1900, 'lanes': 3}, {'vc_milli': 1083, 'delay_tenths': 440, 'los': 'F'}), ({'cycle': 90, 'green': 34, 'volume': 468, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 326, 'delay_tenths': 199, 'los': 'B'}), ({'cycle': 60, 'green': 20, 'volume': 609, 'sat_per_lane': 1900, 'lanes': 2}, {'vc_milli': 480, 'delay_tenths': 159, 'los': 'B'}), ({'cycle': 60, 'green': 20, 'volume': 1312, 'sat_per_lane': 1700, 'lanes': 2}, {'vc_milli': 1157, 'delay_tenths': 200, 'los': 'F'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'})], [({'cycle': 60, 'green': 39, 'volume': 799, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 227, 'delay_tenths': 43, 'los': 'A'}), ({'cycle': 100, 'green': 50, 'volume': 900, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 1000, 'delay_tenths': 250, 'los': 'C'}), ({'cycle': 60, 'green': 18, 'volume': 334, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 618, 'delay_tenths': 180, 'los': 'B'}), ({'cycle': 60, 'green': 40, 'volume': 800, 'sat_per_lane': 1800, 'lanes': 1}, {'vc_milli': 666, 'delay_tenths': 60, 'los': 'A'}), ({'cycle': 90, 'green': 30, 'volume': 700, 'sat_per_lane': 1800, 'lanes': 2}, {'vc_milli': 583, 'delay_tenths': 248, 'los': 'C'}), ({'cycle': 110, 'green': 42, 'volume': 3430, 'sat_per_lane': 1700, 'lanes': 3}, {'vc_milli': 1761, 'delay_tenths': 340, 'los': 'F'}), ({'cycle': 150, 'green': 123, 'volume': 8406, 'sat_per_lane': 1800, 'lanes': 3}, {'vc_milli': 1898, 'delay_tenths': 135, 'los': 'F'}), ({'cycle': 90, 'green': 15, 'volume': 411, 'sat_per_lane': 1700, 'lanes': 1}, {'vc_milli': 1450, 'delay_tenths': 375, 'los': 'F'})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check('timing oracle' + ' %d' % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| timing oracle 0 | {'delay_tenths': 60, 'los': 'A', 'vc_milli': 666} | {'delay_tenths': 60, 'los': 'A', 'vc_milli': 666} | Passed |
| timing oracle 1 | {'delay_tenths': 255, 'los': 'F', 'vc_milli': 1747} | {'delay_tenths': 255, 'los': 'F', 'vc_milli': 1747} | Passed |
| timing oracle 2 | {'delay_tenths': 350, 'los': 'C', 'vc_milli': 500} | {'delay_tenths': 350, 'los': 'C', 'vc_milli': 500} | Passed |
| timing oracle 3 | {'delay_tenths': 185, 'los': 'F', 'vc_milli': 1838} | {'delay_tenths': 185, 'los': 'F', 'vc_milli': 1838} | Passed |
| timing oracle 4 | {'delay_tenths': 85, 'los': 'F', 'vc_milli': 1610} | {'delay_tenths': 85, 'los': 'F', 'vc_milli': 1610} | Passed |
| timing oracle 5 | {'delay_tenths': 250, 'los': 'C', 'vc_milli': 1000} | {'delay_tenths': 250, 'los': 'C', 'vc_milli': 1000} | Passed |
| timing oracle 6 | {'delay_tenths': 400, 'los': 'F', 'vc_milli': 1026} | {'delay_tenths': 400, 'los': 'F', 'vc_milli': 1026} | Passed |
| timing oracle 7 | {'delay_tenths': 235, 'los': 'C', 'vc_milli': 1000} | {'delay_tenths': 235, 'los': 'C', 'vc_milli': 1000} | Passed |
SHA-256 / 97b23dafde59c11b816270570a53a8f0bcb87aaa44dcd4a0684a1dca09d582fc
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:47:59.199902+00:00.
Case digest / 8849a8da86ca2eb9cb30951ad6bcdc9be0d6d226c89049d43fb1c1b09b24bed4