Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 10.2.0 #154

Merged
merged 136 commits into from
Feb 13, 2024
Merged

Release 10.2.0 #154

merged 136 commits into from
Feb 13, 2024

Conversation

folmos-at-orange
Copy link
Member

No description provided.

folmos-at-orange and others added 30 commits June 23, 2023 15:55
This prevents a bug when looking for the reports in the unit test
workflow.
We do not force Ninja in presets anymore.
src/Norm/base/Regex.h collided with that of the standard C++ library
making fail the compilation of unit tests in macOS.
- Also add a pre-commit configuration to execute it when committing
…ommit-config

Add script to update copyright
- Use targets in all actions to speedup the build

- remove several options in the main CMakeLists:

 - FULL, LEARNING and PARALLEL: not needed anymore (use targets)
 - MODL_SO: binary MODL_dll is always built
 - FEDORA: the fedora distro is discovered automatically and a fatal error is triggered if MPI_SUFFIX is not set by the mpi module

- change the name of some test targets: all in lowercase

- CMakePresets:

 - add "jobs:0" to enable parallel build
 - simplification of the naming: remove the prefix "build_" in the name of the build preset
Khiops guide and tutorials are not anymore in the repo: no more sample packages
…up-the-build-process

Use targets in cmake to speed up the build process
modified:   .cmake-format.py (line_ending = "auto")
…indows-to-avoid-differences-with-git-status

Account-for-end-of-lines-on-windows-to-avoid-differences-with-git-status
add another unit test for parallel
Add --paralel flag for each cmake build
…n-macos

Unit tests in parallel fail in macos, no more parallel build in CMakePreset.
Users must add a CMakeUserPreset.json file to add parallel build
add platform dependant code in build.sh and install-khiops.sh for 2 objectives:
 - to handle with the different presets name
 - to specify the out-of-conda clang compiler in the conda build. There is an issue to use the conda's one.
Also add pre-commit check for Github actions
…and-python

Add pre-commit hooks for Python, JSON, YAML
…date-copyright

Pre-commit update copyright: add a new line after licence info
folmos-at-orange and others added 27 commits January 19, 2024 14:13
…g-files-in-osx

Fix "Undefined Error when opening files in OSX"
Also: add assert safeguards in KWDatabaseSlicerTask.
…-due-to-character-encoding-file-name

128 segmentation fault in macos due to character encoding file name
Modification du nombre de process a utiliser en parallele dans les tests de non regression
- passage de 3 a 4 pour avoir au trois esclaves
- mis a jour dans run-standard-tests.yml les tests standard de base en CI/CD
- a utiliser systematiquement pour les tests de non regression en mode parallel
- LearningTest completement mis a jour

Amelioration du reporting global de la command 'errors'
- fichier colonne au format csv
- ordre des resultats le meme entre les plateformes
- analyse facilitee, a la fois manuellement et automatique par script

