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" |