Skip to content

Commit

Permalink
Merge pull request #192 from KhiopsML/184-import-sparse-snb-code-from…
Browse files Browse the repository at this point in the history
…-old-repo

Add Sparse Dataset Support to SNB
  • Loading branch information
folmos-at-orange authored Jul 24, 2024
2 parents 1fe7554 + 7da4da5 commit f58cba2
Show file tree
Hide file tree
Showing 309 changed files with 115,960 additions and 115,386 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/conda.yml
Original file line number Diff line number Diff line change
Expand Up @@ -155,9 +155,10 @@ jobs:
# Set the anaconda.org channel
ANACONDA_CHANNEL="${{ inputs.release-channel || 'khiops-dev' }}"
# For the release channel: upload without forcing
# For the release channel: upload without forcing; do not upload kni-transfer
if [[ "$ANACONDA_CHANNEL" == "khiops" ]]
then
rm -f -v ./build/conda/*/kni-transfer*.tar.bz2
anaconda --token "${{ secrets.KHIOPS_ANACONDA_CHANNEL_TOKEN }}" upload \
--user "$ANACONDA_CHANNEL" ./build/conda/*/*.tar.bz2
# For the dev channel: upload with forcing
Expand Down
5 changes: 5 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,8 @@ repos:
entry: python scripts/update-copyright.py
language: system
types_or: [c, c++, java]
- id: check-encoding
name: check-encoding
entry: python scripts/check-encoding.py
language: system
types_or: [c, c++]
6 changes: 4 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -254,8 +254,10 @@ function(set_unix_khiops_options target)
target_link_options(${target} PRIVATE "LINKER:SHELL:-z noexecstack" "LINKER:SHELL:-z relro")
endif()

# stripping
target_link_options(${target} PRIVATE $<$<CONFIG:RELEASE>:-s>)
# Stripping only in Linux + Release (-s is not supported in macOS)
if(NOT APPLE)
target_link_options(${target} PRIVATE $<$<CONFIG:RELEASE>:-s>)
endif()

#
# - fno-rtti: no run-time type information in Release or RelWithDebInfo .
Expand Down
32 changes: 32 additions & 0 deletions scripts/check-encoding.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import os
import string
import sys

# Files that must have non ASCII characters
ignored_file_paths = ["src/Learning/KWTest/KWTextParser.cpp"]

# Check the input files
file_paths = sys.argv[1:]
errors = False
for file_path in file_paths:
# Ignore C++ files
name, extension = os.path.splitext(file_path)
if extension not in (".cpp", ".h"):
sys.exit(0)

# Ignore exceptions
if file_path in ignored_file_paths:
sys.exit(0)

# Try to read the file as ASCII
try:
with open(file_path, encoding="ascii") as file:
file.read()
# On failure show the lines that contain characters out of range
except UnicodeDecodeError:
with open(file_path, encoding="utf8", errors="replace") as file:
lines = file.readlines()
for line_number, line in enumerate(lines, 1):
if any(ord(char) > 127 for char in line):
print(f"{file_path}:{line_number}: {line}", end="")
sys.exit(1)
2 changes: 1 addition & 1 deletion src/Learning/DTForest/DTDecisionTree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2901,7 +2901,7 @@ void DTDecisionTree::ReplaceCurrentTreeWithOptimalTree()
odCurrentInternalNodes->GetNextAssoc(position, sKey, object);
node = cast(DTDecisionTreeNode*, object);

// mise à jour de la profondeur de l'arbre courant
// mise a jour de la profondeur de l'arbre courant
nTreeDepth = (nTreeDepth < node->GetDepth()) ? node->GetDepth() : nTreeDepth;

if (node->GetSplitAttributeStats() == NULL)
Expand Down
2 changes: 1 addition & 1 deletion src/Learning/DTForest/DTDecisionTree.h
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ class DTDecisionTree : public KWLearningReport
ObjectDictionary* odCurrentLeaveNodes;

