Repository navigation
feat(qc,#19457): convertisseur generalise dataset -> module QuantConnect - #19618
Conversation
Generalise le geste du convertisseur EDGAR (`edgar_signal.write_cloud_module`, unique dans le depot) : un projet QuantConnect Cloud refuse les `.csv` et n'accepte que du `.py`, il fallait jusqu'ici reecrire un convertisseur par source. `scripts/datasets/build_qc_custom_data.py` lit desormais `csv`/`tsv`/ `json`/`jsonl` et emet le meme type d'artefact : constante de donnees, plus une classe `PythonData` derivee si on la demande. Le format `jsonl` (alias `ndjson`) n'etait lu par aucun script de `scripts/datasets/` avant ce commit — c'est le format nouveau rendu consommable. Le convertisseur du projet EDGAR reste en place et inchange pour son usage. 25 tests hermetiques (0 reseau), dont un qui **execute** la classe `PythonData` emise contre un faux `AlgorithmImports` (GetSource + Reader) : l'artefact est consomme, pas seulement ecrit. 77/77 sur le dossier `scripts/datasets/tests/`. Part of #19457 (criteres 1-2 ; le critere 3 est deja mesure : variante EDGAR libre, trois runs Cloud OOS 2022-2024, verdict NO BEATS). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
[ADJOINT PREFLIGHT] |
|
[ADJOINT PREFLIGHT] |
Grain: MED/tooling — lane myia-po-2023:CoursIA — prev: MED/docs #19549
Part of #19457 (critère 2 — convertisseur généralisé). Le critère 3 est déjà mesuré (variante EDGAR libre livrée par #15584, trois runs Cloud OOS 2022-2024 dans le README du projet, verdict NO BEATS) ; le critère 1 (tableau d'inventaire des datasets ouverts) est posté sur l'issue, comme son acceptance le prescrit (« Sortie = un tableau sur cette issue, pas un fichier dans le dépôt »).
Le problème
Un projet QuantConnect Cloud refuse les fichiers
.csv: seul du.pyest accepté. Le convertisseur existant —write_cloud_module(edgar_signal.py:642, unique dans le dépôt —grep -rln write_cloud_module= 0 occurrence hors projet) — émet le bon type d'artefact, mais il est lié à une source (SEC EDGAR) et à un schéma (paires 10-K adjacentes). Brancher une source ouverte nouvelle exigeait donc d'en réécrire un.Ce que la PR livre
scripts/datasets/build_qc_custom_data.py— convertisseur généralisé :csv,tsv,json(liste d'objets),jsonl/ndjson. Le formatjsonln'était lu par aucun script descripts/datasets/avant ce commit (seuls CSV et Parquet* y étaient gérés) — c'est le format nouveau que la généralisation rend consommable..pyportant la constante de données, plus — sur--class-name— une classePythonDatadérivée qui les relit (patron du dépôt, cfpartner-course-quant-trading/examples/Sector-Momentum/FredRate.py).Nonereste distinct de"None").--class-namesans--date-column/--value-columnest une erreur d'appel, jamais un module à moitié fonctionnel ; format inconnu = erreur, jamais un devinage.Le convertisseur du projet EDGAR reste en place et inchangé : la généralisation ne le remplace pas, elle évite d'en réécrire un par source. Le README du projet porte le renvoi croisé (« Brancher une autre source »).
Preuve d'exécution
Les 25 tests sont hermétiques (0 réseau,
tmp_path). Le plus important n'est pas un test de forme :test_emitted_custom_data_class_executesexécute réellement la classePythonDataémise contre un fauxAlgorithmImports(injecté danssys.modules) et vérifie queGetSourcerend unSubscriptionDataSourceen transportLocalFile, queReaderrend un objet typé (Time,Value,Symbol) et qu'une ligne incomplète est ignorée sans faire tomber le moteur. L'artefact est consommé, pas seulement écrit.Garde prose-counts :
check_prose_quantitative_claims.py --diff origin/main...HEAD→[OK] aucun compteur quantitatif en prose.Portée du non-verifié
AlgorithmImports) : ils prouvent la forme du module et la mécanique duReader, pas un backtest Cloud consommant ce module. Le seul backtest Cloud de cette famille reste celui du critère 3 (EDGAR, déjà mesuré).À VÉRIFIER.Fichiers
scripts/datasets/build_qc_custom_data.py(nouveau)scripts/datasets/tests/test_build_qc_custom_data.py(nouveau, 25 tests)scripts/datasets/README.md·README.en.md(ligne de catalogue + section d'usage, parité FR/EN)MyIA.AI.Notebooks/QuantConnect/projects/Filing-Language-Stability/README.md(renvoi croisé)🤖 Generated with Claude Code