Arcane  v3.16.8.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ISimpleTableComparator.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* ISimpleTableComparator.h (C) 2000-2025 */
9/* */
10/* Interface pour les services permettant de comparer un ISimpleTableOutput */
11/* et un fichier de référence. */
12/*---------------------------------------------------------------------------*/
13#ifndef ARCANE_CORE_ISIMPLETABLECOMPARATOR_H
14#define ARCANE_CORE_ISIMPLETABLECOMPARATOR_H
15/*---------------------------------------------------------------------------*/
16/*---------------------------------------------------------------------------*/
17
18#include "arcane/core/ISimpleTableOutput.h"
19
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31/**
32 * @ingroup StandardService
33 * @brief Interface de classe représentant un comparateur
34 * de tableaux. À utiliser avec un service implémentant
35 * ISimpleTableOutput.
36 *
37 * La différence avec ISimpleTableInternalComparator est
38 * que l'on compare un SimpleTableInternal contenu dans
39 * un ISimpleTableOutput avec un SimpleTableInternal
40 * généré à partir d'un fichier de référence.
41 *
42 * Cette interface permet aussi de générer les fichiers
43 * de référence en utilisant le nom de répertoire et
44 * le nom de tableau du ISimpleTableOutput, permettant
45 * de faciliter le processus.
46 */
47class ARCANE_CORE_EXPORT ISimpleTableComparator
48{
49 public:
50 virtual ~ISimpleTableComparator() = default;
51
52 public:
53 /**
54 * @brief Méthode permettant d'initialiser le service.
55 *
56 * Le pointeur vers une implémentation de ISimpleTableOutput
57 * doit contenir les valeurs à comparer ou à écrire en tant que
58 * valeurs de référence et l'emplacement de destination des
59 * fichiers de sorties, pour que soit automatiquement déterminé
60 * l'emplacement des fichiers de réferences.
61 *
62 * @param simple_table_output_ptr Une implémentation de ISimpleTableOutput.
63 */
64 virtual void init(ISimpleTableOutput* simple_table_output_ptr) = 0;
65
66 /**
67 * @brief Méthode permettant d'effacer les données lues par readReferenceFile().
68 * @note Efface le SimpleTableInternal du comparateur sans toucher à celui du
69 * SimpleTableOutput.
70 */
71 virtual void clear() = 0;
72
73 /**
74 * @brief Méthode permettant d'afficher le tableau lu.
75 *
76 * @param rank Le processus qui doit afficher son tableau (-1 pour tous les processus).
77 */
78 virtual void print(Integer rank = 0) = 0;
79
80 /**
81 * @brief Méthode permettant de modifier le répertoire racine.
82 * Cela permet d'écrire ou de rechercher des fichiers de réferences
83 * autre part que dans le répertoire déterminé par l'implémentation.
84 *
85 * Par défaut, pour l'implémentation csv, le répertoire racine est :
86 * ./output/csv_ref/
87 *
88 * @param root_directory Le nouveau répertoire racine.
89 */
90 virtual void editRootDirectory(const Directory& root_directory) = 0;
91
92 /**
93 * @brief Méthode permettant d'écrire les fichiers de référence.
94 *
95 * @warning (Pour l'instant), cette méthode utilise l'objet pointé par
96 * le pointeur donné lors de l'init(), donc l'écriture s'effectura
97 * dans le format voulu par l'implémentation de ISimpleTableOutput.
98 * Si les formats de lecture et d'écriture ne correspondent
99 * pas, un appel à "compareWithReference()" retournera forcement
100 * false.
101 *
102 * @param rank Le processus qui doit écrire son fichier (-1 pour tous les processus).
103 * @return true Si l'écriture a bien eu lieu (et si processus appelant != rank).
104 * @return false Si l'écriture n'a pas eu lieu.
105 */
106 virtual bool writeReferenceFile(Integer rank = -1) = 0;
107 /**
108 * @brief Méthode permettant de lire les fichiers de références.
109 *
110 * Le type des fichiers de référence doit correspondre à l'implémentation
111 * de cette interface choisi (exemple : fichier .csv -> SimpleCsvComparatorService).
112 *
113 * @param rank Le processus qui doit lire son fichier (-1 pour tous les processus).
114 * @return true Si le fichier a été lu (et si processus appelant != rank).
115 * @return false Si le fichier n'a pas été lu.
116 */
117 virtual bool readReferenceFile(Integer rank = -1) = 0;
118
119 /**
120 * @brief Méthode permettant de savoir si les fichiers de réferences existent.
121 *
122 * @param rank Le processus qui doit chercher son fichier (-1 pour tous les processus).
123 * @return true Si le fichier a été trouvé (et si processus appelant != rank).
124 * @return false Si le fichier n'a pas été trouvé.
125 */
126 virtual bool isReferenceExist(Integer rank = -1) = 0;
127
128 /**
129 * @brief Méthode permettant de comparer l'objet de type ISimpleTableOutput
130 * aux fichiers de réferences.
131 *
132 * @param rank Le processus qui doit comparer ses résultats (-1 pour tous les processus).
133 * @param compare_dimension_too Si l'on doit aussi comparer les dimensions des tableaux de valeurs.
134 * @return true S'il n'y a pas de différences (et si processus appelant != rank).
135 * @return false S'il y a au moins une différence.
136 */
137 virtual bool compareWithReference(Integer rank = -1, bool compare_dimension_too = false) = 0;
138
139 /**
140 * @brief Méthode permettant de comparer uniquement un élement.
141 * Les deux SimpleTableInternal sont représentés par des Ref,
142 * donc toujours à jour.
143 * Cette méthode peut être utilisé pendant le calcul, permettant
144 * de comparer les valeurs au fur et à mesure de l'avancement du
145 * calcul, au lieu de faire une comparaison final à la fin (il est
146 * tout de même possible de faire les deux).
147 *
148 * @param column_name Le nom de la colonne où se trouve l'élément.
149 * @param row_name Le nom de la ligne où se trouve l'élément.
150 * @param rank Le processus qui doit comparer ses résultats (-1 pour tous les processus).
151 * @return true Si les deux valeurs sont égales.
152 * @return false Si les deux valeurs sont différentes.
153 */
154 virtual bool compareElemWithReference(const String& column_name, const String& row_name, Integer rank = -1) = 0;
155
156 /**
157 * @brief Méthode permettant de comparer une valeur avec
158 * une valeur du tableau de référence.
159 * Cette méthode n'a pas besoin d'un internal 'toCompare'
160 * (setInternalToCompare() non nécessaire).
161 *
162 * @param elem La valeur à comparer.
163 * @param column_name Le nom de la colonne où se trouve l'élément de référence.
164 * @param row_name Le nom de la ligne où se trouve l'élément de référence.
165 * @param rank Le processus qui doit comparer ses résultats (-1 pour tous les processus).
166 * @return true Si les deux valeurs sont égales.
167 * @return false Si les deux valeurs sont différentes.
168 */
169 virtual bool compareElemWithReference(Real elem, const String& column_name, const String& row_name, Integer rank = -1) = 0;
170
171 /**
172 * @brief Méthode permettant d'ajouter une colonne dans la liste des colonnes
173 * à comparer.
174 *
175 * @param column_name Le nom de la colonne à comparer.
176 * @return true Si le nom a bien été ajouté.
177 * @return false Sinon.
178 */
179 virtual bool addColumnForComparing(const String& column_name) = 0;
180 /**
181 * @brief Méthode permettant d'ajouter une ligne dans la liste des lignes
182 * à comparer.
183 *
184 * @param row_name Le nom de la ligne à comparer.
185 * @return true Si le nom a bien été ajouté.
186 * @return false Sinon.
187 */
188 virtual bool addRowForComparing(const String& row_name) = 0;
189
190 /**
191 * @brief Méthode permettant de définir si le tableau de
192 * colonnes représente les colonnes à inclure dans la
193 * comparaison (false/par défaut) ou représente les colonnes
194 * à exclure de la comparaison (true).
195 *
196 * @param is_exclusive true si les colonnes doivent être
197 * exclus.
198 */
199 virtual void isAnArrayExclusiveColumns(bool is_exclusive) = 0;
200
201 /**
202 * @brief Méthode permettant de définir si le tableau de
203 * lignes représente les lignes à inclure dans la
204 * comparaison (false/par défaut) ou représente les lignes
205 * à exclure de la comparaison (true).
206 *
207 * @param is_exclusive true si les lignes doivent être
208 * exclus.
209 */
210 virtual void isAnArrayExclusiveRows(bool is_exclusive) = 0;
211
212 /**
213 * @brief Méthode permettant d'ajouter une expression régulière
214 * permettant de déterminer les colonnes à comparer.
215 *
216 * @param regex_column L'expression régulière (format ECMAScript).
217 */
218 virtual void editRegexColumns(const String& regex_column) = 0;
219 /**
220 * @brief Méthode permettant d'ajouter une expression régulière
221 * permettant de déterminer les lignes à comparer.
222 *
223 * @param regex_row L'expression régulière (format ECMAScript).
224 */
225 virtual void editRegexRows(const String& regex_row) = 0;
226
227 /**
228 * @brief Méthode permettant de demander à ce que l'expression régulière
229 * exclut des colonnes au lieu d'en inclure.
230 *
231 * @param is_exclusive Si l'expression régulière est excluante.
232 */
233 virtual void isARegexExclusiveColumns(bool is_exclusive) = 0;
234 /**
235 * @brief Méthode permettant de demander à ce que l'expression régulière
236 * exclut des lignes au lieu d'en inclure.
237 *
238 * @param is_exclusive Si l'expression régulière est excluante.
239 */
240 virtual void isARegexExclusiveRows(bool is_exclusive) = 0;
241
242 /**
243 * @brief Méthode permettant de définir un epsilon pour une colonne donnée.
244 * Cet epsilon doit être positif pour être pris en compte.
245 * S'il y a confit avec un epsilon de ligne (défini avec addEpsilonRow()),
246 * c'est l'epsilon le plus grand qui est pris en compte.
247 * @note Si un epsilon a déjà été défini sur cette colonne, alors l'ancien
248 * epsilon sera remplacé.
249 *
250 * @param column_name Le nom de la colonne où l'epsilon sera pris en compte.
251 * @param epsilon La marge d'erreur epsilon.
252 * @return true Si l'epsilon a bien pu être défini.
253 * @return false Si l'epsilon n'a pas pu être défini.
254 */
255 virtual bool addEpsilonColumn(const String& column_name, Real epsilon) = 0;
256
257 /**
258 * @brief Méthode permettant de définir un epsilon pour une ligne donnée.
259 * Cet epsilon doit être positif pour être pris en compte.
260 * S'il y a confit avec un epsilon de colonne (défini avec addEpsilonColumn()),
261 * c'est l'epsilon le plus grand qui est pris en compte.
262 * @note Si un epsilon a déjà été défini sur cette ligne, alors l'ancien
263 * epsilon sera remplacé.
264 *
265 * @param column_name Le nom de la ligne où l'epsilon sera pris en compte.
266 * @param epsilon La marge d'erreur epsilon.
267 * @return true Si l'epsilon a bien pu être défini.
268 * @return false Si l'epsilon n'a pas pu être défini.
269 */
270 virtual bool addEpsilonRow(const String& row_name, Real epsilon) = 0;
271};
272
273/*---------------------------------------------------------------------------*/
274/*---------------------------------------------------------------------------*/
275
276} // End namespace Arcane
277
278/*---------------------------------------------------------------------------*/
279/*---------------------------------------------------------------------------*/
280
281#endif
282
283/*---------------------------------------------------------------------------*/
284/*---------------------------------------------------------------------------*/
Déclarations de types sur les entités.
Classe gérant un répertoire.
Definition Directory.h:35
Interface de classe représentant un comparateur de tableaux. À utiliser avec un service implémentant ...
virtual bool readReferenceFile(Integer rank=-1)=0
Méthode permettant de lire les fichiers de références.
virtual void editRegexRows(const String &regex_row)=0
Méthode permettant d'ajouter une expression régulière permettant de déterminer les lignes à comparer.
virtual void isAnArrayExclusiveRows(bool is_exclusive)=0
Méthode permettant de définir si le tableau de lignes représente les lignes à inclure dans la compara...
virtual void editRootDirectory(const Directory &root_directory)=0
Méthode permettant de modifier le répertoire racine. Cela permet d'écrire ou de rechercher des fichie...
virtual bool compareWithReference(Integer rank=-1, bool compare_dimension_too=false)=0
Méthode permettant de comparer l'objet de type ISimpleTableOutput aux fichiers de réferences.
virtual bool addEpsilonColumn(const String &column_name, Real epsilon)=0
Méthode permettant de définir un epsilon pour une colonne donnée. Cet epsilon doit être positif pour ...
virtual void isARegexExclusiveColumns(bool is_exclusive)=0
Méthode permettant de demander à ce que l'expression régulière exclut des colonnes au lieu d'en inclu...
virtual void clear()=0
Méthode permettant d'effacer les données lues par readReferenceFile().
virtual bool addColumnForComparing(const String &column_name)=0
Méthode permettant d'ajouter une colonne dans la liste des colonnes à comparer.
virtual void editRegexColumns(const String &regex_column)=0
Méthode permettant d'ajouter une expression régulière permettant de déterminer les colonnes à compare...
virtual bool isReferenceExist(Integer rank=-1)=0
Méthode permettant de savoir si les fichiers de réferences existent.
virtual bool writeReferenceFile(Integer rank=-1)=0
Méthode permettant d'écrire les fichiers de référence.
virtual void isAnArrayExclusiveColumns(bool is_exclusive)=0
Méthode permettant de définir si le tableau de colonnes représente les colonnes à inclure dans la com...
virtual bool compareElemWithReference(Real elem, const String &column_name, const String &row_name, Integer rank=-1)=0
Méthode permettant de comparer une valeur avec une valeur du tableau de référence....
virtual bool addRowForComparing(const String &row_name)=0
Méthode permettant d'ajouter une ligne dans la liste des lignes à comparer.
virtual void isARegexExclusiveRows(bool is_exclusive)=0
Méthode permettant de demander à ce que l'expression régulière exclut des lignes au lieu d'en inclure...
virtual void print(Integer rank=0)=0
Méthode permettant d'afficher le tableau lu.
virtual void init(ISimpleTableOutput *simple_table_output_ptr)=0
Méthode permettant d'initialiser le service.
virtual bool compareElemWithReference(const String &column_name, const String &row_name, Integer rank=-1)=0
Méthode permettant de comparer uniquement un élement. Les deux SimpleTableInternal sont représentés p...
virtual bool addEpsilonRow(const String &row_name, Real epsilon)=0
Méthode permettant de définir un epsilon pour une ligne donnée. Cet epsilon doit être positif pour êt...
Interface représentant une sortie de tableau simple.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
double Real
Type représentant un réel.