Amelioration du reporting dans les fichiers comparisonResults.log
- affichage des fichiers manquants ou en trop dans la comparaison
- erreur fatale si contenu dans stdout, stderr, ou si le code retour est different de 0
  - resilience si contenu normal dans stdout ou stderr (ex: reporting de l'allocateur en mode debug)
  - fichiers correspondants memorises dans le repertoire results
  - affichage du debut du contenu des fichiers de type erreur fatale
- section "SUMMARY" en fin du log

Amelioration de la resilience dans les comparaisons
- resilience au nombre de de records filtree en cas de manque de ressource memoire (cf. jeu de test MTMaxRecordNumber)
- recuperation des erreur fatales en cas de pattern de type 'Batch mode failure' (cf. cas de portabilite de type CharacterEncoding)
- filtrage des messages ..., 100th warning pour minimiser les differences entre parallel et sequentiel

Gestion de contexte des resultats de reference
- deux type de contexte:
  - computing: parallel, sequentiel
  - paltform: Darwin, Linux, Windows
- memorisation de variantes de resultats si necessaire dans repertoires suffixes par les types de contexte specialise
- prise en compte dans les commandes de base
  - cleanref, markeref, copyref
  - list: ajout d'information sur le type de contrexte
  - deleteref: nouvelle commande pour detruire les repetoires de resultats de reference pour tous les coontextes
- description detaillees dans le script test_dir_management.py

Mise a jour de LearningTest pour avoir des resultats specifiques par contexte (computing, plateform)
- type d'OS: Darwin ou Linux
  - une dizaine de jeux de tests, principalement dans LearningTest\TestKhiops\CharacterEncoding (nouvelle famille)
- type de computing: parallel
  - une vingtaine de jeux de test, principalement dans boullema\LearningTest\TestKhiops\CrashTests
- suppression en V10.2 de KIInterpretation de la famille de tests de Khiops (tests specifiques V11)

Impacts dans les scripts
- nouveaux scripts
  - test_dir_management.py: gestion des contextes de resultats de reference
  - test_families.py: specication des familles de test par type d'outil
- modifications majeures principalement dans check_results.py et test_khiops.py
- refactoring leger et "opportuniste" effectue lors de l'implementation des nouvelles fonctionnalites
  - mise en place de constantes
  - amelioration de la terminologie, des messages de reporting, des commentaires
  - deplacement de quelques blocs de code
  - supression de code mort
  - ...
…ingtest-scripts-for-portability-issues

126 improve resilience of learningtest scripts for portability issues
Renommage d'une methode de test_khiops.py maintenant pris en compte
Minor fix in recently added assertion KWDGValueSet::DeleteValue

Evaluated in debug on LearningTest\TestKhiops\Standard\Iris2D, IrisG, IrisR
Les scripts de lancement de Khiops peuvent freezer sur certaines plateformes (cloud par exemple), ou en cas de bug.
Afin de dérouler tous les tests, il faut tuer les process trop longs.

Le lancement des test est maintenant controle par un timeout, uniquement si on trouve un fichier time.log
dans le repertoire des resultats de reference

Dans ce cas:
- on tue le process si depassement du timeout
- on fait en tout trois tentatives, sauf si le temps global imparti est ecoule
- en cas de timeout, on memorise ces problemes dans le repertoire results dans un nouveau fichier d'erreur fatale 'process_timeout_error.log'

Pour l'instant, les parametres de timeout utilises sont les suivants:
- timeout: 5 mn + 5 fois le temps de resultats de reference (du fichier time.log)
- temps global imparti: une heure
…-scripts

Add timeout in LearningTest scripts
Politique de recuperation des erreurs
- commentee dans check_results.py
~~~
    Il y a plusieurs tentatives de recuperation des erreurs pour des jeux de test ou des variation normales
    sont possibles, comme par exemple des difference sur la caucl de l'auc en cas de manque de ressource
    Ces tentatives sont implementees de facon pragmatique (code minimaliste, facile a developper et faire evoluer)
    pour automatiser l'analyse manuelle des resultats qui ete effectuee auparavant
    On ne cherche pas a ere resilient a tous les cas possibles, ni a gerer la complexite des types de recuperation
    pouvant se combiner. Ces methodes de recuperation ne servent parfois que pour un seul jeu de donnees,
    et il ne faut pas hesiter si besoin a simplifier certains jeux de test pour eviter qu'ils combinent
    plusieurs problemes de recuperation
~~~
- si recuperation non triviale possible
  - pour la commande 'logs'
    - message explicatifs dans le fichier comparisonResults.log
    - conversion d'erreurs en warnings
  - pour la commande 'errors'
    - message syntherique de type "recovery..."

Types de recuperation implementes
- methodes specifiques de recuperation
  - probleme d'encoding des nom de fichier pour les plateformes acceptant les bytes (Linux)
    - methode base sur l'association d'un nom de fichier de type string (utf8) obtenu apres conversion,
      et la version byte du nom de fichier
    - ex: TestKhiops/CharacterEncoding/TransferAccentuatedDir
  - messages utilisateur identiques, mais arrivant en ordre different
    selon l'ordre d'execution des process en parallel
    - ex: TestKhiops/SmallInstability/BugConstructionWithTrailingBlank
  - calcul de l'auc approximatif en raison de la limite des ressources
    - ex: TestKhiops/ParallelTask/ClassifierEvaluationLimits
  - nombre variables de warning avant erreur uniquement dans le fichier err.txt
    - ex: TestKhiops/CrashTests/trainclassifier_KWDataPreparationUnivariateTask
          (results potentillement differents selon execution des process)
  - scenario ne pouvant s'excuter entierement sur certaine plateformes (rappel d'une issue precedente)
    - cas de type 'Batch mode failure'
    - ex: LearningTest\TestKhiops\CharacterEncoding\MultipleEncodingsFileSystem
