Notebook-Tests: nbmake + Subprocess-Zellen + inkrementeller Test

Alle 25 Notebooks sind nun fehlerfrei testbar (25 passed). Dafür drei
Änderungen im Build und eine neue Test-Infrastruktur:

1. pyproject.toml: nbmake>=1.5 in der dev-Gruppe.

2. build_version_04.py: Notebooks bekommen zwei Setup-Zellen und
   Subprocess-Zellen für Programme, die nicht direkt im Kernel laufen:
   - NOTEBOOK_SETUP_2: __file__ definieren, sys.path für or_kern,
     multiprocessing auf fork (Spawn findet Kernel-Funktionen nicht).
   - _braucht_subprocess: erkennt highspy (Solver-Konflikt), pytest
     (SystemExit), get_context('spawn'), subprocess+__file__ (sucht
     .py-Dateien), sys.exit (SystemExit). Diese Programme erscheinen
     als Markdown-Codeblock (sichtbar, nicht ausführbar) plus einer
     Subprocess-Zelle mit NO_COLOR=1 (verhindert ANSI-Codes, die der
     Parser von Mutationstest.py nicht verarbeitet).
   - Solver-Konflikt-Erkennung: wenn ein Kapitel sowohl ortools als
     auch highspy importiert, laufen auch reine ortools-Programme als
     Subprocess (highspy schon im Kernel).

3. teste_code_04.py: inkrementeller Test — nur geänderte/neue Programme
   und Notebooks (via git status). Netzabhängige Dateien (yfinance)
   werden automatisch erkannt und nur getestet, wenn Internet verfügbar.

4. PLAN.md Abschnitt 10: neuer Verifikationsschritt 4 (pytest --nbmake).
   PROGRESS.md und CLAUDE.md aktualisiert.

Gefundene und behobene Probleme:
- or_kern-Import: sys.path im Notebook erweitert.
- __file__ nicht definiert: zweite Setup-Zelle setzt es.
- multiprocessing spawn: fork erzwungen (Ein_System_Vier_Ansaetze.py).
- ortools/highspy-Konflikt: Subprocess für beide Solver.
- pytest SystemExit: Subprocess für test_or_kern.py und Mutationstest.py.
- sys.exit(0): Subprocess für Installationstest.py.
- ANSI-Codes in pytest-Ausgabe: NO_COLOR=1 in Subprocess-Zelle.
This commit is contained in:
dschlueter 2026-09-11 22:38:59 +02:00
commit a4fc247116
70 changed files with 4073 additions and 305 deletions

View file

@ -7,6 +7,12 @@ angefallen sind. Wer nach einer Unterbrechung weitermacht, liest diese Datei zue
**Stand:** 7. September 2026 · Branch `main` · **Phasen 05 abgeschlossen**
*Nachträglich ergänzt (gleicher Monat):* Notebook-Test-Infrastruktur — `nbmake` in
`pyproject.toml`, zweite Setup-Zelle in den Notebooks (`__file__`, `sys.path`,
multiprocessing-`fork`), Subprocess-Zellen für Programme, die nicht direkt im Kernel
laufen (Solver-Konflikt, pytest, `sys.exit`), und `teste_code_04.py` für inkrementelle
Tests. Alle 25 Notebooks laufen fehlerfrei (`25 passed`).
*(Die genaue Position in der Historie liefert `git log --oneline`; ein Hash steht hier
bewusst nicht, weil er sich mit genau dem Commit ändert, der diese Zeile enthält.)*
@ -37,7 +43,12 @@ python3 Operations_Research_mit_Python_Version_04/build_version_04.py --check
python3 Operations_Research_mit_Python_Version_04/extract_programme_04.py
MPLBACKEND=Agg bash -c 'for p in Operations_Research_mit_Python_Version_04_Programme/*.py; do
timeout 600 python3 "$p" >/dev/null 2>&1 || echo "FEHLER: $p"; done'
# Soll: 73 Programme, keine FEHLER-Zeile.
# Soll: 76 Programme, keine FEHLER-Zeile (die 4 yfinance-Programme brauchen
# Internet — ohne Internet scheitern sie am Download, nicht am Code).
# 3b. Laufen alle Notebooks? (ca. 13 Minuten; braucht pip install -e ".[dev,notebook]")
pytest --nbmake --nbmake-timeout=900 Notebooks_04/ -q
# Soll: 25 passed. Alternativ: python3 .../teste_code_04.py (nur geänderte).
# 4. Gegenprobe: Version 03 ist unberührt (liegt seit der Trennung daneben)
python3 ../Version_03/Operations_Research_mit_Python_Version_03/build_version_03.py --check