"""Riconoscimento dei domini (riposo / riscaldamento / raffreddamento) su segnali sintetici.""" import itertools import pytest from conftest import GRADINI, segnale from fitseg import domini def tipi(t, serie, cfg): return [d["tipo"] for d in domini.proponi(t, serie, cfg)] def test_tre_gradini(sintetico, cfg): t, serie = sintetico assert tipi(t, serie, cfg) == ["riposo", "riscaldamento", "riscaldamento", "raffreddamento"] def test_confini_vicini_agli_istanti_dei_gradini(sintetico, cfg): t, serie = sintetico ds = domini.proponi(t, serie, cfg) for d, (tj, _) in zip(ds[1:], GRADINI, strict=True): assert abs(t[d["i0"]] - tj) < 0.5 def test_domini_contigui_e_completi(sintetico, cfg): t, serie = sintetico ds = domini.proponi(t, serie, cfg) assert ds[0]["i0"] == 0 and ds[-1]["i1"] == len(t) assert all(a["i1"] == b["i0"] for a, b in itertools.pairwise(ds)) def test_senza_gradini_un_solo_riposo(cfg): t, serie = segnale(gradini=[]) assert tipi(t, serie, cfg) == ["riposo"] def test_un_solo_gradino(cfg): t, serie = segnale(gradini=[(20.0, 80.0)]) assert tipi(t, serie, cfg) == ["riposo", "raffreddamento"] def test_gradino_sotto_soglia_ignorato(cfg): t, serie = segnale(gradini=[(20.0, 10.0)]) # 10 °C < soglia_gradino_c assert tipi(t, serie, cfg) == ["riposo"] def test_domini_toml_andata_e_ritorno(sintetico, cfg, tmp_path): t, serie = sintetico ds = domini.proponi(t, serie, cfg) domini.scrivi_toml(tmp_path / "d.toml", ds, t) assert domini.leggi_toml(tmp_path / "d.toml", t) == ds def test_domini_toml_non_contigui_rifiutati(sintetico, tmp_path): t, _ = sintetico (tmp_path / "d.toml").write_text('[[dominio]]\ntipo="riposo"\nt0_s=0\nt1_s=10\n' '[[dominio]]\ntipo="raffreddamento"\nt0_s=20\nt1_s=30\n') with pytest.raises(ValueError, match="contigui"): domini.leggi_toml(tmp_path / "d.toml", t) def test_domini_toml_tipo_non_valido(sintetico, tmp_path): t, _ = sintetico (tmp_path / "d.toml").write_text('[[dominio]]\ntipo="boh"\nt0_s=0\nt1_s=10\n') with pytest.raises(ValueError, match="non valido"): domini.leggi_toml(tmp_path / "d.toml", t)