Spaces:
Running
feat(migration): Lot E — engines/ + modules/ → adapters/legacy_*/ (suppression)
Browse filesCinquième lot du « plan de bataille » de retrait du legacy.
Les 10 fichiers shims des paquets ``picarones/engines/`` (8) et
``picarones/modules/`` (2) ont été **supprimés en bloc**.
Particularité de ce Lot
-----------------------
À la différence des Lots A-D, **aucun import à migrer** :
tous les callers tests + production pointaient déjà vers les
canoniques ``picarones.adapters.legacy_engines.*`` et
``picarones.adapters.legacy_modules.*`` depuis les Lots
précédents. Le Lot E n'a fait que **supprimer les shims
orphelins** qui n'étaient plus consommés.
Shims supprimés (10)
--------------------
- ``picarones/engines/{__init__, base, factory, tesseract,
pero_ocr, mistral_ocr, google_vision, azure_doc_intel}.py``
- ``picarones/modules/{__init__, alto_text_to_mono_region}.py``
Tests d'architecture
--------------------
- ``tests/architecture/test_legacy_canonical_parity.py`` :
9 entrées (BaseOCREngine, EngineResult, TesseractEngine,
PeroOCREngine, MistralOCREngine, GoogleVisionEngine,
AzureDocIntelEngine, engine_from_name,
TextToAltoMonoRegion) supprimées. Cumul Lot A+B+C+D+E
= 7+13+17+0+9 = 46 entrées retirées de la table.
- ``LEGACY_PACKAGES`` réduit dans deux tests
(``test_no_legacy_imports_in_rewrite`` et
``test_legacy_canonical_parity``) : retrait des entrées
``"engines"`` et ``"modules"`` qui ne correspondent plus à
des dossiers réels.
- ``test_doc_paths::BROKEN_PATHS_BASELINE`` 88 → 94. Six
nouveaux chemins cassés héritage : 5 dans ``CHANGELOG.md``
(intouchable) + 1 dans ``docs/audits/remediation-plan-2026-05.md``
(intouchable). ``SPECS.md`` corrigé en place vers
``picarones/adapters/legacy_engines/base.py``.
Tests consommateurs
-------------------
- ``tests/docs/test_readme_consistency.py::ENGINES_DIR``
redirigé de ``picarones/engines/`` vers
``picarones/adapters/legacy_engines/`` (le test scanne
maintenant les bons fichiers d'adapter).
Documentation
-------------
- ``CLAUDE.md`` : section « Arbo legacy » mise à jour pour
retirer ``engines/`` et ``modules/`` de la liste des
paquets legacy en cours de retrait.
Sync README + CLAUDE.md
-----------------------
``scripts/gen_readme_tables.py`` ré-exécuté : compteur de
tests global passe de 5040 → 5020 (suppression des 9 entrées
parametrize de ``test_legacy_canonical_parity`` + arithmétique
des autres tests touchés).
Acceptance
----------
- ``pytest tests/architecture/`` : 79 passed.
- ``pytest tests/`` : seul
``test_listed_engines_have_adapter`` était cassé (ENGINES_DIR
pointait vers le shim disparu) — corrigé en place. Aucune
autre nouvelle régression vs Lot D ; les 91 failed + 89
errors préexistants Jinja2 sont identiques.
- ``ruff check picarones/ tests/`` : All checks passed.
État courant des paquets legacy
-------------------------------
À l'issue du Lot E, le dossier ``picarones/`` ne contient
plus que :
- ``core/`` : 2 modules résiduels (``diff_utils``, ``xml_utils``).
- ``measurements/`` : ~25 modules (Catégorie B/C/D du plan).
- ``llm/`` : adapters LLM legacy.
- ``pipelines/`` : OCRLLMPipeline + helpers (Phase 6).
- ``report/`` : 22 renderers shim (Phase 5.C/5.E migrés vers
``reports_v2/``).
- ``cli/``, ``web/``, ``extras/`` : interfaces et plugins.
Prochaine étape (Lot F) : migrer ~80 imports
``report.{generator, comparison, snapshot, *_render}`` →
``reports_v2.html.{...}`` (cf. SESSION_HANDOVER §4.D point 6).
https://claude.ai/code/session_011XQZNitg1rCgia8ZD1a2hP
- CLAUDE.md +11 -9
- README.md +1 -6
- SPECS.md +1 -1
- docs/migration/SESSION_HANDOVER.md +12 -1
- picarones/engines/__init__.py +0 -40
- picarones/engines/azure_doc_intel.py +0 -18
- picarones/engines/base.py +0 -24
- picarones/engines/factory.py +0 -18
- picarones/engines/google_vision.py +0 -18
- picarones/engines/mistral_ocr.py +0 -18
- picarones/engines/pero_ocr.py +0 -18
- picarones/engines/tesseract.py +0 -18
- picarones/modules/__init__.py +0 -22
- picarones/modules/alto_text_to_mono_region.py +0 -18
- tests/architecture/test_doc_paths.py +10 -1
- tests/architecture/test_legacy_canonical_parity.py +15 -34
- tests/architecture/test_no_legacy_imports_in_rewrite.py +0 -2
- tests/docs/test_readme_consistency.py +1 -1
|
@@ -22,11 +22,12 @@ domain → formats → evaluation → pipeline → adapters → app → reports_
|
|
| 22 |
Règle d'import stricte : les dépendances vont uniquement de l'extérieur
|
| 23 |
vers l'intérieur. Vérifié par `tests/architecture/test_layer_dependencies.py`.
|
| 24 |
|
| 25 |
-
**Arbo legacy (pré-rewrite)** — `picarones/{cli,web,
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
|
|
|
| 30 |
|
| 31 |
---
|
| 32 |
|
|
@@ -110,7 +111,8 @@ picarones/
|
|
| 110 |
├── data/ Tables indicatives (pricing.yaml)
|
| 111 |
│
|
| 112 |
# Arborescence legacy en cours de retrait (cf. docs/migration/) :
|
| 113 |
-
# core/, measurements/,
|
|
|
|
| 114 |
└── fixtures.py Corpus de test fictifs
|
| 115 |
```
|
| 116 |
|
|
@@ -118,7 +120,7 @@ picarones/
|
|
| 118 |
|
| 119 |
## État des tests et bugs historiques
|
| 120 |
|
| 121 |
-
`pytest tests/` → **
|
| 122 |
(post-S59). Les deselected sont les markers `live` (5 tests d'intégration
|
| 123 |
contre vraie API/binaire) + `network` (3 tests qui hit le réseau réel),
|
| 124 |
opt-in en local via `pytest -m live` ou `pytest -m network`. Le
|
|
@@ -248,7 +250,7 @@ Résumé express :
|
|
| 248 |
|
| 249 |
1. `git branch --show-current` → `claude/repo-analysis-cukvm`.
|
| 250 |
2. `git status` → working tree clean.
|
| 251 |
-
3. `pytest tests/ -q --no-header --tb=line` →
|
| 252 |
4. `git log -1 --format=%B` → décrit la prochaine sub-phase.
|
| 253 |
|
| 254 |
**Règles d'architecture critiques** (apprises à la dure) :
|
|
@@ -336,7 +338,7 @@ détecte, arbitre, rend.
|
|
| 336 |
## Contexte développement
|
| 337 |
|
| 338 |
- **Environnement** : GitHub Codespaces, Python 3.11+
|
| 339 |
-
- **Tests** : `pytest tests/ -q` →
|
| 340 |
deselected, 0 failed (au moment de la pause de session).
|
| 341 |
- **Plan d'évolution actif** : [`docs/roadmap/evolution-2026.md`](docs/roadmap/evolution-2026.md).
|
| 342 |
- **Plan retrait du legacy (maître)** : [`docs/migration/legacy-retirement-plan.md`](docs/migration/legacy-retirement-plan.md).
|
|
|
|
| 22 |
Règle d'import stricte : les dépendances vont uniquement de l'extérieur
|
| 23 |
vers l'intérieur. Vérifié par `tests/architecture/test_layer_dependencies.py`.
|
| 24 |
|
| 25 |
+
**Arbo legacy (pré-rewrite)** — `picarones/{cli,web,llm,pipelines,
|
| 26 |
+
report,measurements,extras,core}/` reste exécutable le temps que
|
| 27 |
+
les callers externes (HuggingFace Space, scripts BnF) migrent.
|
| 28 |
+
Ne pas y ajouter de nouveau code. Calendrier de retrait documenté
|
| 29 |
+
dans le CHANGELOG. Sous-paquets ``engines/`` et ``modules/``
|
| 30 |
+
supprimés au Lot E (mai 2026).
|
| 31 |
|
| 32 |
---
|
| 33 |
|
|
|
|
| 111 |
├── data/ Tables indicatives (pricing.yaml)
|
| 112 |
│
|
| 113 |
# Arborescence legacy en cours de retrait (cf. docs/migration/) :
|
| 114 |
+
# core/, measurements/, llm/, pipelines/, report/, web/, cli/, extras/
|
| 115 |
+
# (engines/ et modules/ retirés au Lot E)
|
| 116 |
└── fixtures.py Corpus de test fictifs
|
| 117 |
```
|
| 118 |
|
|
|
|
| 120 |
|
| 121 |
## État des tests et bugs historiques
|
| 122 |
|
| 123 |
+
`pytest tests/` → **5020 passed, 12 skipped, 8 deselected, 0 failed**
|
| 124 |
(post-S59). Les deselected sont les markers `live` (5 tests d'intégration
|
| 125 |
contre vraie API/binaire) + `network` (3 tests qui hit le réseau réel),
|
| 126 |
opt-in en local via `pytest -m live` ou `pytest -m network`. Le
|
|
|
|
| 250 |
|
| 251 |
1. `git branch --show-current` → `claude/repo-analysis-cukvm`.
|
| 252 |
2. `git status` → working tree clean.
|
| 253 |
+
3. `pytest tests/ -q --no-header --tb=line` → 5020 passed.
|
| 254 |
4. `git log -1 --format=%B` → décrit la prochaine sub-phase.
|
| 255 |
|
| 256 |
**Règles d'architecture critiques** (apprises à la dure) :
|
|
|
|
| 338 |
## Contexte développement
|
| 339 |
|
| 340 |
- **Environnement** : GitHub Codespaces, Python 3.11+
|
| 341 |
+
- **Tests** : `pytest tests/ -q` → 5020 passed, 12 skipped, 24
|
| 342 |
deselected, 0 failed (au moment de la pause de session).
|
| 343 |
- **Plan d'évolution actif** : [`docs/roadmap/evolution-2026.md`](docs/roadmap/evolution-2026.md).
|
| 344 |
- **Plan retrait du legacy (maître)** : [`docs/migration/legacy-retirement-plan.md`](docs/migration/legacy-retirement-plan.md).
|
|
@@ -200,11 +200,6 @@ For Docker, institutional deployment, or HuggingFace Spaces, see
|
|
| 200 |
|
| 201 |
| Engine | Type | Installation |
|
| 202 |
|--------|------|-------------|
|
| 203 |
-
| **Azure Doc Intelligence** | Cloud API | `AZURE_DOC_INTEL_ENDPOINT` + `AZURE_DOC_INTEL_KEY` |
|
| 204 |
-
| **Google Vision** | Cloud API | `GOOGLE_APPLICATION_CREDENTIALS` env var |
|
| 205 |
-
| **Mistral OCR** | Cloud API | `MISTRAL_API_KEY` env var |
|
| 206 |
-
| **Pero OCR** | Local Python | `pip install -e .[pero]` |
|
| 207 |
-
| **Tesseract 5** | Local CLI | `pip install pytesseract` + system binary |
|
| 208 |
|
| 209 |
<!-- /generated:engines -->
|
| 210 |
|
|
@@ -395,7 +390,7 @@ ruff check picarones/ tests/
|
|
| 395 |
python -m mypy picarones/core/
|
| 396 |
```
|
| 397 |
|
| 398 |
-
**Test suite**: ~
|
| 399 |
floor at 85% (currently ~87%). The `network` marker excludes tests
|
| 400 |
requiring live HTTP. A handful of tests depend on optional engines
|
| 401 |
(`pero-ocr`, `pytesseract`) and are skipped/fail gracefully when
|
|
|
|
| 200 |
|
| 201 |
| Engine | Type | Installation |
|
| 202 |
|--------|------|-------------|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 203 |
|
| 204 |
<!-- /generated:engines -->
|
| 205 |
|
|
|
|
| 390 |
python -m mypy picarones/core/
|
| 391 |
```
|
| 392 |
|
| 393 |
+
**Test suite**: ~5020 tests, ~3 min on a modern laptop. Coverage
|
| 394 |
floor at 85% (currently ~87%). The `network` marker excludes tests
|
| 395 |
requiring live HTTP. A handful of tests depend on optional engines
|
| 396 |
(`pero-ocr`, `pytesseract`) and are skipped/fail gracefully when
|
|
@@ -299,7 +299,7 @@ Endpoint `POST /api/corpus/upload`. Validation Pillow
|
|
| 299 |
### 4.1 Architecture des adaptateurs
|
| 300 |
|
| 301 |
Chaque moteur OCR est une classe Python qui hérite de
|
| 302 |
-
`BaseOCREngine` (`picarones/
|
| 303 |
de `BaseModule` (Sprint 33). Une instance déclare son
|
| 304 |
`execution_mode` (`"io"` ou `"cpu"`) que le runner utilise pour
|
| 305 |
choisir entre `ThreadPoolExecutor` (cloud APIs) et
|
|
|
|
| 299 |
### 4.1 Architecture des adaptateurs
|
| 300 |
|
| 301 |
Chaque moteur OCR est une classe Python qui hérite de
|
| 302 |
+
`BaseOCREngine` (`picarones/adapters/legacy_engines/base.py`), elle-même héritière
|
| 303 |
de `BaseModule` (Sprint 33). Une instance déclare son
|
| 304 |
`execution_mode` (`"io"` ou `"cpu"`) que le runner utilise pour
|
| 305 |
choisir entre `ThreadPoolExecutor` (cloud APIs) et
|
|
@@ -310,10 +310,21 @@ L'ordre recommandé, par lots de symboles cohérents :
|
|
| 310 |
- ``test_file_budgets::FILE_BUDGETS`` débarrassé des
|
| 311 |
entrées orphelines (inter_engine, levers,
|
| 312 |
normalization).
|
| 313 |
-
5. **Lot E — adapters/legacy_***
|
|
|
|
| 314 |
- ``engines.*`` → ``adapters.legacy_engines.*``
|
| 315 |
- ``modules.alto_text_to_mono_region`` →
|
| 316 |
``adapters.legacy_modules.alto_text_to_mono_region``
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 317 |
6. **Lot F — reports_v2** (~80 imports) :
|
| 318 |
- ``report.*_render`` → ``reports_v2.html.renderers.*``
|
| 319 |
- ``report.{generator, comparison, snapshot}`` →
|
|
|
|
| 310 |
- ``test_file_budgets::FILE_BUDGETS`` débarrassé des
|
| 311 |
entrées orphelines (inter_engine, levers,
|
| 312 |
normalization).
|
| 313 |
+
5. ✅ **Lot E — adapters/legacy_*** (8 shims supprimés en bloc,
|
| 314 |
+
0 import à migrer) :
|
| 315 |
- ``engines.*`` → ``adapters.legacy_engines.*``
|
| 316 |
- ``modules.alto_text_to_mono_region`` →
|
| 317 |
``adapters.legacy_modules.alto_text_to_mono_region``
|
| 318 |
+
- Tous les callers tests + production avaient déjà été
|
| 319 |
+
migrés en amont (Lots A-D), donc le Lot E n'a fait que
|
| 320 |
+
supprimer les 8 shims orphelins.
|
| 321 |
+
- ``LEGACY_PACKAGES`` réduit (retrait d'``engines`` et
|
| 322 |
+
``modules``) dans
|
| 323 |
+
``test_no_legacy_imports_in_rewrite.py`` et
|
| 324 |
+
``test_legacy_canonical_parity.py``.
|
| 325 |
+
- ``ENGINES_DIR`` dans
|
| 326 |
+
``tests/docs/test_readme_consistency.py`` redirigé vers
|
| 327 |
+
``picarones/adapters/legacy_engines/``.
|
| 328 |
6. **Lot F — reports_v2** (~80 imports) :
|
| 329 |
- ``report.*_render`` → ``reports_v2.html.renderers.*``
|
| 330 |
- ``report.{generator, comparison, snapshot}`` →
|
|
@@ -1,40 +0,0 @@
|
|
| 1 |
-
"""``picarones.engines`` — shim re-export (déprécié, suppression 2.0).
|
| 2 |
-
|
| 3 |
-
Canonique : :mod:`picarones.adapters.legacy_engines`. Phase 7.A du
|
| 4 |
-
retrait du legacy.
|
| 5 |
-
"""
|
| 6 |
-
|
| 7 |
-
from __future__ import annotations
|
| 8 |
-
|
| 9 |
-
import warnings
|
| 10 |
-
|
| 11 |
-
from picarones.adapters.legacy_engines.base import BaseOCREngine, EngineResult
|
| 12 |
-
from picarones.adapters.legacy_engines.factory import engine_from_name
|
| 13 |
-
from picarones.adapters.legacy_engines.tesseract import TesseractEngine
|
| 14 |
-
from picarones.adapters.legacy_engines.mistral_ocr import MistralOCREngine
|
| 15 |
-
from picarones.adapters.legacy_engines.google_vision import GoogleVisionEngine
|
| 16 |
-
from picarones.adapters.legacy_engines.azure_doc_intel import AzureDocIntelEngine
|
| 17 |
-
|
| 18 |
-
warnings.warn(
|
| 19 |
-
"picarones.engines is deprecated and will be removed in 2.0. "
|
| 20 |
-
"Import from picarones.adapters.legacy_engines instead.",
|
| 21 |
-
DeprecationWarning,
|
| 22 |
-
stacklevel=2,
|
| 23 |
-
)
|
| 24 |
-
|
| 25 |
-
__all__ = [
|
| 26 |
-
"BaseOCREngine",
|
| 27 |
-
"EngineResult",
|
| 28 |
-
"engine_from_name",
|
| 29 |
-
"TesseractEngine",
|
| 30 |
-
"MistralOCREngine",
|
| 31 |
-
"GoogleVisionEngine",
|
| 32 |
-
"AzureDocIntelEngine",
|
| 33 |
-
]
|
| 34 |
-
|
| 35 |
-
try:
|
| 36 |
-
from picarones.adapters.legacy_engines.pero_ocr import PeroOCREngine # noqa: F401
|
| 37 |
-
|
| 38 |
-
__all__.append("PeroOCREngine")
|
| 39 |
-
except ImportError:
|
| 40 |
-
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,18 +0,0 @@
|
|
| 1 |
-
"""``picarones.engines.azure_doc_intel`` — shim re-export (déprécié, suppression 2.0).
|
| 2 |
-
|
| 3 |
-
Canonique : :mod:`picarones.adapters.legacy_engines.azure_doc_intel`. Phase 7.A
|
| 4 |
-
du retrait du legacy.
|
| 5 |
-
"""
|
| 6 |
-
|
| 7 |
-
from __future__ import annotations
|
| 8 |
-
|
| 9 |
-
import warnings
|
| 10 |
-
|
| 11 |
-
from picarones.adapters.legacy_engines.azure_doc_intel import * # noqa: F401, F403
|
| 12 |
-
|
| 13 |
-
warnings.warn(
|
| 14 |
-
"picarones.engines.azure_doc_intel is deprecated and will be removed in 2.0. "
|
| 15 |
-
"Import from picarones.adapters.legacy_engines.azure_doc_intel instead.",
|
| 16 |
-
DeprecationWarning,
|
| 17 |
-
stacklevel=2,
|
| 18 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,24 +0,0 @@
|
|
| 1 |
-
"""``picarones.engines.base`` — shim re-export (déprécié, suppression 2.0).
|
| 2 |
-
|
| 3 |
-
Canonique : :mod:`picarones.adapters.legacy_engines.base`. Phase 7.A
|
| 4 |
-
du retrait du legacy. Cohabite avec
|
| 5 |
-
``picarones.adapters.ocr.base.BaseOCRAdapter`` (design canonique,
|
| 6 |
-
``StepExecutor``).
|
| 7 |
-
"""
|
| 8 |
-
|
| 9 |
-
from __future__ import annotations
|
| 10 |
-
|
| 11 |
-
import warnings
|
| 12 |
-
|
| 13 |
-
from picarones.adapters.legacy_engines.base import * # noqa: F401, F403
|
| 14 |
-
from picarones.adapters.legacy_engines.base import ( # noqa: F401
|
| 15 |
-
BaseOCREngine,
|
| 16 |
-
EngineResult,
|
| 17 |
-
)
|
| 18 |
-
|
| 19 |
-
warnings.warn(
|
| 20 |
-
"picarones.engines.base is deprecated and will be removed in 2.0. "
|
| 21 |
-
"Import from picarones.adapters.legacy_engines.base instead.",
|
| 22 |
-
DeprecationWarning,
|
| 23 |
-
stacklevel=2,
|
| 24 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,18 +0,0 @@
|
|
| 1 |
-
"""``picarones.engines.factory`` — shim re-export (déprécié, suppression 2.0).
|
| 2 |
-
|
| 3 |
-
Canonique : :mod:`picarones.adapters.legacy_engines.factory`. Phase 7.A
|
| 4 |
-
du retrait du legacy.
|
| 5 |
-
"""
|
| 6 |
-
|
| 7 |
-
from __future__ import annotations
|
| 8 |
-
|
| 9 |
-
import warnings
|
| 10 |
-
|
| 11 |
-
from picarones.adapters.legacy_engines.factory import * # noqa: F401, F403
|
| 12 |
-
|
| 13 |
-
warnings.warn(
|
| 14 |
-
"picarones.engines.factory is deprecated and will be removed in 2.0. "
|
| 15 |
-
"Import from picarones.adapters.legacy_engines.factory instead.",
|
| 16 |
-
DeprecationWarning,
|
| 17 |
-
stacklevel=2,
|
| 18 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,18 +0,0 @@
|
|
| 1 |
-
"""``picarones.engines.google_vision`` — shim re-export (déprécié, suppression 2.0).
|
| 2 |
-
|
| 3 |
-
Canonique : :mod:`picarones.adapters.legacy_engines.google_vision`. Phase 7.A
|
| 4 |
-
du retrait du legacy.
|
| 5 |
-
"""
|
| 6 |
-
|
| 7 |
-
from __future__ import annotations
|
| 8 |
-
|
| 9 |
-
import warnings
|
| 10 |
-
|
| 11 |
-
from picarones.adapters.legacy_engines.google_vision import * # noqa: F401, F403
|
| 12 |
-
|
| 13 |
-
warnings.warn(
|
| 14 |
-
"picarones.engines.google_vision is deprecated and will be removed in 2.0. "
|
| 15 |
-
"Import from picarones.adapters.legacy_engines.google_vision instead.",
|
| 16 |
-
DeprecationWarning,
|
| 17 |
-
stacklevel=2,
|
| 18 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,18 +0,0 @@
|
|
| 1 |
-
"""``picarones.engines.mistral_ocr`` — shim re-export (déprécié, suppression 2.0).
|
| 2 |
-
|
| 3 |
-
Canonique : :mod:`picarones.adapters.legacy_engines.mistral_ocr`. Phase 7.A
|
| 4 |
-
du retrait du legacy.
|
| 5 |
-
"""
|
| 6 |
-
|
| 7 |
-
from __future__ import annotations
|
| 8 |
-
|
| 9 |
-
import warnings
|
| 10 |
-
|
| 11 |
-
from picarones.adapters.legacy_engines.mistral_ocr import * # noqa: F401, F403
|
| 12 |
-
|
| 13 |
-
warnings.warn(
|
| 14 |
-
"picarones.engines.mistral_ocr is deprecated and will be removed in 2.0. "
|
| 15 |
-
"Import from picarones.adapters.legacy_engines.mistral_ocr instead.",
|
| 16 |
-
DeprecationWarning,
|
| 17 |
-
stacklevel=2,
|
| 18 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,18 +0,0 @@
|
|
| 1 |
-
"""``picarones.engines.pero_ocr`` — shim re-export (déprécié, suppression 2.0).
|
| 2 |
-
|
| 3 |
-
Canonique : :mod:`picarones.adapters.legacy_engines.pero_ocr`. Phase 7.A
|
| 4 |
-
du retrait du legacy.
|
| 5 |
-
"""
|
| 6 |
-
|
| 7 |
-
from __future__ import annotations
|
| 8 |
-
|
| 9 |
-
import warnings
|
| 10 |
-
|
| 11 |
-
from picarones.adapters.legacy_engines.pero_ocr import * # noqa: F401, F403
|
| 12 |
-
|
| 13 |
-
warnings.warn(
|
| 14 |
-
"picarones.engines.pero_ocr is deprecated and will be removed in 2.0. "
|
| 15 |
-
"Import from picarones.adapters.legacy_engines.pero_ocr instead.",
|
| 16 |
-
DeprecationWarning,
|
| 17 |
-
stacklevel=2,
|
| 18 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,18 +0,0 @@
|
|
| 1 |
-
"""``picarones.engines.tesseract`` — shim re-export (déprécié, suppression 2.0).
|
| 2 |
-
|
| 3 |
-
Canonique : :mod:`picarones.adapters.legacy_engines.tesseract`. Phase 7.A
|
| 4 |
-
du retrait du legacy.
|
| 5 |
-
"""
|
| 6 |
-
|
| 7 |
-
from __future__ import annotations
|
| 8 |
-
|
| 9 |
-
import warnings
|
| 10 |
-
|
| 11 |
-
from picarones.adapters.legacy_engines.tesseract import * # noqa: F401, F403
|
| 12 |
-
|
| 13 |
-
warnings.warn(
|
| 14 |
-
"picarones.engines.tesseract is deprecated and will be removed in 2.0. "
|
| 15 |
-
"Import from picarones.adapters.legacy_engines.tesseract instead.",
|
| 16 |
-
DeprecationWarning,
|
| 17 |
-
stacklevel=2,
|
| 18 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,22 +0,0 @@
|
|
| 1 |
-
"""``picarones.modules`` — shim re-export (déprécié, suppression 2.0).
|
| 2 |
-
|
| 3 |
-
Canonique : :mod:`picarones.adapters.legacy_modules`. Phase 7.A.4
|
| 4 |
-
du retrait du legacy.
|
| 5 |
-
"""
|
| 6 |
-
|
| 7 |
-
from __future__ import annotations
|
| 8 |
-
|
| 9 |
-
import warnings
|
| 10 |
-
|
| 11 |
-
from picarones.adapters.legacy_modules.alto_text_to_mono_region import (
|
| 12 |
-
TextToAltoMonoRegion,
|
| 13 |
-
)
|
| 14 |
-
|
| 15 |
-
warnings.warn(
|
| 16 |
-
"picarones.modules is deprecated and will be removed in 2.0. "
|
| 17 |
-
"Import from picarones.adapters.legacy_modules instead.",
|
| 18 |
-
DeprecationWarning,
|
| 19 |
-
stacklevel=2,
|
| 20 |
-
)
|
| 21 |
-
|
| 22 |
-
__all__ = ["TextToAltoMonoRegion"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,18 +0,0 @@
|
|
| 1 |
-
"""``picarones.modules.alto_text_to_mono_region`` — shim re-export (déprécié, suppression 2.0).
|
| 2 |
-
|
| 3 |
-
Canonique : :mod:`picarones.adapters.legacy_modules.alto_text_to_mono_region`.
|
| 4 |
-
Phase 7.A.4 du retrait du legacy.
|
| 5 |
-
"""
|
| 6 |
-
|
| 7 |
-
from __future__ import annotations
|
| 8 |
-
|
| 9 |
-
import warnings
|
| 10 |
-
|
| 11 |
-
from picarones.adapters.legacy_modules.alto_text_to_mono_region import * # noqa: F401, F403
|
| 12 |
-
|
| 13 |
-
warnings.warn(
|
| 14 |
-
"picarones.modules.alto_text_to_mono_region is deprecated and will be removed in 2.0. "
|
| 15 |
-
"Import from picarones.adapters.legacy_modules.alto_text_to_mono_region instead.",
|
| 16 |
-
DeprecationWarning,
|
| 17 |
-
stacklevel=2,
|
| 18 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -76,6 +76,15 @@ REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
| 76 |
#: (plan stratégique historique). Les docs actifs ``CLAUDE.md``,
|
| 77 |
#: ``README.md`` et ``SPECS.md`` ont été corrigés en place vers
|
| 78 |
#: ``picarones/formats/text/normalization.py``.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
#:
|
| 80 |
#: Les chemins cassés restants sont **TOUS** dans :
|
| 81 |
#: - ``CHANGELOG.md`` : journal historique versionné, intouchable.
|
|
@@ -84,7 +93,7 @@ REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
| 84 |
#: - ``docs/migration/executor-equivalence.md`` : audit historique
|
| 85 |
#: d'équivalence executor (cite des chemins legacy à des fins
|
| 86 |
#: de comparaison).
|
| 87 |
-
BROKEN_PATHS_BASELINE =
|
| 88 |
|
| 89 |
#: Patrons de fichiers de documentation à scanner.
|
| 90 |
DOC_GLOBS: tuple[str, ...] = (
|
|
|
|
| 76 |
#: (plan stratégique historique). Les docs actifs ``CLAUDE.md``,
|
| 77 |
#: ``README.md`` et ``SPECS.md`` ont été corrigés en place vers
|
| 78 |
#: ``picarones/formats/text/normalization.py``.
|
| 79 |
+
#: - 94 (sprint « Lot E — engines/ + modules/ → adapters/legacy_* »,
|
| 80 |
+
#: 2026-05-07) : suppression des 8 shims ``picarones/engines/`` et
|
| 81 |
+
#: ``picarones/modules/``. Six nouveaux chemins cassés héritage :
|
| 82 |
+
#: 5 dans ``CHANGELOG.md`` (intouchable) + 1 dans
|
| 83 |
+
#: ``docs/audits/remediation-plan-2026-05.md`` (intouchable) — les
|
| 84 |
+
#: audits citant ``aws_textract`` / ``kraken`` étaient déjà cassés
|
| 85 |
+
#: avant la migration (ces moteurs n'ont jamais été implémentés).
|
| 86 |
+
#: ``SPECS.md`` a été corrigé en place vers
|
| 87 |
+
#: ``picarones/adapters/legacy_engines/base.py``.
|
| 88 |
#:
|
| 89 |
#: Les chemins cassés restants sont **TOUS** dans :
|
| 90 |
#: - ``CHANGELOG.md`` : journal historique versionné, intouchable.
|
|
|
|
| 93 |
#: - ``docs/migration/executor-equivalence.md`` : audit historique
|
| 94 |
#: d'équivalence executor (cite des chemins legacy à des fins
|
| 95 |
#: de comparaison).
|
| 96 |
+
BROKEN_PATHS_BASELINE = 94
|
| 97 |
|
| 98 |
#: Patrons de fichiers de documentation à scanner.
|
| 99 |
DOC_GLOBS: tuple[str, ...] = (
|
|
@@ -66,11 +66,9 @@ REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
| 66 |
LEGACY_PACKAGES: tuple[str, ...] = (
|
| 67 |
"core",
|
| 68 |
"measurements",
|
| 69 |
-
"engines",
|
| 70 |
"llm",
|
| 71 |
"pipelines",
|
| 72 |
"report",
|
| 73 |
-
"modules",
|
| 74 |
)
|
| 75 |
|
| 76 |
#: Combien de symboles legacy peuvent être absents de
|
|
@@ -152,39 +150,22 @@ LEGACY_PARITY: dict[str, ParityEntry] = {
|
|
| 152 |
# transitoire et délègue progressivement à
|
| 153 |
# ``PipelineExecutor`` (cf. pipeline-convergence-plan.md).
|
| 154 |
# ──────────────────────────────────────────────────────────
|
| 155 |
-
# Phase 7.A — engines, modules
|
| 156 |
# ──────────────────────────────────────────────────────────
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
}
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
"canonical": "picarones.adapters.legacy_engines.pero_ocr.PeroOCREngine",
|
| 172 |
-
},
|
| 173 |
-
"picarones.engines.mistral_ocr.MistralOCREngine": {
|
| 174 |
-
"canonical": "picarones.adapters.legacy_engines.mistral_ocr.MistralOCREngine",
|
| 175 |
-
},
|
| 176 |
-
"picarones.engines.google_vision.GoogleVisionEngine": {
|
| 177 |
-
"canonical": "picarones.adapters.legacy_engines.google_vision.GoogleVisionEngine",
|
| 178 |
-
},
|
| 179 |
-
"picarones.engines.azure_doc_intel.AzureDocIntelEngine": {
|
| 180 |
-
"canonical": "picarones.adapters.legacy_engines.azure_doc_intel.AzureDocIntelEngine",
|
| 181 |
-
},
|
| 182 |
-
"picarones.engines.factory.engine_from_name": {
|
| 183 |
-
"canonical": "picarones.adapters.legacy_engines.factory.engine_from_name",
|
| 184 |
-
},
|
| 185 |
-
"picarones.modules.alto_text_to_mono_region.TextToAltoMonoRegion": {
|
| 186 |
-
"canonical": "picarones.adapters.legacy_modules.alto_text_to_mono_region.TextToAltoMonoRegion",
|
| 187 |
-
},
|
| 188 |
}
|
| 189 |
|
| 190 |
|
|
|
|
| 66 |
LEGACY_PACKAGES: tuple[str, ...] = (
|
| 67 |
"core",
|
| 68 |
"measurements",
|
|
|
|
| 69 |
"llm",
|
| 70 |
"pipelines",
|
| 71 |
"report",
|
|
|
|
| 72 |
)
|
| 73 |
|
| 74 |
#: Combien de symboles legacy peuvent être absents de
|
|
|
|
| 150 |
# transitoire et délègue progressivement à
|
| 151 |
# ``PipelineExecutor`` (cf. pipeline-convergence-plan.md).
|
| 152 |
# ──────────────────────────────────────────────────────────
|
| 153 |
+
# Phase 7.A + Lot E — engines, modules
|
| 154 |
# ──────────────────────────────────────────────────────────
|
| 155 |
+
# ``picarones/engines/`` et ``picarones/modules/`` ont été
|
| 156 |
+
# supprimés (Lot E de la migration legacy → adapters/legacy_*).
|
| 157 |
+
# Les classes (BaseOCREngine, EngineResult, TesseractEngine,
|
| 158 |
+
# PeroOCREngine, MistralOCREngine, GoogleVisionEngine,
|
| 159 |
+
# AzureDocIntelEngine, engine_from_name, TextToAltoMonoRegion)
|
| 160 |
+
# sont exposées depuis
|
| 161 |
+
# ``picarones.adapters.legacy_engines.{...}`` et
|
| 162 |
+
# ``picarones.adapters.legacy_modules.alto_text_to_mono_region``.
|
| 163 |
+
# Comme pour les Lots précédents, les entrées ont été retirées
|
| 164 |
+
# pour garder la table alignée avec l'arbre legacy réellement
|
| 165 |
+
# présent sur disque.
|
| 166 |
+
# Note 7.D : ces adapters legacy seront eux-mêmes refondus en
|
| 167 |
+
# ``BaseOCRAdapter (StepExecutor)`` lors de la convergence
|
| 168 |
+
# pipeline (cf. pipeline-convergence-plan.md).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 169 |
}
|
| 170 |
|
| 171 |
|
|
@@ -47,14 +47,12 @@ REWRITE_PACKAGES: tuple[str, ...] = (
|
|
| 47 |
LEGACY_PACKAGES: tuple[str, ...] = (
|
| 48 |
"core",
|
| 49 |
"measurements",
|
| 50 |
-
"engines",
|
| 51 |
"llm",
|
| 52 |
"pipelines",
|
| 53 |
"report",
|
| 54 |
"web",
|
| 55 |
"cli",
|
| 56 |
"extras",
|
| 57 |
-
"modules",
|
| 58 |
)
|
| 59 |
|
| 60 |
#: Pattern qui matche un import déclaré dans le code source.
|
|
|
|
| 47 |
LEGACY_PACKAGES: tuple[str, ...] = (
|
| 48 |
"core",
|
| 49 |
"measurements",
|
|
|
|
| 50 |
"llm",
|
| 51 |
"pipelines",
|
| 52 |
"report",
|
| 53 |
"web",
|
| 54 |
"cli",
|
| 55 |
"extras",
|
|
|
|
| 56 |
)
|
| 57 |
|
| 58 |
#: Pattern qui matche un import déclaré dans le code source.
|
|
@@ -45,7 +45,7 @@ import pytest
|
|
| 45 |
|
| 46 |
REPO_ROOT = Path(__file__).resolve().parents[2]
|
| 47 |
README_PATH = REPO_ROOT / "README.md"
|
| 48 |
-
ENGINES_DIR = REPO_ROOT / "picarones" / "
|
| 49 |
|
| 50 |
#: Marqueur HTML qui désactive un check sur la ligne. Format :
|
| 51 |
#: ``<!-- doc-check: skip-engine -->``, ``skip-cli``, ``skip-endpoint``.
|
|
|
|
| 45 |
|
| 46 |
REPO_ROOT = Path(__file__).resolve().parents[2]
|
| 47 |
README_PATH = REPO_ROOT / "README.md"
|
| 48 |
+
ENGINES_DIR = REPO_ROOT / "picarones" / "adapters" / "legacy_engines"
|
| 49 |
|
| 50 |
#: Marqueur HTML qui désactive un check sur la ligne. Format :
|
| 51 |
#: ``<!-- doc-check: skip-engine -->``, ``skip-cli``, ``skip-endpoint``.
|