"""Integrazione sui CSV di gen_data (dati/gen_{1,2,3}.csv, ignorati da git: i test sono saltati se mancano) e sulla CLI.""" import pytest from conftest import RADICE from fitseg import cli, dati, domini from fitseg.analisi import analizza_domini def analizza(csv, cfg): t, serie = dati.leggi_csv(csv, cfg) ds = domini.proponi(t, serie, cfg) return ds, analizza_domini(t, serie, ds, cfg) def test_domini_su_csv_gen(csv_gen, cfg): ds, _ = analizza(csv_gen, cfg) assert [d["tipo"] for d in ds] == ["riposo", "riscaldamento", "riscaldamento", "raffreddamento"] def test_raffreddamento_tau_nominale(csv_gen, cfg): _, ris = analizza(csv_gen, cfg) # τ nominale 1/k = 15.9 s, k perturbato del 2 % per seed for vs in ris[-1]["serie"].values(): 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_riscaldamento_eredita_costanti(csv_gen, cfg): _, ris = analizza(csv_gen, cfg) for nome in ris[0]["serie"]: raff = next(x for x in ris[-1]["serie"][nome]["fit"] if x["modello"] == "esp_decad")["parametri"] for r in ris[1:3]: fit = next(x for x in r["serie"][nome]["fit"] if x["modello"] == "esp_decad") assert fit["fissi"] == ["c", "tau"] and fit["parametri"]["tau"] == raff["tau"] and fit["parametri"]["A"] > 0 def test_cli_domini_e_analizza(tmp_path, capsys): csv = RADICE / "dati/gen_1.csv" if not csv.exists(): pytest.skip(f"{csv} assente") lavoro = tmp_path / "lavoro" base = ["--config", str(RADICE / "config.toml"), "--lavoro", str(lavoro)] cli.main([*base, "domini", str(csv)]) assert (lavoro / "domini.toml").exists() and (lavoro / "proposta.png").exists() assert not (lavoro / "out").exists() # `domini` non fa nessun fit cli.main([*base, "analizza", str(csv), "--domini", str(lavoro / "domini.toml")]) # domini corretti a mano for f in ("out/report.md", "out/risultati.json", "out/dominio4_T_C.png"): assert (lavoro / f).exists(), f assert "dominio 4 raffreddamento" in capsys.readouterr().out def test_cli_errori(tmp_path): base = ["--config", str(RADICE / "config.toml"), "--lavoro", str(tmp_path)] with pytest.raises(SystemExit) as e: cli.main([*base, "domini", str(tmp_path / "non_esiste.csv")]) assert e.value.code == 4 with pytest.raises(SystemExit) as e: cli.main(["--config", "/non/esiste.toml", "domini", "x.csv"]) assert e.value.code == 3