arkai2025's picture
refactor(config): centralize scenario configuration defaults
85cbecd
"""Centralized configuration defaults for scenario controls."""
from __future__ import annotations
from dataclasses import dataclass
from typing import Final
@dataclass(frozen=True)
class SliderDefaults:
"""Slider configuration along with a helper to clamp values."""
minimum: float
maximum: float
value: float
step: float
def clamp(self, candidate: float) -> float:
"""Clamp ``candidate`` to this slider's min/max bounds."""
return max(self.minimum, min(self.maximum, candidate))
SCENARIO_DEFAULTS: Final[dict[str, SliderDefaults]] = {
"fire_count": SliderDefaults(minimum=1, maximum=40, value=20, step=1),
"fire_intensity": SliderDefaults(minimum=0.2, maximum=0.9, value=0.6, step=0.05),
"building_count": SliderDefaults(minimum=1, maximum=35, value=20, step=1),
"max_units": SliderDefaults(minimum=1, maximum=20, value=10, step=1),
}
def range_text(key: str) -> str:
"""
Return a human-readable ``min-max`` string for any configured scenario slider.
Primarily used in docstrings / README notes to avoid diverging documentation.
"""
defaults = SCENARIO_DEFAULTS[key]
step_value = float(defaults.step)
if step_value.is_integer():
min_val = int(defaults.minimum)
max_val = int(defaults.maximum)
else:
min_val = defaults.minimum
max_val = defaults.maximum
return f"{min_val}-{max_val}"