scilens 0.5.1__py3-none-any.whl → 0.5.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scilens/components/compare_2_files.py +41 -36
- scilens/components/compare_floats.py +33 -33
- scilens/config/models/__init__.py +1 -1
- scilens/config/models/compare.py +1 -1
- scilens/config/models/compare_float_thresholds.py +1 -1
- scilens/config/models/file_reader.py +9 -1
- scilens/readers/cols_dataset.py +17 -15
- {scilens-0.5.1.dist-info → scilens-0.5.3.dist-info}/METADATA +1 -1
- {scilens-0.5.1.dist-info → scilens-0.5.3.dist-info}/RECORD +11 -11
- {scilens-0.5.1.dist-info → scilens-0.5.3.dist-info}/WHEEL +0 -0
- {scilens-0.5.1.dist-info → scilens-0.5.3.dist-info}/entry_points.txt +0 -0
|
@@ -1,46 +1,51 @@
|
|
|
1
|
-
import os,re
|
|
1
|
+
import os,re,logging,fnmatch
|
|
2
2
|
from scilens.run.task_context import TaskContext
|
|
3
3
|
from scilens.readers.reader_interface import ReaderInterface
|
|
4
4
|
from scilens.components.file_reader import FileReader
|
|
5
5
|
from scilens.components.compare_models import SEVERITY_ERROR,SEVERITY_WARNING
|
|
6
6
|
from scilens.components.compare_errors import CompareErrors
|
|
7
7
|
from scilens.components.compare_floats import CompareFloats
|
|
8
|
+
from scilens.config.models.compare import CompareConfig
|
|
8
9
|
class Compare2Files:
|
|
9
10
|
def __init__(A,context):A.context=context
|
|
10
|
-
def compare(
|
|
11
|
-
|
|
12
|
-
for(C,
|
|
13
|
-
if not
|
|
14
|
-
if
|
|
15
|
-
if
|
|
11
|
+
def compare(H,path_test,path_ref):
|
|
12
|
+
k='status';j='severity';i='comparison_errors';h='comparison';Z=path_test;Y='err_index';X='reader';W='skipped';V=None;U=path_ref;T='metrics';S='error';R=True;Q='ref';M='path';L='test';A={L:{},Q:{},h:V,i:V};I={L:{M:Z},Q:{M:U}};B=H.context.config.compare;J=B.sources.not_matching_source_ignore_pattern
|
|
13
|
+
for(C,N)in I.items():
|
|
14
|
+
if not N.get(M)or not os.path.exists(N[M]):
|
|
15
|
+
if J:
|
|
16
|
+
if J=='*':A[W]=R;return A
|
|
16
17
|
else:
|
|
17
|
-
|
|
18
|
-
if
|
|
19
|
-
A[
|
|
20
|
-
|
|
21
|
-
for(C,
|
|
22
|
-
D=
|
|
23
|
-
if not D or not F:A[
|
|
24
|
-
A[
|
|
25
|
-
if D.read_error:A[
|
|
26
|
-
|
|
27
|
-
if B.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
for
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
18
|
+
l=os.path.basename(U if C==L else Z);m=re.search(J,l)
|
|
19
|
+
if m:A[W]=R;return A
|
|
20
|
+
A[S]=f"file {C} does not exist";return A
|
|
21
|
+
n=FileReader(H.context.working_dir,H.context.config.file_reader,H.context.config.readers,config_alternate_path=H.context.origin_working_dir)
|
|
22
|
+
for(C,N)in I.items():I[C][X]=n.read(N[M])
|
|
23
|
+
D=I[L][X];F=I[Q][X]
|
|
24
|
+
if not D or not F:A[W]=R;return A
|
|
25
|
+
A[L]=D.info();A[Q]=F.info()
|
|
26
|
+
if D.read_error:A[S]=D.read_error;return A
|
|
27
|
+
o=os.path.basename(U);a=B.float_thresholds
|
|
28
|
+
if B.name_patterns_thresholds:
|
|
29
|
+
for(J,p)in B.name_patterns_thresholds.items():
|
|
30
|
+
if fnmatch.fnmatch(o,J):a=p;break
|
|
31
|
+
E=CompareErrors(B.errors_limit,B.ignore_warnings);b=CompareFloats(E,a);c=D.compare(b,F,param_is_ref=R);G=E.root_group;O=V
|
|
32
|
+
if B.metrics_compare and(D.metrics or F.metrics):
|
|
33
|
+
s,O=E.add_group(T,T,parent=G)
|
|
34
|
+
if B.metrics_thresholds:d=CompareFloats(E,B.metrics_thresholds)
|
|
35
|
+
else:d=b
|
|
36
|
+
d.compare_dicts(D.metrics,F.metrics,O)
|
|
37
|
+
K={'total_diffs':G.total_diffs}
|
|
38
|
+
if G.info:K.update(G.info)
|
|
39
|
+
if c:K.update(c)
|
|
40
|
+
if O:
|
|
41
|
+
P={}
|
|
42
|
+
for e in[SEVERITY_ERROR,SEVERITY_WARNING]:
|
|
43
|
+
for(q,f)in enumerate(E.errors[e]):
|
|
44
|
+
if f.group==O.id:P[f.info['key']]={j:e,Y:q}
|
|
45
|
+
K[T]={}
|
|
46
|
+
for C in D.metrics.keys():K[T][C]={k:P[C][j],Y:P[C][Y]}if C in P else{k:'success'}
|
|
47
|
+
A[h]=K;A[i]=E.get_data()
|
|
48
|
+
if G.error:A[S]=G.error;return A
|
|
49
|
+
D.close();F.close();g=len(E.errors[SEVERITY_ERROR])
|
|
50
|
+
if g>0:r=f"{g} comparison errors";A[S]=r
|
|
46
51
|
return A
|
|
@@ -5,7 +5,7 @@ _A=None
|
|
|
5
5
|
import logging
|
|
6
6
|
from scilens.components.compare_models import SEVERITY_ERROR,SEVERITY_WARNING,CompareGroup,CompareFloatsErr,Compare2ValuesResults
|
|
7
7
|
from scilens.components.compare_errors import CompareErrors
|
|
8
|
-
from scilens.config.models import CompareFloatThresholdsConfig
|
|
8
|
+
from scilens.config.models import CompareFloatThresholdsConfig,CompareFloatVectorsConfig
|
|
9
9
|
from scilens.components.num import vectors as CheckVectors
|
|
10
10
|
def vector_get_amplitude(vector):A=vector;B=min(A);C=max(A);return{'min':B,'max':C,_D:abs(C-B)}
|
|
11
11
|
class CompareFloats:
|
|
@@ -30,43 +30,43 @@ class CompareFloats:
|
|
|
30
30
|
if H:B=D.compare_errors.add(F,H,info={'key':C});G+=1;F.incr(_C)
|
|
31
31
|
if B:break
|
|
32
32
|
return B,G
|
|
33
|
-
def compare_vectors(
|
|
34
|
-
|
|
35
|
-
if len(
|
|
36
|
-
|
|
37
|
-
if E=='RIAE':E=
|
|
38
|
-
if E:logging.debug(f"Using ponderation method: {E} with reduction_method {
|
|
39
|
-
I=_A
|
|
40
|
-
if A.thresholds.vectors and E=='amplitude_moderation':S=vector_get_amplitude(B)[_D];I=S*A.thresholds.vectors.amplitude_moderation_multiplier;O=A.thresholds.vectors.reduction_method
|
|
33
|
+
def compare_vectors(G,vectors_config,test_vector,reference_vector,group,info_vector=_A):
|
|
34
|
+
S='ignore';N=info_vector;M='RIAE_trapezoid';I=group;F=reference_vector;B=vectors_config;A=test_vector
|
|
35
|
+
if len(A)!=len(F):raise Exception('Vectors have different lengths')
|
|
36
|
+
O=0;H=_B;E=B.ponderation_method if B else _A
|
|
37
|
+
if E=='RIAE':E=M
|
|
38
|
+
if E:logging.debug(f"Using ponderation method: {E} with reduction_method {B.reduction_method}")
|
|
41
39
|
J=_A
|
|
42
|
-
if
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
if B and E=='amplitude_moderation':T=vector_get_amplitude(A)[_D];J=T*B.amplitude_moderation_multiplier;P=B.reduction_method
|
|
41
|
+
K=_A
|
|
42
|
+
if B and E in[M,'RIAE_midpoint']:
|
|
43
|
+
L=CheckVectors.relative_integral_absolute_error_trapezoid(F,A,range(len(A)))if E==M else CheckVectors.relative_integral_absolute_error_midpoint(F,A,range(len(A)))
|
|
44
|
+
if L is _A:logging.warning('RIAE calculation returned None. This may indicate an issue with the vectors.')
|
|
45
45
|
else:
|
|
46
|
-
|
|
47
|
-
if
|
|
48
|
-
|
|
49
|
-
for C in range(
|
|
50
|
-
if
|
|
51
|
-
|
|
52
|
-
if
|
|
53
|
-
else:
|
|
54
|
-
if
|
|
55
|
-
if
|
|
56
|
-
if
|
|
57
|
-
if
|
|
58
|
-
elif
|
|
59
|
-
D=
|
|
46
|
+
K=B.reduction_method
|
|
47
|
+
if L>B.riae_threshold:U=CompareFloatsErr(is_relative=_B,value=L);D=Compare2ValuesResults(SEVERITY_ERROR,f"RIAE ({E}) > {B.riae_threshold}",U);H=G.compare_errors.add(I,D)
|
|
48
|
+
V=len(A)
|
|
49
|
+
for C in range(V):
|
|
50
|
+
if A[C]is _A and F[C]is _A:continue
|
|
51
|
+
Q=A[C]-F[C]
|
|
52
|
+
if Q==0:continue
|
|
53
|
+
else:O+=1;I.incr(_C)
|
|
54
|
+
if H:continue
|
|
55
|
+
if K==S:continue
|
|
56
|
+
if J is not _A and abs(Q)<J:
|
|
57
|
+
if P==S:continue
|
|
58
|
+
elif P=='soften':
|
|
59
|
+
D=G.compare_2_values(A[C],F[C])
|
|
60
60
|
if D:D.severity=SEVERITY_WARNING
|
|
61
61
|
else:
|
|
62
|
-
D=
|
|
63
|
-
if D and
|
|
62
|
+
D=G.compare_2_values(A[C],F[C])
|
|
63
|
+
if D and K:D.severity=SEVERITY_WARNING
|
|
64
64
|
if D:
|
|
65
|
-
|
|
66
|
-
if
|
|
67
|
-
G
|
|
68
|
-
return
|
|
69
|
-
def add_group_and_compare_vectors(A,group_name,parent_group,group_data,test_vector,reference_vector,info_vector=_A):C,B=A.compare_errors.add_group('vectors',group_name,parent=parent_group,data=group_data);return(B,)+A.compare_vectors(test_vector,reference_vector,B,info_vector=info_vector)
|
|
65
|
+
R={'index':C}
|
|
66
|
+
if N:R['info']=N[C]
|
|
67
|
+
H=G.compare_errors.add(I,D,info=R)
|
|
68
|
+
return H,O
|
|
69
|
+
def add_group_and_compare_vectors(A,group_name,parent_group,group_data,vectors_config,test_vector,reference_vector,info_vector=_A):C,B=A.compare_errors.add_group('vectors',group_name,parent=parent_group,data=group_data);return(B,)+A.compare_vectors(vectors_config,test_vector,reference_vector,B,info_vector=info_vector)
|
|
70
70
|
def compare_matrices(H,test_mat,ref_mat,group,x_vector=_A,y_vector=_A):
|
|
71
71
|
K=y_vector;J=x_vector;I=group;D=ref_mat;C=test_mat;L=0;E=_B;F=len(C);M=len(C[0])if F>0 else 0;N=len(D);P=len(D[0])if N>0 else 0
|
|
72
72
|
if F!=N or M!=P:raise Exception('Matrices have different dimensions')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from.app import AppConfig
|
|
2
2
|
from.compare import CompareConfig
|
|
3
|
-
from.compare_float_thresholds import CompareFloatThresholdsConfig
|
|
3
|
+
from.compare_float_thresholds import CompareFloatThresholdsConfig,CompareFloatVectorsConfig
|
|
4
4
|
from.execute_and_compare import ExecuteAndCompareConfig
|
|
5
5
|
from.execute import ExecuteConfig
|
|
6
6
|
from.reader_format_txt import ReaderTxtIgnoreConfig,ReaderTxtConfig
|
scilens/config/models/compare.py
CHANGED
|
@@ -3,4 +3,4 @@ _A=None
|
|
|
3
3
|
from pydantic import BaseModel,Field
|
|
4
4
|
from scilens.config.models.compare_float_thresholds import CompareFloatThresholdsConfig
|
|
5
5
|
class CompareSourceFoldersConfig(BaseModel,extra=_B):not_matching_source_ignore_pattern:str|_A=Field(default=_A,description="Ignore les fichiers de test et de référence qui ne correspondent pas selon l'expression régulière défini (si = `*` ignore tout).");recursive:bool=Field(default=False,description='Recherche récursive dans les répertoires de test et de référence.');additional_path_suffixes:list[str]|_A=Field(default=_A,description='Additionals paths to add after test and reference folders.');test_folder_relative_path:str=Field(default='test',description='Relative path to the working directory for the test folder.');reference_folder_relative_path:str=Field(default='reference',description='Relative path to the working directory for the reference folder.');test_filename_match_ignore:str|_A=Field(default=_A,description='Chaîne spécifique dans le nom de fichier test à ignorer pour matcher les noms. Ex : `.test` or `test_`');reference_filename_match_ignore:str|_A=Field(default=_A,description='Chaîne spécifique dans le nom de fichier référence à ignorer pour matcher les noms. Ex : `.ref` or `ref_`')
|
|
6
|
-
class CompareConfig(BaseModel,extra=_B):sources:CompareSourceFoldersConfig=Field(default=CompareSourceFoldersConfig(),description='Configuration pour les sources des données de test et de référence.');float_thresholds:CompareFloatThresholdsConfig=Field(default=CompareFloatThresholdsConfig(),description='Seuils de comparaison pour les valeurs flottantes.');ignore_warnings:bool=Field(default=False,description='Si `true`, ne lève pas les erreurs de sévérité `warning`.');errors_limit:int=Field(default=1000,description="Limite d'erreurs à atteindre avant de s'arrêter (Sévérité `warning` et `error`).");metrics_compare:bool=Field(default=True,description='Si `true`, compare les métriques entre les données de test et de référence.');metrics_thresholds:CompareFloatThresholdsConfig|_A=Field(default=_A,description='Seuils de comparaison pour les métriques.')
|
|
6
|
+
class CompareConfig(BaseModel,extra=_B):sources:CompareSourceFoldersConfig=Field(default=CompareSourceFoldersConfig(),description='Configuration pour les sources des données de test et de référence.');float_thresholds:CompareFloatThresholdsConfig=Field(default=CompareFloatThresholdsConfig(),description='Seuils de comparaison pour les valeurs flottantes.');ignore_warnings:bool=Field(default=False,description='Si `true`, ne lève pas les erreurs de sévérité `warning`.');errors_limit:int=Field(default=1000,description="Limite d'erreurs à atteindre avant de s'arrêter (Sévérité `warning` et `error`).");metrics_compare:bool=Field(default=True,description='Si `true`, compare les métriques entre les données de test et de référence.');metrics_thresholds:CompareFloatThresholdsConfig|_A=Field(default=_A,description='Seuils de comparaison pour les métriques.');name_patterns_thresholds:dict[str,CompareFloatThresholdsConfig]|_A=Field(default=_A,description='Mapping de patterns sur les noms des datasets (Unix shell-style wildcards) (ex: data*.csv) et seuils de comparaison pour les comparaison de valeurs flottantes ')
|
|
@@ -8,4 +8,4 @@ class CompareFloatVectorsConfig(BaseModel,extra=_B):
|
|
|
8
8
|
A=self
|
|
9
9
|
if A.ponderation_method.startswith('RIAE')and not A.riae_threshold:raise ValueError('riae_threshold is required when ponderation_method is "RIAE"')
|
|
10
10
|
return A
|
|
11
|
-
class CompareFloatThresholdsConfig(BaseModel,extra=_B):relative_vs_absolute_min:float=Field(default=1e-12,description="Si la valeur de test est inférieure à ce seuil, calcul de l'erreur absolue.");relative_error_min:float=Field(default=.001,description="Si l'erreur relative est supérieure à ce seuil, génère une erreur de sévérité `warning`.");relative_error_max:float=Field(default=.01,description="Si l'erreur relative est supérieure à ce seuil, génère une erreur de sévérité `error`.");absolute_error_min:float=Field(default=1e-07,description="Si l'erreur absolue est supérieure à ce seuil, génère une erreur de sévérité `warning`.");absolute_error_max:float=Field(default=1e-06,description="Si l'erreur absolue est supérieure à ce seuil, génère une erreur de sévérité `error`.");vectors:CompareFloatVectorsConfig|_A=Field(default=_A,description='Paramètres pour la comparaison de vecteurs de flottants (csv, nc, ...).')
|
|
11
|
+
class CompareFloatThresholdsConfig(BaseModel,extra=_B):relative_vs_absolute_min:float=Field(default=1e-12,description="Si la valeur de test est inférieure à ce seuil, calcul de l'erreur absolue.");relative_error_min:float=Field(default=.001,description="Si l'erreur relative est supérieure à ce seuil, génère une erreur de sévérité `warning`.");relative_error_max:float=Field(default=.01,description="Si l'erreur relative est supérieure à ce seuil, génère une erreur de sévérité `error`.");absolute_error_min:float=Field(default=1e-07,description="Si l'erreur absolue est supérieure à ce seuil, génère une erreur de sévérité `warning`.");absolute_error_max:float=Field(default=1e-06,description="Si l'erreur absolue est supérieure à ce seuil, génère une erreur de sévérité `error`.");vectors:CompareFloatVectorsConfig|_A=Field(default=_A,description='Paramètres pour la comparaison de vecteurs de flottants (csv, nc, ...).');vectors_columns:dict[str,CompareFloatVectorsConfig|_A]|_A=Field(default=_A,description='Mapping de Colonne => Paramètres (ou `null`) pour la comparaison de vecteurs de flottants.')
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
_D="Mapping extension clé du catalogue de readers. Ex: `{'dat1': 'csv_comma', 'dat2': 'csv_semicolon'}`"
|
|
2
|
+
_C='Mapping d\'extensions source - cible. Ex `{"txt": "csv"}`.'
|
|
3
|
+
_B='forbid'
|
|
1
4
|
_A=None
|
|
2
5
|
from pydantic import BaseModel,Field
|
|
3
|
-
|
|
6
|
+
from typing import Literal
|
|
7
|
+
DEFAULT_EXTENTION_ACTIVE=True
|
|
8
|
+
NoReaderFoundMethodType=Literal['Error','Ignore','Fallback']
|
|
9
|
+
class FileReaderNoReaderFoundConfig(BaseModel,extra=_B):method:NoReaderFoundMethodType=Field(default='Error',description="Méthode à éxécuter si aucun reader n'est trouvé");fallback:str|_A=Field(default=_A,description="Si la méthode est `Fallback`, code du Reader (`txt`, `csv`, ...) à utiliser si aucun Reader n'est trouvé.")
|
|
10
|
+
class FileReaderExtensionsConfig(BaseModel,extra=_B):active:bool=Field(default=True,description='Recherche un reader par rapport à son extension.');mapping:dict|_A=Field(default=_A,description=_C);readers_catalog:dict[str,str]|_A=Field(default=_A,description=_D)
|
|
11
|
+
class FileReaderConfig(BaseModel,extra=_B):encoding:str=Field(default='utf-8',description='Encodage utilisé pour lire les fichiers.');extension_unknown_ignore:bool=Field(default=False,description="Si aucun reader n'est trouvé pour une extension, passe au suivant sans générer d'erreur.");extension_fallback:str|_A=Field(default=_A,description="Si aucun reader n'est trouvé pour une extension, utilise cette extension pour déterminer le reader.");extension_mapping:dict|_A=Field(default=_A,description=_C);extension_readers_catalog:dict[str,str]|_A=Field(default=_A,description=_D);custom_curve_parser:str|dict[str,str]|_A=Field(default=_A,description="Représente le chemin d'un fichier/module python suivi par :: suivi par le nom d'une fonction à appeller pour parser les courbes d'un fichier. Le chemin peut être absolu ou relatif. Dans le cas, d'un chemin relatif, il testera le `working directory` et le `origin working directory`. Ex: `custom_parser.py::parse_curves`")
|
scilens/readers/cols_dataset.py
CHANGED
|
@@ -69,21 +69,23 @@ class ColsDataset:
|
|
|
69
69
|
@dataclass
|
|
70
70
|
class ColsCurves:type:str;info:dict;curves:dict
|
|
71
71
|
def compare(group,compare_floats,reader_test,reader_ref,cols_curve):
|
|
72
|
-
|
|
73
|
-
if len(A.numeric_col_indexes)!=len(
|
|
74
|
-
|
|
75
|
-
if C and C.type==ReaderCurveParserNameConfig.COL_X:
|
|
76
|
-
|
|
72
|
+
R='Errors limit reached';G=reader_ref;E=compare_floats;D=group;C=cols_curve;A=reader_test;logging.debug(f"compare cols: {D.name}")
|
|
73
|
+
if len(A.numeric_col_indexes)!=len(G.numeric_col_indexes):D.error=f"Number Float columns indexes are different: {len(A.numeric_col_indexes)} != {len(G.numeric_col_indexes)}";return
|
|
74
|
+
F=[''for A in range(A.cols_count)];K=_A;H=_A
|
|
75
|
+
if C and C.type==ReaderCurveParserNameConfig.COL_X:L=C.info[_D];K=A.data[L];H=A.names[L]
|
|
76
|
+
M=False
|
|
77
77
|
for B in range(A.cols_count):
|
|
78
78
|
if B not in A.numeric_col_indexes:continue
|
|
79
|
-
|
|
80
|
-
if
|
|
81
|
-
|
|
79
|
+
S=A.data[B];T=G.data[B];I=A.names[B];logging.debug(f"compare vector colum: {I}");N=E.thresholds.vectors
|
|
80
|
+
if E.thresholds.vectors_columns and I in E.thresholds.vectors_columns:N=E.thresholds.vectors_columns[I]
|
|
81
|
+
O,U,W=E.add_group_and_compare_vectors(A.names[B],D,{'info_prefix':H}if H else _A,N,S,T,info_vector=K)
|
|
82
|
+
if U:M=True;F[B]=R;continue
|
|
83
|
+
if O.total_errors>0:F[B]=f"{O.total_errors} comparison errors"
|
|
82
84
|
if C:
|
|
83
|
-
for
|
|
84
|
-
|
|
85
|
-
for
|
|
86
|
-
|
|
87
|
-
if
|
|
88
|
-
|
|
89
|
-
D.error=
|
|
85
|
+
for P in C.curves[_E]:
|
|
86
|
+
Q=0
|
|
87
|
+
for V in P[_B]:
|
|
88
|
+
J=C.curves[_B][V]
|
|
89
|
+
if F[J[_C]]:J['comparison_error']=F[J[_C]];Q+=1
|
|
90
|
+
P['comparison']={'curves_nb_with_error':Q}
|
|
91
|
+
D.error=R if M else _A;D.info={'cols_has_error':F}
|
|
@@ -8,9 +8,9 @@ scilens/cli/info.py,sha256=xE7q9epjrCQRL6Agi3nhKsG6Mr3B8HSUFMti-epMoXA,1929
|
|
|
8
8
|
scilens/cli/main.py,sha256=C8EWm6JfTBBH74pR3J-O2ZuPX78VcQ5MWC5iqNUFN6Y,6332
|
|
9
9
|
scilens/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
10
|
scilens/components/analyse_folder.py,sha256=yqc-dscKaHLZJCYeXGak2v0c3F2aeX0E11AFPfya6r0,208
|
|
11
|
-
scilens/components/compare_2_files.py,sha256=
|
|
11
|
+
scilens/components/compare_2_files.py,sha256=hpLvlsDeifeZ0SbYBLSFpelLc9nQ02LMaYjxkg6dDPw,2417
|
|
12
12
|
scilens/components/compare_errors.py,sha256=vGb4DWP89HMIeBm0dZU2nt-ksppAs_37xtCHaPd0w5Y,1640
|
|
13
|
-
scilens/components/compare_floats.py,sha256=
|
|
13
|
+
scilens/components/compare_floats.py,sha256=w8zY8BJIxtg9zbPwNx4MqEB2jYrN9q_--r8AObA9zNA,4583
|
|
14
14
|
scilens/components/compare_folders.py,sha256=s7cgo2JhZi8F7tt3lGbPhkaO2726Lz3c4LYGP2HbWtA,2773
|
|
15
15
|
scilens/components/compare_models.py,sha256=EvxBZ1hPhqViCiTx7pfVIcwllkHjCjuc0mNEVa0Yqw0,941
|
|
16
16
|
scilens/components/executor.py,sha256=PLeKolzPd4wPX8e6DdfOb0uHGky3DxTcKN9QtB6oe3Q,3712
|
|
@@ -20,14 +20,14 @@ scilens/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
20
20
|
scilens/config/cli_run_options.py,sha256=Ls7yK5QDUPFbk73nbjGuPvuRbBRYw4Miag5ISpu3prg,281
|
|
21
21
|
scilens/config/env_var.py,sha256=NqNBoIfngJEXaGEm7jGqre5pmkJ9eUjiWzbDrTVfi2c,292
|
|
22
22
|
scilens/config/load.py,sha256=ltcv90GlsMJR2FE2ZL_jDscL7k5aGoHoMatWw61lrTw,1672
|
|
23
|
-
scilens/config/models/__init__.py,sha256=
|
|
23
|
+
scilens/config/models/__init__.py,sha256=JZ8fVq6A0EaPz24gKYdtaNZMD2OmhsgblRHvB2tcwiA,802
|
|
24
24
|
scilens/config/models/app.py,sha256=UCC7Be6gOwvxQpM5Wl1HIf2Xb61CmslFzXvj_50eqsQ,1558
|
|
25
25
|
scilens/config/models/base.py,sha256=k92CR8TA5L8dZJtg28c8albk16AK9-3umdosA7aYsxw,499
|
|
26
|
-
scilens/config/models/compare.py,sha256=
|
|
27
|
-
scilens/config/models/compare_float_thresholds.py,sha256=
|
|
26
|
+
scilens/config/models/compare.py,sha256=HmEmw9b0F_xo4D_Y3nC0t2oeKh9wSLJX8bxg23aFX58,2411
|
|
27
|
+
scilens/config/models/compare_float_thresholds.py,sha256=x7UHmwnSXpq1c4IBbMB7HQdEAzrJ_NmtNRSiMxNAD5c,2335
|
|
28
28
|
scilens/config/models/execute.py,sha256=yF_q8swd4-s2KyT_RwtSzOW41AY5GiEZaLhGUGJBU0Y,2340
|
|
29
29
|
scilens/config/models/execute_and_compare.py,sha256=aIWF1NIgdq5USS9ZVWOKgpEyMagCvqYYWYSXWvBBgjg,597
|
|
30
|
-
scilens/config/models/file_reader.py,sha256=
|
|
30
|
+
scilens/config/models/file_reader.py,sha256=uQrrwJZLlhgrEvEcYBAZijWtS01ob66fhtP_ipknAMo,1925
|
|
31
31
|
scilens/config/models/reader_format_cols.py,sha256=1SbSqBdwwrc516N3xz80S8jiQQrqQ5zWnRT0Zfa1iEc,3875
|
|
32
32
|
scilens/config/models/reader_format_csv.py,sha256=KWEH0c12n6hdaWAKdHXYMT5SvH4UqBFvP7d3ZkJr7r8,1620
|
|
33
33
|
scilens/config/models/reader_format_netcdf.py,sha256=Skr5lZACqVRrrlvs7R1RVFBpMTDthLJN-Fbs24jtb7o,1271
|
|
@@ -51,7 +51,7 @@ scilens/processors/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
|
51
51
|
scilens/processors/models/results.py,sha256=KoWxh13Zgi7PuPql8hkf4VjCis42ZxAuzIgJxBWVaX8,119
|
|
52
52
|
scilens/processors/processor_interface.py,sha256=jzMp1529JXnMGTJijVy6b_1zmARAMNv70f2lgys7vn4,452
|
|
53
53
|
scilens/readers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
|
-
scilens/readers/cols_dataset.py,sha256=
|
|
54
|
+
scilens/readers/cols_dataset.py,sha256=6F39F7ZjfyTl-Vh57ZLiyHPVMIPPiNdZQ3_KKw1QGpE,4233
|
|
55
55
|
scilens/readers/exceptions.py,sha256=JzmxcjnR5sH-IOWVeCC5A1bSwxv-jCAtIJvDjzx1CTI,32
|
|
56
56
|
scilens/readers/mat_dataset.py,sha256=Z9TYDWaH2aqdniLNDjlpR6VVNHMSARjh52clhdMyOn4,1496
|
|
57
57
|
scilens/readers/reader_csv.py,sha256=ISEjLjMFcRziryZTYyH-Jg4vOtgPVwAH1kgfEQBHVAA,5619
|
|
@@ -122,7 +122,7 @@ scilens/utils/time_tracker.py,sha256=DdVBoMpVLXrX0qZZXyLm4g38EwDVLlRcBqcpNex1mYY
|
|
|
122
122
|
scilens/utils/vectors.py,sha256=4N2BZSC5n3HgZqPujDGF5NdjVmSL1rOHb_qw4OoABQY,103
|
|
123
123
|
scilens/utils/web.py,sha256=MAFWpIFOKz7QhqDoFh-Qwstvc76KpcxstSgHFT8FOL4,901
|
|
124
124
|
scilens/utils/xml.py,sha256=HcB-ymJy8o4lsczHpXznGrbYahq_3cnnkPOdRfWdHfg,461
|
|
125
|
-
scilens-0.5.
|
|
126
|
-
scilens-0.5.
|
|
127
|
-
scilens-0.5.
|
|
128
|
-
scilens-0.5.
|
|
125
|
+
scilens-0.5.3.dist-info/METADATA,sha256=o7eu816V4IYfq-KJH6Z8kj1JQ_NfLGlCVvQ0xBCt5PA,1405
|
|
126
|
+
scilens-0.5.3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
127
|
+
scilens-0.5.3.dist-info/entry_points.txt,sha256=DaKGgxUEUv34GJAoXtta6ecL37ercejep9sCSSRQK2s,48
|
|
128
|
+
scilens-0.5.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|