/// Dictionnaire de tous les noeud interet feuille construit
/// C'est la mémorie des noeuds
/// C'est la memorie des noeuds
ObjectDictionary odTreeNodes;

/// Dictionnaire de pointeurs vers les partitionnements successifs de KWDatabases (1 partitionnement par noeud
Expand Down
6 changes: 3 additions & 3 deletions src/Learning/DTForest/DTDecisionTreeCreationTask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -362,8 +362,8 @@ boolean DTDecisionTreeCreationTask::MasterPrepareTaskInput(double& dTaskPercent,
ReferenceTargetIntervalValues(odMasterInputAttributeStats);
}
// initialisation pour chaque selection du split pour la regression
// DISCRETIZATION_BINARY_EQUAL_FREQUENCY pour chaque selection on choisi un nombre alétoire de la
// coupure allant de 0 à nb_coupure-2
// DISCRETIZATION_BINARY_EQUAL_FREQUENCY pour chaque selection on choisi un nombre aletoire de la
// coupure allant de 0 a nb_coupure-2
if (shared_learningSpec.GetLearningSpec()->GetTargetAttributeType() == KWType::Continuous and
randomForestParameter.GetDiscretizationTargetMethod() ==
DTForestParameter::DISCRETIZATION_BINARY_EQUAL_FREQUENCY)
Expand Down Expand Up @@ -1204,7 +1204,7 @@ boolean DTDecisionTreeCreationTask::ComputeResourceRequirements()
// Estimation de la memoire pour le maitre
lMasterMemory = ComputeMasterNecessaryMemory();

// mémoire necessaire pour calculer le plus gros arbre possible sur 1 esclave
// memoire necessaire pour calculer le plus gros arbre possible sur 1 esclave
lBiggestTreeMemory = ComputeBiggestTreeNecessaryMemory();

