lbw_drs_ai / rules /lbw_engine.py
dschandra's picture
Create rules/lbw_engine.py
06070fe verified
"""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"