Repository navigation
Fix(GameTheory): ponts PythonNet de GT-06, GT-07, GT-13 et GT-17 sous Linux et macOS (hors flotte) - #18774
Conversation
… Linux et macOS Les quatre notebooks C# chargent CPython par pythonnet pour invoquer axelrod ou pyspiel. Hors du CPython Windows du poste de la flotte, ils s'arretaient : chemin C:\ code en dur (GT-07, GT-13, GT-17), ou, pour GT-06, une bibliotheque libpython prise sans verifier qu'elle importe axelrod. La recherche existante est conservee ; quand elle ne designe aucun fichier, le premier interpreteur (python3, puis python) qui importe le module fournit sa bibliotheque, son prefixe et son sys.path, environnement virtuel compris. Notebooks re-executes sous Linux. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VuVMY5fhzd5cQhzHiyvjka
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
|
Le rouge du
C'est la classe décrite dans #18225 (transport HTTPS bloqué sur un runner auto-hébergé de po-2026), indépendante du diff. Il n'existe pas encore de correctif à porter : #18225 est ouverte et aucune PR n'y est liée. Le contrôle passe sur cette tête, mesuré localement : Relance : cette session n'en a pas le droit ( gh run rerun 36935795113 --failedJe garde la PR sous surveillance jusqu'au vert. Generated by Claude Code |
|
Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine. Le label Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans Seuil, historique et exceptions : cf. |
|
[ADJOINT PREFLIGHT] note: Dossier c384 sur PR #18774 (Fix(GameTheory): ponts PythonNet de GT-06, GT-07, GT-13 et GT-17 sous Linux et macOS). Hors flotte : PR de la session cloud d'agnosticisme du mainteneur (branche |
Hors flotte : PR de la session cloud d'agnosticisme du mainteneur (branche
claude/*, exemption #17713, rôle décrit dansdocs/reference/agent-cloud-agnosticisme.md). Pas de tagGrain:, pas de lane. See #17654, sous l'EPIC de parité Linux #10643. Suite de #18694 (ponts Gambit et nashpy de GameTheory, mergée).Summary
PYTHONNET_PYDLL, sinon un cheminC:\…\python31x.dllcodé en dur ;libpython3.*venue, sans vérifier qu'elle importe axelrod.PYTHONNET_PYDLLnon définie, versions demain:mainPythonException: No module named 'axelrod'(lalibpython3.13prise n'a pas axelrod)DllNotFoundException: Could not load C:\Users\…\Python311\python311.dllDllNotFoundException: Could not load C:\Python313\python313.dllDllNotFoundException: Could not load C:\Python313\python313.dllChanges
Code, dans la cellule du pont de chaque notebook :
PYTHONNET_PYDLL, puis le CPython Windows du poste de la flotte (GT-07, GT-13, GT-17), ou la recherche Windows de GT-06 (installationsLOCALAPPDATA, racines Conda, dépendances natives).InitPythonFromInterpreter(module)prend le relais :python3puispython, qui importe le module visé (axelrodoupyspiel) ;sysconfig, sa bibliothèque partagée (libpython3.x.sosous Linux,libpython3.x.dylibsous macOS,python3xx.dllsous Windows), son préfixe et sonsys.path;sys.path: un module installé dans un environnement virtuel est donc trouvé.libpython3.*est remplacée par ce repli. C'est elle qui chargeait un CPython sans axelrod.Markdown, dans l'annexe de chaque pont (GT-06 cellule 43, GT-07 cellule 29, GT-13 cellule 28, GT-17 cellule 24) : les prérequis et la « Rejouabilité » décrivent le repli. Elles disaient de positionner
PYTHONNET_PYDLLsur toute autre machine. Dans GT-17, la phrase réécrite reprend ses accents.Registre de parité jumelle : les quatre notebooks appartiennent chacun à une paire. Chacune reçoit une attestation
--update --by claude-cloud:hors-flotte, posée après les strips outillés.Le diff compte 8 fichiers : les 4 notebooks et les 4 attestations (6 lignes chacune).
Diagnostic dérive
Comparaison cellule par cellule entre la base (flotte, Windows) et cette tête (clone vierge Linux), sur le texte des sorties, CRLF normalisés.
language_info.versionest inchangé (13.0).Installing→Installed Packages pythonnet, 3.1.0) et version de CPythonpyspiel 2.0.1;0.008226(GT-13) ;gains=[-2, 2](GT-17).Exécuté sous
LANG=fr_FR.UTF-8, avecopen_spiel 2.0.1(la version des sorties de la base),axelrod 4.14.0, CPython 3.11 dans un environnement virtuel.Verdict SOTA : SOTA-OK. Les vrais moteurs (axelrod, OpenSpiel) s'exécutent depuis .NET par pythonnet. Il n'y a ni substitution ni réimplémentation.
Organe-first. Rien n'est réimplémenté. La fonction ajoutée est une copie par notebook, comme la fonction
ResolvePythonDlldes notebooks MGS-22 à MGS-30. Proposition, laissée à l'arbitrage du mainteneur : 21 notebooks C# chargent CPython par pythonnet, chacun avec sa propre recherche. Un fichier partagé chargé par#loadavec un chemin relatif explicite, sur le modèle deSvgChartHelper.cs, les alignerait tous. Il faut d'abord lui choisir un emplacement dans l'arbre.Review Checklist
validate_pr_notebooks.py origin/main: PASS ;check_output_failure_text.py origin/main: 0 regressed ;check_output_collapse.pyetcheck_source_collapse.py: 0 flagged ;check_kernel_drift.py origin/main: 0 regression ;check_prose_quantitative_claims.py --diff origin/main...HEAD --strict: OK ;scripts/check_docs_links.py --check --base origin/main: 0 nouveau lien cassé ;check_cell_source_parses.py --target-py 3.12 --pr-diff origin/main HEAD: 0 finding ;check_twin_parity.py --per-pair --base origin/main --check: INTRO=0 ;check_twin_parity.py --verify-recorded-sha: les quatre paires de la PR sont OK. Les 10 MISMATCH listés concernent d'autres paires et sont antérieurs à la PR ;check_factual_mislabel.py: 0 anomalie.check_stale_claims.py: 0 sur GT-06, GT-13 et GT-17 ; 1 sur GT-07 (cellule 31, « écart résiduel ~0,0015 »), identique sur la base ;check_split_reading_cells.py: clean ;check_interp_positioning.py: 0 ;strip_machine_paths.py --scan: 0 ;check_machine_dep_timing.pyetscripts/check_markdown_claims_output.py: mêmes résultats sur la base et sur la tête.notebook_tools.py execute <nb> --kernel .net-csharpsous Linux (dotnet-interactive 1.0.617701,PYTHONNET_PYDLLnon définie, donc par le repli) : exec_count 1 à 16, 1 à 11, 1 à 11 et 1 à 12, 0 erreur. Puisstrip_probe_banner.py --applyetscrub_papermill_paths.py --apply.Anti-regression
libpython3.*trouvée). Sur un clone vierge, elle chargeait un CPython sans axelrod ; le repli la remplace.Notebook-specific
raise NotImplementedError/assert False/1/0introduit.execution_countet des sorties cohérentes.Test plan
Sur un poste Linux ou macOS, avec .NET 9,
dotnet-interactive 1.0.617701et un environnement Python oùpip install open_spiel axelroda été exécuté,python3désignant son interpréteur :La cellule du pont doit afficher
CFR(kuhn_poker, 100 iters) : exploitabilite = 0.008226puisPONT .NET -> OpenSpiel CFR : OK. Surmain, elle s'arrête surDllNotFoundException. Même essai pour GT-06, GT-07 et GT-17.Hors de cette PR :
Microsoft.Z3(4.12.2, dernière version publiée) ne contient pas de bibliothèque native Linux (runtimes/n'a quewin-x64etosx-x64). Les notebooks Z3.Linq contournent cela avecscripts/environment/z3-build-deploy.sh, pas ceux qui chargentMicrosoft.Z3directement. Ce sera une PR distincte.Environnement de mesure : conteneur Linux x64, 4 threads, clone vierge, hors flotte.
🤖 Generated with Claude Code
https://claude.ai/code/session_01VuVMY5fhzd5cQhzHiyvjka
Generated by Claude Code