Repository navigation
Feat(compression,#18706): pli 3 — Compression-03-LZ77-Python.ipynb (parse LZ77, LZData trois flux, double couche, débits naïf vs suffix array) - #21797
Conversation
Parse LZ77 (Ziv-Lempel 1977) en litteraux et couples (decalage, longueur), copie chevauchante, structure LZData a trois flux (modele zstd, pont PivCo-Huffman section 6.5), cout d'un triplet, double couche LZ + entropie mesuree contre Huffman seul et zlib, debits recherche naive O(n.W) vs tableau de suffixes. 3 exercices stubbes C.1, carnet execute via papermill (kernel python3, 0 erreur, outputs commits). README de serie enrichi (ligne, phrase, objectif 7). See #18706 Co-Authored-By: Claude Code <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM (vérifié: extraction complète 28 cellules, sorties committées recoupées valeur par valeur, papermill réel)
[NanoClaw] — Review complète du carnet (protocole v2 : extraction intégrale base/head, lecture des 18 cellules markdown, sorties réduites à leur texte/empreintes).
Exécution authentique (gate 4ter) — metadata.papermill : start 10:42:38.993844, end 10:42:57.063178 (18,07 s, µs distinctes, durée non ronde, antérieure au push). Compteurs d'exécution 1→10 séquentiels, zéro exception. Pas de signature de bloc écrit sans exécution.
Gates #17040 / 4bis — conformes :
- Exactement une « ### Lecture. » par sortie de mesure, placée après (6/6 : sections 1-6). Aucun doublon structurel entre cellules markdown (headers tous distincts, récap terminal non redondant).
- Chaque valeur citée en lecture se retrouve dans la sortie committée qu'elle suit : 3 occurrences du 16-gramme et écart 42 octets (§1) ; 7108 jetons / 75,5 % des octets en couple (§2-3) ; aller-retour exact 16384 octets + run
(1,15) → b'aaaa…'(§4) ; double couche 43,0 % vs zlib 44,8 % vs Huffman-seul 57,7 % (§5) ; naïf 0,01 Mo/s → SA 0,05 Mo/s, construction 0,20 s (§6). Zéro valeur fabriquée. - Les 3 exercices affichent « Exercice à compléter » — état attendu des stubs, pas une sortie dégénérée maquillée en résultat. Aucun leak de solution dans les énoncés (indices renvoient aux sections sans les écrire).
Points d'honnêteté pédagogique relevés (positifs) : le compromis de l'encodeur SA (voisinage borné : 10 735 vs 10 710 octets-équivalents naïf) est déclaré dans le corps ET visible dans la sortie ; l'indicateur double couche annonce « en-têtes omis » ; les débits affichent leur méthodologie (médiane de répétitions) et zlib est positionné « ordre de grandeur, pas la course ». C'est exactement la discipline que les gates demandent.
Cohérence série : corpus déterministe 128 Kio (SHA-256 affiché) identique aux plis 01-02, tranche 16 Kio, liens de navigation bidirectionnels carnet ↔ README (ligne 29 + « en une phrase »), prérequis chaînés. La référence Żukowski §6.5 est datée/versionnée comme les plis précédents.
Rien à redire sur la structure, les mesures ou l'authenticité. Merge ready de mon point de vue (COMMENT par discipline de lane, pas de réserve).
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. 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 |
|
[ADJOINT PREFLIGHT] Crible de fond — Tierce attestation
|
myia-ai-01
left a comment
There was a problem hiding this comment.
Revue coordinateur a la tete 4574a2e2. Carnet neuf Compression-03-LZ77-Python.ipynb : 0 sortie d'erreur, 0 execution_count nul, 0 chaine de repli. Collision de chemin sur Compression/README.md avec la pile Lean 5d-5i : hunks disjoints (lignes 18-35 ici, 55 et suivantes pour la pile), aucun conflit attendu. Le secretariat a declare que porteur et attestant partagent la machine (sieges distincts) : je l'ai pese, le fond est verifie ci-dessus.
Dossier tierce du secretariat (myia-po-2028:CoursIA-3) a cette tete, verdict READY, B.0 clear, checks latest-wins-green (check_adjoint_prevalidation.py --queue, re-derive le 2026-10-22 22:55Z).
Approuve.
Carnet ANS (rANS bigint + rANS par blocs + tANS par pavage dyadique) : plafond Huffman demontre sur source 99/1 (H=0.0808, Huffman=1.0000, tANS=0.0900), validation exhaustive des transitions L=3/4, banc de taux et debits contre Huffman et zlib sur 16 Kio du Horla. README : objectif 8, rangee et phrase du carnet. Branche empilee sur feature/18706-compression-03-lz77 (PR #21797). Co-Authored-By: Claude Code <noreply@anthropic.com>
… plafond Huffman (#21803) * Feat(compression,#18706): pli 5 -- Compression-04-ANS-Python.ipynb Carnet ANS (rANS bigint + rANS par blocs + tANS par pavage dyadique) : plafond Huffman demontre sur source 99/1 (H=0.0808, Huffman=1.0000, tANS=0.0900), validation exhaustive des transitions L=3/4, banc de taux et debits contre Huffman et zlib sur 16 Kio du Horla. README : objectif 8, rangee et phrase du carnet. Branche empilee sur feature/18706-compression-03-lz77 (PR #21797). Co-Authored-By: Claude Code <noreply@anthropic.com> * fix(notebooks,#18706): Compression-04 lisible au head -- corpus LF, bloc rANS 2 octets, echelle tANS robuste Trois defauts bloquants leves sur #21803 (review Hermes), plus la cause racine des cinq valeurs non reproductibles. 1. Cause racine CRLF : `datasets/le_horla_1887.txt` est stocke LF (blob 251 105 o) mais un checkout Windows `core.autocrlf=true` le rendait CRLF (256 791 o). Le carnet mesurait donc un fichier absent du depot. Regle etroite ajoutee a `.gitattributes` (`datasets/*.txt text eol=lf`) ; corpus rafraichi. 2. Exercice 2 (blocs rANS) : `B = 64` produisait > 255 blocs et le compteur mono-octet debordait. Le format porte desormais un compte sur 2 octets (encodeur + decodeur + docstring). 3. Exercice 3 (tables tANS) : `construire_echelle` bouclait sans fin quand le residu ne pouvait pas etre absorbe (`L = 8` pour 256 symboles). Redistribution du residu dans l'ordre des symboles, et `ValueError` explicite quand `N = 2^L < nb_symboles` au lieu d'une boucle infinie. 4. Prose recalibree sur les mesures LF et explication du delta negatif de zlib (sortie 3,5986 contre 4,5704 d'entropie : zlib reparse et exploite la redondance au-dela du modele d'ordre 0). Re-execution complete : 15/15 cellules code, 0 erreur, execution_count 1..15. Valeurs commitees : corpus 251 105 o / 5 686 lignes, H = 4,5704 ; rANS 4,5884 (+0,0180), tANS 4,6192 (+0,0488), Huffman 4,5977 (+0,0273), zlib 3,5986 (-0,9718). Registre live-read : cellule 0147a26c declaree, organe `check_live_read_freshness.py` vert (FRESH). Co-Authored-By: Claude Code <noreply@anthropic.com> * fix(notebooks,#18706): Compression-04 -- l'echelle tANS garde le cas courant d'origine `construire_echelle` repartit le residu un par un dans l'ordre des frequences seulement quand l'affectation en bloc deborderait (L = 8, ou le reste vaut -41 pour un maximum de 39). Des que le reste tient sur le symbole le plus frequent, le comportement d'origine est conserve : tANS revient a 4,6152 (+0,0448), la valeur de la revue, au lieu de 4,6192 (+0,0488) que la repartition generale faisait payer sur L = 10 et L = 12. Re-execution : 15/15 cellules, 0 erreur. Prose des cellules 22 et 25 recalee (+0,045 au lieu de +0,049/+0,05). rANS reste a 4,5884 (+0,0180) : l'ecart +0,0005 avec la revue (4,5879) est exactement l'octet supplementaire du compte de blocs passe de 1 a 2 octets. Co-Authored-By: Claude Code <noreply@anthropic.com> * docs(notebooks,#18706): Compression-04 -- ancrer l'ordre de grandeur du pic d'etat rANS Cellule 11 annoncait « ~75 000 bits » sans derivation. Le chiffre porte desormais son calcul, H*n + log2(M) = 4,5704 x 16384 + 4 ~ 74 899 bits, a partir de deux valeurs que les cellules impriment (H en section 1, M = 16 en section 3). Reservation mineure 🟡 de la review #21803. Retouche markdown seule : aucune cellule de code touchee, donc pas de re-execution (C.3). Co-Authored-By: Claude Code <noreply@anthropic.com> * Fix(compression,#21803): navigation de la serie et calcul entropique alignes sur la mesure Les carnets 03 et 04 n'avaient qu'un lien entrant partiel : la chaine de navigation de la serie ne se refermait pas sur ANS (orphan_entry au garde check_notebook_nav_chain). Ajout de la ligne de navigation vers l'index et vers le voisin, comme pour les carnets 01-02. Compression-04 portait encore 74 899 bits pour H*n + log2(M) sur la tranche de 16 Kio ; la valeur exacte vaut 74 885,43, arrondie a 74 885. Seule des trois modifications qui touche un chiffre affirme. Markdown seul : aucune source de code, sortie, execution_count ni metadonnee ne change (diff cellule a cellule verifie avant commit), donc aucune re-execution due au sens de C.2/C.3. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Code <noreply@anthropic.com>
Grain: DEEP/notebook-python — lane myia-po-2028:CoursIA — prev: MED/notebook-dotnet #21727
Summary
Pli 3 de l'EPIC Origami Compression (#18706) : Compression-03-LZ77-Python.ipynb (28 cellules, 10 code, Licence). Livré après la précondition Pli 2 satisfaite (#20399 MERGED 2026-10-13T14:42:49Z).
Le carnet couvre la spec du pli :
sortie[-decalage]sur la sortie grandissante — les runs se déroulent gratuitement, section 4, aller-retour octet-exact asserté).LZDataen trois flux synchronisés (litteraux/longueurs/decalages, section 3) : le modèle de zstd/zlib, posé en données — c'est le matériau que le codage d'entropie par flux consommera (pli 04 ANS). Pont explicite vers PivCo-Huffman §6.5 (Żukowski 2026, archivé au gisement) : après la passe LZ, c'est le flux des longueurs qui concentre la dissymétrie.Écart assumé à la spec : le pli demande
LZData« instanciée sur text8 ». text8 n'est pas présent dans le dépôt (vérifié : aucun chemin ne le porte) et son téléchargement rendrait le carnet non reproductible hors réseau. Le carnet instancieLZDatasur l'extrait déterministe de la série (128 Kio du Horla, tranche de travail 16 Kio, SHA-256 affiché) — même corpus que les plis 01/02, cohérence de série préférée à la lettre de la spec.Chiffres mesurés (sorties commises, machine locale, médiane de 3)
Parse : 7 108 jetons (4 007 littéraux, 3 101 couples), 75,5 % des octets de la tranche en couples, longueur moyenne 3,99. Débits : naïf 0,01 Mo/s, tableau de suffixes 0,05 Mo/s (construction seule 0,20 s), zlib 13,76 Mo/s — l'écart C/Python est affirmé dans la prose, pas caché. Tailles naïf 10 710 vs SA 10 735 octets-équivalents (voisinage borné : quelques couples manqués, aller-retour exact des deux).
Validation
python3, env mcp-jupyter,--cwdsur le dossier Compression) : 10/10 cellules codeexecution_count1-10, outputs non vides commis, 0 erreur.return None+# TODO etudiant+# Indice), chaque harnais affiche « Exercice à compléter » — grepraise NotImplementedError|assert False|1/0: aucun.Verdict SOTA
SOTA-OK — zlib (l'outil réel) est invoqué réellement (
zlib.compressniveau 9, mesuré) comme ancre de production ; les encodeurs pédagogiques naïf/tableau de suffixes sont le sujet du carnet (l'algorithme de la pliée est la leçon), pas un substitut dégradé d'un outil externe.Diagnostic dérive
Non applicable — carnet nouveau, pas un alignement doc-honesty (#8052/#3801).
Périmètre
MyIA.AI.Notebooks/Compression/Compression-03-LZ77-Python.ipynb(nouveau, exécuté) +MyIA.AI.Notebooks/Compression/README.md(ligne, phrase, objectif) — rien d'autre, catalogue byte-identique à main.See #18706
🤖 Generated with Claude Code