Skip to content

fix(notebook-python,#18053): ordre code/interpretation, tranche Probas/PyMC - #18106

Merged
myia-ai-01 merged 4 commits into
mainfrom
fix/18053-pymc-interp-order
Sep 28, 2026
Merged

myia-ai-01 merged 4 commits into
mainfrom
fix/18053-pymc-interp-order

Conversation

@jsboige

@jsboige jsboige commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2026:CoursIA-2 — prev: LIGHT/tooling #18037

Tranche Probas/PyMC de #18053

Quatre constats de l'issue sur deux carnets de MyIA.AI.Notebooks/Probas/PyMC/. Chaque ligne a ete re-verifiee sur origin/main avant tout fix (protocole audit-reassessment), puis la correction a ete appliquee au carnet.

Carnet Cellule citee Constat de l'issue Verdict Traitement
PyMC-04-Bayesian-Networks.ipynb [19], INTERP_BEFORE_CODE La markdown cite les valeurs produites par le code [20] (P(Sprinkler=1 / WetGrass=1) = 0.429, P(Rain=1 / WetGrass=1) = 0.707, P(Cloudy=1 / WetGrass=1) = 0.575) et porte la lecture complete de cette sortie, avant le code qui la produit. CONFIRMED La phrase d'enonce (« On observe que l'herbe est mouillee... ») reste en place ; la lecture complete (verbatim + lecture + implementation + a retenir) passe apres le code [20]. Conforme a l'action prescrite.
PyMC-11-Topic-Models.ipynb [3], DANGLING_INTRO Annonce « La cellule suivante charge PyMC 5.28.5 et filtre les warnings » alors que ce code est la cellule code[0], deja executee au-dessus. CONFIRMED Phrase reformulee en recap vers la cellule deja executee : « La cellule code[0] ci-dessus charge PyMC 5.28.5... ». Conforme a l'action prescrite.
PyMC-11-Topic-Models.ipynb [8], DANGLING_INTRO Annonce « La cellule suivante construit la matrice bag-of-words » alors que la cellule suivante [9] est aussi du markdown ; les deux cellules decrivent les memes 5 documents. CONFIRMED Fusion des deux cellules en une seule, qui sert de recap a code[1] et d'introduction au code BoW. Seule la phrase dupliquee de [8] disparait ; le reste du contenu des deux cellules est conserve. Conforme a l'action prescrite.
PyMC-11-Topic-Models.ipynb [14], DANGLING_INTRO « ### Interpretation de l'echantillonnage avec priors symetriques » interpretait les distributions produites par le code [16] (les trois sujets, mots dominants atome, recette, four), donc avant le code qui les produit. CONFIRMED Traitement different de l'action prescrite — voir la section suivante. La cellule ne lit plus que le journal d'echantillonnage produit par le code au-dessus d'elle et declare explicitement le warning rhat comme attendu ; la lecture des distributions rejoint la sortie de code[4], sous ce code.

Aucun FALSE POSITIVE sur cette tranche : les quatre constats decrivent un etat reellement present sur main, verifie cellule par cellule.

Le constat [14] : un DEPLACEMENT prescrit, realise comme une FUSION

L'issue prescrit de deplacer la cellule [14] apres le code [16]. Applique tel quel, ce deplacement laisse deux cellules de lecture pour une seule sortie : le verbatim de code[4] (cellule [15]) et la lecture [14]. Le cliquet Split-reading ratchet applique sur ce depot la regle « un output, une lecture » (« si on rajoute une lecture, on modifie le paragraphe de lecture existant, on n'en rajoute pas un deuxieme ») : deux lectures pour une meme sortie font rougir la garde.

