Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement Khiops piloting using a json parameter file
Reference - issue #230 Extending Khiops entries with a lightweight json structure for scenarios #230 - #230 - cette issue contient les specification detaillees de la fonctionnalité, donc on pourra extraire la documentation - cf. commentaire "Extension du pilotage de Khiops via les scénarios" - #230 (comment) Choix d'implementation principaux - le fichier de parametre json est lu et traite en entier de facon prealable, avec une taille limitee - le fichier de commande est traite en flux, ce qui permet de n'avoir aucune limite de taille - toute ligne de commande peut etre commentee, y compris les lignes du langage de pilotage de type IF ou LOOP - les lignes d'un fichier de commande template n'ont pas besoin de se terminer par un commentaire - toute __key__ du fichier de commande doit se trouver dans le fichier json - toute key du fichier json doit etre utilise dans le fichier de commande - les __key__ de parametrage json ne peuvent concerner que la partie parametrage utilisateur d'une valeur - toute erreur ou incoherence dans les fichiers de commande et de parametrage json provoquent une erreur fatale CommandFile - methodes publiques - ReadInputCommand: refactoring et simplification - ReadWriteCommandFiles: pour ecrire le scenario en sortie sans rejouer les commandes - methodes privees principales de parsing des scenario et de leur langage - ResetParser - RecodeCurrentLineUsingJsonParameters - ParseInputCommand: analyse syntaxique des lignes d'un fichier de commande en entree - TokenizeInputCommand - GetFirstInputToken - variables de travail du parser - prefixees par parser (ex: nParserState, sParserBlockKey, nParserLineIndex...) - maintenues le temps d'une session d'analyse, pour gerer le parser de scenario en flux - contraintes - nMaxLineLength = 500: longueur max d'une ligne de fichier de commande - nLoopMaxLineNumber = 1000: Taille max d'un bloc d'instruction IF ou LOOP d'un fichier de commande - constantes: renommees et etendues pour harmonisation - sCommentPrefix - sJsonKeyDelimiter - sByteJsonKeyPrefix - ... JsonLex.lex - STRINGERROR: variante de STRINGVALUE dans le cas d'erreur d'encodage utf8 JsonYac.yac - regles impliquant STRINGERROR pour avoir des erreurs interpretable en cas de STRINGERROR UIObject: prise en compte de l'option -O, pour les scenarios en sortie sans rejouer les commandes - ParseMainParameters - CheckCommandLineOptions TextService: - parametrage avance de la conversion de lencodage Json vers un encodage C pas necessairemernet Utf8 pour le cas des rapport Khiops - Set|GetForceUnicodeToAnsi - Set|GetForceUtf8ToAnsi - modifie le comportement de la methode JsonToCString utilisee par le parser de Json - utilise uniquement dans CCCoclusteringReport LearningTestTool - kht_test.py - --nop-output-scenario: "create an output scenario nop_output_test.prm in results dir, without replaying commands" - _kht_families - ajout de la famille JsonParameters Ajout de tests unitaires: test\UnitTests\Norm\results.ref\base_TextService.txt Ajout de test CI/CD: test\LearningTest\TestKhiops\Standard\JsonSpliceJunction Batterie de tests LearningTest\TestKhiops\JsonParameters - une petite cinquantaine de test, les trois-quart concernant la detection des erreurs
- Loading branch information