diff --git a/COURSE_CATALOG.generated.json b/COURSE_CATALOG.generated.json index cd1b8704d..38b212969 100644 --- a/COURSE_CATALOG.generated.json +++ b/COURSE_CATALOG.generated.json @@ -88,7 +88,7 @@ "cells_code": 8, "cells_markdown": 13, "cells_with_outputs": 4, - "cells_without_outputs": 3, + "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -111,7 +111,7 @@ "cells_total": 66, "cells_code": 20, "cells_markdown": 46, - "cells_with_outputs": 20, + "cells_with_outputs": 18, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -135,7 +135,7 @@ "cells_total": 34, "cells_code": 14, "cells_markdown": 20, - "cells_with_outputs": 11, + "cells_with_outputs": 9, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -159,7 +159,7 @@ "cells_total": 47, "cells_code": 15, "cells_markdown": 32, - "cells_with_outputs": 9, + "cells_with_outputs": 5, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -207,7 +207,7 @@ "cells_total": 38, "cells_code": 14, "cells_markdown": 24, - "cells_with_outputs": 14, + "cells_with_outputs": 13, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": true, @@ -255,7 +255,7 @@ "cells_total": 51, "cells_code": 24, "cells_markdown": 27, - "cells_with_outputs": 24, + "cells_with_outputs": 21, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -303,7 +303,7 @@ "cells_total": 29, "cells_code": 13, "cells_markdown": 16, - "cells_with_outputs": 13, + "cells_with_outputs": 12, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -352,7 +352,7 @@ "cells_code": 10, "cells_markdown": 22, "cells_with_outputs": 9, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -375,7 +375,7 @@ "cells_total": 45, "cells_code": 16, "cells_markdown": 29, - "cells_with_outputs": 14, + "cells_with_outputs": 13, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -447,7 +447,7 @@ "cells_total": 30, "cells_code": 12, "cells_markdown": 18, - "cells_with_outputs": 11, + "cells_with_outputs": 10, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -519,7 +519,7 @@ "cells_total": 27, "cells_code": 12, "cells_markdown": 15, - "cells_with_outputs": 11, + "cells_with_outputs": 10, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -591,7 +591,7 @@ "cells_total": 32, "cells_code": 14, "cells_markdown": 18, - "cells_with_outputs": 10, + "cells_with_outputs": 8, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -615,7 +615,7 @@ "cells_total": 39, "cells_code": 12, "cells_markdown": 27, - "cells_with_outputs": 12, + "cells_with_outputs": 10, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -664,7 +664,7 @@ "cells_code": 16, "cells_markdown": 27, "cells_with_outputs": 13, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -687,7 +687,7 @@ "cells_total": 67, "cells_code": 21, "cells_markdown": 46, - "cells_with_outputs": 21, + "cells_with_outputs": 16, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -1383,7 +1383,7 @@ "cells_total": 21, "cells_code": 10, "cells_markdown": 11, - "cells_with_outputs": 8, + "cells_with_outputs": 7, "cells_without_outputs": 0, "requires_api": true, "requires_gpu": false, @@ -1503,7 +1503,7 @@ "cells_total": 26, "cells_code": 10, "cells_markdown": 16, - "cells_with_outputs": 8, + "cells_with_outputs": 7, "cells_without_outputs": 0, "requires_api": true, "requires_gpu": false, @@ -1695,7 +1695,7 @@ "cells_total": 25, "cells_code": 13, "cells_markdown": 12, - "cells_with_outputs": 13, + "cells_with_outputs": 10, "cells_without_outputs": 0, "requires_api": true, "requires_gpu": true, @@ -1719,7 +1719,7 @@ "cells_total": 31, "cells_code": 16, "cells_markdown": 15, - "cells_with_outputs": 16, + "cells_with_outputs": 13, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": true, @@ -1791,7 +1791,7 @@ "cells_total": 40, "cells_code": 16, "cells_markdown": 24, - "cells_with_outputs": 15, + "cells_with_outputs": 14, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": true, @@ -1840,7 +1840,7 @@ "cells_code": 12, "cells_markdown": 13, "cells_with_outputs": 9, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": true, "requires_gpu": false, "requires_cloud": false, @@ -1864,7 +1864,7 @@ "cells_code": 12, "cells_markdown": 13, "cells_with_outputs": 9, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": true, "requires_gpu": false, "requires_cloud": false, @@ -2032,7 +2032,7 @@ "cells_code": 5, "cells_markdown": 8, "cells_with_outputs": 2, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": true, "requires_gpu": true, "requires_cloud": false, @@ -2824,7 +2824,7 @@ "cells_code": 17, "cells_markdown": 39, "cells_with_outputs": 16, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": true, "requires_gpu": false, "requires_cloud": false, @@ -3327,7 +3327,7 @@ "cells_total": 29, "cells_code": 14, "cells_markdown": 15, - "cells_with_outputs": 12, + "cells_with_outputs": 10, "cells_without_outputs": 1, "requires_api": true, "requires_gpu": true, @@ -3352,7 +3352,7 @@ "cells_code": 13, "cells_markdown": 16, "cells_with_outputs": 9, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": true, "requires_cloud": false, @@ -3423,7 +3423,7 @@ "cells_total": 28, "cells_code": 14, "cells_markdown": 14, - "cells_with_outputs": 10, + "cells_with_outputs": 9, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": true, @@ -3592,7 +3592,7 @@ "cells_code": 11, "cells_markdown": 15, "cells_with_outputs": 10, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -3615,7 +3615,7 @@ "cells_total": 11, "cells_code": 4, "cells_markdown": 7, - "cells_with_outputs": 4, + "cells_with_outputs": 3, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -3639,7 +3639,7 @@ "cells_total": 13, "cells_code": 5, "cells_markdown": 8, - "cells_with_outputs": 5, + "cells_with_outputs": 4, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -3663,7 +3663,7 @@ "cells_total": 26, "cells_code": 10, "cells_markdown": 16, - "cells_with_outputs": 8, + "cells_with_outputs": 7, "cells_without_outputs": 1, "requires_api": true, "requires_gpu": false, @@ -3711,7 +3711,7 @@ "cells_total": 24, "cells_code": 11, "cells_markdown": 13, - "cells_with_outputs": 8, + "cells_with_outputs": 7, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -3783,7 +3783,7 @@ "cells_total": 22, "cells_code": 10, "cells_markdown": 12, - "cells_with_outputs": 4, + "cells_with_outputs": 3, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -3903,7 +3903,7 @@ "cells_total": 18, "cells_code": 8, "cells_markdown": 10, - "cells_with_outputs": 8, + "cells_with_outputs": 6, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -4263,7 +4263,7 @@ "cells_total": 18, "cells_code": 7, "cells_markdown": 11, - "cells_with_outputs": 7, + "cells_with_outputs": 6, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -4455,7 +4455,7 @@ "cells_total": 36, "cells_code": 11, "cells_markdown": 25, - "cells_with_outputs": 11, + "cells_with_outputs": 10, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -4527,7 +4527,7 @@ "cells_total": 19, "cells_code": 8, "cells_markdown": 11, - "cells_with_outputs": 8, + "cells_with_outputs": 7, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -4575,7 +4575,7 @@ "cells_total": 14, "cells_code": 6, "cells_markdown": 8, - "cells_with_outputs": 6, + "cells_with_outputs": 5, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -4599,7 +4599,7 @@ "cells_total": 21, "cells_code": 9, "cells_markdown": 12, - "cells_with_outputs": 9, + "cells_with_outputs": 8, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -4623,7 +4623,7 @@ "cells_total": 31, "cells_code": 13, "cells_markdown": 18, - "cells_with_outputs": 13, + "cells_with_outputs": 11, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -4647,7 +4647,7 @@ "cells_total": 27, "cells_code": 12, "cells_markdown": 15, - "cells_with_outputs": 12, + "cells_with_outputs": 10, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -4671,7 +4671,7 @@ "cells_total": 18, "cells_code": 8, "cells_markdown": 10, - "cells_with_outputs": 8, + "cells_with_outputs": 7, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -4695,7 +4695,7 @@ "cells_total": 31, "cells_code": 14, "cells_markdown": 17, - "cells_with_outputs": 14, + "cells_with_outputs": 13, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -4719,7 +4719,7 @@ "cells_total": 29, "cells_code": 13, "cells_markdown": 16, - "cells_with_outputs": 13, + "cells_with_outputs": 12, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -6592,7 +6592,7 @@ "cells_code": 11, "cells_markdown": 41, "cells_with_outputs": 0, - "cells_without_outputs": 11, + "cells_without_outputs": 10, "requires_api": false, "requires_gpu": false, "requires_cloud": true, @@ -7047,7 +7047,7 @@ "cells_total": 27, "cells_code": 13, "cells_markdown": 14, - "cells_with_outputs": 13, + "cells_with_outputs": 10, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -7335,7 +7335,7 @@ "cells_total": 19, "cells_code": 10, "cells_markdown": 9, - "cells_with_outputs": 10, + "cells_with_outputs": 9, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -7983,7 +7983,7 @@ "cells_total": 59, "cells_code": 25, "cells_markdown": 34, - "cells_with_outputs": 24, + "cells_with_outputs": 21, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -8001,12 +8001,12 @@ "maturity": "PRODUCTION", "duree_estimee": "45min", "owner_logique": "po-2025", - "last_validation": "2026-05-30", + "last_validation": "2026-05-31", "last_validator": "jsboige@gmail.com", - "issue_pr_associee": "#1901", - "cells_total": 62, + "issue_pr_associee": "#1931", + "cells_total": 63, "cells_code": 25, - "cells_markdown": 37, + "cells_markdown": 38, "cells_with_outputs": 20, "cells_without_outputs": 0, "requires_api": false, @@ -8031,7 +8031,7 @@ "cells_total": 47, "cells_code": 20, "cells_markdown": 27, - "cells_with_outputs": 17, + "cells_with_outputs": 16, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -8319,7 +8319,7 @@ "cells_total": 49, "cells_code": 18, "cells_markdown": 31, - "cells_with_outputs": 18, + "cells_with_outputs": 12, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -8343,7 +8343,7 @@ "cells_total": 39, "cells_code": 18, "cells_markdown": 21, - "cells_with_outputs": 9, + "cells_with_outputs": 5, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -8367,7 +8367,7 @@ "cells_total": 41, "cells_code": 17, "cells_markdown": 24, - "cells_with_outputs": 17, + "cells_with_outputs": 16, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -8415,7 +8415,7 @@ "cells_total": 49, "cells_code": 18, "cells_markdown": 31, - "cells_with_outputs": 18, + "cells_with_outputs": 16, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -8487,7 +8487,7 @@ "cells_total": 67, "cells_code": 29, "cells_markdown": 38, - "cells_with_outputs": 21, + "cells_with_outputs": 20, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -8535,7 +8535,7 @@ "cells_total": 62, "cells_code": 23, "cells_markdown": 39, - "cells_with_outputs": 23, + "cells_with_outputs": 19, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -8583,7 +8583,7 @@ "cells_total": 38, "cells_code": 14, "cells_markdown": 24, - "cells_with_outputs": 11, + "cells_with_outputs": 7, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -8607,7 +8607,7 @@ "cells_total": 42, "cells_code": 16, "cells_markdown": 26, - "cells_with_outputs": 14, + "cells_with_outputs": 9, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -8631,7 +8631,7 @@ "cells_total": 52, "cells_code": 17, "cells_markdown": 35, - "cells_with_outputs": 17, + "cells_with_outputs": 16, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -8823,7 +8823,7 @@ "cells_total": 53, "cells_code": 20, "cells_markdown": 33, - "cells_with_outputs": 16, + "cells_with_outputs": 14, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": true, @@ -8913,12 +8913,12 @@ "maturity": "DRAFT", "duree_estimee": "30min", "owner_logique": "po-2025", - "last_validation": "2026-05-29", + "last_validation": "2026-05-31", "last_validator": "jsboige@gmail.com", - "issue_pr_associee": "#1769", - "cells_total": 25, + "issue_pr_associee": "#1931", + "cells_total": 26, "cells_code": 11, - "cells_markdown": 14, + "cells_markdown": 15, "cells_with_outputs": 5, "cells_without_outputs": 3, "requires_api": false, @@ -9006,15 +9006,15 @@ "sous_serie": "", "kernel": ".NET (C#)", "status": "READY", - "maturity": "BETA", + "maturity": "PRODUCTION", "duree_estimee": "45min", "owner_logique": "po-2023", "last_validation": "2026-05-17", "last_validator": "jsboige@gmail.com", "issue_pr_associee": "#1205, #1221", - "cells_total": 28, + "cells_total": 29, "cells_code": 11, - "cells_markdown": 17, + "cells_markdown": 18, "cells_with_outputs": 9, "cells_without_outputs": 0, "requires_api": false, @@ -9087,7 +9087,7 @@ "cells_total": 33, "cells_code": 10, "cells_markdown": 23, - "cells_with_outputs": 10, + "cells_with_outputs": 9, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -9102,15 +9102,15 @@ "sous_serie": "", "kernel": ".NET (C#)", "status": "READY", - "maturity": "BETA", + "maturity": "PRODUCTION", "duree_estimee": "45min", "owner_logique": "po-2023", "last_validation": "2026-05-17", "last_validator": "jsboige@gmail.com", "issue_pr_associee": "#1205, #1221", - "cells_total": 27, + "cells_total": 28, "cells_code": 12, - "cells_markdown": 15, + "cells_markdown": 16, "cells_with_outputs": 10, "cells_without_outputs": 0, "requires_api": false, @@ -9135,7 +9135,7 @@ "cells_total": 23, "cells_code": 8, "cells_markdown": 15, - "cells_with_outputs": 8, + "cells_with_outputs": 7, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -9150,15 +9150,15 @@ "sous_serie": "", "kernel": ".NET (C#)", "status": "READY", - "maturity": "BETA", + "maturity": "PRODUCTION", "duree_estimee": "45min", "owner_logique": "po-2023", "last_validation": "2026-05-23", "last_validator": "jsboige@gmail.com", "issue_pr_associee": "#1488", - "cells_total": 33, + "cells_total": 34, "cells_code": 12, - "cells_markdown": 21, + "cells_markdown": 22, "cells_with_outputs": 12, "cells_without_outputs": 0, "requires_api": false, @@ -9198,15 +9198,15 @@ "sous_serie": "", "kernel": ".NET (C#)", "status": "READY", - "maturity": "BETA", + "maturity": "PRODUCTION", "duree_estimee": "45min", "owner_logique": "po-2023", "last_validation": "2026-05-23", "last_validator": "jsboige@gmail.com", "issue_pr_associee": "#1488", - "cells_total": 38, + "cells_total": 39, "cells_code": 15, - "cells_markdown": 23, + "cells_markdown": 24, "cells_with_outputs": 12, "cells_without_outputs": 0, "requires_api": false, @@ -9231,7 +9231,7 @@ "cells_total": 28, "cells_code": 10, "cells_markdown": 18, - "cells_with_outputs": 10, + "cells_with_outputs": 9, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -9255,8 +9255,8 @@ "cells_total": 55, "cells_code": 22, "cells_markdown": 33, - "cells_with_outputs": 19, - "cells_without_outputs": 1, + "cells_with_outputs": 17, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": true, "requires_cloud": false, @@ -9297,13 +9297,13 @@ "maturity": "BETA", "duree_estimee": "45min", "owner_logique": "po-2023", - "last_validation": "2026-05-30", + "last_validation": "2026-05-31", "last_validator": "jsboige@gmail.com", - "issue_pr_associee": "#1871", - "cells_total": 59, + "issue_pr_associee": "#1931", + "cells_total": 60, "cells_code": 21, - "cells_markdown": 38, - "cells_with_outputs": 18, + "cells_markdown": 39, + "cells_with_outputs": 17, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -9399,7 +9399,7 @@ "cells_total": 26, "cells_code": 9, "cells_markdown": 17, - "cells_with_outputs": 9, + "cells_with_outputs": 8, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -9495,7 +9495,7 @@ "cells_total": 39, "cells_code": 12, "cells_markdown": 27, - "cells_with_outputs": 12, + "cells_with_outputs": 11, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -9880,7 +9880,7 @@ "cells_code": 26, "cells_markdown": 47, "cells_with_outputs": 24, - "cells_without_outputs": 2, + "cells_without_outputs": 0, "requires_api": true, "requires_gpu": false, "requires_cloud": false, @@ -9903,7 +9903,7 @@ "cells_total": 46, "cells_code": 15, "cells_markdown": 31, - "cells_with_outputs": 15, + "cells_with_outputs": 14, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": true, @@ -9921,9 +9921,9 @@ "maturity": "PRODUCTION", "duree_estimee": "30min", "owner_logique": "po-2024", - "last_validation": "2026-05-30", + "last_validation": "2026-05-31", "last_validator": "jsboige@gmail.com", - "issue_pr_associee": "#1870", + "issue_pr_associee": "#1843, #1940", "cells_total": 34, "cells_code": 10, "cells_markdown": 24, @@ -10168,7 +10168,7 @@ "cells_code": 17, "cells_markdown": 20, "cells_with_outputs": 13, - "cells_without_outputs": 3, + "cells_without_outputs": 1, "requires_api": true, "requires_gpu": false, "requires_cloud": false, @@ -10254,17 +10254,17 @@ "sous_serie": "", "kernel": ".NET (C#)", "status": "READY", - "maturity": "BETA", + "maturity": "PRODUCTION", "duree_estimee": "30min", "owner_logique": "po-2024", - "last_validation": "2026-05-25", + "last_validation": "2026-05-31", "last_validator": "jsboige@gmail.com", - "issue_pr_associee": "#1455", + "issue_pr_associee": "#1946, #1948", "cells_total": 20, "cells_code": 7, "cells_markdown": 13, - "cells_with_outputs": 5, - "cells_without_outputs": 1, + "cells_with_outputs": 6, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -10311,7 +10311,7 @@ "cells_total": 43, "cells_code": 13, "cells_markdown": 30, - "cells_with_outputs": 13, + "cells_with_outputs": 12, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -10408,7 +10408,7 @@ "cells_code": 18, "cells_markdown": 38, "cells_with_outputs": 15, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -10425,13 +10425,13 @@ "maturity": "PRODUCTION", "duree_estimee": "45min", "owner_logique": "po-2024", - "last_validation": "2026-05-24", + "last_validation": "2026-05-31", "last_validator": "jsboige@gmail.com", - "issue_pr_associee": "#1455, #1547", + "issue_pr_associee": "#1946, #1951", "cells_total": 47, "cells_code": 16, "cells_markdown": 31, - "cells_with_outputs": 12, + "cells_with_outputs": 13, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -10455,7 +10455,7 @@ "cells_total": 74, "cells_code": 21, "cells_markdown": 53, - "cells_with_outputs": 21, + "cells_with_outputs": 20, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -10473,9 +10473,9 @@ "maturity": "PRODUCTION", "duree_estimee": "30min", "owner_logique": "po-2024", - "last_validation": "2026-05-30", + "last_validation": "2026-05-31", "last_validator": "jsboige@gmail.com", - "issue_pr_associee": "#1899", + "issue_pr_associee": "#1934", "cells_total": 42, "cells_code": 12, "cells_markdown": 30, @@ -10503,7 +10503,7 @@ "cells_total": 44, "cells_code": 15, "cells_markdown": 29, - "cells_with_outputs": 15, + "cells_with_outputs": 12, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -10527,7 +10527,7 @@ "cells_total": 48, "cells_code": 12, "cells_markdown": 36, - "cells_with_outputs": 10, + "cells_with_outputs": 9, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -10545,9 +10545,9 @@ "maturity": "PRODUCTION", "duree_estimee": "45min", "owner_logique": "po-2024", - "last_validation": "2026-05-30", + "last_validation": "2026-05-31", "last_validator": "jsboige@gmail.com", - "issue_pr_associee": "#1899", + "issue_pr_associee": "#1946, #1951", "cells_total": 44, "cells_code": 16, "cells_markdown": 28, @@ -10575,7 +10575,7 @@ "cells_total": 57, "cells_code": 17, "cells_markdown": 40, - "cells_with_outputs": 14, + "cells_with_outputs": 13, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -10593,9 +10593,9 @@ "maturity": "PRODUCTION", "duree_estimee": "45min", "owner_logique": "po-2024", - "last_validation": "2026-05-30", + "last_validation": "2026-05-31", "last_validator": "jsboige@gmail.com", - "issue_pr_associee": "#1899", + "issue_pr_associee": "#1934", "cells_total": 53, "cells_code": 11, "cells_markdown": 42, @@ -10671,7 +10671,7 @@ "cells_total": 64, "cells_code": 19, "cells_markdown": 45, - "cells_with_outputs": 19, + "cells_with_outputs": 17, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -10695,7 +10695,7 @@ "cells_total": 92, "cells_code": 31, "cells_markdown": 61, - "cells_with_outputs": 31, + "cells_with_outputs": 24, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -10719,7 +10719,7 @@ "cells_total": 53, "cells_code": 18, "cells_markdown": 35, - "cells_with_outputs": 18, + "cells_with_outputs": 14, "cells_without_outputs": 0, "requires_api": true, "requires_gpu": false, @@ -10743,8 +10743,8 @@ "cells_total": 72, "cells_code": 25, "cells_markdown": 47, - "cells_with_outputs": 21, - "cells_without_outputs": 4, + "cells_with_outputs": 18, + "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -10863,7 +10863,7 @@ "cells_total": 47, "cells_code": 16, "cells_markdown": 31, - "cells_with_outputs": 16, + "cells_with_outputs": 11, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -10983,7 +10983,7 @@ "cells_total": 44, "cells_code": 16, "cells_markdown": 28, - "cells_with_outputs": 16, + "cells_with_outputs": 11, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11007,7 +11007,7 @@ "cells_total": 52, "cells_code": 19, "cells_markdown": 33, - "cells_with_outputs": 19, + "cells_with_outputs": 16, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11031,7 +11031,7 @@ "cells_total": 77, "cells_code": 30, "cells_markdown": 47, - "cells_with_outputs": 30, + "cells_with_outputs": 27, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11056,7 +11056,7 @@ "cells_code": 12, "cells_markdown": 24, "cells_with_outputs": 11, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -11103,7 +11103,7 @@ "cells_total": 28, "cells_code": 9, "cells_markdown": 19, - "cells_with_outputs": 9, + "cells_with_outputs": 8, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11381,13 +11381,13 @@ "serie": "SymbolicAI", "sous_serie": "SmartContracts", "kernel": "Python (SmartContracts + Foundry)", - "status": "DEMO", + "status": "READY", "maturity": "PRODUCTION", "duree_estimee": "30min", "owner_logique": "po-2024", - "last_validation": "2026-05-30", + "last_validation": "2026-05-31", "last_validator": "jsboige@gmail.com", - "issue_pr_associee": "#1887", + "issue_pr_associee": "#1946, #1951", "cells_total": 26, "cells_code": 9, "cells_markdown": 17, @@ -11416,7 +11416,7 @@ "cells_code": 10, "cells_markdown": 25, "cells_with_outputs": 9, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -11439,7 +11439,7 @@ "cells_total": 38, "cells_code": 10, "cells_markdown": 28, - "cells_with_outputs": 10, + "cells_with_outputs": 9, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11464,7 +11464,7 @@ "cells_code": 9, "cells_markdown": 22, "cells_with_outputs": 8, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -11512,7 +11512,7 @@ "cells_code": 11, "cells_markdown": 30, "cells_with_outputs": 10, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -11536,7 +11536,7 @@ "cells_code": 10, "cells_markdown": 24, "cells_with_outputs": 9, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -11632,7 +11632,7 @@ "cells_code": 9, "cells_markdown": 24, "cells_with_outputs": 8, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -11656,7 +11656,7 @@ "cells_code": 5, "cells_markdown": 16, "cells_with_outputs": 4, - "cells_without_outputs": 1, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -11679,8 +11679,8 @@ "cells_total": 28, "cells_code": 5, "cells_markdown": 23, - "cells_with_outputs": 3, - "cells_without_outputs": 2, + "cells_with_outputs": 2, + "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, "requires_cloud": false, @@ -11703,7 +11703,7 @@ "cells_total": 38, "cells_code": 12, "cells_markdown": 26, - "cells_with_outputs": 12, + "cells_with_outputs": 11, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11727,7 +11727,7 @@ "cells_total": 41, "cells_code": 15, "cells_markdown": 26, - "cells_with_outputs": 15, + "cells_with_outputs": 14, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11799,7 +11799,7 @@ "cells_total": 31, "cells_code": 10, "cells_markdown": 21, - "cells_with_outputs": 10, + "cells_with_outputs": 7, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11823,7 +11823,7 @@ "cells_total": 40, "cells_code": 13, "cells_markdown": 27, - "cells_with_outputs": 13, + "cells_with_outputs": 11, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11847,7 +11847,7 @@ "cells_total": 38, "cells_code": 16, "cells_markdown": 22, - "cells_with_outputs": 15, + "cells_with_outputs": 14, "cells_without_outputs": 0, "requires_api": true, "requires_gpu": false, @@ -11871,7 +11871,7 @@ "cells_total": 40, "cells_code": 15, "cells_markdown": 25, - "cells_with_outputs": 15, + "cells_with_outputs": 14, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11895,7 +11895,7 @@ "cells_total": 51, "cells_code": 17, "cells_markdown": 34, - "cells_with_outputs": 17, + "cells_with_outputs": 16, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11919,7 +11919,7 @@ "cells_total": 40, "cells_code": 14, "cells_markdown": 26, - "cells_with_outputs": 14, + "cells_with_outputs": 13, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11943,7 +11943,7 @@ "cells_total": 34, "cells_code": 11, "cells_markdown": 23, - "cells_with_outputs": 11, + "cells_with_outputs": 10, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -11991,7 +11991,7 @@ "cells_total": 23, "cells_code": 8, "cells_markdown": 15, - "cells_with_outputs": 7, + "cells_with_outputs": 6, "cells_without_outputs": 1, "requires_api": false, "requires_gpu": false, @@ -12015,7 +12015,7 @@ "cells_total": 33, "cells_code": 10, "cells_markdown": 23, - "cells_with_outputs": 10, + "cells_with_outputs": 9, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -12039,7 +12039,7 @@ "cells_total": 17, "cells_code": 6, "cells_markdown": 11, - "cells_with_outputs": 6, + "cells_with_outputs": 5, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -12063,7 +12063,7 @@ "cells_total": 21, "cells_code": 6, "cells_markdown": 15, - "cells_with_outputs": 5, + "cells_with_outputs": 4, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, @@ -12087,7 +12087,7 @@ "cells_total": 21, "cells_code": 7, "cells_markdown": 14, - "cells_with_outputs": 6, + "cells_with_outputs": 5, "cells_without_outputs": 0, "requires_api": false, "requires_gpu": false, diff --git a/MyIA.AI.Notebooks/Sudoku/Sudoku-10-ORTools-Csharp.ipynb b/MyIA.AI.Notebooks/Sudoku/Sudoku-10-ORTools-Csharp.ipynb index ed82069f0..7b9200b6e 100644 --- a/MyIA.AI.Notebooks/Sudoku/Sudoku-10-ORTools-Csharp.ipynb +++ b/MyIA.AI.Notebooks/Sudoku/Sudoku-10-ORTools-Csharp.ipynb @@ -1847,6 +1847,32 @@ "Console.WriteLine($\"TODO: Implementez NQueensCPSATSolver.CountSolutions() pour le probleme des {N}-Reines\");" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## Résumé et perspectives\n", + "\n", + "Dans ce notebook, nous avons exploré trois approches de résolution de Sudoku avec Google OR-Tools :\n", + "\n", + "| Approche | Variables | Points forts | Limites |\n", + "|----------|-----------|--------------|----------|\n", + "| **CSP classique** | 81 IntVar | Paramétrage riche (stratégies de sélection) | Performances variables selon la stratégie |\n", + "| **CP-SAT** | 81 IntVar | Moteur SAT moderne (CDCL), généralement le plus rapide | Moins de paramètres d'exploration |\n", + "| **MIP (binaire 3D)** | 729 Variable | Formulation généralisable à l'optimisation | Surdimensionné pour la satisfaction pure |\n", + "\n", + "**Points clés à retenir** :\n", + "\n", + "1. **Le choix du solveur et de ses paramètres** a un impact majeur sur les performances\n", + "2. **CP-SAT** est le solveur recommandé par Google pour les nouveaux projets de satisfaction de contraintes\n", + "3. **La formulation 3D binaire** du MIP (729 variables) est transposable à d'autres problèmes d'optimisation\n", + "4. **Les stratégies de sélection** (`CHOOSE_MIN_SIZE_*`) sont analogues aux heuristiques MRV/LCV vues en recherche classique\n", + "\n", + "**Pour aller plus loin** : Explorer les solveurs MIP commerciaux (Gurobi, CPLEX) via OR-Tools, ou appliquer OR-Tools aux variantes Sudoku (diagonales, irrégulières).\n" + ] + }, { "cell_type": "markdown", "id": "4b8e695f", @@ -1912,4 +1938,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Sudoku/Sudoku-12-Z3-Csharp.ipynb b/MyIA.AI.Notebooks/Sudoku/Sudoku-12-Z3-Csharp.ipynb index fa3850f29..50047b3f8 100644 --- a/MyIA.AI.Notebooks/Sudoku/Sudoku-12-Z3-Csharp.ipynb +++ b/MyIA.AI.Notebooks/Sudoku/Sudoku-12-Z3-Csharp.ipynb @@ -1240,6 +1240,33 @@ "// Console.WriteLine($\"Puzzle minimal : {minimal}\");" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## Synthèse et points clés\n", + "\n", + "Ce notebook a présenté la résolution de Sudoku avec Z3, un solveur SMT (Satisfiability Modulo Theories), à travers quatre implémentations :\n", + "\n", + "| Solveur | Représentation | Approche | Complexité |\n", + "|---------|----------------|----------|-------------|\n", + "| **Z3IntSolverSimple** | Entiers 32 bits | Solver direct | Simple, facile à comprendre |\n", + "| **Z3BitVectorSolverSimple** | Vecteurs 4 bits | Solver direct | Optimisé pour valeurs 1-9 |\n", + "| **Z3BitVectorSolverSubstitution** | Vecteurs 4 bits | Substitution | Réutilise les contraintes génériques |\n", + "| **Z3BitSub_Tactic** | Vecteurs 4 bits | Tactiques | Pré-traitement automatique |\n", + "\n", + "**Conclusion** :\n", + "\n", + "1. **Z3** est un solveur déclaratif : on spécifie les contraintes (Distinct, domaine), pas l'algorithme de recherche\n", + "2. **Les vecteurs de bits** (4 bits) sont plus compacts que les entiers 32 bits pour le domaine [1-9]\n", + "3. **L'API de substitution** permet de réutiliser les contraintes génériques entre puzzles, évitant de les reconstruire\n", + "4. **Les tactiques** (simplify, bit-blast) offrent un contrôle fin sur la stratégie de résolution\n", + "\n", + "**Pour aller plus loin** : Explorer les tactiques avancées de Z3, ou comparer avec les approches CSP (OR-Tools) et automates symboliques (Sudoku-13).\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1282,4 +1309,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/MyIA.AI.Notebooks/Sudoku/Sudoku-13-SymbolicAutomata-Csharp.ipynb b/MyIA.AI.Notebooks/Sudoku/Sudoku-13-SymbolicAutomata-Csharp.ipynb index 8b98a1c01..7da953627 100644 --- a/MyIA.AI.Notebooks/Sudoku/Sudoku-13-SymbolicAutomata-Csharp.ipynb +++ b/MyIA.AI.Notebooks/Sudoku/Sudoku-13-SymbolicAutomata-Csharp.ipynb @@ -4336,6 +4336,34 @@ "L'anti-diagonale contient les cellules (0,8), (1,7), ..., (8,0)." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## Résumé : des automates symboliques aux contraintes SMT\n", + "\n", + "Ce notebook a exploré le chemin de la théorie des automates symboliques vers l'implémentation pratique via Z3 :\n", + "\n", + "| Étape | Concept | Mise en œuvre |\n", + "|-------|---------|----------------|\n", + "| 1 | **Prédicats symboliques** | CharSet (Range, Or, And, Not) |\n", + "| 2 | **Automates symboliques** | États + transitions avec prédicats |\n", + "| 3 | **Opérations d'automates** | Union, intersection, complément |\n", + "| 4 | **Compilation vers SMT** | Contraintes Distinct + domaine [1-9] |\n", + "| 5 | **Résolution** | SAT solving avec Z3 |\n", + "\n", + "**Points clés à retenir** :\n", + "\n", + "1. Les automates symboliques généralisent les automates classiques avec des transitions basées sur des prédicats logiques\n", + "2. Le produit d'automates (intersection) se compile naturellement en une conjonction de contraintes Z3\n", + "3. L'approche hybride (automates + Z3) combine l'intuition théorique avec la performance du SAT solving\n", + "4. Pour Sudoku, la compilation directe vers Z3 est plus pragmatique qu'une implémentation pure d'automates\n", + "\n", + "**Perspectives** : Le notebook Sudoku-14 explore les BDD (Binary Decision Diagrams) comme alternative pure aux automates.\n" + ] + }, { "cell_type": "markdown", "id": "3a829efd", diff --git a/MyIA.AI.Notebooks/Sudoku/Sudoku-15-Infer-Csharp.ipynb b/MyIA.AI.Notebooks/Sudoku/Sudoku-15-Infer-Csharp.ipynb index 44a02ef9b..04f711816 100644 --- a/MyIA.AI.Notebooks/Sudoku/Sudoku-15-Infer-Csharp.ipynb +++ b/MyIA.AI.Notebooks/Sudoku/Sudoku-15-Infer-Csharp.ipynb @@ -40490,6 +40490,32 @@ "// var result = SudokuHelper.SolveSudoku(testGrid, improvedSolver);" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## Synthèse : programmation probabiliste appliquée au Sudoku\n", + "\n", + "Ce notebook a démontré l'utilisation d'Infer.NET pour résoudre des Sudoku via la programmation probabiliste :\n", + "\n", + "| Approche | Modèle | Performance | Intérêt principal |\n", + "|----------|--------|-------------|---------------------|\n", + "| **Variables aléatoires** | Distribution uniforme [1-9] | Modérée | Modélisation naturelle de l'incertitude |\n", + "| **Inférence par élimination** | Factorisation + messages | Bonne | Exploite la structure du problème |\n", + "| **Précompilation** | Modèle compilé | Améliorée | Optimisation pour résolutions multiples |\n", + "\n", + "**Conclusion** :\n", + "\n", + "1. **Infer.NET** offre une perspective originale sur le Sudoku : chaque cellule est une variable aléatoire, et la résolution est une inférence probabiliste\n", + "2. **La précompilation du modèle** améliore significativement les performances pour les résolutions répétées\n", + "3. **L'approche probabiliste** généralise naturellement aux Sudoku partiellement remplis ou avec des indices incertains\n", + "4. **Comparé aux solveurs déterministes** (backtracking, CSP, SMT), l'inférence probabiliste est moins performante mais offre une modélisation plus riche\n", + "\n", + "**Pour aller plus loin** : Explorer les modèles de mélanges gaussiens avec Infer.NET, ou combiner inférence probabiliste et propagation de contraintes (approche hybride).\n" + ] + }, { "cell_type": "markdown", "metadata": {},