Files
EquationMiner/tests/test_pipeline.py
T
davideandClaude Sonnet 5.5 b8c8aeb60e Riscaldamento e raffreddamento esponenziali con c e tau condivisi; grafici per dominio nel report
- modelli per tipo di dominio ([fit.modelli_per_tipo])
- nei domini di riscaldamento c e tau fissati ai valori del raffreddamento
- un grafico dati/modelli per dominio e serie, incorporato in report.md

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 09:58:53 +01:00

56 lines
2.1 KiB
Python

"""Verifiche sui CSV generati da gen_data (dati/gen_<seed>.csv, config d'esempio: tau di raffreddamento nominale 15.9 s)."""
from pathlib import Path
import pytest
from fitseg import config, dati, domini
from fitseg.pipeline import analizza_domini
RADICE = Path(__file__).parent.parent
SEEDS = [1, 2, 3]
@pytest.fixture(scope="module")
def cfg():
return config.leggi(RADICE / "config.toml")
@pytest.mark.parametrize("seed", SEEDS)
def test_domini_riposo_gradini_raffreddamento(cfg, seed):
t, serie = dati.leggi_csv(RADICE / f"dati/gen_{seed}.csv", cfg)
tipi = [d["tipo"] for d in domini.proponi(t, serie, cfg)]
assert tipi == ["riposo", "riscaldamento", "riscaldamento", "raffreddamento"]
@pytest.mark.parametrize("seed", SEEDS)
def test_raffreddamento_esponenziale(cfg, seed):
t, serie = dati.leggi_csv(RADICE / f"dati/gen_{seed}.csv", cfg)
ris = analizza_domini(t, serie, domini.proponi(t, serie, cfg), cfg)
for nome in serie:
vs = ris[-1]["serie"][nome]
assert vs["scelta"] == "esp_decad"
fit = next(x for x in vs["fit"] if x["modello"] == "esp_decad")
assert fit["parametri"]["tau"] == pytest.approx(15.9, rel=0.1)
def test_riposo_costante(cfg):
t, serie = dati.leggi_csv(RADICE / "dati/gen_1.csv", cfg)
ris = analizza_domini(t, serie, domini.proponi(t, serie, cfg), cfg)
assert ris[0]["serie"]["dT_C"]["scelta"] == "costante"
@pytest.mark.parametrize("seed", SEEDS)
def test_riscaldamento_esponenziale_con_costanti_del_raffreddamento(cfg, seed):
t, serie = dati.leggi_csv(RADICE / f"dati/gen_{seed}.csv", cfg)
ris = analizza_domini(t, serie, domini.proponi(t, serie, cfg), cfg)
for nome in serie:
raff = next(x for x in ris[-1]["serie"][nome]["fit"] if x["modello"] == "esp_decad")["parametri"]
for r in ris[1:3]:
vs = r["serie"][nome]
assert vs["scelta"] == "esp_decad"
fit = next(x for x in vs["fit"] if x["modello"] == "esp_decad")
assert fit["fissi"] == ["c", "tau"]
assert fit["parametri"]["tau"] == raff["tau"] and fit["parametri"]["c"] == raff["c"]
assert fit["parametri"]["A"] > 0