- methodes generiques existantes (rappel)
  - variantes de resultats selon parallel|sequential et/ou selon la plateforme
  - tolerance ou messages utilisateurs selon des "motifs resilients" (ex: message sur les ressources insuffisante)
  - tolerance aux variations

Modification de jeux de donnees
- TestKhiops/ParallelTask/RegressionLimits
  - mise en place d'une version des resultats results.ref-parallel
- TestKhiops/CrashTests/MaxMTRecordNumber, MaxMTRecordNumberLarge
  - ajustement des contraintes sur les ressources memoire pour stabilite la typologie de problemes rencontres

Gestion d'un timeout
- si un temps est disponible dans le fichier time.log de reference, on met en place un timeout
  - par defaut, timeout = MIN_TIMEOUT + TIMEOUT_RATIO * results_ref_test_time
  - MIN_TIMEOUT=300, TIMEOUT_RATIO=5
- nouvelle variable d'environnement optionnelle KhiopsTestTimoutLimit, pour modifier la valeur du MIN_TIMEOUT
- par jeu de test, si le timeout est atteint, l'outil teste est relance au plus trois fois,
  sauf si depassement cumule d'une heure

Gestion des messages pour les fichiers speciaux, par priorite decroissante
- FATAL ERROR uniquement si code retour errone (fichier return_code_error.log)
- TIMEOUT ERROR si processus tue apres timeout
- UNEXPECTED OUTPUT si stdout ou stderr non vide

Controle a priori des principaux parametres utilisateur pour sortir des tests proprement
 et le plus rapidement possible

Commandes compareTimes et compareTimesVerbose
- normalisation des resultat au format tabulaire tsv

Stabilisation des messages sur les stats memoires sur stdout en mode debug
- Lancement de mpiexec depuis test_khiops.py
  - ajout de l'option -l, specifique a mpich, valide au moins pour Windows
    "Label standard out and standard error (stdout and stderr) with the rank of the process"
  - activee auparavant uniquement sous Windows

Implementation
- modification majeures
  - check_results.py
  - test_khiops.py
- modification mineures
  - apply_command.py
  - test_dir_management.py
  - help_options.py
- leger refactoring pragmatique a l'occasion de l'implementation des nouvelles fonctionnalites
…ningtest-scripts-for-portability-issues

136 finalize resilience of learningtest scripts for portability issues
The interruption check method TaskProgression::IsInterruptionRequested
was called at every Read() call for the input database. Now they are
made less often by pairing it with a call to
PeriodicTest::IsTestAllowed.
…s-too-often-taskprogressisinterruptionrequested

KWDatabaseTask fewer interruption checks
Le probleme provient de la classe ValueBlock, hautement optimisee

KWValueBlock
- La classe utilise une fonctionnalite avancee du C++, le 'placement new operator',
  pour allouer prealablement la memoire donnee au constructeur, qui usuellement
  d'une part alloue la memoire, d'autre part l'initialise
- Ici, on aura une sequence de trois methodes dans les 'placement new' exploites dans
  les methodes NewValueBlock des sous classes:
  - appel de GenericAllocValueBlock pour creer un bloc memoire
  - appel du placement new du C++ avec ce bloc, qui declenche un appel standard du C++
    (implemente en ne faisant rien)
  - appel de GenericInitValueBlock pour initialiser le bloc memoire

Auparavant, on avait une seule methode GenericNewValueBlock qui allouait la memoire et
l'initialisait. Le constructeur etait appele ensuite, mais il semble qu'il modifiait (a tort)
le contenu de la memoire, entrainant un bug.

Impact etudie sur les autre utilisations du "placement new"
- uniquement la classe KWTuple: ok (utilisation plus basique)

Correction au passage d'une typo dans un message d'erreur
SNBPredictorSNBTrainingTask::MasterInitializeDataTableBinarySliceSet
- le premier caractere est mis en majuscule dans le message "Not enough memory to run the task"
- pour suivre le meme pattern que partout ailleurs dans le code
- pour etre traite systematiquement dans les pattern de resilience au messages utilisateurs
  dans le scripts de LearningTest

Note: la modification de IrisLight est a ignorer
- il n'y a en fait aucune difference (blancs en fin de lignes)
…-linux

138 segmentation fault in rocky linux
The LearningTest scripts now fail when not finding `mpiexec` only if
`KhiopsMPIProcessNumber` is set.
Improve mpiexec environment check in LearningTest
Report pragmatique de quelques corrections de bugs dejà traites pour la V11
Uniquement si impact dans le code faible tres localise et amelioration perceptible par les utilisateurs

Version V10.3.1i
- bug detecte dans la regle de derivation AddSeconds avec quatre milliards de secondes en operande
- corrections
 - KWDRAddSeconds::ComputeTimestampResult
- modifier les release notes de Khiops 10.2

Version V10.3.5i
- correction d'un effet de bord dans Parallel V2.4.9
- concatenation avec fichier en entree vide, donc avec zero chunk

Version V10.3.10i
- KWAttributeBlock::Check: correction sur le type de VarKey sDefaultValueMetaDataKey dans le cas categoriel

Version V10.4.0i
- Bug dans "Data table key extractor/Build multi-table dictionary"
  - construit un dictionnaire invalide en release
  - plante en assert avec un input dictionary non multi-table
  - jeu de test: LearningTest\TestKhiops\BugsMultiTables\BugExtractKey
  - correction dans KWMTClassBuilderView::BuildMultiTableClass

Fix erroneous errors messages in parallel for unsorted tables
- Impacts:
  - KWKeyPositionSampleExtractorTask::SlaveProcess: correction du numero de ligne
  - KWKey::GetObjectLabel: correction pour prendre le debut de la cle plutot que sa fin
Supression du prefix de process id de type '[0] ' en debut des lignes de stdout et stderr
- probleme observe sur Mac dans deux jeux de test de CharacterEncoding
- impact dans check_results.py
…d-in-v11

145 fix minor bugs already fixed in v11
Gestion cross-plateforme des fichiers avec caracteres accentues
- on garde comme cle de nom de fichier cross-plateforme la version convertie en ascii sans erreurs
  - plus generique que la conversion utf8 initialement utilisee
  - impact: check_results.py, au niveau de l'utilisation des byte_file_name
- ajout d'un quatrieme plateforme ["Darwin", "Linux", "Windows", "WSL"]
  - pour un OS de type linux sur un systeme de gestion de fichier de type windows
  - impact: test_dir_management.py
- corrige les probleme identifier dans la famille TestKhiops/CharacterEncoding

Ouverture systematique des fichier en lecture et ecriture en mode errors="ignore" pour ne pas echouer en cas de caracteres accentues

Jeu de test TestKhiops/ParallelTask/RegressionLimits
- modification du scenario pour stabiliser les resultats

Jeu de test TestKhiops/SmallInstability/BugConstructionWithTrailingBlank
- il peut y avoir des difference non seulement dans l'ordre des messages utilisateurs,
  mais egalement dans les index des records concernes
- amelioration de la resilience a ce jeu de test en supprimant le debut des messages utilsiateur jsuqu'au numeros de ligne
- impact:
  - check_results.py: filtrage des messages via la methodes filter_record_index_from_lines pour ce type de recouvrement des erreurs

Valide sur les resultst de test obtenus sur Linux

Valide sur les resultst de test obtenus sur Max et WSL (chez Nicolas)
- les problemes residuels provenaient d'un lancement des tests avec une version obsolete des scripts, et avec 3 process (au lieu de 4)
…-in-learningtest-scripts

Fix remaining instabilities in LearningTest scripts
ArgMin and ArgMax derivation rules are now consistent with the Min and Max rules
- they return MissingValue only in case of empty list of value or only missing values
Copy link
Collaborator

@marcboulle marcboulle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@folmos-at-orange folmos-at-orange merged commit ebd97f2 into main Feb 13, 2024
43 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants