File size: 907 Bytes
06070fe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
"""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"