// Mise a jour des demandes de resources
Expand Down
10 changes: 5 additions & 5 deletions src/Learning/DTForest/DTDecisionTreeSpec.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -308,8 +308,8 @@ KWDerivationRule* DTDecisionTreeSpec::CreateGroupIndexRule(const DTDecisionTreeN
{
// creation d'une regle de type Switch(GroupIndex(
// ValueGroups(
// ValueGroup(“val1”,”val2”),
// ValueGroup(“val3”)
// ValueGroup("val1", "val2"),
// ValueGroup("val3")
// ),
// var_categorielle_de_test),
// 1,2,1)
Expand Down Expand Up @@ -459,7 +459,7 @@ double DTDecisionTreeSpec::GetConstructionCost() const

DTDecisionTreeNodeSpec::DTDecisionTreeNodeSpec()
{
// adresse du noeud père
// adresse du noeud pere
nsFatherNode = NULL;

// type de la variable continue ou categoriel
Expand Down Expand Up @@ -645,8 +645,8 @@ longint DTDecisionTreeNodeSpec::ComputeHashOfGroupIndexRule() const
{
// creation d'une regle de type Switch(GroupIndex(
// ValueGroups(
// ValueGroup(“val1”,”val2”),
// ValueGroup(“val3”)
// ValueGroup("val1", "val2"),
// ValueGroup("val3")
// ),
// var_categorielle_de_test),
// 1,2,1)
Expand Down
8 changes: 4 additions & 4 deletions src/Learning/DTForest/DTForestAttributeSelection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -250,16 +250,16 @@ void DTForestAttributeSelection::BuildForestSelections(int nmaxselectionnumber,
nTmax = MIN_VARIABLE_2_BUILTREE_BORNE +
RandomInt(MAX_VARIABLE_2_BUILTREE_BORNE - MIN_VARIABLE_2_BUILTREE_BORNE);

// Probabilite de tirer une variable de level null Pnull: tire aléatoirement de façon uniforme
// Probabilite de tirer une variable de level null Pnull: tire aleatoirement de facon uniforme
// dans [Pnull_lb, Pnull_ub]
dPNull = MIN_DRAWING_NULL_VARIABLE_PROBABILITY +
RandomDouble() *
(MAX_DRAWING_NULL_VARIABLE_PROBABILITY - MIN_DRAWING_NULL_VARIABLE_PROBABILITY);

// Probabilité de tirer une variable informative Pinf = 1-Pnul
// Probabilite de tirer une variable informative Pinf = 1-Pnul
dPInf = 1 - dPNull;

// Nombre de variables à tirer nT = min(Tmax, sqrt(K log2(K+ct))
// Nombre de variables a tirer nT = min(Tmax, sqrt(K log2(K+ct))
// dct est une constante dependant MIN_VARIABLE_2_BUILTREE telque MIN_VARIABLE_2_BUILTREE =
// sqrt(MIN_VARIABLE_2_BUILTREE log2(MIN_VARIABLE_2_BUILTREE+ct)
dct = pow(2.0, nvariableNumberMin) - nvariableNumberMin;
Expand All @@ -282,7 +282,7 @@ void DTForestAttributeSelection::BuildForestSelections(int nmaxselectionnumber,
// nRmax_lb = nTinf;
// Borne sup:
// nRmax_ub = nKinf;
// Rang max choisi: Rmax, tiré aléatoirement de façon uniforme dans [Rmax_lb, Rmax_ub]
// Rang max choisi: Rmax, tire alaatoirement de facon uniforme dans [Rmax_lb, Rmax_ub]
nRmax = nTinf + RandomInt(nKinf - nTinf);

ivSelectionAttributeNumberInf.Add(nTinf);
Expand Down
6 changes: 3 additions & 3 deletions src/Learning/KDDomainKnowledge/KDClassBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -302,12 +302,12 @@ class KDSparseUsedConstructedRule : public Object

// Memorisation d'un attribut calcule avec sa regle de derivation correspondant
// a la regle construite
// Attention: un meme attribut peut être utilise par plusieurs usedConstructedRule,
// Attention: un meme attribut peut etre utilise par plusieurs usedConstructedRule,
// car plusieurs regles construites peuvent correspondre au meme attribut existant en cas
// d'attribut initiaux avec regles de derivation en collision avec un nouvel attribut construit
// Exemple:
// DecimalTime = DecimalTime(Time) : attribut existant
// Time.DecimalTime = = DecimalTime(Time) : attribut construit à partir d'une regle appliquée sur Time
// Time.DecimalTime = = DecimalTime(Time) : attribut construit a partir d'une regle appliquee sur Time
// Memoire: appartient a l'appelant
void SetAttribute(KWAttribute* attribute);
KWAttribute* GetAttribute() const;
Expand Down Expand Up @@ -368,7 +368,7 @@ class KDSparseUsedConstructedBlockRule : public Object

// Memorisation d'un bloc d'attribut calcule avec sa regle de derivation correspondant
// a la regle construite
// Attention: un meme attributeBlock peut être utilise par plusieurs usedConstructedBlockRule,
// Attention: un meme attributeBlock peut etre utilise par plusieurs usedConstructedBlockRule,
// comme dans le cas des KDSparseUsedConstructedRule
// Memoire: appartient a l'appelant
void SetAttributeBlock(const KWAttributeBlock* attributeBlock);
Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KDDomainKnowledge/KDConstructedRule.h
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ class KDConstructedRule : public Object
// Cout de la regle
double dCost;

// Index alatoire pour gerer les cas d'égalité de tri de facon reproductible
// Index alatoire pour gerer les cas d'egalite de tri de facon reproductible
int nRandomIndex;

// Tableau des type d'operandes (limite a 4 operandes max, ce qui est suffisant)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -662,7 +662,7 @@ void KDMultiTableFeatureConstruction::BuildMainClassRequestedConstructedRules(Ob
oaAllConstructedRules->Shuffle();

// On memorise l'index alatoire associe a chaque regle, pour assurer un ordre aleatoire reproductible
// en cas d'égalite de cout des regles
// en cas d'egalite de cout des regles
for (i = 0; i < oaAllConstructedRules->GetSize(); i++)
cast(KDConstructedRule*, oaAllConstructedRules->GetAt(i))->SetRandomIndex(i);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,8 +182,8 @@ boolean KDSelectionOperandSamplingTask::ComputeResourceRequirements()

// En variable par esclave: specification de l'echantillonneur, plus un echantillon
// On ignore la place prise pour referencer les objets des tables externes dans des dictionnaires, on
// considerant que c'est petit devant les objets externes eux même ainsi que leur references par cle
// memorise par le ObjectReferenceSolver de la base mùulti-tables
// considerant que c'est petit devant les objets externes eux meme ainsi que leur references par cle
// memorise par le ObjectReferenceSolver de la base multi-tables
GetResourceRequirements()->GetSlaveRequirement()->GetMemory()->UpgradeMin(
lSelectionOperandDataSamplerSpecUsedMemory + lAllSamplesNecessaryMemory);
GetResourceRequirements()->GetSlaveRequirement()->GetMemory()->UpgradeMax(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class KDSelectionOperandSamplingTask;
// Classe technique utilisee par la classe KDSelectionOperandAnalyser
//
// Analyse de la base pour transformer toute extraire toutes les bornes ou valeur
// des operandes de selection basees sur des données de la base, a partir d'une
// des operandes de selection basees sur des donnees de la base, a partir d'une
// specification conceptuelle de ces operandes de collection
class KDSelectionOperandSamplingTask : public KWDatabaseTask
{
Expand All @@ -36,7 +36,7 @@ class KDSelectionOperandSamplingTask : public KWDatabaseTask
///// Implementation
protected:
//////////////////////////////////////////////////////////////////////////////
// Reproductibilité des resultats
// Reproductibilite des resultats
// Dans un premier temps, on va associer chaque instance secondaire
// a une paire d'index (i1, i2) de facon reproductible.
// . dossiers principaux :
Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KDDomainKnowledge/KDTextFeatureConstruction.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class KDTextFeatureConstruction : public KDFeatureConstruction
// sous-tables en relation 0-n d'un schema multi-table et les ramenerr dans la table principale.
// Il s'agit d'une alternative efficcae a la concatenation de variables Text, qui poserait des problemes
// de volumetrie, avec un des variables Symbol sans limite de taille. Avec des TextList geree dans des
// SymbolVector, tout ce qui peut etre charge dans une sous-table tient sans problème en memoire dans
// SymbolVector, tout ce qui peut etre charge dans une sous-table tient sans probleme en memoire dans
// un SymbolVector, qui ne fait que reference les Symbol des sous-tables.

// Methode interne de detection si un dictionnaire contient des variables de type texte utilises,
Expand Down
9 changes: 5 additions & 4 deletions src/Learning/KIInterpretation/KIDRPredictor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,8 @@ void KIDRClassifierInterpretation::Compile(KWClass* kwcOwnerClass)
const KWDRDataGridStats* dataGridStats = classifier->GetDataGridStatsAt(nDataGridIndex);

// Recherche de l'index de la partie cible de la grille
int nTargetIndex = classifier->GetDataGridSetTargetIndexAt(nDataGridIndex, nClassIndex);
int nTargetIndex =
classifier->GetDataGridSetTargetCellIndexAt(nDataGridIndex, nClassIndex);

// Parcours de toutes les parties sources
for (int nSourceIndex = 0; nSourceIndex < dataGridStats->GetDataGridSourceCellNumber();
Expand Down Expand Up @@ -691,7 +692,7 @@ Continuous KIDRClassifierContribution::ComputeInformationDifference(int nAttribu
cScoreWithoutOneVariableCorrected =
(cScoreWithoutOneVariable + (0.5 / (nTargetValuesNumber * nDatabaseSize))) / (1.0 + (0.5 / nDatabaseSize));

// Vincent2009 - j'ai retiré la correction et ajouté celle au-dessus
// Vincent2009 - j'ai retire la correction et ajoute celle au-dessus
// Correction de Laplace pour eviter les divisions par zero
// cInitialScore = (cInitialScore * nDatabaseSize + 1) / (nDatabaseSize + nTargetValuesNumber);
// cScoreWithoutOneVariable = (cScoreWithoutOneVariable * nDatabaseSize + 1) / (nDatabaseSize +
Expand Down Expand Up @@ -1041,7 +1042,7 @@ Continuous KIDRClassifierContribution::ComputeNormalizedOddsRatio(int nAttribute
delete cvScoreVector;

// Commentaires sur ce code voir fonction "Weight of Evidence"
// on calcule le odd ratio entre P(C|X) et (P(C|X) privé de la variable
// on calcule le odd ratio entre P(C|X) et (P(C|X) prive de la variable
// puis on normalise pour avoir des valeurs entre -1 et +1
// cela corresponds au fait de faire passer le weight of evidence dans une sigmoide
cInitialScoreCorrected =
Expand Down Expand Up @@ -1717,7 +1718,7 @@ ContinuousVector* KIDRClassifierReinforcement::ComputeScoreVectorVariation(Conti
ExtractLogPosteriorProba(nClassIndex, nAttributeIndex, nNewModalityIndex)));

// De la forme
// -> Add(P – W *((OLD) – (NEW)))
// -> Add(P - W * ((OLD) - (NEW)))
}

return cvNewScoreVector;
Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KIInterpretation/KIHowParameterView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ KIHowParameterView::KIHowParameterView()
// On interdit l'acces au champ
GetFieldAt("VarMax")->SetEditable(false);

// Ajout d'un champ de saisie du nom de la modalité cible de reference pour
// Ajout d'un champ de saisie du nom de la modalite cible de reference pour
// le renforcement de la probabilite d'appartenance
AddStringField("HowClass", "Value of the class to reinforce", "");

Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KWData/JSONFile.h
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ class JSONFile : public Object
static StringVector svWindows1252UnicodeHexEncoding;
static StringVector svWindows1252Utf8HexEncoding;

// Vecteur des codes UTF8 pour les 32 caracteres de controles Windows-1252 (128 à 159), et leur index
// Vecteur des codes UTF8 pour les 32 caracteres de controles Windows-1252 (128 a 159), et leur index
static KWIntVectorSorter ivsWindows1252ControlCharUtf8CodeSorter;

// Instance statique de JSONFile, permettant de forcer l'initialisation des structure d'encodage une fois
Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KWData/KWCDUniqueString.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class KWCDUniqueStringDictionary;
// en exemplaire unique permet un gain potentiel de memoire tres important, et une
// diminution du morcellement memoire.
//
// La gestion des KWCDUniqueString est similaire à celle des Symbol, mais elle differe
// La gestion des KWCDUniqueString est similaire a celle des Symbol, mais elle differe
// sur les points suivants:
// . les Symbol sont tres optimises en memoire, et ne donne acces qu'a des char*, alors
// que les UniqueString contiennent directement un ALString, directement utilisable
Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KWData/KWClass.h
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ class KWClass : public Object
ObjectArray* GetDatabaseDataItemsToCompute();
const ObjectArray* GetConstDatabaseDataItemsToCompute() const;

// Liste des elements de donnees temporaires à calculer, pouvant etre nettoyes et recalcules plusieurs fois
// Liste des elements de donnees temporaires a calculer, pouvant etre nettoyes et recalcules plusieurs fois
ObjectArray* GetDatabaseTemporayDataItemsToComputeAndClean();
const ObjectArray* GetConstDatabaseTemporayDataItemsToComputeAndClean() const;

Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KWData/KWDataTableDriverTextFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -732,7 +732,7 @@ longint KWDataTableDriverTextFile::GetEstimatedObjectNumber()

// Ouverture du fichier
// On prend la taille par defaut qui correspond a une taille "raisonnable" pour une analyse rapide et assez
// significative du fichier On ne prend pas ici la PreferredBufferSize liee au fichier, qui risque d'e�tre soit
// significative du fichier On ne prend pas ici la PreferredBufferSize liee au fichier, qui risque d'etre soit
// trop petite, soit trop grande
temporaryFile.SetBufferSize(InputBufferedFile::nDefaultBufferSize);
temporaryFile.SetSilentMode(true);
Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KWData/KWDatabaseFormatDetector.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class KWDatabaseFormatDetector : public Object

// Fonction cosmetique de gestion du pluriel
// Passage au pluriel pour un nombre strictement plus grand que 1
// Règles: ""->"s"; "is"->"are", "has",->"have"
// Regles: ""->"s"; "is"->"are", "has",->"have"
const ALString Plural(const ALString& sSource, int nNumber) const;

//////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KWData/KWDatabaseMemoryGuard.h
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ class KWDatabaseMemoryGuard : public Object
// proche du probleme de "one-shot (black) pebbling".
// cf. https://cs.stackexchange.com/questions/60772/finding-an-optimal-topological-ordering
// Il s'agit d'un probleme dont meme l'aproximation est NP-complet.
// La solution optimale nest donc pas atteignable, et les heuristiques de resolution du probleme
// La solution optimale n'est donc pas atteignable, et les heuristiques de resolution du probleme
// sont non triviales a mettre au point. De plus, pour assurer une empreinte memoire minimale, on devra
// se ramener potentiellement a la solution pragmatique, qui periodiquement peut etre amenee a tout nettoyer.
// Le rapport cout-benefice de cette solution etendue est alors extrement defavorable, avec un cout
Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KWData/KWObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ class KWObject : public Object
// Destruction des attributs (recursive pour les objet inclus)
void DeleteAttributes();

// Nettoyage des elements de donnees attributs temporaires calculer, pouvant etre nettoyes et recalcules
// Nettoyage des elements de donnees attributs temporaires a calculer, pouvant etre nettoyes et recalcules
// plusieurs fois
void CleanTemporayDataItemsToComputeAndClean();

Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KWData/KWTextTokenizer.h
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ class KWTextTokenizer : public KWTextService
//
// On utilise le principe de l'algorithme de
// R. Karp, S. Shenker, and C. Papadimitriou. A Simple Algorithm for Finding Frequent Elements
// in Streams and Bags. ACM Transactions on Database Systems, 28(1):5155, 2003.
// in Streams and Bags. ACM Transactions on Database Systems, 28(1):51--55, 2003.
// Cet algorithme garantie que l'on trouvera en O(1) par token toutes les valeurs sufisament frequentes,
// avec eventuellement des faux positifs
// En en demandant 10 fois plus, les plus frequents sont probablement retrouves de facon plus stable
Expand Down
4 changes: 2 additions & 2 deletions src/Learning/KWData/KWTimestampTZ.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,8 @@ inline ostream& operator<<(ostream& ost, const TimestampTZ& value)
// Gestion du format d'entre sortie d'une TimestampTZ
// Un format de TimestampTZ est base sur un format de Timestamp suivi d'une partie de type time zone,
// en utilisant un format ISO 8601:
// <Timestamp format>zzzzz: basic time zone format (Z or +hhmm or hhmm)
// <Timestamp format>zzzzzz: extended time zone format (Z or +hh:mm or hh:mm)
// <Timestamp format>zzzzz: basic time zone format (Z or +hhmm or -hhmm)
// <Timestamp format>zzzzzz: extended time zone format (Z or +hh:mm or -hh:mm)
class KWTimestampTZFormat : public Object
{
public:
Expand Down
2 changes: 1 addition & 1 deletion src/Learning/KWDataPreparation/KWAttributePairsSpec.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ class KWAttributePairsSpec : public Object
// Une fois specifiees et en utilisant la classe, les paires a analyser
// effectivement sont calculees en ignorant avec warning les paires
// impliquant des variables absentes de la classe.
// Les paires specifique sont prioritaires par rapport toutes les
// Les paires specifique sont prioritaires par rapport a toutes les
// paires si celles si-sont demandees. Si le nombre total de paires
// depasse le max, on priorise en prenant d'abord les paires impliquant
// les attributs de plus fort level dans le cas supervise, puis
Expand Down
Loading

0 comments on commit f58cba2

Please # to comment.