from typing import Iterable def ensure_required_columns(columns: Iterable[str], required_columns: list[str]) -> None: missing = sorted(set(required_columns) - set(columns)) if missing: raise ValueError(f"Dataset is missing required columns: {', '.join(missing)}") def clamp(value: float, lower: float, upper: float) -> float: return max(lower, min(value, upper))