generated from coulomb/repo-seed
Initial implementation
This commit is contained in:
43
src/infospace_bench/viability.py
Normal file
43
src/infospace_bench/viability.py
Normal file
@@ -0,0 +1,43 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
from .models import ViabilityThreshold
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class ViabilityResult:
|
||||
metric: str
|
||||
value: float | None
|
||||
threshold: ViabilityThreshold
|
||||
passed: bool
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class ViabilityReport:
|
||||
passed: bool
|
||||
results: dict[str, ViabilityResult]
|
||||
|
||||
|
||||
def evaluate_viability(
|
||||
metrics: dict[str, float],
|
||||
thresholds: dict[str, ViabilityThreshold],
|
||||
) -> ViabilityReport:
|
||||
results: dict[str, ViabilityResult] = {}
|
||||
for name, threshold in thresholds.items():
|
||||
value = metrics.get(name)
|
||||
passed = value is not None
|
||||
if value is not None and threshold.min is not None:
|
||||
passed = passed and value >= threshold.min
|
||||
if value is not None and threshold.max is not None:
|
||||
passed = passed and value <= threshold.max
|
||||
results[name] = ViabilityResult(
|
||||
metric=name,
|
||||
value=value,
|
||||
threshold=threshold,
|
||||
passed=passed,
|
||||
)
|
||||
return ViabilityReport(
|
||||
passed=all(result.passed for result in results.values()),
|
||||
results=results,
|
||||
)
|
||||
Reference in New Issue
Block a user