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