From 05d93881b1af1bf5db96f755c82e28861eb174dc Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 5 Oct 2026 09:58:14 +0200 Subject: [PATCH 1/2] fix(search,#19245): restore -CSharp case in 9 code cells across 7 notebooks Les 9 dernieres occurrences du suffixe `-Csharp` restees dans des cellules de CODE de la serie Search passent a `-CSharp`, et les 7 carnets concernes sont reexecutes de bout en bout (noyau `.net-csharp`, cell-by-cell) pour satisfaire C.2. Edition byte-level (b"Csharp" -> b"CSharp") avec assertion du compte par fichier : git diff = 9 insertions / 9 suppressions, aucune cellule ajoutee ou retiree, chaque difference se reduit a la casse (controle anti-regression automatise). Reexecution : 112/112 cellules de code avec execution_count entier, 0 erreur, 0 banniere probeAddresses (strip_probe_banner no-op). Voir #19245 Co-Authored-By: Claude Sonnet 5.5 --- .../Search/Part1-Foundations/Search-02c-QuikGraph.ipynb | 2 +- .../Part1-Foundations/Search-03-Informed-CSharp.ipynb | 6 +++--- .../Search/Part2-CSP/CSP-1-Fundamentals-CSharp.ipynb | 2 +- .../Search/Part2-CSP/CSP-2-Consistency-CSharp.ipynb | 2 +- .../Search/Part2-CSP/CSP-3-Advanced-CSharp.ipynb | 2 +- .../Search/Part2-CSP/CSP-5-Optimization-CSharp.ipynb | 2 +- .../Search/Part2-CSP/CSP-6-Hybridization-CSharp.ipynb | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-02c-QuikGraph.ipynb b/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-02c-QuikGraph.ipynb index b6ac16f56d..17294f3ad1 100644 --- a/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-02c-QuikGraph.ipynb +++ b/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-02c-QuikGraph.ipynb @@ -596,7 +596,7 @@ "// illustrer la CONDITION D'OPTIMALITE de Dijkstra — pour chaque sommet v, son predecesseur\n", "// est l'unique voisin u tel que GetDistance(u) + poids(u, v) = GetDistance(v). C'est le seul\n", "// site de la serie a rester manuel ; les autres utilisent l'observateur canonique\n", - "// VertexPredecessorRecorderObserver (cell 17 de ce notebook, Search-02b-NetworkX-Csharp cell 14, Search-3\n", + "// VertexPredecessorRecorderObserver (cell 17 de ce notebook, Search-02b-NetworkX-CSharp cell 14, Search-3\n", "// cell 16, Search-2 cell 38), qui encapsule exactement cette condition.\n", "\n", "var dijkstra = new DijkstraShortestPathAlgorithm>(\n", diff --git a/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03-Informed-CSharp.ipynb b/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03-Informed-CSharp.ipynb index 406641c07c..8ea8bf4ebe 100644 --- a/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03-Informed-CSharp.ipynb +++ b/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03-Informed-CSharp.ipynb @@ -245,7 +245,7 @@ ], "source": [ "// Imports + structures communes (Node, Problem, GraphProblem, SearchResult).\n", - "// Identiques au jumeau Search-02-Csharp pour garder la serie coherente.\n", + "// Identiques au jumeau Search-02-CSharp pour garder la serie coherente.\n", "using System;\n", "using System.Collections.Generic;\n", "using System.Diagnostics;\n", @@ -469,7 +469,7 @@ } ], "source": [ - "// Graphe des villes francaises (13 villes, reutilise du jumeau Search-02-Csharp)\n", + "// Graphe des villes francaises (13 villes, reutilise du jumeau Search-02-CSharp)\n", "// + coordonnees lat/lon + heuristique Haversine.\n", "var franceGraph = new Dictionary> {\n", " [\"Bordeaux\"] = new() { [\"Paris\"] = 585, [\"Toulouse\"] = 245, [\"Nantes\"] = 350 },\n", @@ -1866,7 +1866,7 @@ } ], "source": [ - "// Le piège Greedy sur Rennes -> Paris (miroir du piège BFS Paris->Rennes du Search-02-Csharp, See #5872).\n", + "// Le piège Greedy sur Rennes -> Paris (miroir du piège BFS Paris->Rennes du Search-02-CSharp, See #5872).\n", "var problemRP = new GraphProblem(\"Rennes\", \"Paris\", franceGraph);\n", "Func hRennesParis = MakeH(\"Paris\");\n", "\n", diff --git a/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-1-Fundamentals-CSharp.ipynb b/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-1-Fundamentals-CSharp.ipynb index 31793b24be..11ded4f0c1 100644 --- a/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-1-Fundamentals-CSharp.ipynb +++ b/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-1-Fundamentals-CSharp.ipynb @@ -912,7 +912,7 @@ ], "source": [ "// Visualisation ASCII du graphe de contraintes\n", - "// (les notebooks C# du projet n utilisent pas matplotlib -- le CSP-7-Soft-Csharp\n", + "// (les notebooks C# du projet n utilisent pas matplotlib -- le CSP-7-Soft-CSharp\n", "// montre que les viz se font en matrice couleur ou en texte structure)\n", "// Orientation AIMA-compatible : NT au nord, SA au centre (hub degré 5),\n", "// WA à l ouest, Q au nord-est, NSW à l est, V au sud-est (sous NSW),\n", diff --git a/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-2-Consistency-CSharp.ipynb b/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-2-Consistency-CSharp.ipynb index 92bfd4c2b0..aa105d97d8 100644 --- a/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-2-Consistency-CSharp.ipynb +++ b/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-2-Consistency-CSharp.ipynb @@ -431,7 +431,7 @@ } ], "source": [ - "// Definition de la classe CSP en C# (meme structure que CSP-1-Fundamentals-Csharp.ipynb)\n", + "// Definition de la classe CSP en C# (meme structure que CSP-1-Fundamentals-CSharp.ipynb)\n", "using System;\n", "using System.Collections.Generic;\n", "using System.Linq;\n", diff --git a/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-3-Advanced-CSharp.ipynb b/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-3-Advanced-CSharp.ipynb index f922f2a121..25f8633176 100644 --- a/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-3-Advanced-CSharp.ipynb +++ b/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-3-Advanced-CSharp.ipynb @@ -194,7 +194,7 @@ } ], "source": [ - "// Configuration du répertoire de travail (pattern FindCspDir, copié depuis CSP-4-Scheduling-Csharp.ipynb)\n", + "// Configuration du répertoire de travail (pattern FindCspDir, copié depuis CSP-4-Scheduling-CSharp.ipynb)\n", "using System;\n", "using System.IO;\n", "\n", diff --git a/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-5-Optimization-CSharp.ipynb b/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-5-Optimization-CSharp.ipynb index 96bd4793d1..dea8c08ac3 100644 --- a/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-5-Optimization-CSharp.ipynb +++ b/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-5-Optimization-CSharp.ipynb @@ -267,7 +267,7 @@ } ], "source": [ - "// Configuration IKVM 8.15.0 pour Choco-solver (identique à CSP-4-Scheduling-Csharp.ipynb, cf. #4711)\n", + "// Configuration IKVM 8.15.0 pour Choco-solver (identique à CSP-4-Scheduling-CSharp.ipynb, cf. #4711)\n", "#r \"nuget: IKVM, 8.15.0\"\n", "#r \"nuget: IKVM.Image, 8.15.0\"\n", "\n", diff --git a/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-6-Hybridization-CSharp.ipynb b/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-6-Hybridization-CSharp.ipynb index b52b9ed125..4fe4d96a0c 100644 --- a/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-6-Hybridization-CSharp.ipynb +++ b/MyIA.AI.Notebooks/Search/Part2-CSP/CSP-6-Hybridization-CSharp.ipynb @@ -1007,7 +1007,7 @@ ], "source": [ "// Visualisation ScottPlot 5.x : barres du temps par configuration\n", - "// Pattern valide c189 CSP-2-Consistency-Csharp : display(HTML(plt.GetPngHtml(700, 400)))\n", + "// Pattern valide c189 CSP-2-Consistency-CSharp : display(HTML(plt.GetPngHtml(700, 400)))\n", "#r \"nuget: ScottPlot, 5.0.55\"\n", "using ScottPlot;\n", "using Microsoft.DotNet.Interactive.Formatting;\n", From 796ced247b7ca88c368887f9e7b2ef3409a91e26 Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 5 Oct 2026 15:04:22 +0200 Subject: [PATCH 2/2] chore(search,#19259): rebaseline des 6 paires jumelles deplacees par #19245 La PR #19245 retablit la casse canonique `-CSharp` dans 9 cellules code de 7 carnets (references en commentaire uniquement). Toute edition d'un carnet deplace son blob SHA : le registre #8057 declarait donc 6 paires en DRIFT alors que la parite est intacte -- il demande une attestation, pas une reparation. Re-audit firsthand avant rebaseline, paire par paire : diff cellule par cellule contre origin/main = lignes de commentaire `//` seules, aucun code executable touche, aucun `execution_count` ni sortie modifie, et le cote Python est byte-identique a main pour les 6 paires. 6 paires rebaselinees (`--update --pair`, myia-po-2026:CoursIA) : CSP-1 Fundamentals, CSP-2 Consistency, CSP-3 Advanced, CSP-5 Optimization, CSP-6 Hybridization, Search-03 Informed -- avec la ligne explicative en tete de `known_differences` pour chacune. Rappel du garde : le rebaseline passe EN DERNIER, apres toute normalisation outillee (les strips de pre-commit ont tourne a l'ecriture des carnets). Co-Authored-By: Claude Sonnet 5.5 --- scripts/notebook_tools/twin_pairs.d/csp-1-fundamentals.yaml | 1 + .../0026-2026-10-05-myia-po-2026-CoursIA.yaml | 6 ++++++ scripts/notebook_tools/twin_pairs.d/csp-2-consistency.yaml | 1 + .../0014-2026-10-05-myia-po-2026-CoursIA.yaml | 6 ++++++ scripts/notebook_tools/twin_pairs.d/csp-3-advanced.yaml | 1 + .../0012-2026-10-05-myia-po-2026-CoursIA.yaml | 6 ++++++ scripts/notebook_tools/twin_pairs.d/csp-5-optimization.yaml | 1 + .../0014-2026-10-05-myia-po-2026-CoursIA.yaml | 6 ++++++ .../notebook_tools/twin_pairs.d/csp-6-hybridization.yaml | 1 + .../0013-2026-10-05-myia-po-2026-CoursIA.yaml | 6 ++++++ scripts/notebook_tools/twin_pairs.d/search-03-informed.yaml | 1 + .../0019-2026-10-05-myia-po-2026-CoursIA.yaml | 6 ++++++ 12 files changed, 42 insertions(+) create mode 100644 scripts/notebook_tools/twin_pairs.d/csp-1-fundamentals/0026-2026-10-05-myia-po-2026-CoursIA.yaml create mode 100644 scripts/notebook_tools/twin_pairs.d/csp-2-consistency/0014-2026-10-05-myia-po-2026-CoursIA.yaml create mode 100644 scripts/notebook_tools/twin_pairs.d/csp-3-advanced/0012-2026-10-05-myia-po-2026-CoursIA.yaml create mode 100644 scripts/notebook_tools/twin_pairs.d/csp-5-optimization/0014-2026-10-05-myia-po-2026-CoursIA.yaml create mode 100644 scripts/notebook_tools/twin_pairs.d/csp-6-hybridization/0013-2026-10-05-myia-po-2026-CoursIA.yaml create mode 100644 scripts/notebook_tools/twin_pairs.d/search-03-informed/0019-2026-10-05-myia-po-2026-CoursIA.yaml diff --git a/scripts/notebook_tools/twin_pairs.d/csp-1-fundamentals.yaml b/scripts/notebook_tools/twin_pairs.d/csp-1-fundamentals.yaml index 706b107c07..553199abd0 100644 --- a/scripts/notebook_tools/twin_pairs.d/csp-1-fundamentals.yaml +++ b/scripts/notebook_tools/twin_pairs.d/csp-1-fundamentals.yaml @@ -6,6 +6,7 @@ bridge_verdict: SOTA-OK bridge_verdict_reason: 'Les DEUX jumeaux atteignent le meme moteur de production Choco (parite lib-vs-lib stricte, mandat owner #10382 ''lib vs lib c''est encore mieux''). C# = Choco-solver 4.10.17 (Java, Apache-2.0) via IKVM 8.15.0 home shade DLL (recette #4711). Python = pychoco (binding Python officiel de Choco, PyPI MIT), section 6bis ajoutee 2026-08-19 (#10382) : les trois demonstrations du jumeau C# sont rejouees avec le meme modele (IntVar par etat 0..2 + arithm ''!='' pour l''Australie ; boucle solve() pour l''enumeration ; all_different + scalar/arithm diagonales pour les 8-Reines). Convergence mesuree : enumeration Australie = 18 solutions des deux cotes ; solutions valides sur les memes instances. Socle pedagogique from-scratch (classe CSP, backtracking, MRV, LCV) conserve intact des deux cotes ; python-constraint reste en section 6 cote Python comme moteur leger avant le pont industriel. Visualisation : Python = matplotlib, C# = rendu ASCII (inchange).' known_differences: + - 'Re-baseline 2026-10-05 (myia-po-2026:CoursIA, #19245 -> #19259) : edition unilaterale cote C# seul, COMMENTAIRES UNIQUEMENT -- la casse canonique `-CSharp` des noms de carnets jumeaux etait perdue dans les commentaires de code (`CSP-7-Soft-Csharp` -> `CSP-7-Soft-CSharp` (cellule 11)). Aucune ligne executable touchee, aucun `execution_count` ni sortie modifie ; le cote Python est byte-identique a main. Parite semantique inchangee, seule la reference textuelle au jumeau redevient exacte : c''est une attestation de parite (le blob SHA du C# se deplace), pas une reparation. Re-baseline du csharp_sha.' - 'Re-baseline 2026-09-30 (myia-po-2025:CoursIA, #18543 relais prose-counts #17636) : edition unilaterale cote C# seul, markdown uniquement -- une ligne du tableau comparatif manuel/Choco derivait de compteurs d''artefact en prose (lignes de modelisation ~50 vs ~10) remplaces par des descripteurs qualitatifs (plus verbeuse / plus concise). Aucune cellule code, sortie ou execution_count touchee (batterie byte-surgical : sources code byte-identiques). Statut epistemique et comparatif de fond inchanges ; parite tenue ; re-baseline du csharp_sha.' - "2026-09-27 (drift unilateral, session cloud d'agnosticisme hors flotte) : cote C# seul. La cellule de configuration IKVM codait le RID win-x64 en dur (ikvmRid = win-x64, plus une reference NuGet IKVM.Image.runtime.win-x64) : sous Linux et macOS, l'init de la JVM IKVM echouait au premier appel Java (TypeInitializationException sur IKVM.Runtime.LibJava, mesure sur CSP-1 avant correctif). Le RID est desormais derive de OperatingSystem et RuntimeInformation.ProcessArchitecture ; IKVM.Image 8.15.0 depend deja des onze paquets IKVM.Image.runtime., la reference explicite win-x64 est retiree. Re-execution complete sous Linux (dotnet-interactive 1.0.617701) : 0 erreur, sorties identiques a la base hors RID du home IKVM, separateur decimal (culture) et temps mesures. Jumeau Python inchange. Strips outilles appliques avant l'attestation (probe banner, papermill). Prose : la duree du brute force epinglee (3,9 ms) remplacee par un descripteur machine-dependant (#9434)." - 'Re-baseline 2026-09-11 (myia-po-2023:CoursIA, #15447 / chore #15429) : normalisation str->list des cellules `source` -- re-encodage de representation, aucun contenu pedagogique touche. Verifie firsthand : le SHA canonique du carnet (toutes listes-de-chaines jointes, metadata de niveau carnet exclue) est IDENTIQUE base vs head, et les champs `text` des sorties sont inchanges ; seul le content_sha du registre bouge. Le garde #8057 demande une attestation de parite, pas une reparation.' diff --git a/scripts/notebook_tools/twin_pairs.d/csp-1-fundamentals/0026-2026-10-05-myia-po-2026-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/csp-1-fundamentals/0026-2026-10-05-myia-po-2026-CoursIA.yaml new file mode 100644 index 0000000000..89be54a50f --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/csp-1-fundamentals/0026-2026-10-05-myia-po-2026-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-10-05' +by: myia-po-2026:CoursIA +python_sha: 7edc121f78a9a487a202a2e5f49eaec43a245445 +csharp_sha: 11ded4f0c14f37d453a3883521c1b5835abdfd05 +content_python_sha: a76e4ad934031a4b7f24883b9c889c782f14bb0d17e7e031283e5e438c8ae826 +content_csharp_sha: ce0635635961bcc2443f61e3e6afc18ee6125f7630850af1e0f4e59f1fc0cbbf diff --git a/scripts/notebook_tools/twin_pairs.d/csp-2-consistency.yaml b/scripts/notebook_tools/twin_pairs.d/csp-2-consistency.yaml index c1c2892110..1ba21f2f64 100644 --- a/scripts/notebook_tools/twin_pairs.d/csp-2-consistency.yaml +++ b/scripts/notebook_tools/twin_pairs.d/csp-2-consistency.yaml @@ -6,6 +6,7 @@ bridge_verdict: SOTA-OK bridge_verdict_reason: "Les DEUX jumeaux atteignent le meme moteur de production Choco (parite lib-vs-lib stricte, mandat owner #10382 'lib vs lib c'est encore mieux'). C# = Choco-solver 4.10.17 (Apache-2.0) via IKVM 8.15.0 home shade DLL (recette #4711) : propagation AC-3 + fixpoint + bench AC-3 vs backtracking + coloration Australie. Python = socle from-scratch conserve (AC-3 sur `collections.deque`, forward checking, MAC — c'est le choix pedagogique du notebook : implementer AC-3 a la main) + section 3.6 ajoutee 2026-08-19 (#10382) : Choco via **pychoco** (binding Python officiel, PyPI MIT), meme modele Australie (7 IntVar 1..3, `arithm !=` sur adjacences, `WA = 1`) rejoue en un `solve()` — propagation integree du solveur observee cote a cote avec l'AC-3 maison de la cellule precedente. Solution unique valide des deux cotes. Viz : Python = matplotlib + networkx, C# = Console.WriteLine. `parity_level: semantic` preserve." known_differences: + - 'Re-baseline 2026-10-05 (myia-po-2026:CoursIA, #19245 -> #19259) : edition unilaterale cote C# seul, COMMENTAIRES UNIQUEMENT -- la casse canonique `-CSharp` des noms de carnets jumeaux etait perdue dans les commentaires de code (`CSP-1-Fundamentals-Csharp.ipynb` -> `CSP-1-Fundamentals-CSharp.ipynb` (cellule 6)). Aucune ligne executable touchee, aucun `execution_count` ni sortie modifie ; le cote Python est byte-identique a main. Parite semantique inchangee, seule la reference textuelle au jumeau redevient exacte : c''est une attestation de parite (le blob SHA du C# se deplace), pas une reparation. Re-baseline du csharp_sha.' - "2026-09-27 (drift unilateral, session cloud d'agnosticisme hors flotte) : cote C# seul. La cellule de configuration IKVM codait le RID win-x64 en dur (ikvmRid = win-x64, plus une reference NuGet IKVM.Image.runtime.win-x64) : sous Linux et macOS, l'init de la JVM IKVM echouait au premier appel Java (TypeInitializationException sur IKVM.Runtime.LibJava, mesure sur CSP-1 avant correctif). Le RID est desormais derive de OperatingSystem et RuntimeInformation.ProcessArchitecture ; IKVM.Image 8.15.0 depend deja des onze paquets IKVM.Image.runtime., la reference explicite win-x64 est retiree. Re-execution complete sous Linux (dotnet-interactive 1.0.617701) : 0 erreur, sorties identiques a la base hors RID du home IKVM, separateur decimal (culture) et temps mesures. Jumeau Python inchange. Strips outilles appliques avant l'attestation (probe banner, papermill)." - "Edition 2026-08-19 (myia-po-2025:CoursIA-2, #10382 tranche lib-vs-lib) : section 3.6 ajoutee au jumeau Python -- propagation native Choco via pychoco (binding officiel PyPI MIT), miroir de la section 4 du jumeau C# (AC-3 avec Choco via IKVM). Meme modele Australie (7 IntVar 1..3, arithm '!=' sur adjacences, WA=1) : solve() retourne une solution valide des deux cotes. L'assignation exacte des variables non-fixees peut differer entre jumeaux et vs l'AC-3 maison (heuristique de recherche par defaut du solveur) -- documente dans la cellule d'interpretation du notebook. Temps de resolution en prose = descripteurs machine-dep renvoyant aux sorties live (regle #9434). Re-exec complete du notebook (70 cellules, 28 code, 0 erreur). Verdict RECOVERABLE-LOCAL -> SOTA-OK." - "Socle pedagogique commun : node consistency + AC-3 + Forward Checking + MAC, implementes from-scratch des deux cotes." diff --git a/scripts/notebook_tools/twin_pairs.d/csp-2-consistency/0014-2026-10-05-myia-po-2026-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/csp-2-consistency/0014-2026-10-05-myia-po-2026-CoursIA.yaml new file mode 100644 index 0000000000..de89583195 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/csp-2-consistency/0014-2026-10-05-myia-po-2026-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-10-05' +by: myia-po-2026:CoursIA +python_sha: fe54d361efc1a2b747cc2d4614502957fb47b0f3 +csharp_sha: aa105d97d8bd3f7e8dcd50c528a9c0d8f46a7a1b +content_python_sha: 6028275fae847c7e0525f6b14a9bf42ab07fbc2d291056e7e6f000fc1c807f5e +content_csharp_sha: c06a73f50e7475e218f59477be0d786df4c593a1b5eca5be448e740ba6f1f67f diff --git a/scripts/notebook_tools/twin_pairs.d/csp-3-advanced.yaml b/scripts/notebook_tools/twin_pairs.d/csp-3-advanced.yaml index e0124fbfcb..6f71fa0fe6 100644 --- a/scripts/notebook_tools/twin_pairs.d/csp-3-advanced.yaml +++ b/scripts/notebook_tools/twin_pairs.d/csp-3-advanced.yaml @@ -6,6 +6,7 @@ bridge_verdict: SOTA-OK bridge_verdict_reason: "REBRIDGE LIVRE 2026-08-19 (annexe 'parite lib-vs-lib', cote Python du notebook) : `pychoco` (binding Python officiel de Choco, PyPI, MIT) rejoue les 5 demonstrations Choco du jumeau C# sur le MEME moteur -- instances exactes du twin C# (Mini-Sudoku 4x4 allDifferent, Cumulative [3,4,2,5] cap 2, TSP 5 villes matrice symetrique, Table 3 tuples, Reification XOR). Convergence mesuree : makespan optimal 9 = 9, cout TSP 18 = 18 avec tour identique 0->1->3->4->2->0, solution Table HDD+16GB+750W identique, solution Reif x=0,y=1,b=1,c=0 identique. Les sections principales preservent le pattern double-lib pedagogique (PY = python-constraint academique + OR-Tools CP-SAT industriel, C# = Choco 4.10.17 via IKVM 8.15.0 shade DLL recette #4711) ; l'annexe ajoute la comparaison lib-vs-lib sur les instances du C#. Les DEUX cotes atteignent desormais le meme moteur industriel (Choco) -- le critere SOTA-OK (vrai outil SOTA execute des deux cotes, sorties reelles committees) est satisfait. `parity_level: semantic` preserve pour le corps du notebook ; l'annexe porte la parite numerique exacte." known_differences: + - 'Re-baseline 2026-10-05 (myia-po-2026:CoursIA, #19245 -> #19259) : edition unilaterale cote C# seul, COMMENTAIRES UNIQUEMENT -- la casse canonique `-CSharp` des noms de carnets jumeaux etait perdue dans les commentaires de code (`CSP-4-Scheduling-Csharp.ipynb` -> `CSP-4-Scheduling-CSharp.ipynb` (cellule 1)). Aucune ligne executable touchee, aucun `execution_count` ni sortie modifie ; le cote Python est byte-identique a main. Parite semantique inchangee, seule la reference textuelle au jumeau redevient exacte : c''est une attestation de parite (le blob SHA du C# se deplace), pas une reparation. Re-baseline du csharp_sha.' - "2026-09-27 (drift unilateral, session cloud d'agnosticisme hors flotte) : cote C# seul. La cellule de configuration IKVM codait le RID win-x64 en dur (ikvmRid = win-x64, plus une reference NuGet IKVM.Image.runtime.win-x64) : sous Linux et macOS, l'init de la JVM IKVM echouait au premier appel Java (TypeInitializationException sur IKVM.Runtime.LibJava, mesure sur CSP-1 avant correctif). Le RID est desormais derive de OperatingSystem et RuntimeInformation.ProcessArchitecture ; IKVM.Image 8.15.0 depend deja des onze paquets IKVM.Image.runtime., la reference explicite win-x64 est retiree. Re-execution complete sous Linux (dotnet-interactive 1.0.617701) : 0 erreur, sorties identiques a la base hors RID du home IKVM, separateur decimal (culture) et temps mesures. Jumeau Python inchange. Strips outilles appliques avant l'attestation (probe banner, papermill)." - '2026-08-31 : ATTESTATION UNILATERALE (PR #13659, lane myia-ai-01:CoursIA) -- reparation d''echappements JSON manges dans le markdown du cote Python. CAUSE : dans le .ipynb, la sequence dollar-\bot-dollar ecrite avec UN SEUL antislash est lue par le parseur JSON comme l''echappement \b (backspace, U+0008) ; la source chargee porte un caractere de controle et le notebook rend un dollar-ot-dollar prive de sa commande LaTeX. FIX : doubler l''antislash (\\bot). Le DRIFT est UNILATERAL parce que le DEFAUT l''est : la contrepartie CSP-3-Advanced-CSharp.ipynb (C#), 14 cellules markdown, a ete scannee sous controle positif (le litteral defectueux passe a json.loads doit rendre U+0008 -- assertion verifiee avant le scan) et ne porte AUCUN caractere de controle U+0008/U+000B/U+000C. Il n''y a donc rien a reparer de ce cote : l''attestation ne consacre aucune asymetrie de contenu. PORTEE DU DIFF cote repare (comparaison des JSON parses origin/main -> HEAD) : markdown uniquement, 0 cellule code touchee, 0 sortie modifiee, 0 execution_count deplace, 0 cellule ajoutee ou retiree.' - "Socle pedagogique commun : global constraints (all_different, sum, element) + backtracking avec propagation globale + symetrie breaking (lexicographique)." diff --git a/scripts/notebook_tools/twin_pairs.d/csp-3-advanced/0012-2026-10-05-myia-po-2026-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/csp-3-advanced/0012-2026-10-05-myia-po-2026-CoursIA.yaml new file mode 100644 index 0000000000..f9e6f1e4bf --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/csp-3-advanced/0012-2026-10-05-myia-po-2026-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-10-05' +by: myia-po-2026:CoursIA +python_sha: 3b3c1bed277c5b013d59757b24ad950f0f1b9ccf +csharp_sha: 25f8633176e24bd41ac2cea6521c2604613c5a99 +content_python_sha: 2b422e9b601d4daf79a6f0f14c5c332b549be13bd9d3ccc9aa9a04612a4abd48 +content_csharp_sha: b82bdadc27f7b0a5d3a185599bc1476bd29d5b372b5b6a32bf979aa11192d172 diff --git a/scripts/notebook_tools/twin_pairs.d/csp-5-optimization.yaml b/scripts/notebook_tools/twin_pairs.d/csp-5-optimization.yaml index f006f8bda2..6bd87bc1b9 100644 --- a/scripts/notebook_tools/twin_pairs.d/csp-5-optimization.yaml +++ b/scripts/notebook_tools/twin_pairs.d/csp-5-optimization.yaml @@ -6,6 +6,7 @@ bridge_verdict: SOTA-OK bridge_verdict_reason: "DEUX PONTS LIVRES 2026-08-20, fermeture par les deux bouts de la meme asymetrie de machinerie. (a) Cote Python -- annexe 'parite lib-vs-lib' (myia-po-2025:CoursIA-2, PR #11891) : `pychoco` (binding Python officiel de Choco, PyPI, MIT) rejoue les 4 demos Choco du jumeau C# sur les instances exactes des cellules 6/8/10/12 (BPP [2,5,4,7,2] cap 10 reification+scalar, Knapsack 5 objets cap 10, Cutting Stock 13 pieces via contrainte GLOBALE bin_packing, Portfolio lineaire 5 actifs). Convergence 4/4 : 3 bins = 3, valeur 31 = 31 avec selection identique {0,1,3}, 10 barres = 10 avec meme decomposition 3x[9] + 4x[7] + 3x[4,4], rendement 27 = 27 avec meme choix {0,1,4}. Re-exec complete (25 cellules code, 0 erreur, nbconvert --execute). (b) Cote C# -- section 5.1 'CP-SAT natif .NET' (myia-po-2024:CoursIA, PR #11976) : `#r \"nuget: Google.OrTools, 9.11.4210\"` sans IKVM + formulation booleenne miroir du Python (x[i,j]/y[j], capacite linearisee, symmetry breaking, Minimize(sum(y))) sur les memes donnees [2,5,4,7,2]/cap 10. Re-exec .NET Interactive : status Optimal, 3 bins -- meme optimum que Choco section 1 et que solve_bin_packing_cp Python (optimum verifie independamment : aucun sous-ensemble de [2,5,4,7,2] ne somme a exactement 10, donc 2 bins est infaisable et 3 est optimal). Consequence sur parity_level : `native-both` est desormais atteint PAR L'AXE CP-SAT -- chaque cote invoque CP-SAT dans son ecosysteme natif (Python `ortools.sat.python.cp_model`, C# NuGet `Google.OrTools` sans pont IKVM), ce qui est la definition retenue par l'arbitrage #11200. L'axe Choco reste asymetrique (pychoco natif cote Python, IKVM shade cote C#) et n'est pas ce qui porte le verdict. Le `semantic` inscrit par (a) etait correct AVANT que (b) n'existe ; il est superseded, pas contredit. Les sections principales preservent le pattern double-lib pedagogique (PY = OR-Tools CP-SAT, C# = Choco 4.10.17 via IKVM 8.15.0 recette #4711). --- Etat precedent (2026-08-04) : verdict RECOVERABLE-LOCAL, ASYMETRIE DE MACHINERIE -- PY = Google OR-Tools CP-SAT vs C# = Choco via IKVM. Les deux remedes nommes a l'epoque (`pychoco` pour aligner sur Choco, `Google.OrTools` NuGet pour aligner sur OR-Tools) ont ete appliques, chacun par une lane differente." known_differences: + - 'Re-baseline 2026-10-05 (myia-po-2026:CoursIA, #19245 -> #19259) : edition unilaterale cote C# seul, COMMENTAIRES UNIQUEMENT -- la casse canonique `-CSharp` des noms de carnets jumeaux etait perdue dans les commentaires de code (`CSP-4-Scheduling-Csharp.ipynb` -> `CSP-4-Scheduling-CSharp.ipynb` (cellule 3)). Aucune ligne executable touchee, aucun `execution_count` ni sortie modifie ; le cote Python est byte-identique a main. Parite semantique inchangee, seule la reference textuelle au jumeau redevient exacte : c''est une attestation de parite (le blob SHA du C# se deplace), pas une reparation. Re-baseline du csharp_sha.' - "2026-09-27 (drift unilateral, session cloud d'agnosticisme hors flotte) : cote C# seul. La cellule de configuration IKVM codait le RID win-x64 en dur (ikvmRid = win-x64, plus une reference NuGet IKVM.Image.runtime.win-x64) : sous Linux et macOS, l'init de la JVM IKVM echouait au premier appel Java (TypeInitializationException sur IKVM.Runtime.LibJava, mesure sur CSP-1 avant correctif). Le RID est desormais derive de OperatingSystem et RuntimeInformation.ProcessArchitecture ; IKVM.Image 8.15.0 depend deja des onze paquets IKVM.Image.runtime., la reference explicite win-x64 est retiree. Re-execution complete sous Linux (dotnet-interactive 1.0.617701) : 0 erreur, sorties identiques a la base hors RID du home IKVM, separateur decimal (culture) et temps mesures. Jumeau Python inchange. Strips outilles appliques avant l'attestation (probe banner, papermill)." - "Pont 2026-08-20 (myia-po-2024:CoursIA, #10382 bucket 1 OR-Tools) : le twin C# ajoute une section 5.1 CP-SAT natif (Google.OrTools 9.11.4210 NuGet, sans IKVM) qui reprend la formulation booleenne du Python (x[i,j]/y[j], Minimize(sum(y))) sur les memes donnees BPP. Sortie executee : Optimal, 3 bins -- convergence avec Choco section 1 et avec le twin Python. Combinee a l'annexe pychoco cote Python (entree ci-dessus, meme date, autre lane), cette section porte parity_level a native-both sur l'axe CP-SAT. L'entree 'Idiomes framework' ci-dessous decrit l'etat pre-ponts (sections 1-4 Choco/IKVM cote C#, inchangees)." - "Rebridge 2026-08-20 (myia-po-2025:CoursIA-2, #10382) : annexe 'parite lib-vs-lib' ajoutee au twin Python (9 cellules avant References, ids annexe-libvslib-*) -- pychoco rejoue les 4 demos Choco du twin C# (BPP reification+scalar, Knapsack scalar, Cutting Stock bin_packing globale, Portfolio lineaire) sur les instances exactes des cellules 6/8/10/12 du C#. Re-exec complete du notebook (25 cellules code, 0 erreur, nbconvert --execute). Convergence 4/4 : 3 bins, 31/{0,1,3}, 10 barres meme structure, 27/{0,1,4}. Verdict flip RECOVERABLE-LOCAL -> SOTA-OK (le remede nomme dans le verdict precedent -- pychoco pour aligner les 2 jambes sur Choco -- est applique). Twin C# non modifie." diff --git a/scripts/notebook_tools/twin_pairs.d/csp-5-optimization/0014-2026-10-05-myia-po-2026-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/csp-5-optimization/0014-2026-10-05-myia-po-2026-CoursIA.yaml new file mode 100644 index 0000000000..121518b00b --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/csp-5-optimization/0014-2026-10-05-myia-po-2026-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-10-05' +by: myia-po-2026:CoursIA +python_sha: eac3772a8ef97842d1ccc49e826e66da45bbfffe +csharp_sha: dea8c08ac3f80638a79d336ddfdd2207e160f3f4 +content_python_sha: fdcaed3d179ea47a6f57910e921c11b4ad2f787edfa64095c4325694fd2ff940 +content_csharp_sha: 3736f7e94b4bf643c59992f9e866ffdeeb49698f5347060e16582dee6f7d8b19 diff --git a/scripts/notebook_tools/twin_pairs.d/csp-6-hybridization.yaml b/scripts/notebook_tools/twin_pairs.d/csp-6-hybridization.yaml index 5772a75263..95b6f06104 100644 --- a/scripts/notebook_tools/twin_pairs.d/csp-6-hybridization.yaml +++ b/scripts/notebook_tools/twin_pairs.d/csp-6-hybridization.yaml @@ -6,6 +6,7 @@ bridge_verdict: SOTA-OK bridge_verdict_reason: "Python = `ortools.sat.python.cp_model` + `cp_model_helper` (Google, Apache-2.0, CP-SAT SOTA hybrid : `CpModel()` + variables + `AddMaxEquality` + `model.Minimize(obj)` + `solver.Solve()` pour hybrid CP-SAT + heuristique de recherche). C# = `Google.OrTools` NuGet (Google, Apache-2.0, meme solveur CP-SAT : `#r \"nuget: Google.OrTools\"` + `using Google.OrTools.Sat;` + `CpModel()` + `AddBoolVar` + `AddMaxEquality` + `solver.Solve()`) + `ScottPlot` NuGet 5.0.55 (MIT-license, viz gantt chart). Verdict SOTA-OK (modele owner c.217 PR #10557 MERGED 2026-08-12 tranche 2 lib-vs-lib) : les DEUX cotes utilisent LE MEME solveur Google OR-Tools CP-SAT natif (meme binding C++ sous-jacent, API symetrique entre les bindings PyPI + NuGet officiels Google), bridge direct sans glue non-SOTA. Asymetrie documentee : ScottPlot cote C# = helper viz uniquement (le PY utilise matplotlib heatmap equivalent, asymetrie mineure de lib viz n'impactant pas le semantisme). `parity_level: semantic` preserve : parite sur les concepts cibles (hybridation CP-SAT, modele relaxe) malgre l'asymetrie de viz." known_differences: + - 'Re-baseline 2026-10-05 (myia-po-2026:CoursIA, #19245 -> #19259) : edition unilaterale cote C# seul, COMMENTAIRES UNIQUEMENT -- la casse canonique `-CSharp` des noms de carnets jumeaux etait perdue dans les commentaires de code (`CSP-2-Consistency-Csharp` -> `CSP-2-Consistency-CSharp` (cellule 21)). Aucune ligne executable touchee, aucun `execution_count` ni sortie modifie ; le cote Python est byte-identique a main. Parite semantique inchangee, seule la reference textuelle au jumeau redevient exacte : c''est une attestation de parite (le blob SHA du C# se deplace), pas une reparation. Re-baseline du csharp_sha.' - "2026-10-03 (attestation 0008, PR #18999, lane myia-po-2023:CoursIA) : cote Python seul edite -- determinisme CP-SAT rendu explicite (seed 42 + worker unique sur le code deterministe priorite-parametres, seed seule sur l'etude ou la variable testee est le nombre de workers) et lectures resynchronisees sur la re-execution fraiche ; cote C# inchange. Parite semantique preservee (meme solveur CP-SAT natif, memes concepts cibles)." - "Socle pedagogique commun : approches hybrides modernes en CP -- Lazy Clause Generation (LCG), architecture CP-SAT (CP + SAT + CDCL), hybridation CP + ML (prediction de faisabilite), integration LLM + CSP." - "Cas etudies : N-Reines (LCG via CP-SAT), Job-Shop Scheduling (exploration des parametres CP-SAT : DEFAULT / FIXED_SEARCH / PORTFOLIO), generation d'instances CSP aleatoires + prediction de faisabilite par features (n_vars, n_constraints, density)." diff --git a/scripts/notebook_tools/twin_pairs.d/csp-6-hybridization/0013-2026-10-05-myia-po-2026-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/csp-6-hybridization/0013-2026-10-05-myia-po-2026-CoursIA.yaml new file mode 100644 index 0000000000..c05d544e81 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/csp-6-hybridization/0013-2026-10-05-myia-po-2026-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-10-05' +by: myia-po-2026:CoursIA +python_sha: 1af252c4b3ae72aac06d8066b0878ae210e8e9b4 +csharp_sha: 4fe4d96a0c1cc1552dd96526f198c0ba0c147ec5 +content_python_sha: bad5a45c2f96cd017b19e09aeee195d009f06add6fb400c8e7b63a82d18df5da +content_csharp_sha: 4f1101574eaa6431fe47c2da1621db8f56c0d8c1e9fc7f3d42f02856db1a7103 diff --git a/scripts/notebook_tools/twin_pairs.d/search-03-informed.yaml b/scripts/notebook_tools/twin_pairs.d/search-03-informed.yaml index bd0e7802e0..58830b6a48 100644 --- a/scripts/notebook_tools/twin_pairs.d/search-03-informed.yaml +++ b/scripts/notebook_tools/twin_pairs.d/search-03-informed.yaml @@ -6,6 +6,7 @@ bridge_verdict: SOTA-OK bridge_verdict_reason: "Python = stdlib + networkx (helper viz graph + heuristic lookup) + heapq (priority queue A*/Greedy/Best-First). Pas de lib SOTA-tier Python pour informed search pure (`aima-python` est jouet non maintained, `pySearch` est un essai), le port pedagogique AIMA ch.4 from-scratch reste canonique. C# = `QuikGraph` NuGet (Pelikan521, MIT-license, lib SOTA graphe .NET : `using QuikGraph;` + `using QuikGraph.Algorithms.ShortestPath;` + `DijkstraShortestPathAlgorithm` / `AStarShortestPathAlgorithm`, version 2.5.0). Verdict SOTA-OK (modèle owner PR #10412 MERGED pour Sudoku-09 / PR #10387 MERGED pour Search-02b NetworkX) : QuikGraph EST la lib SOTA graphe canonique .NET (Bellman-Ford, Dijkstra, A*, BFS, DFS -- tout y est), l'API `AStarShortestPathAlgorithm` permet un bridge direct A* avec heuristique. Asymetrie documentee : PY from-scratch (algos pedagogiques AIMA), C# bridge via lib SOTA (algo canonique)." known_differences: + - 'Re-baseline 2026-10-05 (myia-po-2026:CoursIA, #19245 -> #19259) : edition unilaterale cote C# seul, COMMENTAIRES UNIQUEMENT -- la casse canonique `-CSharp` des noms de carnets jumeaux etait perdue dans les commentaires de code (`Search-02-Csharp` -> `Search-02-CSharp` (cellules 2, 4 et 19)). Aucune ligne executable touchee, aucun `execution_count` ni sortie modifie ; le cote Python est byte-identique a main. Parite semantique inchangee, seule la reference textuelle au jumeau redevient exacte : c''est une attestation de parite (le blob SHA du C# se deplace), pas une reparation. Re-baseline du csharp_sha.' - "Tranche #19143 (2026-10-04) : arc narratif du jumeau Python retravaille (enchainement des lectures de resultat ; markdown seul, aucun changement d'algorithme ni de sortie calculee), puis re-execute sous Python 3.11 pour annuler une derive de kernel (3.13 -> 3.11, `Kernel drift guard base vs PR`). Le jumeau C# est intact : `csharp_sha` identique entre les audits 0016 et 0017." - "Socle pedagogique commun : A* et Greedy Best-First avec differentes heuristiques (distance Manhattan, euclidienne, h=0=degenere en UCS). Arrive en Roumanie + 8-puzzle." - "Idiomes framework : Python = `import heapq` (priority queue avec (f, tie_breaker, noeud)). C# = `PriorityQueue` (f-cost = g + h)." diff --git a/scripts/notebook_tools/twin_pairs.d/search-03-informed/0019-2026-10-05-myia-po-2026-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/search-03-informed/0019-2026-10-05-myia-po-2026-CoursIA.yaml new file mode 100644 index 0000000000..bfc3b11eab --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/search-03-informed/0019-2026-10-05-myia-po-2026-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-10-05' +by: myia-po-2026:CoursIA +python_sha: 0b41c6770446e8b95c3490fcf4538d315af8ccf8 +csharp_sha: 8ea8bf4ebe2196b0d09e9c0735ed9cb04b6750f0 +content_python_sha: 9615c5600c5e99669c792d9730028cde0b8093655fb6255efa315ff7537cc423 +content_csharp_sha: 4e29734e57cc8da8250ab2e71920f069ba4b2784bf0febca0b5dff7a2b11a453