Files
EquationMiner/tests/test_integrazione.py
T
davideandClaude Sonnet 5.5 d92bcd198b Semplifica: CLI a due comandi, moduli piatti, solo modelli usati; test unitari su segnale sintetico
- rimossi scripts/, stadi.py, docs/USO.md, modelli non usati, partenze casuali, output ridondanti
- uscita unica (report.md con grafici per dominio, risultati.json, proposta.png)
- test: unitari su segnale sintetico, integrazione su dati/gen_*.csv (saltati se mancano)

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

61 lines
2.5 KiB
Python

"""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