From 350f350c459c208bdeb46652ab7b09d6b989934a Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 14 Sep 2026 00:07:04 +0200 Subject: [PATCH 1/9] fix(notebooks,#15611): hr_separator vague 2 -- SemanticWeb (132 separateurs, 10 notebooks) Conversion --- -> *** par scripts/notebook_tools/fix_hr_separator.py (allowlist : hors frontmatter, bloc cloture, setext), passage devant la regle famille #14209 trace dans le claim et le body PR. Cellules markdown uniquement : exception C.2, aucune re-execution due. 0 separateur restant dans la famille (re-check post-conversion). Co-Authored-By: Claude Sonnet 5 --- .../SemanticWeb/RDF.Net-Legacy/RDF.Net.ipynb | 48 +++++++++---------- .../SemanticWeb/SW-10-CSharp-RDFStar.ipynb | 2 +- .../SW-11-Python-KnowledgeGraphs.ipynb | 42 ++++++++-------- .../SemanticWeb/SW-2-CSharp-RDFBasics.ipynb | 20 ++++---- .../SemanticWeb/SW-2b-Python-RDFBasics.ipynb | 20 ++++---- .../SW-3b-Python-GraphOperations.ipynb | 20 ++++---- .../SemanticWeb/SW-5b-Python-LinkedData.ipynb | 28 +++++------ .../SemanticWeb/SW-7b-Python-OWL.ipynb | 26 +++++----- .../SemanticWeb/SW-8-CSharp-SHACL.ipynb | 32 ++++++------- .../SemanticWeb/SW-8-Python-SHACL.ipynb | 26 +++++----- 10 files changed, 132 insertions(+), 132 deletions(-) diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/RDF.Net-Legacy/RDF.Net.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/RDF.Net-Legacy/RDF.Net.ipynb index 3b0131026b..81d267bfe9 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/RDF.Net-Legacy/RDF.Net.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/RDF.Net-Legacy/RDF.Net.ipynb @@ -55,7 +55,7 @@ "\n", "En outre, RDF est le fondement du web sémantique, une vision du web où les informations sont non seulement disponibles pour les humains à lire, mais aussi pour les machines à comprendre et à traiter.\n", "\n", - "---\n", + "***\n", "\n", "### 2. RDF.Net\n", "\n", @@ -67,31 +67,31 @@ "- `IGraph` : l'interface pour les graphes. Un document RDF forme un graphe au sens mathématique. Nous représentons donc des ensembles de Triples comme des graphes.\n", "- `ITripleStore` : Un Triple Store est une collection de un ou plusieurs graphes.\n", "\n", - "---\n", + "***\n", "\n", "#### a) Graphes\n", "\n", "Un document RDF peut être considéré comme formant un graphe mathématique. Nous représentons donc des ensembles de triples RDF comme des graphes. Tous les graphes de la bibliothèque sont des implémentations de l'interface `IGraph` et dérivent généralement de la classe abstraite `BaseGraph`. Une implémentation `IGraph` est une représentation en mémoire d'un document RDF.\n", "\n", - "---\n", + "***\n", "\n", "#### b) Noeuds\n", "\n", "Un `INode` représente un nœud dans un graphe RDF, ce qui est parfois appelé un terme RDF. Il existe plusieurs types de nœuds, chacun représenté par une interface spécialisée, comme `IBlankNode` pour un nœud anonyme, `ILiteralNode` pour un nœud avec une valeur textuelle, ou encore `IUriNode` pour un nœud URI.\n", "\n", - "---\n", + "***\n", "\n", "#### c) Triples\n", "\n", "Un Triple est l'unité de base des données RDF, les nœuds à eux seuls n'ont pas de signification, mais utilisés dans un Triple, ils forment une déclaration qui exprime une connaissance. Un Triple est formé d'un Sujet, d'un Prédicat et d'un Objet. Il est interprété comme déclarant qu'un certain Sujet est lié à un certain Objet par une relation spécifiée par le Prédicat.\n", "\n", - "---\n", + "***\n", "\n", "#### d) Triple Store\n", "\n", "Un Triple Store représente une collection de Graphes et est utilisé pour travailler avec de grandes quantités de RDF. Les Triple Stores sont conçus pour être moins tangibles que les Graphes en termes d'interface et d'implémentations.\n", "\n", - "---\n", + "***\n", "\n", "### 3. DBpedia\n", "\n", @@ -105,7 +105,7 @@ "\n", "Jena Fuseki est un serveur de triplestore open-source qui permet de stocker et de requêter des données RDF. Il prend en charge le langage de requête SPARQL et offre une interface utilisateur Web pour gérer les données RDF.\n", "\n", - "---\n", + "***\n", "\n", "## B. Introduction à RDF et Sparql avec RDF.Net\n", "\n", @@ -865,7 +865,7 @@ "\n", "Plusieurs de ces sérialisations ont plusieurs variantes avec des règles de syntaxe différentes. Pour un résumé complet des formats pris en charge pour l'écriture avec dotNetRDF, consultez les formats pris en charge par dotNetRDF.\n", "\n", - "---\n", + "***\n", "\n", "#### a) Parsers de graphe\n", "\n", @@ -968,7 +968,7 @@ "source": [ "Dans l'exemple ci-dessus, les parsers sont réutilisables. Une fois instanciés, vous pouvez les utiliser autant de fois que nécessaire. Une autre fonctionnalité utile est que les parsers sont conçus pour être thread-safe, de sorte que plusieurs threads peuvent utiliser la même instance d'un parser pour analyser simultanément différentes entrées sans interférer les uns avec les autres. Les parsers sont généralement capables de générer des exceptions de type `RdfParseException` et `RdfException`, il est donc recommandé d'utiliser des blocs `try/catch` autour de l'utilisation des parsers.\n", "\n", - "---\n", + "***\n", "\n", "#### b) Lecture de RDF à partir de sources courantes\n", "\n", @@ -1458,7 +1458,7 @@ "source": [ "Cela est approximativement équivalent à la façon dont fonctionne `StringParser` en interne, mais cette méthode nécessite de connaître le format du RDF à l'avance.\n", "\n", - "---\n", + "***\n", "\n", "#### c) Variantes de sérialisation\n", "\n", @@ -1473,7 +1473,7 @@ "\n", "Consultez la documentation spécifique d'un parser pour savoir si des variantes de sérialisation sont prises en charge.\n", "\n", - "---\n", + "***\n", "\n", "#### d) Configuration des parsers\n", "\n", @@ -1484,7 +1484,7 @@ "- `TokenQueueMode.SynchronousBufferDuringParsing` : le fichier est tokenisé au fur et à mesure que l'analyse progresse, un nombre limité de tokens est généré et mis en mémoire tampon à chaque fois que le parser demande un token.\n", "- `TokenQueueMode.AsynchronousBufferDuringParsing` : le fichier est tokenisé en arrière-plan pendant que l'analyse progresse. Si le parser demande un token et que le tokeniseur n'a pas encore produit suffisamment de tokens, le parser doit attendre qu'un token soit disponible.\n", "\n", - "---\n", + "***\n", "\n", "#### e) Parsers de stockage\n", "\n", @@ -1502,13 +1502,13 @@ "\n", "Comme pour les parsers de graphe, diverses exceptions peuvent être générées.\n", "\n", - "---\n", + "***\n", "\n", "#### f) Lecture de jeux de données RDF à partir de sources courantes\n", "\n", "De la même manière que pour les parsers de graphe, les parsers de stockage peuvent tous être invoqués indirectement avec différentes méthodes des classes `EmbeddedResourceLoader`, `FileLoader`, `StringParser` et `Loader`. Consultez la documentation de l'API de ces classes pour les surcharges pertinentes.\n", "\n", - "---\n", + "***\n", "\n", "#### g) Analyse avancée\n", "\n", @@ -1625,7 +1625,7 @@ "\n", "Il existe plusieurs implémentations incluses qui effectuent différentes opérations, telles que la redirection des triples directement vers un fichier, un triple store natif, etc. Vous pouvez également implémenter votre propre gestionnaire, soit entièrement à partir de zéro, soit en dérivant de `BaseRdfHandler`, comme le font nos propres implémentations, pour obtenir la plupart de l'implémentation gratuitement. Consultez l'API Handlers pour plus de discussions sur ce sujet.\n", "\n", - "---\n", + "***\n", "\n", "#### h) Comportement des parsers\n", "\n", @@ -1640,7 +1640,7 @@ "- Gestion des fichiers/flux comme les parsers de graphe.\n", "- Si le parser produit un graphe qui existe déjà dans le store de destination, une erreur peut se produire en fonction du comportement de ce store lorsque le graphe existe déjà.\n", "\n", - "---\n", + "***\n", "\n", "#### i) Classes de parsers\n", "\n", @@ -1656,7 +1656,7 @@ "- `TriXParser` : TriX\n", "- `TurtleParser` : Turtle, NTriples\n", "\n", - "---\n" + "***\n" ] }, { @@ -1741,7 +1741,7 @@ "\n", "Plusieurs de ces sérialisations ont plusieurs variantes avec des règles de syntaxe différentes.\n", "\n", - "---\n", + "***\n", "\n", "#### a) Utilisation de base\n", "\n", @@ -1860,7 +1860,7 @@ "source": [ "Comme pour les Parsers, un Writer est une classe réutilisable qui peut être utilisée autant de fois que vous le souhaitez pour générer des graphes dans des fichiers/flux.\n", "\n", - "---\n", + "***\n", "\n", "#### b) Écriture dans des chaînes de caractères\n", "\n", @@ -2204,13 +2204,13 @@ }, "source": [ "\n", - "---\n", + "***\n", "\n", "#### d) Formateurs\n", "\n", "Les formateurs sont une alternative à l'utilisation d'un `IRdfWriter` pour générer du RDF. Leur avantage est qu'ils peuvent être utilisés pour formater des nœuds et des triples individuellement pour afficher uniquement ce que vous voulez et comment vous le voulez. Cependant, leur inconvénient est qu'ils ne peuvent pas utiliser le même ensemble de techniques de compression qu'un `IRdfWriter` complet lors de l'écriture d'un graphe entier, car ils sont délibérément dépourvus d'état.\n", "\n", - "---\n", + "***\n", "\n", "#### e) Comportement du Writer\n", "\n", @@ -2221,7 +2221,7 @@ "- Si un problème survient avec le graphe en cours d'enregistrement, mais ne l'empêche pas d'être enregistré, le writer déclenchera un événement d'avertissement (`Warning event`).\n", "- Si le graphe en cours d'écriture contient des triples/nœuds qui ne peuvent pas être écrits par le writer, une `RdfOutputException` sera levée.\n", "\n", - "---\n", + "***\n", "\n", "#### f) Classes Writer\n", "\n", @@ -2239,7 +2239,7 @@ "\n", "De plus, il existe une classe d'aide, `SingleGraphWriter`, qui implémente l'interface `IRdfWriter` et permet d'écrire un graphe à l'aide d'un writer qui implémente l'interface `IStoreWriter`. Cela permet d'écrire un graphe en utilisant les formats de sérialisation décrits dans la section \"Travailler avec les Triple Stores\".\n", "\n", - "---" + "***" ] }, { @@ -8857,7 +8857,7 @@ "\n", "Les fonctionnalités de Trinity RDF et les capacités d'inférence d'OWL dans RDF.Net permettent de manipuler des données RDF de manière plus intuitive et efficace. Grâce à ces outils, les développeurs peuvent interroger, inférer et travailler avec des graphes RDF et des ontologies de manière simplifiée et puissante.\n", "\n", - "---\n", + "***\n", "\n", "**Retour au sommaire** : [Index SemanticWeb](../README.md)" ] diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-10-CSharp-RDFStar.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-10-CSharp-RDFStar.ipynb index a8983205a6..52ca857ae1 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-10-CSharp-RDFStar.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-10-CSharp-RDFStar.ipynb @@ -1099,7 +1099,7 @@ "\n", "**Leçon clé** : la **réification classique** est le mécanisme portable pour annoter des triplets (provenance, confiance, temporalité) — au prix d'une verbosité de 4 triplets auxiliaires par fait. RDF-star (RDF 1.2) vise à éliminer ce coût avec une syntaxe dédiée `<< s p o >>`, mais reste un standard jeune. Les **graphes nommés** offrent un compromis intermédiaire : grouper des triplets par contexte et annoter le groupe. dotNetRDF gère les trois (Graph, SparqlQueryParser, TripleStore) avec la même API `VDS.RDF` que ce notebook utilise.\n", "\n", - "---\n", + "***\n", "\n", "**Navigation** : [`<< SW-9 JSONLD`](SW-9-CSharp-JSONLD.ipynb) | [Index SemanticWeb](README.md) | Jumeau Python : [`SW-10-Python-RDFStar`](SW-10-Python-RDFStar.ipynb)\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-11-Python-KnowledgeGraphs.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-11-Python-KnowledgeGraphs.ipynb index a10e51c238..5459948fe8 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-11-Python-KnowledgeGraphs.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-11-Python-KnowledgeGraphs.ipynb @@ -22,7 +22,7 @@ "\n", "### Duree estimee : 55 minutes\n", "\n", - "---\n", + "***\n", "\n", "## Objectifs d'apprentissage\n", "\n", @@ -65,7 +65,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 0. Installation des dependances\n", "\n", @@ -248,7 +248,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Qu'est-ce qu'un Knowledge Graph ?\n", "\n", @@ -355,7 +355,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Construire un Knowledge Graph a partir de données structurees\n", "\n", @@ -1308,7 +1308,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. kglab : couche d'abstraction Knowledge Graph\n", "\n", @@ -1602,7 +1602,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. Visualisation du Knowledge Graph\n", "\n", @@ -2270,7 +2270,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. OWLReady2 pour la manipulation d'ontologies\n", "\n", @@ -2724,7 +2724,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 6. Qualite et validation d'un Knowledge Graph\n", "\n", @@ -3210,7 +3210,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exemples guides et Exercices\n", "\n", @@ -3660,7 +3660,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -3688,7 +3688,7 @@ "\n", "Dans le notebook suivant (**SW-12-GraphRAG**), nous verrons comment combiner un Knowledge Graph avec un LLM pour créer un système de question-reponse augmente par le graphe (GraphRAG) -- la convergence entre IA symbolique et IA neuronale.\n", "\n", - "---\n", + "***\n", "\n", "**Navigation** : [<< 10-RDFStar](SW-10-Python-RDFStar.ipynb) | [Index](README.md) | [12-GraphRAG >>](SW-12-Python-GraphRAG.ipynb)" ], @@ -3709,7 +3709,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exemple guide 4 : Construire et interroger un Knowledge Graph complet (jeux video)\n", "\n", @@ -3960,7 +3960,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exemples guides (solutions proposees par @Sosolalt)\n", "\n", @@ -4968,7 +4968,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exercices a completer\n", "\n", @@ -4991,7 +4991,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 1 : Ajouter des proprietes au KG etudiants/cours\n", "\n", @@ -5071,7 +5071,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 2 : Visualiser le KG filtre par genre\n", "\n", @@ -5151,7 +5151,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 3 : Explorer l'ontologie et verifier les contraintes\n", "\n", @@ -5227,7 +5227,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 4 : Construire votre propre Knowledge Graph\n", "\n", @@ -5306,7 +5306,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 5 : Centralite dans le Knowledge Graph (PageRank)\n", "\n", @@ -5392,7 +5392,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 6 : Visualisation pyvis interactive personnalisee\n", "\n", @@ -5483,7 +5483,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 7 : Property paths transitifs sur l'ontologie\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2-CSharp-RDFBasics.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2-CSharp-RDFBasics.ipynb index fcea9bfbc9..9ac4b55629 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2-CSharp-RDFBasics.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2-CSharp-RDFBasics.ipynb @@ -61,7 +61,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 0. Installation de dotNetRDF\n", "\n", @@ -175,7 +175,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Les triplets RDF\n", "\n", @@ -388,7 +388,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Types de noeuds\n", "\n", @@ -1077,7 +1077,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. Espaces de noms et prefixes\n", "\n", @@ -1431,7 +1431,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. Formats de serialisation\n", "\n", @@ -2080,7 +2080,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. Exemple guide 1 : Modeliser un reseau social\n", "\n", @@ -2273,7 +2273,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 6. Exemple guide 2 : Comparer les tailles de serialisation\n", "\n", @@ -2451,7 +2451,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 7. Exercice : a vous de jouer\n", "\n", @@ -2673,7 +2673,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -2709,7 +2709,7 @@ "- **DCMI Metadata Terms** — Dublin Core Metadata Initiative. Vocabulaire `dc:`.\n", "- **SKOS Simple Knowledge Organization System** — Miles & Bechhofer, W3C Recommendation (2009). Vocabulaire `skos:`.\n", "\n", - "---\n", + "***\n", "\n", "**Navigation** : [<< 1-Setup](SW-1-CSharp-Setup.ipynb) | [Index](README.md) | [3-GraphOperations >>](SW-3-CSharp-GraphOperations.ipynb)" ] diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2b-Python-RDFBasics.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2b-Python-RDFBasics.ipynb index e72d31df25..168addc933 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2b-Python-RDFBasics.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2b-Python-RDFBasics.ipynb @@ -39,7 +39,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Installation et Imports\n", "\n", @@ -146,7 +146,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Créer un Graphe et Ajouter des Triples\n", "\n", @@ -239,7 +239,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. Types de Noeuds\n", "\n", @@ -334,7 +334,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. Serialisation - Formats de Sortie\n", "\n", @@ -450,7 +450,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. Charger un Fichier Existant\n", "\n", @@ -522,7 +522,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 6. Tableau de Correspondance dotNetRDF / rdflib\n", "\n", @@ -571,7 +571,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exercices\n", "\n", @@ -734,7 +734,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -755,7 +755,7 @@ "- **SW-4b-Python-SPARQL** : Le langage de requête SPARQL en Python\n", "- **SW-5b-Python-LinkedData** : Interroger DBpedia et Wikidata avec SPARQLWrapper\n", "\n", - "---\n", + "***\n", "\n", "**Retour au sommaire** : [Index SemanticWeb](README.md)" ] @@ -1064,7 +1064,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exemple guide 3 : Construire un graphe RDF complet\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-3b-Python-GraphOperations.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-3b-Python-GraphOperations.ipynb index 91c6999402..b4a0696f87 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-3b-Python-GraphOperations.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-3b-Python-GraphOperations.ipynb @@ -34,7 +34,7 @@ "id": "0a93ca502e05", "metadata": {}, "source": [ - "---\n", + "***\n", "\n", "## 0. Installation et Imports\n", "\n", @@ -136,7 +136,7 @@ "id": "538c3da5472e", "metadata": {}, "source": [ - "---\n", + "***\n", "\n", "## 1. Lecture de fichiers RDF\n", "\n", @@ -302,7 +302,7 @@ "id": "ba88fba2619a", "metadata": {}, "source": [ - "---\n", + "***\n", "\n", "## 2. Ecriture de graphes RDF\n", "\n", @@ -536,7 +536,7 @@ "id": "c45c44fd8571", "metadata": {}, "source": [ - "---\n", + "***\n", "\n", "## 3. Fusion de graphes\n", "\n", @@ -621,7 +621,7 @@ "id": "450ade0ea577", "metadata": {}, "source": [ - "---\n", + "***\n", "\n", "## 4. Sélection de triplets\n", "\n", @@ -789,7 +789,7 @@ "id": "f8381e8f3bd8", "metadata": {}, "source": [ - "---\n", + "***\n", "\n", "## 5. Listes RDF\n", "\n", @@ -1027,7 +1027,7 @@ "id": "5baf4038d2e2", "metadata": {}, "source": [ - "---\n", + "***\n", "\n", "## 6. Comparaison cross-langage dotNetRDF vs rdflib\n", "\n", @@ -1057,7 +1057,7 @@ "id": "52c28c63bbbd", "metadata": {}, "source": [ - "---\n", + "***\n", "\n", "## 7. Exercices pratiques\n", "\n", @@ -1481,7 +1481,7 @@ "id": "b0baf31f0c5d", "metadata": {}, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -1497,7 +1497,7 @@ "\n", "Dans **[SW-4b-Python-SPARQL](SW-4b-Python-SPARQL.ipynb)**, nous apprendrons a interroger les graphes RDF avec le langage SPARQL cote Python (equivalent de SW-4 C#).\n", "\n", - "---\n", + "***\n", "\n", "**Navigation** : [Index](README.md) | [<< SW-3 C#](SW-3-CSharp-GraphOperations.ipynb) | [SW-4b Python >>](SW-4b-Python-SPARQL.ipynb)" ] diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-5b-Python-LinkedData.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-5b-Python-LinkedData.ipynb index 607ce73571..8e891be848 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-5b-Python-LinkedData.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-5b-Python-LinkedData.ipynb @@ -54,7 +54,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Installation et Imports\n", "\n", @@ -158,7 +158,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Interroger DBpedia\n", "\n", @@ -366,7 +366,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. Interroger Wikidata\n", "\n", @@ -585,7 +585,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. Requêtes Federees avec SERVICE\n", "\n", @@ -725,7 +725,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. Formats de Retour\n", "\n", @@ -840,7 +840,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 6. Tableau de Correspondance dotNetRDF / SPARQLWrapper\n", "\n", @@ -894,7 +894,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exemples et Exercices\n", "\n", @@ -1138,7 +1138,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exemple guide : Universites francaises via Wikidata\n", "\n", @@ -1342,7 +1342,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exemple guide : Lier DBpedia et Wikidata via owl:sameAs\n", "\n", @@ -1629,7 +1629,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 1 (a completer) : Laureats francais du prix Nobel de physique (Wikidata)\n", "\n", @@ -1705,7 +1705,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 2 (a completer) : Musees de la ville de Paris (Wikidata, SELECT)\n", "\n", @@ -1781,7 +1781,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 3 (a completer) : Pays les plus peuples du monde (Wikidata, FILTER)\n", "\n", @@ -1859,7 +1859,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -1901,7 +1901,7 @@ "- **SW-7-CSharp-OWL** : Ontologies et raisonnement avance\n", "- **SW-7b-Python-OWL** : Introduction a OWLReady2 pour Python\n", "\n", - "---\n", + "***\n", "\n", "**Retour au sommaire** : [Index SemanticWeb](README.md)" ] diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-7b-Python-OWL.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-7b-Python-OWL.ipynb index 3ae67b8df0..223818477c 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-7b-Python-OWL.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-7b-Python-OWL.ipynb @@ -40,7 +40,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Installation et Imports\n", "\n", @@ -117,7 +117,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Créer une Ontologie Simple\n", "\n", @@ -224,7 +224,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. Créer des Individus et Assertions\n", "\n", @@ -305,7 +305,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. Restrictions OWL\n", "\n", @@ -398,7 +398,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. Raisonnement avec HermiT\n", "\n", @@ -529,7 +529,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 6. Charger une Ontologie Existante\n", "\n", @@ -596,7 +596,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 7. Exporter une Ontologie\n", "\n", @@ -653,7 +653,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 8. Tableau de Correspondance dotNetRDF / OWLReady2\n", "\n", @@ -701,7 +701,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exemples guides (issus de contributions etudiantes)\n", "\n", @@ -944,7 +944,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -966,7 +966,7 @@ "- **SW-9-Python-JSONLD** : Données structurees pour le web\n", "- **SW-11-Python-KnowledgeGraphs** : Graphes de connaissances avec kglab\n", "\n", - "---\n", + "***\n", "\n", "**Retour au sommaire** : [Index SemanticWeb](README.md)" ] @@ -992,7 +992,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exemple guide de synthese : Ontologie avec raisonnement\n", "\n", @@ -1495,7 +1495,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exercices\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-CSharp-SHACL.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-CSharp-SHACL.ipynb index fce2451b70..49c6da2903 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-CSharp-SHACL.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-CSharp-SHACL.ipynb @@ -63,7 +63,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 0. Chargement de dotNetRDF\n", "\n", @@ -189,7 +189,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Introduction a SHACL\n", "\n", @@ -234,7 +234,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Concepts fondamentaux de SHACL\n", "\n", @@ -290,7 +290,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. Explorer une shape SHACL existante\n", "\n", @@ -681,7 +681,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. Validation SHACL avec dotNetRDF\n", "\n", @@ -1184,7 +1184,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. Ecrire des shapes custom\n", "\n", @@ -1423,7 +1423,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 1 : MovieShape -- valider un dataset de films\n", "\n", @@ -1516,7 +1516,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 6. Severites SHACL\n", "\n", @@ -1701,7 +1701,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 2 : Une forme avec severites mixtes\n", "\n", @@ -1786,7 +1786,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 7. Contraintes avancees : opérateurs logiques\n", "\n", @@ -1946,7 +1946,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 3 : Contrainte `sh:not` et enumeration `sh:in`\n", "\n", @@ -2033,7 +2033,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 8. Exemple guide : construire une BookShape par l'API C#\n", "\n", @@ -2277,7 +2277,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 9. Comparaison : dotNetRDF SHACL vs pySHACL\n", "\n", @@ -2314,7 +2314,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -2363,7 +2363,7 @@ "- [pySHACL Documentation](https://github.com/RDFLib/pySHACL) -- Le jumeau Python (notebook SW-8-Python)\n", "- [SHACL Playground](https://shacl-playground.zazuko.com/) -- Testez vos formes en ligne\n", "\n", - "---\n", + "***\n", "\n", "## Conclusion\n", "\n", @@ -2376,7 +2376,7 @@ "\n", "**Pour aller plus loin** : combinez SHACL avec RDFS/OWL (SW-6, SW-7) pour valider des données inferees, et explorez SHACL Advanced Features (règles de transformation `sh:rule`) pour la materialisation.\n", "\n", - "---\n", + "***\n", "\n", "**Navigation** : [<< 7-OWL](SW-7-CSharp-OWL.ipynb) | [Index](README.md) | [SW-8-Python >>](SW-8-Python-SHACL.ipynb)\n" ] diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-Python-SHACL.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-Python-SHACL.ipynb index 7415f9039d..47c1d39f90 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-Python-SHACL.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-Python-SHACL.ipynb @@ -46,7 +46,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 0. Installation des dependances\n", "\n", @@ -151,7 +151,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Introduction a SHACL\n", "\n", @@ -196,7 +196,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Concepts fondamentaux de SHACL\n", "\n", @@ -251,7 +251,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. Explorer une shape SHACL existante\n", "\n", @@ -482,7 +482,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. pySHACL : Validation en Python\n", "\n", @@ -839,7 +839,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. Ecrire des shapes custom en Python\n", "\n", @@ -1171,7 +1171,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 6. Severites SHACL\n", "\n", @@ -1328,7 +1328,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 7. Contraintes avancees : opérateurs logiques\n", "\n", @@ -1566,7 +1566,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 8. Exemples et Exercices" ] @@ -2061,7 +2061,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exemples guides (solutions proposees par @Sosolalt)\n", "\n", @@ -2803,7 +2803,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exercices a completer\n", "\n", @@ -3094,7 +3094,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -3156,7 +3156,7 @@ "- [pySHACL Documentation](https://github.com/RDFLib/pySHACL) -- Bibliotheque Python\n", "- [SHACL Playground](https://shacl-playground.zazuko.com/) -- Testez vos formes en ligne\n", "\n", - "---\n", + "***\n", "\n", "**Navigation** : [<< 7b-OWL](SW-7b-Python-OWL.ipynb) | [Index](README.md) | [9-JSONLD >>](SW-9-Python-JSONLD.ipynb)" ] From 7b1758f11b085225c36bbfb38630e47aeda1a1fe Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 14 Sep 2026 00:10:12 +0200 Subject: [PATCH 2/9] fix(twin,#15611): re-attestations hr_separator SemanticWeb -- 7 paires, localisation par-notebook check_twin_parity --update --pair x7 apres commit des conversions (blobs HEAD), reasons portant la localisation mesuree DEPUIS LE DIFF (format 52c043263b : cellule markdown d'index N sur M). Registre 11/11 OK, 0 DRIFT post-attestation. Co-Authored-By: Claude Sonnet 5 --- .../0006-2026-09-14-myia-po-2027-CoursIA.yaml | 15 +++++++++++++++ .../0005-2026-09-14-myia-po-2027-CoursIA.yaml | 16 ++++++++++++++++ .../0008-2026-09-14-myia-po-2027-CoursIA.yaml | 16 ++++++++++++++++ .../0009-2026-09-14-myia-po-2027-CoursIA.yaml | 16 ++++++++++++++++ .../0010-2026-09-14-myia-po-2027-CoursIA.yaml | 16 ++++++++++++++++ .../0009-2026-09-14-myia-po-2027-CoursIA.yaml | 16 ++++++++++++++++ .../0003-2026-09-14-myia-po-2027-CoursIA.yaml | 16 ++++++++++++++++ 7 files changed, 111 insertions(+) create mode 100644 scripts/notebook_tools/twin_pairs.d/sw-10-rdf-star/0006-2026-09-14-myia-po-2027-CoursIA.yaml create mode 100644 scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0005-2026-09-14-myia-po-2027-CoursIA.yaml create mode 100644 scripts/notebook_tools/twin_pairs.d/sw-2-rdf-basics/0008-2026-09-14-myia-po-2027-CoursIA.yaml create mode 100644 scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0009-2026-09-14-myia-po-2027-CoursIA.yaml create mode 100644 scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0010-2026-09-14-myia-po-2027-CoursIA.yaml create mode 100644 scripts/notebook_tools/twin_pairs.d/sw-7-owl/0009-2026-09-14-myia-po-2027-CoursIA.yaml create mode 100644 scripts/notebook_tools/twin_pairs.d/sw-8-shacl/0003-2026-09-14-myia-po-2027-CoursIA.yaml diff --git a/scripts/notebook_tools/twin_pairs.d/sw-10-rdf-star/0006-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-10-rdf-star/0006-2026-09-14-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..4bc6f414cc --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-10-rdf-star/0006-2026-09-14-myia-po-2027-CoursIA.yaml @@ -0,0 +1,15 @@ +date: '2026-09-14' +by: myia-po-2027:CoursIA +python_sha: 25172bd32e8ec39fb2aa10e0cc24e3adf5be5613 +csharp_sha: 52ca857ae1471c1dd7315d39d4faba7da58e785d +content_python_sha: 08b6e5188fb667cd2b3ead0619b4693dea8704a74096a58b207282cd9109c7e5 +content_csharp_sha: 0694e33cc38c083a32f4e8bb52cf801aa1d4a69073124667df1a8a6425cb3100 +reason: >- + Cote C# SEUL converti (1 sep). SW-10-CSharp-RDFStar (21 cellules md) : md 21/21, derniere (1). Le + jumeau Python (SW-10-Python-RDFStar) ne porte AUCUN separateur standalone convertible, verifie par + --check sur l'arbre de la PR. Re-attestation de parite -- hr_separator vague 2 (#15611, lane myia- + po-2027:CoursIA), markdown-only, passage devant la regle famille #14209 trace au claim et au body + PR. Converti par scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors frontmatter, + bloc cloture, setext). Diff = 1 ligne de source JSON par separateur ; cellules code, outputs, + execution_count et metadata byte-identiques. Aucun strip outille posterieur : le blob atteste ici + est celui du HEAD de la PR. diff --git a/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0005-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0005-2026-09-14-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..5201ebe64e --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0005-2026-09-14-myia-po-2027-CoursIA.yaml @@ -0,0 +1,16 @@ +date: '2026-09-14' +by: myia-po-2027:CoursIA +python_sha: 5459948fe86de799b7b8b49c509526742c670eff +csharp_sha: e557e3e39facb5c6d5e6892ada68a7a5a0399bbc +content_python_sha: 45765b9d6786bb8006d0a0e0130da6394dc280d1f98aba28a35a0b27f5fa4f4d +content_csharp_sha: 99d63adf00f7aef2c0a6eae726c37d87584eb5d07de6721c61e2354de3a9ed28 +reason: >- + Cote Python SEUL converti (21 sep). SW-11-Python-KnowledgeGraphs (70 cellules md) : md 1, 2, 5, 8, + 21, 26, 35, 42, 49 (1 chacun), md 52 (2), md 53, 54, 62, 63, 64, 65, 66, 67, 68, 69 (1 chacun). Le + jumeau C# (SW-11-CSharp-KnowledgeGraphs) ne porte AUCUN separateur standalone convertible, verifie + par --check sur l'arbre de la PR. Re-attestation de parite -- hr_separator vague 2 (#15611, lane + myia-po-2027:CoursIA), markdown-only, passage devant la regle famille #14209 trace au claim et au + body PR. Converti par scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors + frontmatter, bloc cloture, setext). Diff = 1 ligne de source JSON par separateur ; cellules code, + outputs, execution_count et metadata byte-identiques. Aucun strip outille posterieur : le blob + atteste ici est celui du HEAD de la PR. diff --git a/scripts/notebook_tools/twin_pairs.d/sw-2-rdf-basics/0008-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-2-rdf-basics/0008-2026-09-14-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..5b066bd4e7 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-2-rdf-basics/0008-2026-09-14-myia-po-2027-CoursIA.yaml @@ -0,0 +1,16 @@ +date: '2026-09-14' +by: myia-po-2027:CoursIA +python_sha: 168addc93347eae35ffdeea76825f3115abb912d +csharp_sha: 9ac4b55629fa8780a8cd8c8361ac69d2752547c7 +content_python_sha: c438079f25face3c4e0237f1c4bc1f6e31efcd3e6a78b7dfc93b690afc3f3d58 +content_csharp_sha: 2be0125aa7adeac770677a41331fe56910b457c98e0c561f4bae6bc3f99bbbc4 +reason: >- + LES DEUX COTES convertees (10 sep chacun). Python (SW-2b-Python-RDFBasics, 28 cellules md) : + separateurs en md 2, 5, 7, 9, 12, 14, 16 (1 chacun), md 20 (2), md 27 (1). C# (SW-2-CSharp- + RDFBasics, 37 cellules md) : md 2, 4, 6, 15, 19, 29, 31, 33 (1 chacun), md 37/37, derniere (2). + Re-attestation de parite -- hr_separator vague 2 (#15611, lane myia-po-2027:CoursIA), markdown- + only, passage devant la regle famille #14209 trace au claim et au body PR. Converti par + scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors frontmatter, bloc cloture, + setext). Diff = 1 ligne de source JSON par separateur ; cellules code, outputs, execution_count et + metadata byte-identiques. Aucun strip outille posterieur : le blob atteste ici est celui du HEAD + de la PR. diff --git a/scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0009-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0009-2026-09-14-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..a52e082298 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0009-2026-09-14-myia-po-2027-CoursIA.yaml @@ -0,0 +1,16 @@ +date: '2026-09-14' +by: myia-po-2027:CoursIA +python_sha: b4a0696f87955f611f297c93e5ff0b664b5409c9 +csharp_sha: 1803da69cf84ab95cd7d081e5335a639fcce3f06 +content_python_sha: 22b661861dfb74a17f46be70ac3410b4b3dc62813d7e7c3b1e64a04cba2bdc8e +content_csharp_sha: 598788e84d04115388d3dd05470e2383e57633ca2cee3dcebf3b58badf42fabf +reason: >- + Cote Python SEUL converti (10 sep). SW-3b-Python-GraphOperations (30 cellules md) : md 2, 5, 8, + 12, 14, 17, 21, 22 (1 chacun), md 30/30, derniere (2). Le jumeau C# (SW-3-CSharp-GraphOperations) + ne porte AUCUN separateur standalone convertible, verifie par --check sur l'arbre de la PR. Re- + attestation de parite -- hr_separator vague 2 (#15611, lane myia-po-2027:CoursIA), markdown-only, + passage devant la regle famille #14209 trace au claim et au body PR. Converti par + scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors frontmatter, bloc cloture, + setext). Diff = 1 ligne de source JSON par separateur ; cellules code, outputs, execution_count et + metadata byte-identiques. Aucun strip outille posterieur : le blob atteste ici est celui du HEAD + de la PR. diff --git a/scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0010-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0010-2026-09-14-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..f53783941c --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0010-2026-09-14-myia-po-2027-CoursIA.yaml @@ -0,0 +1,16 @@ +date: '2026-09-14' +by: myia-po-2027:CoursIA +python_sha: 8e891be84829509a020f96c14a956ca6ce3464f3 +csharp_sha: 2923bd743c4106fadea9a3b701c206368fe38688 +content_python_sha: ebcce3678aa889c8434de0ad0fa9114560007932155d3b12689cc8214131d7de +content_csharp_sha: 012960112654a2ae8db38b5dbf94517f278b1e3cd92d252f479995ee5eedf942 +reason: >- + Cote Python SEUL converti (14 sep). SW-5b-Python-LinkedData (27 cellules md) : md 2, 4, 7, 10, 12, + 14, 16, 19, 21, 24, 25, 26 (1 chacun), md 27/27, derniere (2). Le jumeau C# (SW-5-CSharp- + LinkedData) ne porte AUCUN separateur standalone convertible, verifie par --check sur l'arbre de + la PR. Re-attestation de parite -- hr_separator vague 2 (#15611, lane myia-po-2027:CoursIA), + markdown-only, passage devant la regle famille #14209 trace au claim et au body PR. Converti par + scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors frontmatter, bloc cloture, + setext). Diff = 1 ligne de source JSON par separateur ; cellules code, outputs, execution_count et + metadata byte-identiques. Aucun strip outille posterieur : le blob atteste ici est celui du HEAD + de la PR. diff --git a/scripts/notebook_tools/twin_pairs.d/sw-7-owl/0009-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-7-owl/0009-2026-09-14-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..b18f9be76b --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-7-owl/0009-2026-09-14-myia-po-2027-CoursIA.yaml @@ -0,0 +1,16 @@ +date: '2026-09-14' +by: myia-po-2027:CoursIA +python_sha: 223818477c862cdd1868d26968d075368405dd7f +csharp_sha: f772b4048c0c6227986c830cf89946d10d7aaccd +content_python_sha: 7739d3e21f4340d5967dfac599ef8986ebf699c564bba4514b5432bc5cafbba4 +content_csharp_sha: e0fa1a57976b5801ece24c4b48560865c905d8755c9821ddea113ccd7fc6da18 +reason: >- + Cote Python SEUL converti (13 sep). SW-7b-Python-OWL (30 cellules md) : md 2, 4, 6, 8, 10, 12, 13, + 14, 16 (1 chacun), md 19 (2), md 21 et 28 (1 chacun). Le jumeau C# (SW-7-CSharp-OWL) ne porte + AUCUN separateur standalone convertible, verifie par --check sur l'arbre de la PR. Re-attestation + de parite -- hr_separator vague 2 (#15611, lane myia-po-2027:CoursIA), markdown-only, passage + devant la regle famille #14209 trace au claim et au body PR. Converti par + scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors frontmatter, bloc cloture, + setext). Diff = 1 ligne de source JSON par separateur ; cellules code, outputs, execution_count et + metadata byte-identiques. Aucun strip outille posterieur : le blob atteste ici est celui du HEAD + de la PR. diff --git a/scripts/notebook_tools/twin_pairs.d/sw-8-shacl/0003-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-8-shacl/0003-2026-09-14-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..186fcbd1f6 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-8-shacl/0003-2026-09-14-myia-po-2027-CoursIA.yaml @@ -0,0 +1,16 @@ +date: '2026-09-14' +by: myia-po-2027:CoursIA +python_sha: 47c1d39f90a290ae586eb8ee1dcdd1d0045e908b +csharp_sha: 49c6da29031213de9be4a4bcf1319d3cc6e8d5a4 +content_python_sha: cdc00a8d41757b7d3a33e23c1a9b74cd5f5b3f08b2e257ad2ad0a7f64d00f54e +content_csharp_sha: 0788d5a327d66944852621c746c5f08465c3a3443eb9e051133f6dd1d19124ad +reason: >- + LES DEUX COTES convertees. Python (SW-8-Python-SHACL, 40 cellules md, 13 sep) : md 2, 4, 5, 6, 9, + 14, 18, 20, 23, 27, 33, 38, 39 (1 chacun). C# (SW-8-CSharp-SHACL, 24 cellules md, 16 sep) : md 2, + 4, 5, 6, 9, 12, 14, 15, 17, 18, 20, 21, 23 (1 chacun), md 24/24, derniere (3). Re-attestation de + parite -- hr_separator vague 2 (#15611, lane myia-po-2027:CoursIA), markdown-only, passage devant + la regle famille #14209 trace au claim et au body PR. Converti par + scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors frontmatter, bloc cloture, + setext). Diff = 1 ligne de source JSON par separateur ; cellules code, outputs, execution_count et + metadata byte-identiques. Aucun strip outille posterieur : le blob atteste ici est celui du HEAD + de la PR. From e28bcb7f2e36d796fa2369967fdda41ff8f6b248 Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 14 Sep 2026 17:43:58 +0200 Subject: [PATCH 3/9] fix(twin,#15611): renumerotation attestations 2026-09-14 apres absorption main (#16035) Tie-break arbitre par ai-01 : premier index pose, premier servi -- les attestations datees 2026-09-13 (po-2026) gardent leur numero, les deux miennes du 2026-09-14 cedent d'un cran : - sw-3-graph-operations : 0009 -> 0010 - sw-5-linked-data : 0010 -> 0011 Les 7 autres attestations ne bougent pas. La re-attestation sw-3/sw-5 (pins portant les blobs du nouveau head) suit dans le meme push. Co-Authored-By: Claude Sonnet 5 --- ...027-CoursIA.yaml => 0010-2026-09-14-myia-po-2027-CoursIA.yaml} | 0 ...027-CoursIA.yaml => 0011-2026-09-14-myia-po-2027-CoursIA.yaml} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/{0009-2026-09-14-myia-po-2027-CoursIA.yaml => 0010-2026-09-14-myia-po-2027-CoursIA.yaml} (100%) rename scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/{0010-2026-09-14-myia-po-2027-CoursIA.yaml => 0011-2026-09-14-myia-po-2027-CoursIA.yaml} (100%) diff --git a/scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0009-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0010-2026-09-14-myia-po-2027-CoursIA.yaml similarity index 100% rename from scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0009-2026-09-14-myia-po-2027-CoursIA.yaml rename to scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0010-2026-09-14-myia-po-2027-CoursIA.yaml diff --git a/scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0010-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0011-2026-09-14-myia-po-2027-CoursIA.yaml similarity index 100% rename from scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0010-2026-09-14-myia-po-2027-CoursIA.yaml rename to scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0011-2026-09-14-myia-po-2027-CoursIA.yaml From 736420cbbfa3a26dd7c44b5e698c0ac11731425f Mon Sep 17 00:00:00 2001 From: jsboige Date: Mon, 14 Sep 2026 18:03:53 +0200 Subject: [PATCH 4/9] fix(twin,#15611): re-attestation sw-3/sw-5 sur le head post-merge -- pins des blobs finaux Apres absorption de main (#16035 merge), le cote Python des deux paires a bouge (enrichissements hr_separator des deux lanes fusionnes), le cote C# est byte-identique. Les attestations renumerotees portent maintenant les pins du head final : - sw-3-graph-operations/0010 : python_sha ea2d2e22 (csharp 1803da69 inchange) - sw-5-linked-data/0011 : python_sha 55c227b7 (csharp 2923bd74 inchange) check_twin_parity.py --update --pair, reason reportee et completee avec le contexte de re-pin. Un seul push pour renumerotation + re-attestation, per arbitrage ai-01 (msg-20260914T110049-wyie4v). Co-Authored-By: Claude Sonnet 5 --- .../0010-2026-09-14-myia-po-2027-CoursIA.yaml | 24 ++++++++++--------- .../0011-2026-09-14-myia-po-2027-CoursIA.yaml | 24 ++++++++++--------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0010-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0010-2026-09-14-myia-po-2027-CoursIA.yaml index a52e082298..bb32917549 100644 --- a/scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0010-2026-09-14-myia-po-2027-CoursIA.yaml +++ b/scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0010-2026-09-14-myia-po-2027-CoursIA.yaml @@ -1,16 +1,18 @@ date: '2026-09-14' by: myia-po-2027:CoursIA -python_sha: b4a0696f87955f611f297c93e5ff0b664b5409c9 +python_sha: ea2d2e22f212a6ed34036d147750e2fea530bba6 csharp_sha: 1803da69cf84ab95cd7d081e5335a639fcce3f06 -content_python_sha: 22b661861dfb74a17f46be70ac3410b4b3dc62813d7e7c3b1e64a04cba2bdc8e +content_python_sha: fa899e4fe5aab8ad6160a2dd0b9a3d79a8e50daa2adc73012165bd8044d0d01d content_csharp_sha: 598788e84d04115388d3dd05470e2383e57633ca2cee3dcebf3b58badf42fabf reason: >- - Cote Python SEUL converti (10 sep). SW-3b-Python-GraphOperations (30 cellules md) : md 2, 5, 8, - 12, 14, 17, 21, 22 (1 chacun), md 30/30, derniere (2). Le jumeau C# (SW-3-CSharp-GraphOperations) - ne porte AUCUN separateur standalone convertible, verifie par --check sur l'arbre de la PR. Re- - attestation de parite -- hr_separator vague 2 (#15611, lane myia-po-2027:CoursIA), markdown-only, - passage devant la regle famille #14209 trace au claim et au body PR. Converti par - scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors frontmatter, bloc cloture, - setext). Diff = 1 ligne de source JSON par separateur ; cellules code, outputs, execution_count et - metadata byte-identiques. Aucun strip outille posterieur : le blob atteste ici est celui du HEAD - de la PR. + Re-attestation post-absorption de main (update-branch apres merge de #16035) : le cote Python + seul a bouge (SW-3b-Python-GraphOperations enrichi par la conversion hr_separator vague 2 de la + lane po-2026 et la mienne, fusionnees), le cote C# (SW-3-CSharp-GraphOperations) est + byte-identique (csharp_sha et content_csharp_sha inchanges vs l'attestation precedente). Conversion + hr_separator d'origine : cote Python seul, 10 separateurs, md 2, 5, 8, 12, 14, 17, 21, 22 (1 + chacun), md 30/30, derniere (2) ; le jumeau C# ne porte AUCUN separateur standalone convertible, + verifie par --check sur l'arbre de la PR. hr_separator vague 2 (#15611, lane + myia-po-2027:CoursIA), markdown-only, regle famille #14209 tracee au claim et au body PR. + Converti par scripts/notebook_tools/fix_hr_separator.py dans son allowlist. Diff = 1 ligne de + source JSON par separateur ; cellules code, outputs, execution_count et metadata byte-identiques. + Aucun strip outille posterieur : le blob atteste ici est celui du HEAD de la PR apres merge. diff --git a/scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0011-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0011-2026-09-14-myia-po-2027-CoursIA.yaml index f53783941c..74536be110 100644 --- a/scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0011-2026-09-14-myia-po-2027-CoursIA.yaml +++ b/scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0011-2026-09-14-myia-po-2027-CoursIA.yaml @@ -1,16 +1,18 @@ date: '2026-09-14' by: myia-po-2027:CoursIA -python_sha: 8e891be84829509a020f96c14a956ca6ce3464f3 +python_sha: 55c227b7098cf0d584854eb713b0b30d513e222c csharp_sha: 2923bd743c4106fadea9a3b701c206368fe38688 -content_python_sha: ebcce3678aa889c8434de0ad0fa9114560007932155d3b12689cc8214131d7de +content_python_sha: 2024e48eae26c2edaad1f8298ef1caf6e0e0d8f9e04d321a603231766a405f45 content_csharp_sha: 012960112654a2ae8db38b5dbf94517f278b1e3cd92d252f479995ee5eedf942 reason: >- - Cote Python SEUL converti (14 sep). SW-5b-Python-LinkedData (27 cellules md) : md 2, 4, 7, 10, 12, - 14, 16, 19, 21, 24, 25, 26 (1 chacun), md 27/27, derniere (2). Le jumeau C# (SW-5-CSharp- - LinkedData) ne porte AUCUN separateur standalone convertible, verifie par --check sur l'arbre de - la PR. Re-attestation de parite -- hr_separator vague 2 (#15611, lane myia-po-2027:CoursIA), - markdown-only, passage devant la regle famille #14209 trace au claim et au body PR. Converti par - scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors frontmatter, bloc cloture, - setext). Diff = 1 ligne de source JSON par separateur ; cellules code, outputs, execution_count et - metadata byte-identiques. Aucun strip outille posterieur : le blob atteste ici est celui du HEAD - de la PR. + Re-attestation post-absorption de main (update-branch apres merge de #16035) : le cote Python + seul a bouge (SW-5b-Python-LinkedData enrichi par la conversion hr_separator vague 2 de la lane + po-2026 et la mienne, fusionnees), le cote C# (SW-5-CSharp-LinkedData) est byte-identique + (csharp_sha et content_csharp_sha inchanges vs l'attestation precedente). Conversion + hr_separator d'origine : cote Python seul, 14 separateurs, md 2, 4, 7, 10, 12, 14, 16, 19, 21, + 24, 25, 26 (1 chacun), md 27/27, derniere (2) ; le jumeau C# ne porte AUCUN separateur + standalone convertible, verifie par --check sur l'arbre de la PR. hr_separator vague 2 (#15611, + lane myia-po-2027:CoursIA), markdown-only, regle famille #14209 tracee au claim et au body PR. + Converti par scripts/notebook_tools/fix_hr_separator.py dans son allowlist. Diff = 1 ligne de + source JSON par separateur ; cellules code, outputs, execution_count et metadata byte-identiques. + Aucun strip outille posterieur : le blob atteste ici est celui du HEAD de la PR apres merge. From 4bf3e1af2fcee46ff6525ed9b8465a75f1ef44bd Mon Sep 17 00:00:00 2001 From: jsboige Date: Tue, 15 Sep 2026 00:49:25 +0200 Subject: [PATCH 5/9] fix(twin-registry,#16042): renumeroter deux attestations en collision d'index MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les attestations 0008 (sw-2-rdf-basics) et 0009 (sw-7-owl) du 2026-09-14 de cette lane entraient en collision avec les 0008/0009-2026-09-13 de po-2026 arrivées sur main après le branchement (merge-base 8e969613). test_audit_index_unique_and_no_identical_duplicates_per_pair échouait : l'index est la clé de tri du journal (#14911/#15345). Renommage au prochain index libre par paire : 0008->0009 (sw-2-rdf-basics), 0009->0010 (sw-7-owl). Contenu inchangé (la clé d'index vit dans le nom de fichier). 46/46 tests twin registry verts localement. See #15611, See #16042 Co-Authored-By: Claude Sonnet 5 --- ...027-CoursIA.yaml => 0009-2026-09-14-myia-po-2027-CoursIA.yaml} | 0 ...027-CoursIA.yaml => 0010-2026-09-14-myia-po-2027-CoursIA.yaml} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename scripts/notebook_tools/twin_pairs.d/sw-2-rdf-basics/{0008-2026-09-14-myia-po-2027-CoursIA.yaml => 0009-2026-09-14-myia-po-2027-CoursIA.yaml} (100%) rename scripts/notebook_tools/twin_pairs.d/sw-7-owl/{0009-2026-09-14-myia-po-2027-CoursIA.yaml => 0010-2026-09-14-myia-po-2027-CoursIA.yaml} (100%) diff --git a/scripts/notebook_tools/twin_pairs.d/sw-2-rdf-basics/0008-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-2-rdf-basics/0009-2026-09-14-myia-po-2027-CoursIA.yaml similarity index 100% rename from scripts/notebook_tools/twin_pairs.d/sw-2-rdf-basics/0008-2026-09-14-myia-po-2027-CoursIA.yaml rename to scripts/notebook_tools/twin_pairs.d/sw-2-rdf-basics/0009-2026-09-14-myia-po-2027-CoursIA.yaml diff --git a/scripts/notebook_tools/twin_pairs.d/sw-7-owl/0009-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-7-owl/0010-2026-09-14-myia-po-2027-CoursIA.yaml similarity index 100% rename from scripts/notebook_tools/twin_pairs.d/sw-7-owl/0009-2026-09-14-myia-po-2027-CoursIA.yaml rename to scripts/notebook_tools/twin_pairs.d/sw-7-owl/0010-2026-09-14-myia-po-2027-CoursIA.yaml From 9438f8b9e43c1fb6e834fd682c219fbd9c303666 Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 16 Sep 2026 13:49:47 +0200 Subject: [PATCH 6/9] fix(twin,#16042): re-attestation sw-11 post-merge main -- blobs HEAD (0007) --- .../0007-2026-09-16-myia-po-2027-CoursIA.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0007-2026-09-16-myia-po-2027-CoursIA.yaml diff --git a/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0007-2026-09-16-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0007-2026-09-16-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..ba30ec8179 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0007-2026-09-16-myia-po-2027-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-09-16' +by: myia-po-2027:CoursIA +python_sha: 1a35105a1e4f8bd5c93098641f7c97ab863298db +csharp_sha: e557e3e39facb5c6d5e6892ada68a7a5a0399bbc +content_python_sha: bb800684f156caf3b8a9292b3a1596d3c55094a78c787cfc41c1d72d21a22330 +content_csharp_sha: 99d63adf00f7aef2c0a6eae726c37d87584eb5d07de6721c61e2354de3a9ed28 From 4bfdf3efd74b5b4e85a42bb0f3de13fd8ca00772 Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 16 Sep 2026 14:21:09 +0200 Subject: [PATCH 7/9] fix(notebooks,#16042): SW-11 -- retirer les 7 separateurs concurrencant les titres Exercice de main La resolution du conflit avec main avait concatene les deux cotes (separateur *** de la branche + titre "### Exercice N" ajoute par main dans la meme cellule). Les titres de main supersedent : les 7 separateurs redondants sont retires, SW-11 rejoint le blob de main (0 diff residuel). Co-Authored-By: Claude Sonnet 5 --- .../SemanticWeb/SW-11-Python-KnowledgeGraphs.ipynb | 7 ------- 1 file changed, 7 deletions(-) diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-11-Python-KnowledgeGraphs.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-11-Python-KnowledgeGraphs.ipynb index 1a35105a1e..f775731a94 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-11-Python-KnowledgeGraphs.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-11-Python-KnowledgeGraphs.ipynb @@ -5028,7 +5028,6 @@ "tags": [] }, "source": [ - "***\n", "### Exercice 1 : détecter les triplets redondants dans `g_students`\n", "\n", "L'exemple guide 1 ajoute `hasEmail` et calcule la moyenne. Cet exercice détecte les **triplets redondants** dans `g_students` (un même couple (sujet, propriété) déclaré plusieurs fois avec des objets différents). Mesurer le nombre de triplets à dédupliquer avant export.\n", @@ -5091,7 +5090,6 @@ "tags": [] }, "source": [ - "***\n", "### Exercice 2 : entropie de Shannon sur la distribution des genres\n", "\n", "L'exemple guide 2 visualise le KG filtré par genre. Cet exercice calcule l'**entropie de Shannon** de la distribution des genres de films dans le KG :\n", @@ -5158,7 +5156,6 @@ "tags": [] }, "source": [ - "***\n", "### Exercice 3 : taux de re-qualification après `rdf:type`\n", "\n", "L'exemple guide 3 liste les instances `Student` et raisonne sur les contraintes OWL. Cet exercice mesure le **taux de re-qualification** : parmi les `Person` du KG, combien sont **mal classifiées** (par exemple taggées comme `Student` alors qu'elles devraient être `Professor`) ?\n", @@ -5223,7 +5220,6 @@ "tags": [] }, "source": [ - "***\n", "### Exercice 4 : couverture de l'ontologie sur les triplets RDF\n", "\n", "L'exemple guide 4 construit un KG complet. Cet exercice évalue la **couverture de l'ontologie** : parmi les triplets RDF du KG, combien ont **un type (rdf:type) défini dans l'ontologie** vs des types littéraux ou non-définis ?\n", @@ -5286,7 +5282,6 @@ "tags": [] }, "source": [ - "***\n", "### Exercice 5 : divergence entre 4 mesures de centralité\n", "\n", "L'exemple guide 5 compare PageRank et degree centrality. Cet exercice ajoute **betweenness** et **eigenvector centrality**, puis mesure la **divergence** entre les 4 classements :\n", @@ -5352,7 +5347,6 @@ "tags": [] }, "source": [ - "***\n", "### Exercice 6 : benchmarker pyvis vs taille du graphe\n", "\n", "L'exemple guide 6 génère un fichier HTML pyvis. Cet exercice **benchmarque le temps de rendu** en fonction de la taille du sous-graphe :\n", @@ -5417,7 +5411,6 @@ "tags": [] }, "source": [ - "***\n", "### Exercice 7 : profondeur transitive de `rdfs:subClassOf+`\n", "\n", "L'exemple guide 7 utilise `rdfs:subClassOf+` pour la clôture transitive. Cet exercice mesure la **profondeur transitive** de chaque classe : pour `GraduateStudent`, combien de sauts faut-il pour atteindre `owl:Thing` (la racine) ?\n", From aea8ebfbaeb2f8f2b7b20d60bc8ec151d80c9999 Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 16 Sep 2026 14:21:53 +0200 Subject: [PATCH 8/9] fix(twin,#16042): re-attestation sw-11 knowledge-graphs apres retrait des 7 separateurs (0009) SW-11 rejoint le blob de main ; l'attestation precedente (0007) pointait les blobs concatenes. Attestation = blobs HEAD 4bfdf3efd74b. Co-Authored-By: Claude Sonnet 5 --- .../0009-2026-09-16-myia-po-2027-CoursIA.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0009-2026-09-16-myia-po-2027-CoursIA.yaml diff --git a/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0009-2026-09-16-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0009-2026-09-16-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..c65455c63a --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0009-2026-09-16-myia-po-2027-CoursIA.yaml @@ -0,0 +1,6 @@ +date: '2026-09-16' +by: myia-po-2027:CoursIA +python_sha: f775731a94b994f45a794e65b03949aec23ad3c2 +csharp_sha: e557e3e39facb5c6d5e6892ada68a7a5a0399bbc +content_python_sha: b62eb92fea59c2a8999b81d20fcf4e10d1a22c8a4e5bc8acf0597bda06d1a7e6 +content_csharp_sha: 99d63adf00f7aef2c0a6eae726c37d87584eb5d07de6721c61e2354de3a9ed28 From 97937d6a024c67c344409f19e0c9a6446e36e9cc Mon Sep 17 00:00:00 2001 From: jsboige Date: Wed, 16 Sep 2026 19:43:12 +0200 Subject: [PATCH 9/9] fix(twin,#16042): retirer 5 attestations supersedees -- scope final 11 fichiers (7 notebooks + 4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reparation exact-head aea8ebfb (CHANGES_REQUESTED ai-01). Chaque retrait prouve redondant firsthand (pins compares a origin/main, blobs verifies dans le tree final) : - sw-3 0010 : 4 pins identiques a main sw-3 0009 (python ea2d2e22f212, csharp 1803da69cf84) -> couvert par main. - sw-5 0011 : 4 pins identiques a main sw-5 0010 -> couvert par main. - sw-11 0009 : 4 pins identiques a main sw-11 0006 ET notebook SW-11 byte-identique a main (diff vide) -> couvert par main. - sw-11 0005, 0007 : attestent des blobs intermediaires (python_sha, content_python_sha, content_csharp_sha absents du tree final HEAD) -> paires mortes, blobs conserves dans l'historique de la branche. Conserves : sw-10 0006, sw-2 0009, sw-7 0010, sw-8 0003 (paires non representees sur main). Aucune re-execution notebook (code/outputs intacts). Body aligne sur 11 fichiers = 7 notebooks + 4 attestations. Grain: MED/notebook-python — lane myia-po-2027:CoursIA — prev: DEEP/research-code #16431 Co-Authored-By: Claude Sonnet 5 --- .../0005-2026-09-14-myia-po-2027-CoursIA.yaml | 16 ---------------- .../0007-2026-09-16-myia-po-2027-CoursIA.yaml | 6 ------ .../0009-2026-09-16-myia-po-2027-CoursIA.yaml | 6 ------ .../0010-2026-09-14-myia-po-2027-CoursIA.yaml | 18 ------------------ .../0011-2026-09-14-myia-po-2027-CoursIA.yaml | 18 ------------------ 5 files changed, 64 deletions(-) delete mode 100644 scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0005-2026-09-14-myia-po-2027-CoursIA.yaml delete mode 100644 scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0007-2026-09-16-myia-po-2027-CoursIA.yaml delete mode 100644 scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0009-2026-09-16-myia-po-2027-CoursIA.yaml delete mode 100644 scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0010-2026-09-14-myia-po-2027-CoursIA.yaml delete mode 100644 scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0011-2026-09-14-myia-po-2027-CoursIA.yaml diff --git a/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0005-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0005-2026-09-14-myia-po-2027-CoursIA.yaml deleted file mode 100644 index 5201ebe64e..0000000000 --- a/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0005-2026-09-14-myia-po-2027-CoursIA.yaml +++ /dev/null @@ -1,16 +0,0 @@ -date: '2026-09-14' -by: myia-po-2027:CoursIA -python_sha: 5459948fe86de799b7b8b49c509526742c670eff -csharp_sha: e557e3e39facb5c6d5e6892ada68a7a5a0399bbc -content_python_sha: 45765b9d6786bb8006d0a0e0130da6394dc280d1f98aba28a35a0b27f5fa4f4d -content_csharp_sha: 99d63adf00f7aef2c0a6eae726c37d87584eb5d07de6721c61e2354de3a9ed28 -reason: >- - Cote Python SEUL converti (21 sep). SW-11-Python-KnowledgeGraphs (70 cellules md) : md 1, 2, 5, 8, - 21, 26, 35, 42, 49 (1 chacun), md 52 (2), md 53, 54, 62, 63, 64, 65, 66, 67, 68, 69 (1 chacun). Le - jumeau C# (SW-11-CSharp-KnowledgeGraphs) ne porte AUCUN separateur standalone convertible, verifie - par --check sur l'arbre de la PR. Re-attestation de parite -- hr_separator vague 2 (#15611, lane - myia-po-2027:CoursIA), markdown-only, passage devant la regle famille #14209 trace au claim et au - body PR. Converti par scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors - frontmatter, bloc cloture, setext). Diff = 1 ligne de source JSON par separateur ; cellules code, - outputs, execution_count et metadata byte-identiques. Aucun strip outille posterieur : le blob - atteste ici est celui du HEAD de la PR. diff --git a/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0007-2026-09-16-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0007-2026-09-16-myia-po-2027-CoursIA.yaml deleted file mode 100644 index ba30ec8179..0000000000 --- a/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0007-2026-09-16-myia-po-2027-CoursIA.yaml +++ /dev/null @@ -1,6 +0,0 @@ -date: '2026-09-16' -by: myia-po-2027:CoursIA -python_sha: 1a35105a1e4f8bd5c93098641f7c97ab863298db -csharp_sha: e557e3e39facb5c6d5e6892ada68a7a5a0399bbc -content_python_sha: bb800684f156caf3b8a9292b3a1596d3c55094a78c787cfc41c1d72d21a22330 -content_csharp_sha: 99d63adf00f7aef2c0a6eae726c37d87584eb5d07de6721c61e2354de3a9ed28 diff --git a/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0009-2026-09-16-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0009-2026-09-16-myia-po-2027-CoursIA.yaml deleted file mode 100644 index c65455c63a..0000000000 --- a/scripts/notebook_tools/twin_pairs.d/sw-11-knowledge-graphs/0009-2026-09-16-myia-po-2027-CoursIA.yaml +++ /dev/null @@ -1,6 +0,0 @@ -date: '2026-09-16' -by: myia-po-2027:CoursIA -python_sha: f775731a94b994f45a794e65b03949aec23ad3c2 -csharp_sha: e557e3e39facb5c6d5e6892ada68a7a5a0399bbc -content_python_sha: b62eb92fea59c2a8999b81d20fcf4e10d1a22c8a4e5bc8acf0597bda06d1a7e6 -content_csharp_sha: 99d63adf00f7aef2c0a6eae726c37d87584eb5d07de6721c61e2354de3a9ed28 diff --git a/scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0010-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0010-2026-09-14-myia-po-2027-CoursIA.yaml deleted file mode 100644 index bb32917549..0000000000 --- a/scripts/notebook_tools/twin_pairs.d/sw-3-graph-operations/0010-2026-09-14-myia-po-2027-CoursIA.yaml +++ /dev/null @@ -1,18 +0,0 @@ -date: '2026-09-14' -by: myia-po-2027:CoursIA -python_sha: ea2d2e22f212a6ed34036d147750e2fea530bba6 -csharp_sha: 1803da69cf84ab95cd7d081e5335a639fcce3f06 -content_python_sha: fa899e4fe5aab8ad6160a2dd0b9a3d79a8e50daa2adc73012165bd8044d0d01d -content_csharp_sha: 598788e84d04115388d3dd05470e2383e57633ca2cee3dcebf3b58badf42fabf -reason: >- - Re-attestation post-absorption de main (update-branch apres merge de #16035) : le cote Python - seul a bouge (SW-3b-Python-GraphOperations enrichi par la conversion hr_separator vague 2 de la - lane po-2026 et la mienne, fusionnees), le cote C# (SW-3-CSharp-GraphOperations) est - byte-identique (csharp_sha et content_csharp_sha inchanges vs l'attestation precedente). Conversion - hr_separator d'origine : cote Python seul, 10 separateurs, md 2, 5, 8, 12, 14, 17, 21, 22 (1 - chacun), md 30/30, derniere (2) ; le jumeau C# ne porte AUCUN separateur standalone convertible, - verifie par --check sur l'arbre de la PR. hr_separator vague 2 (#15611, lane - myia-po-2027:CoursIA), markdown-only, regle famille #14209 tracee au claim et au body PR. - Converti par scripts/notebook_tools/fix_hr_separator.py dans son allowlist. Diff = 1 ligne de - source JSON par separateur ; cellules code, outputs, execution_count et metadata byte-identiques. - Aucun strip outille posterieur : le blob atteste ici est celui du HEAD de la PR apres merge. diff --git a/scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0011-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0011-2026-09-14-myia-po-2027-CoursIA.yaml deleted file mode 100644 index 74536be110..0000000000 --- a/scripts/notebook_tools/twin_pairs.d/sw-5-linked-data/0011-2026-09-14-myia-po-2027-CoursIA.yaml +++ /dev/null @@ -1,18 +0,0 @@ -date: '2026-09-14' -by: myia-po-2027:CoursIA -python_sha: 55c227b7098cf0d584854eb713b0b30d513e222c -csharp_sha: 2923bd743c4106fadea9a3b701c206368fe38688 -content_python_sha: 2024e48eae26c2edaad1f8298ef1caf6e0e0d8f9e04d321a603231766a405f45 -content_csharp_sha: 012960112654a2ae8db38b5dbf94517f278b1e3cd92d252f479995ee5eedf942 -reason: >- - Re-attestation post-absorption de main (update-branch apres merge de #16035) : le cote Python - seul a bouge (SW-5b-Python-LinkedData enrichi par la conversion hr_separator vague 2 de la lane - po-2026 et la mienne, fusionnees), le cote C# (SW-5-CSharp-LinkedData) est byte-identique - (csharp_sha et content_csharp_sha inchanges vs l'attestation precedente). Conversion - hr_separator d'origine : cote Python seul, 14 separateurs, md 2, 4, 7, 10, 12, 14, 16, 19, 21, - 24, 25, 26 (1 chacun), md 27/27, derniere (2) ; le jumeau C# ne porte AUCUN separateur - standalone convertible, verifie par --check sur l'arbre de la PR. hr_separator vague 2 (#15611, - lane myia-po-2027:CoursIA), markdown-only, regle famille #14209 tracee au claim et au body PR. - Converti par scripts/notebook_tools/fix_hr_separator.py dans son allowlist. Diff = 1 ligne de - source JSON par separateur ; cellules code, outputs, execution_count et metadata byte-identiques. - Aucun strip outille posterieur : le blob atteste ici est celui du HEAD de la PR apres merge.