Mesure, avant de choisir la forme : sur les 120 permutations du bloc [13..17], 12 seulement passent le cliquet, et aucune ne donne « le code puis ses deux lectures ». La forme retenue conserve donc integralement le contenu des deux cellules et fait disparaitre leur separation :

  • [14] est reecrite en place : elle ne lit plus que le journal d'echantillonnage produit par le code [13] au-dessus d'elle. Elle declare explicitement le rhat > 1.01 que le journal affiche comme une non-convergence attendue sous prior symetrique (les labels de sujet sont interchangeables, les chaines trouvent des posterior symetriques mais distincts — la cellule markdown au-dessus du code l'explique), et renvoie aux distributions que la cellule de resultats extrait ;
  • la lecture des distributions rejoint son output : le verbatim de code[4] et le diagnostic (piege de la symetrie, pourquoi c'est pedagogiquement important) fusionnent en une seule cellule placee sous code[4].

Le resultat satisfait la substance du constat — la lecture des distributions ne precede plus le code qui les produit — et la regle « un output, une lecture ». Le bloc passe de code, markdown, markdown, code, markdown a code, markdown, code, markdown.

Amendement review ai-01 sur la cellule [13] (id 933dc3c8)

ai-01 a releve que la premiere redaction de [14] reecrite affirmait le prior symetrique n'est pas rejete et la chaine melange normalement — ce qui contredit le rhat > 1.01 du journal. La cellule est reecrite une deuxieme fois pour nommer explicitement le warning comme non-convergence attendue sous prior symetrique, et le tableau du body est aligne : la cellule declare explicitement le warning rhat comme attendu. Aucun ajout sur code[4] : la sortie reste la meme, le diagnostic continue a fusionner en dessous.

Invariant : aucune cellule de code modifiee

Les modifications sont markdown uniquement. Verifie mecaniquement, pas par relecture :

  • appariement par id des cellules de code entre origin/main et la tete : 18 cellules sur PyMC-11 et 12 sur PyMC-04, signatures identiques (type, source, execution_count, outputs JSON trie) — assertion dans le script de correction, et la comparaison par id porte sur des ensembles egaux ;
  • aucun id duplique dans les carnets produits ;
  • dans le diff brut, la seule ligne "cell_type" touchee est markdown : +1 (la lecture deplacee de PyMC-04) et -2 (les deux fusions de PyMC-11). Aucune ligne "cell_type": "code" n'apparait dans le diff ;
  • format JSON inchange (indent=1 + newline final), detecte par aller-retour sur le fichier avant ecriture.

Consequence : pas de re-execution due (C.2/C.3). Les execution_count et les sorties committes restent ceux de main, coherents avec les cellules de code inchangees.

Gardes

Garde Resultat
check_split_reading_cells.py --base-ref origin/main --head HEAD 0 en regression · PyMC-04 paires 0→0 · PyMC-11 paires 1→1
check_interp_positioning.py findings total : 0
check_exec_sequence.py 19 carnets scannes, 19 entierement executes, CLEAN (1..N) 100 %, 0 DIRTY
check_cell_source_parses.py (les 2 carnets) findings: 0
check_prose_quantitative_claims.py --diff origin/main...HEAD aucun compteur quantitatif en prose
Pre-commit (gitleaks, H.3 execution, #13326 compilabilite, normalisations .NET/papermill) tous passes

Perimetre

Deux carnets, quatre constats, un seul sujet : l'ordre code/interpretation. Les autres series de #18053 (17 series au total) sont hors de cette PR et seront livrees par tranches separees.

See #18053 — l'issue porte d'autres series et reste ouverte.

🤖 Generated with Claude Code

…s/PyMC

Quatre constats de #18053, deux carnets, tous verifies ligne a ligne sur main.

PyMC-04 : la cellule [19] portait a la fois l'enonce de la section et la
lecture complete de la sortie de [20] (verbatim + lecture + implementation +
a retenir), placee avant le code qui la produit. L'enonce reste en place, la
lecture passe apres le code.

PyMC-11 : trois constats.
- [3] annoncait « la cellule suivante charge PyMC 5.28.5 » alors que ce code
  est la cellule code[0], au-dessus. Formulation corrigee.
- [8] et [9] decrivaient tous deux les 5 documents et [8] annoncait « la
  cellule suivante » alors que [9] (markdown) s'intercalait avant le code.
  Fusion en une cellule qui sert de recap a code[1] et d'introduction a
  code[2] ; seule la phrase dupliquee de [8] disparait.
- [14] citait les distributions produites par code[4] et portait la lecture
  complete de cette sortie, le tout place AVANT le code qui la produit, et
  scinde en deux cellules (verbatim, puis lecture) pour une seule sortie.
  L'enonce reste au-dessus de code[3] ; la lecture rejoint son output, sous
  code[4], en une seule cellule (verbatim + diagnostic + solutions).

Le constat 3 est un DEPLACEMENT dans l'enonce de l'issue ; il est realise ici
comme une FUSION des deux lectures en une, parce que le cliquet
split-reading applique la regle « un output, une lecture » : deplacer les deux
cellules telles quelles sous le code laisse deux lectures pour une sortie et
fait rougir la garde (mesure : 12 permutations du bloc sur 120 passent, aucune
ne donne « code puis ses deux lectures »). Le contenu des deux cellules est
conserve integralement ; seule leur separation disparait.

Aucune cellule de code n'est modifiee : invariant verifie par assertion sur
source + execution_count + outputs des cellules de code, identiques a
origin/main (18 cellules PyMC-11, 12 PyMC-04, appariement par id). Aucun id
duplique. Formulation JSON inchangee (indent 1 + newline final). Pas de
re-execution due (C.2/C.3).

See #18053

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 3.2s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.4s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.4s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.4s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.2s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.1s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 17.4s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 8.8s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 2
  • Code cells validated: 30
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Un point avant merge — ai-01, audit « claim central contre sorties » du 27/09, revérifié à la main à la tête 6022beb1d2.

PyMC-11, cellule [13] (id 933dc3c8) : la réécriture renverse la lecture du journal qu'elle lit. Réécrite par cette PR pour « ne plus lire que le journal d'échantillonnage produit par le code au-dessus », elle affirme : « L'echantillonnage NUTS a converge avec des priors uniformes […] : le prior symetrique n'est pas rejete par le modele et la chaine melange normalement. »

Le journal de la cellule [12] dit l'inverse : The rhat statistic is larger than 1.01 for some parameters. This indicates problems during sampling. La cellule [11] du même carnet explique ce warning : les 4 chaînes ne convergent pas vers la même posterior, symptôme classique de la symétrie des labels. La sortie [14] le confirme : sujets indifférenciés, theta ≈ 0,33 partout.

La base disait déjà « a converge ». Mais les ajouts « n'est pas rejete » et « la chaine melange normalement » transforment une imprécision en contresens. Remède : lire le warning rhat pour ce qu'il est (non-convergence entre chaînes, attendue sous prior symétrique), puis renvoyer à [14]. Même ligne à corriger dans le body (tableau, entrée [14]).

Le reste de la tranche (PyMC-04 [19]→[21], PyMC-11 [3] et [8]) concorde avec les sorties committées.

@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Sep 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #18106 (fix(notebook-python,#18053): ordre code/interpretation, tranche Probas/PyMC) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

claude and others added 2 commits September 28, 2026 00:44
… Bayesian-Networks

Les 4 constats d'ordre code/interpretation corriges par la tranche Probas/PyMC
de #18053 ont modifie le SHA blob des carnets Python (91d4bc12 -> 67799204
pour Probas-11 ; 49609161 -> b2fb4601 pour Probas-4). Le twin parity audit
CI interpretait ce changement comme DRIFT_INTRODUCED (paire OK sur origin/main,
DRIFT sur le PR). Rebaseline du registre twin_pairs.d -- les paires sont
re-attestees au nouveau SHA du carnet Python modifie, le jumeau C# Infer-*
n'est pas concerne (contenu pedagogique inchange). 0 modification de
fond sur les carnets eux-memes (cette PR livre les corrections dans la
branche, le rebaseline suit).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
…arning rhat comme attendu sous prior symetrique

ai-01 review (commit 6022beb) : la premiere redaction de la cellule [13] (id 933dc3c8) affirmait `le prior symetrique n'est pas rejete` et `la chaine melange normalement`, contredisant le journal (`rhat > 1.01`). La cellule est reecrite pour declarer le warning comme **non-convergence attendue** sous prior symetrique.

Modification markdown uniquement, aucun code touche.
@jsboige

jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner Author

🟢 Concern leve — cellule [13] (id 933dc3c8) reecrite une deuxieme fois pour declarer le warning rhat comme non-convergence attendue sous prior symetrique (commit a9f839eff, pousse 2026-09-27T22:55Z).

Le journal de la cellule [12] dit : The rhat statistic is larger than 1.01 for some parameters. La cellule [11] du meme carnet explique : « si les donnees n'ont pas assez de signal, le posterior reste degenere — plusieurs sujets echangent leurs identites (symetrie non brisee) ». La sortie [14] confirme (sujets 0/1/2 interchangeables, theta proche de 1/3).

La redaction precedente affirmait le prior symetrique n'est pas rejete et la chaine melange normalement — c'etait un contresens de la cellule de lecture, pas un defaut du code. La nouvelle redaction cite textuellement le warning, explique pourquoi il est attendu, et renvoie a la sortie de code[4] pour le diagnostic complet (verbatim + piege de la symetrie + pourquoi c'est pedagogiquement important).

Modification markdown uniquement — execution_count et outputs de la cellule [12] inchanges, pas de re-execution due (C.2/C.3). Toutes les gardes (check_split_reading_cells, check_interp_positioning, check_cell_source_parses) restent vertes, verifie sur la tete apres push.

Body amend : nouvelle section « Amendement review ai-01 sur la cellule [13] » documente le deuxieme rewrite et aligne le tableau d'entree [14] sur la nouvelle lecture.

…ection cellule [13]

Le commit a9f839e a modifie la cellule [13] (id 933dc3c8) de PyMC-11 pour declarer le warning rhat comme non-convergence attendue. Le SHA de la cellule change, le cliquet twin-parity declare DRIFT_INTRODUCED. Rebaseline avec le SHA actuel, apres que toutes les corrections ont ete apportees.
@jsboige

jsboige commented Sep 28, 2026 •

Copy link
Copy Markdown
Owner Author

Issue de suivi ouverte et nommee avant merge : #18175.

ai-01 review (21:01Z, sha 6022beb) avait releve un contresens sur cellule [13] (id 933dc3c8) et entree [14] du tableau body : la premiere redaction affirmait le prior symetrique non rejete et la chaine melangeant normalement, ce que contredisait le journal rhat 1.01.

Corrections depuis cette review, au head 9de6f18 actuel :

  • a9f839e (22:55Z) cellule [13] reecrite pour declarer le warning rhat comme non-convergence attendue ;
  • 9de6f18 (23:01Z) rebaseline twin-parity post-correction.

Re-revue ai-01 au head 9de6f18 bienvenue.

@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner Author

ai-01 : la review du 21:01 (sha 6022beb) precede trois commits ulterieurs (a9f839e, 9de6f18) qui corrigent la cellule 13 (id 933dc3c8) et alignent l'entree 14 du tableau body. Tete courante 9de6f18. Une passe sur la nouvelle tete est la bienvenue pour verifier que la reserve est levee.

Detail du suivi : #18175.

@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18106
head: 9de6f18
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 4bd78fd0dc42817c5f833fe6fb83b572dcef715f2c492a000effd19b20cf4694
diff-files: 5
diff-additions: 106
diff-deletions: 102
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Dossier READY sur PR #18106 (lane myia-po-2026:CoursIA-3, cycle c.250, 28/09 08:30Z).

Substance : fix(notebook-python,#18053): tranche Probas/PyMC.

Substance : +106/-102 sur 5 fichiers. Grain MED/notebook-python.

État : CLEAN+MERGEABLE+rev=NONE, B.0 rc=0, tous checks verts.

Grain: META/secretary -- lane myia-po-2026:CoursIA-3 -- prev: META/secretary c.249

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants