gen_data scaricato in extern/ (gitignorato) con scarica_gen_data.sh; test di validazione e documentazione collegati
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5e8ed1a8a1
commit
875d480df1
9 files changed
+75
-17
No files matched your search
@@ -4,3 +4,4 @@ __pycache__/
|
||||
*.egg-info/
|
||||
.pytest_cache/
|
||||
input/*.csv
|
||||
extern/
|
||||
@@ -29,4 +29,4 @@ uv venv .venv && uv pip install -e ".[dev]" # installazione: docs/uso.md §1
|
||||
.venv/bin/pytest # test: docs/test.md
|
||||
```
|
||||
`./pulisci.sh` pulisce i dati: svuota `output/` e cancella `input/*.csv`, con conferma ([docs/uso.md](docs/uso.md) §6).
|
||||
I CSV da analizzare vanno in `input/` (dati di prova: `../gen_data genera.py --seed 7`, vedi [docs/uso.md](docs/uso.md) §2). Il report è `output/<csv>/03_report/report.md`.
|
||||
I CSV da analizzare vanno in `input/` (dati di prova: `./scarica_gen_data.sh`, poi `extern/gen_data/genera.py --seed 7`, vedi [docs/uso.md](docs/uso.md) §2). Il report è `output/<csv>/03_report/report.md`.
|
||||
+4
-4
@@ -2,7 +2,7 @@
|
||||
|
||||
Ogni assunzione ha un identificativo (A1, A2, …) richiamato nel codice e negli altri documenti. Per ognuna: cosa si assume, perché è
|
||||
ragionevole, **dove** il codice ne dipende e **cosa succede se è falsa**. Le assunzioni sul segnale valgono per i dati del generatore
|
||||
`../gen_data` (sezione finale): su dati reali vanno verificate.
|
||||
`extern/gen_data` (sezione finale): su dati reali vanno verificate.
|
||||
|
||||
## Dati
|
||||
|
||||
@@ -54,10 +54,10 @@ ragionevole, **dove** il codice ne dipende e **cosa succede se è falsa**. Le as
|
||||
| **A23** | Il **riscaldamento non si fitta** (2–4 campioni). Il salto $\Delta$ si stima nell'ordine da: modelli dei domini adiacenti valutati all'istante del gradino; misura riportata a quell'istante con $c$ e $\tau$ del raffreddamento finale; misura sui campioni ($y_\text{fine salita} - y_\text{prima}$), che è per difetto (fino a ≈ 10–20 %: parte della salita cade sul campione precedente e l'ultimo campione è già decaduto) | `analisi._gradino`, `analisi._affina_salti` |
|
||||
| **A24** | I **modelli provati** sono fissati per tipo di dominio in configurazione, non scelti dal programma | `[fit.modelli_per_tipo]` |
|
||||
|
||||
## Origine dei dati di prova (`../gen_data`)
|
||||
## Origine dei dati di prova (`extern/gen_data`)
|
||||
|
||||
I CSV di prova si generano con `../gen_data`, che a ogni corsa (seed) **sorteggia** i parametri da intervalli: ogni seed è un segnale diverso
|
||||
(dettaglio: `../gen_data/docs/SPEC.md` e `../gen_data/config.toml`). Gli intervalli che fondano le assunzioni sopra:
|
||||
I CSV di prova si generano con `extern/gen_data`, che a ogni corsa (seed) **sorteggia** i parametri da intervalli: ogni seed è un segnale diverso
|
||||
(dettaglio: `extern/gen_data/docs/SPEC.md` e `extern/gen_data/config.toml`). Gli intervalli che fondano le assunzioni sopra:
|
||||
|
||||
| Aspetto | Valore nel generatore | Assunzioni |
|
||||
|---|---|---|
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ di secondo (pochi campioni, **riscaldamento**) e subito dopo decade verso l'ambi
|
||||
centro lo zoom sui tre gradini, in basso la tabella che associa a ogni numero tipo, intervallo ed equazione. Il riscaldamento è rosso, il riposo grigio e
|
||||
ogni raffreddamento ha un colore diverso. Con 3 gradini i domini sono $1 + 2\cdot 3 = 7$.*
|
||||
|
||||
Il generatore dei dati di prova è il repository fratello `../gen_data` (modello e parametri: `../gen_data/docs/SPEC.md`): a ogni seed sorteggia numero
|
||||
Il generatore dei dati di prova è il repository `gen_data` (clonato in `extern/gen_data` con `./scarica_gen_data.sh`) (modello e parametri: `extern/gen_data/docs/SPEC.md`): a ogni seed sorteggia numero
|
||||
dei gradini (1–3), costante di tempo, rumore e disturbi, quindi ogni file ha una struttura diversa. Le sue caratteristiche che contano per `fitseg` sono
|
||||
elencate in [assunzioni.md](assunzioni.md), sezione «Origine dei dati di prova».
|
||||
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@
|
||||
|---|---|---|---|
|
||||
| **Unitari** | `test_domini`, `test_fit`, `test_selezione`, `test_config_dati` | segnale sintetico generato nei test (`conftest.py`) | niente |
|
||||
| **Report e CLI** | `test_report`, `test_cli` | CSV sintetici scritti in una cartella temporanea | niente |
|
||||
| **Validazione** | `test_validazione` | 20 seed generati al volo da `../gen_data`, confrontati con i suoi **parametri veri** | il repository fratello `../gen_data` (altrimenti i test sono saltati) |
|
||||
| **Validazione** | `test_validazione` | 20 seed generati al volo da `extern/gen_data`, confrontati con i suoi **parametri veri** | `extern/gen_data`, da scaricare con `./scarica_gen_data.sh` (altrimenti i test sono saltati) |
|
||||
|
||||
Nessun test usa i file in `input/`: i test girano su un clone nuovo e non dipendono dal contenuto di quella cartella.
|
||||
|
||||
@@ -30,7 +30,7 @@ costruire casi particolari; `scrivi_csv(...)` scrive un CSV nel formato di `gen_
|
||||
|
||||
## Validazione contro i parametri veri (`test_validazione.py`)
|
||||
|
||||
`../gen_data` sorteggia a ogni seed i parametri di una corsa (numero e istanti dei gradini, ampiezze, $k$, rumore, scarti: [assunzioni.md](assunzioni.md), «Origine dei dati di
|
||||
`extern/gen_data` sorteggia a ogni seed i parametri di una corsa (numero e istanti dei gradini, ampiezze, $k$, rumore, scarti: [assunzioni.md](assunzioni.md), «Origine dei dati di
|
||||
prova»). Poiché il sorteggio è riproducibile (`genera.sorteggia(cfg, default_rng(seed))`), per ogni seed si conoscono i valori veri. Il test, per i seed 1–20,
|
||||
genera il CSV, lancia l'analisi e controlla:
|
||||
|
||||
|
||||
+5
-3
@@ -22,12 +22,14 @@ t_ms,T_C,dT_C
|
||||
301,22.63,0.03
|
||||
```
|
||||
|
||||
I CSV di prova si generano con il repository fratello `../gen_data` (modello: `../gen_data/docs/SPEC.md`). A ogni seed il generatore sorteggia numero dei gradini
|
||||
I CSV di prova si generano con il repository `gen_data` (modello: `extern/gen_data/docs/SPEC.md`), che non fa parte di questo repository: lo scarica
|
||||
`./scarica_gen_data.sh` in `extern/gen_data` (cartella ignorata da git; `-u` lo aggiorna, `GEN_DATA_URL` cambia l'indirizzo, ad es. per SSH). Serve anche ai test di validazione ([test.md](test.md)). A ogni seed il generatore sorteggia numero dei gradini
|
||||
(1–3), costante di tempo, rumore e disturbi: ogni file ha una struttura diversa.
|
||||
|
||||
```bash
|
||||
./scarica_gen_data.sh
|
||||
mkdir -p input
|
||||
(cd ../gen_data && .venv/bin/python genera.py config.toml --seed 7 -o ../EquationMiner/input/gen_7.csv)
|
||||
(cd extern/gen_data && ../../.venv/bin/python genera.py config.toml --seed 7 -o ../../input/gen_7.csv)
|
||||
```
|
||||
I test **non** richiedono questi file: generano i dati da soli ([test.md](test.md)).
|
||||
|
||||
@@ -80,7 +82,7 @@ Gli errori sono stampati su stderr in italiano come `Errore: …`.
|
||||
./pulisci.sh -y # tutto, senza chiedere conferma
|
||||
```
|
||||
Cancella: il contenuto di `output/` (cartella di `[output] cartella_output`: risultati che si rifanno rilanciando `fitseg analizza`) e i file `*.csv` in `input/`
|
||||
(i dati grezzi: **non** si rigenerano da soli, si rifanno con `../gen_data`, §2, per questo chiede conferma salvo `-y`). Le cartelle e i loro `.gitkeep`
|
||||
(i dati grezzi: **non** si rigenerano da soli, si rifanno con `./scarica_gen_data.sh` e `genera.py`, §2, per questo chiede conferma salvo `-y`). Le cartelle e i loro `.gitkeep`
|
||||
restano; i file di `input/` che non sono `.csv` non si toccano. Rifiuta percorsi di output assoluti o con `..`. Codici di uscita: 0 ok (o niente da pulire), 1 annullato o
|
||||
percorso non sicuro, 2 opzione sconosciuta.
|
||||
|
||||
|
||||
+2
-2
@@ -11,8 +11,8 @@ uso: ./pulisci.sh [-n] [-y] [--solo-output]
|
||||
Cancella i dati:
|
||||
- il contenuto della cartella di output ([output] cartella_output in config.toml, default "output"):
|
||||
risultati generati da `fitseg`, si rifanno rilanciando l'analisi. La cartella resta;
|
||||
- i file *.csv in input/: i dati grezzi, NON si rifanno da soli (vanno rigenerati con ../gen_data,
|
||||
vedi docs/uso.md §2). La cartella e il suo .gitkeep restano.
|
||||
- i file *.csv in input/: i dati grezzi, NON si rifanno da soli (vanno rigenerati con extern/gen_data
|
||||
(./scarica_gen_data.sh), vedi docs/uso.md §2). La cartella e il suo .gitkeep restano.
|
||||
|
||||
Chiede conferma prima di cancellare, salvo -y.
|
||||
|
||||
|
||||
Executable
+55
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
# Clona (o aggiorna) il generatore di dati di prova gen_data in extern/gen_data, cartella ignorata da git.
|
||||
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
URL_DEFAULT="https://santantonio.sytes.net/cevolani/gen_data.git"
|
||||
DEST="extern/gen_data"
|
||||
|
||||
uso() {
|
||||
cat <<E2
|
||||
uso: ./scarica_gen_data.sh [-u] [-h]
|
||||
|
||||
Clona $URL_DEFAULT in $DEST (cartella ignorata da git: non fa parte di questo repository).
|
||||
Servono i file genera.py e config.toml: tests/test_validazione.py li cerca lì e, se mancano, salta i test.
|
||||
Per usare un altro indirizzo (es. SSH) imposta GEN_DATA_URL.
|
||||
|
||||
opzioni:
|
||||
-u, --aggiorna se la cartella esiste già, la porta all'ultima versione (git pull --ff-only)
|
||||
-h, --help mostra questo aiuto
|
||||
|
||||
esempi:
|
||||
./scarica_gen_data.sh
|
||||
./scarica_gen_data.sh -u
|
||||
GEN_DATA_URL=ssh://git@santantonio.sytes.net:2223/cevolani/gen_data.git ./scarica_gen_data.sh
|
||||
E2
|
||||
}
|
||||
|
||||
aggiorna=0
|
||||
for a in "$@"; do
|
||||
case "$a" in
|
||||
-u|--aggiorna) aggiorna=1 ;;
|
||||
-h|--help) uso; exit 0 ;;
|
||||
*) echo "scarica_gen_data.sh: opzione non riconosciuta: $a" >&2; uso >&2; exit 2 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
url=${GEN_DATA_URL:-$URL_DEFAULT}
|
||||
|
||||
if [ -d "$DEST/.git" ]; then
|
||||
if [ "$aggiorna" -eq 1 ]; then
|
||||
git -C "$DEST" pull --ff-only
|
||||
else
|
||||
echo "$DEST esiste già (usa -u per aggiornarlo)"
|
||||
fi
|
||||
elif [ -e "$DEST" ]; then
|
||||
echo "scarica_gen_data.sh: $DEST esiste e non è un repository git" >&2
|
||||
exit 1
|
||||
else
|
||||
mkdir -p extern
|
||||
git clone "$url" "$DEST"
|
||||
fi
|
||||
|
||||
[ -f "$DEST/genera.py" ] || { echo "scarica_gen_data.sh: $DEST/genera.py non trovato" >&2; exit 1; }
|
||||
echo "pronto: $DEST ($(git -C "$DEST" rev-parse --short HEAD))"
|
||||
@@ -1,5 +1,5 @@
|
||||
"""Validazione contro i parametri VERI di gen_data: ../gen_data sorteggia i parametri di ogni corsa dal seed, quindi per ogni seed si
|
||||
conoscono gradini, ampiezze e costante di tempo. Richiede il repository fratello ../gen_data (altrimenti i test sono saltati)."""
|
||||
"""Validazione contro i parametri VERI di gen_data: extern/gen_data sorteggia i parametri di ogni corsa dal seed, quindi per ogni seed si
|
||||
conoscono gradini, ampiezze e costante di tempo. Richiede extern/gen_data, che si scarica con ./scarica_gen_data.sh (altrimenti i test sono saltati)."""
|
||||
|
||||
import sys
|
||||
|
||||
@@ -10,8 +10,8 @@ from conftest import RADICE
|
||||
from fitseg import dati, domini
|
||||
from fitseg.analisi import analizza_domini, fit_scelto
|
||||
|
||||
GEN = RADICE.parent / "gen_data"
|
||||
pytestmark = pytest.mark.skipif(not (GEN / "genera.py").exists(), reason="repository ../gen_data non trovato")
|
||||
GEN = RADICE / "extern" / "gen_data"
|
||||
pytestmark = pytest.mark.skipif(not (GEN / "genera.py").exists(), reason="extern/gen_data non trovato: lancia ./scarica_gen_data.sh")
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
|
||||
Reference in new issue
Block a user