File size: 921 Bytes
7da2ecb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""Metric helpers for object-based validation."""

from __future__ import annotations


def safe_div(num: float, den: float, default: float | None = None) -> float | None:
    if den == 0:
        return default
    return float(num) / float(den)


def compute_scores(hits: int, misses: int, falses: int) -> dict:
    """Return POD/FAR/CSI/F1 from hit/miss/false counts."""
    hits = int(hits)
    misses = int(misses)
    falses = int(falses)
    return {
        "hits": hits,
        "misses": misses,
        "falses": falses,
        "POD": safe_div(hits, hits + misses, default=None),
        "FAR": safe_div(falses, hits + falses, default=None),
        "CSI": safe_div(hits, hits + misses + falses, default=None),
        "F1": safe_div(2 * hits, 2 * hits + misses + falses, default=None),
    }


def leadtime_pod(hits: int, misses: int) -> float | None:
    return safe_div(hits, hits + misses, default=None)