Spaces:
Sleeping
Sleeping
"""Implements ICC LBW rules & umpire‑call margin.""" | |
from typing import Dict | |
class LBWEngine: | |
def __init__(self, margin_mm: float = 20.0): | |
self.margin = margin_mm | |
def decide(self, event_meta: Dict): | |
"""Return verdict ('OUT', 'NOT OUT', 'UMPIRE CALL') with reasoning.""" | |
pitch_zone = event_meta["pitch_zone"] # 'inline', 'outside_off', 'outside_leg' | |
impact_zone = event_meta["impact_zone"] | |
projected_hit = event_meta["hits_stumps"] # bool | |
if pitch_zone == "outside_leg": | |
return "NOT OUT", "Ball pitched outside leg" | |
if impact_zone != "in_line": | |
return "NOT OUT", "Impact outside off and shot offered" if event_meta.get("shot_offered") else "NOT OUT" | |
if projected_hit: | |
return "OUT", "All three criteria satisfied" | |
else: | |
return "UMPIRE CALL", "Missing stumps within margin" |