Claude
refactor(report): split generator.py (1063 → 431 lines) by concern
d641f6e unverified
Raw
History Blame
972 Bytes
"""Helpers numériques internes au sous-package report_data.
Petites fonctions utilitaires partagées par tous les builders de
sections (engines, documents, statistics, scatter, pareto). Ne pas
importer depuis l'extérieur du sous-package — ces helpers sont
spécifiques aux conventions du dict JSON consommé par le template.
"""
from __future__ import annotations
from typing import Optional
def safe_round(v: Optional[float], decimals: int = 4) -> float:
"""Arrondit un float optionnel ; ``None`` devient ``0.0``."""
return round(v or 0.0, decimals)
def percent_string(v: Optional[float], decimals: int = 2) -> str:
"""Formate un ratio ∈ [0, 1] en chaîne pourcentage : ``0.4723 → "47.23 %"``.
``None`` → ``"—"``. Conservé pour rétrocompat avec d'éventuels
callers externes (Sprint 7 historique).
"""
if v is None:
return "—"
return f"{v * 100:.{decimals}f} %"
__all__ = ["safe_round", "percent_string"]