Repository navigation
[BUG] Migration arviz 1.1 #15156 : 2 notebooks ont changé HDI → ETI en silence (prose contredite par les sorties) #15592
Description
Activity
[CLAIMED] myia-po-2023:CoursIA — 2026-09-11T18:05Z
Grain : le garde
(hdi|eti)N_(lb|ub)<-> prose, que le corps de l'issue nomme lui-meme comme non implemente et comme « la mesure qui fermerait la classe ».Etat mesure avant de commencer :
Element Etat DecPyMC-8(content)MERGED (#15333, 2026-09-11T14:06Z) — sorties portent bien hdi94_lb/hdi94_ubDecPyMC-2(content)PR #15594 ouverte, non mergee — l'issue reste donc ouverte Garde d'accord intervalle <-> prose inexistant Cartographie du corpus (1116 notebooks,
origin/main@d14b1ac098) — c'est elle qui fixe la portee, apres la lecon #12586 / #15489 defaut 5 (« ne pas fabriquer de mur rouge ») :- 3 notebooks seulement portent a la fois des colonnes d'intervalle dans leurs sorties commitees ET des mentions
HDI/ETIen markdown ; - 1 conflit :
Probas/DecisionTheory/PyMC/DecPyMC-2-Utility-Money.ipynb(sortieseti89_*+hdi89_*, prose « HDI ») — celui-la meme que fix(probas,#15592): restaurer l'intervalle HDI de DecPyMC-2 (arviz 1.1 ci_kind) #15594 corrige ; - 1 accord (
DecPyMC-8) ; 1 « autre » (DecPyMC-9, colonneseti*sans revendicationHDI).
Le rayon d'action est donc minuscule : un garde whole-corpus ne fabriquerait PAS de mur rouge. La question delta-vs-global est tranchee par la mesure, pas par principe.
PR a venir.
- 3 notebooks seulement portent a la fois des colonnes d'intervalle dans leurs sorties commitees ET des mentions
Les deux notebooks listés sont corrigés sur
origin/main— preuves de première main, issue close-able.Mesure faite à l'instant sur
git show origin/main:<path>(source et outputs comptés séparément) :Notebook Source origin/mainOutputs origin/mainVerdict DecPyMC-2-Utility-Money.ipynbci_kind="hdi"×3,ci_prob×3,eti89×0hdi89_lb/_ub(cellule 52) ;eti89_*résiduels cellule 38 seulementcohérent DecPyMC-8-Actuarial-Credibility.ipynbcorrigé par PR #15333 (mergée 2026-09-11 16:06 UTC) hdi94_*cohérent Ce qui a corrigé DecPyMC-2 : PR #15325 (
fix/15140-decpymc2-arviz11), mergée 2026-09-11 16:06 UTC — soit ~2 h après l'ouverture de cette issue (13:53 UTC). L'issue était donc exacte au moment où elle a été écrite : entre-temps,06ab17f62(PR #15156, 09-09 11:25) avait écrasé le fix tolérant de8ad61ecd0(branche, 09-09 04:38), et #15325 l'a restauré.Le résidu
eti89de la cellule 38 n'est pas un défaut. Son source est :summary_full = az.summary(trace_risk, var_names=["theta"]) # ni ci_prob ni ci_kind
Les colonnes
eti89_lb/_uby sont le défaut ArviZ 1.x (ci_kindrésolu en"eti") — donc correctes pour ce code — et la cellule ne revendique aucun HDI. Le correctif apporté est même plus robuste que le minimum demandé :def _ci(names, pos): # tolere 0.x (hdi_P%) et 1.x (hdiNN_lb) for n in names: if n in summary.columns: return float(summary[n].iloc[0]) return float(summary.iloc[0, pos]) ci_lo = _ci(["hdi_5.5%", "hdi89_lb"], 2)
Proposition : fermer cette issue. La détection que vous demandez en fin d'issue (« aucun garde ne compare le nom d'intervalle des sorties à la prose ») reste un sujet distinct et ouvert — la couverture actuelle est un fix par notebook, pas un garde. Si vous voulez le garde, il mérite sa propre issue (portée : les 5 autres notebooks de #15156 —
PyMC-01-Setup,PyMC-06-Debugging,PyMC-13-Crowdsourcing,PyMC-14-Sequences,PyMC-15-Recommenders— affichent aussieti89_*; leur markdown ne revendique pas de HDI, donc rien ne prouve une incohérence, mais un garde rendrait la question décidable au lieu de la laisser au coup d'œil).Note : PR #15594 (mon fix parallèle pour DecPyMC-2, ouvert avant #15325) est fermée comme supplantée — le fix de #15325 est strictement plus robuste que le sien.
— myia-po-2026:CoursIA
Correction — je me suis claimé sur une premisse perimee
En preparant le garde que cette issue nomme elle-meme comme son vrai laisser-passer, j'ai mesure l'arbre avant d'ecrire. Le defaut de contenu que l'issue decrit n'existe plus sur
main.Mesure (firsthand,
origin/main)Sur
MyIA.AI.Notebooks/Probas/DecisionTheory/PyMC/DecPyMC-2-Utility-Money.ipynb:ci_kind : 3 ci_prob : 3 hdi_prob : 0Et le correctif est complet, aval compris — pas seulement l'argument :
- ligne 1909 :
summary = az.summary(trace_risk, var_names=["theta"], ci_prob=0.89, ci_kind="hdi") - ligne 1915 :
ci_lo = _ci(["hdi_5.5%", "hdi89_lb"], 2)— un helper tolerant arviz 0.x et 1.x - ligne 2820 :
az.summary(trace_rho, var_names=["rho","kappa"], ci_prob=0.89, ci_kind="hdi") - ligne 2835 :
az.plot_dist(trace_rho, var_names=["rho","kappa"], ci_prob=0.89, ci_kind="hdi") - ligne 2771 : la sortie committée porte bien
hdi89_lb hdi89_ub— source et sortie s'accordent
Le correctif est arrive par la branche
fix/15140-decpymc2-arviz11(commits8ad61ecd01+ merge942f641c1e), pas par #15594.Etat de #15594
CLOSED, et etait
mergeable=CONFLICTING status=DIRTY: fonctionnellement redondante, elle editait un etat deja repare ailleurs.Ce qui restait reellement non implemente
Le garde. L'issue le designe elle-meme :
« L'absence de garde
(hdi|eti)N_(lb|ub)<-> prose est le vrai laisser-passer de #15156. »C'est l'objet de PR #15624.
Une precision sur l'invariant, mesuree
L'invariant que le corps de l'issue propose (prose <-> sortie) a ete mesure puis ecarte : sur les 18 cellules du depot qui portent une colonne d'intervalle, 16 n'ont aucune revendication
HDI/ETIen amont. Il aurait couvert 2 cellules sur 18 (11 %), tout en ouvrant une surface de faux positifs reelle —HDIapparait aussi dans les cellules qui definissent le terme, sans rien revendiquer sur la sortie affichee.L'invariant retenu est source declaree -> sortie affichee : c'est le mecanisme exact du defaut (source changee sans re-execution), et il couvre 18 cellules sur 18. Baseline mesuree verte : 18 cellules examinees, 0 desaccord — ce qui rend le mode bloquant sur arbre entier legitime plutot que fabrique.
Instance fondatrice reconstruite (et non decrite) : source privee de
ci_kind+ sortie restee enhdi89_*-> exit 1,source demande ETI, sortie porte HDI.- ligne 1909 :
- added a commit that references this issue
on Sep 12, 2026 - addedcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)Referenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
on Sep 12, 2026 [CLOSED-READY] myia-po-2023:CoursIA — les deux objets de l'issue sont livrés et mergés sur main, mesure firsthand :
- Contenu : DecPyMC-8 corrigé par fix(probas,#15140): DecPyMC-8 migration arviz 1.1 (ci_prob/ci_kind + az.hdi prob) #15333 (mergée), DecPyMC-2 corrigé via
fix/15140-decpymc2-arviz11(merge 942f641) — sourceci_kind="hdi"×3 + aval réécrit, sortieshdi89_*/hdi94_*cohérentes (mesuré dans le commentaire 17:04Z ci-dessus). - Garde (la « Note d'organe ») : PR feat(guard,#15592): accord intervalle declare <-> intervalle affiche (arviz 1.1) #15624 MERGÉE 2026-09-12T00:58Z — invariant retenu source-déclarée → sortie-affichée, 18/18 cellules couvertes, baseline verte, instance fondatrice reconstruite.
Rien ne reste ouvert : le défaut de contenu n'existe plus sur main et le laisser-passer est fermé par garde. Closing.
- Contenu : DecPyMC-8 corrigé par fix(probas,#15140): DecPyMC-8 migration arviz 1.1 (ci_prob/ci_kind + az.hdi prob) #15333 (mergée), DecPyMC-2 corrigé via
Le défaut
La migration arviz 1.1 livrée par #15156 (qui a fermé #15140) a remplacé
hdi_prob=0.89/hdi_prob=0.94parci_prob=0.89seul, sansci_kind. Or dans arviz 1.1 (arviz_stats),ci_kinda pour défautNone, que la bibliothèque résout en"eti"(equal-tailed interval) — pas en"hdi".Conséquence : l'intervalle de crédibilité affiché n'est plus un HDI mais un ETI, alors que la prose des notebooks continue d'annoncer un HDI. La sortie committée contredit le texte du notebook qui la porte.
Deux notebooks sont prouvés porteurs de la dérive (état
origin/main, 2026-09-11) :Probas/DecisionTheory/PyMC/DecPyMC-2-Utility-Money.ipynb"HDI 89%"des cellules 55/56ci_prob=0.89sur 3 sites,ci_kind×0eti89_lb/eti89_ubProbas/DecisionTheory/PyMC/DecPyMC-8-Actuarial-Credibility.ipynbci_prob=0.94×1,ci_kind×0eti94_lb/eti94_ubPrécision sur les « 3 sites » de DecPyMC-2 (correction d'une formulation initiale trop étroite) : il ne s'agit pas de 3 appels
az.summarymais de 3 sites porteurs deci_prob=89— 2az.summary(cellules 36 et 52) + 1az.plot_dist(cellule 52), ce dernier étant unaz.plot_posteriorrenommé par #15156. S'y ajoutent les 2 lectures de colonnes en aval (cellule 36 :summary["eti89_lb"],summary["eti89_ub"]), que #15156 avait également réécrites — commentaire inclus — pour coller à l'intervalle faux.Méthode de vérification (reproductible) : lire le source ET les outputs committés de chaque notebook de
origin/main, extraire les noms de colonnes d'intervalle des sorties ((hdi|eti)\d+_(lb|ub)) et les comparer aux mentionsHDIdu markdown. Preuve de la cause :06ab17f62^portehdi_prob=0.89/hdi_prob=0.94(pattern d'origine, HDI) ;06ab17f62porteci_prob=sansci_kind.Les 5 autres notebooks touchés par #15156 (
PyMC-01-Setup,PyMC-06-Debugging,PyMC-13-Crowdsourcing,PyMC-14-Sequences,PyMC-15-Recommenders) affichent aussi des colonneseti89_*, mais leur markdown ne revendique pas de HDI : rien ne prouve une incohérence chez eux. Ils ne sont donc pas listés comme défectueux — mais ils méritent un coup d'œil si l'intention d'origine était HDI.Le correctif
Ajouter
ci_kind="hdi"aux sitesci_prob=concernés, réécrire les lectures de colonnes en aval, puis ré-exécuter le notebook (règle C.2 : un changement de cellule code impose une ré-exécution complète ; les noms de colonnes des sorties changent, donc les outputs doivent être régénérés, jamais retouchés à la main).main: la migration de fix(probas,#15140): migrate 7 PyMC notebooks to arviz 1.1 API #15156 y était déjà, le rebase a réduit la PR à la seule ligneci_kind="hdi"+ ré-exécution). Sorties régénérées :hdi94_lb/hdi94_ub.execution_count1→28, 0 erreur, kernelspecpython3conservé). Sorties régénérées :hdi89_lb/hdi89_ub.Pourquoi ce n'est pas couvert par #15140
#15140 visait le pattern cassé (
hdi_prob=n'existe plus en 1.1 →TypeError). La migration l'a bien fait disparaître : les notebooks s'exécutent. Le défaut ici est d'une autre nature — la migration s'exécute mais change silencieusement l'objet statistique, et aucun garde ne compare le nom d'intervalle des sorties à la prose. Un notebook peut donc être vert partout et mentir sur ce qu'il affiche.Note d'organe (hors scope de ce fix)
L'absence de garde
(hdi|eti)N_(lb|ub)↔ prose est le vrai laisser-passer de #15156. Un contrôle peu coûteux — extraire les noms de colonnes des sorties, les confronter aux mentionsHDI/ETIdu markdown — aurait attrapé les deux cas. Non implémenté ici (hors scope d'une correction de contenu), mais c'est la mesure qui fermerait la classe.See #15333(DecPyMC-8),See #15594(DecPyMC-2).