scilens 0.3.1__py3-none-any.whl → 0.3.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_errors.py +10 -6
- scilens/components/compare_floats.py +9 -7
- scilens/components/executor.py +15 -12
- scilens/config/models/execute.py +1 -2
- scilens/processors/execute_and_compare.py +6 -6
- scilens/readers/cols_dataset.py +16 -16
- scilens/readers/mat_dataset.py +1 -1
- {scilens-0.3.1.dist-info → scilens-0.3.3.dist-info}/METADATA +1 -1
- {scilens-0.3.1.dist-info → scilens-0.3.3.dist-info}/RECORD +11 -11
- {scilens-0.3.1.dist-info → scilens-0.3.3.dist-info}/WHEEL +0 -0
- {scilens-0.3.1.dist-info → scilens-0.3.3.dist-info}/entry_points.txt +0 -0
|
@@ -11,12 +11,16 @@ class CompareErrors:
|
|
|
11
11
|
if not B:A.root_group=C
|
|
12
12
|
A.groups.append(C);return id,C
|
|
13
13
|
def add(A,group,comp_res,info=_A):
|
|
14
|
-
|
|
15
|
-
if A.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if A.
|
|
14
|
+
G=True;D=comp_res;B=group
|
|
15
|
+
if A.limit_reached:
|
|
16
|
+
if not B.error:B.error=f"Limit errors reached ({A.nb_max})"
|
|
17
|
+
return G
|
|
18
|
+
E=D.severity;F=D.message;H=D.comp_err
|
|
19
|
+
if A.ignore_warnings and E==SEVERITY_WARNING:return _B
|
|
20
|
+
A.count+=1;C=A._messages_map.get(F)
|
|
21
|
+
if C is _A:C=len(A.messages);A.messages.append(F);A._messages_map[F]=C
|
|
22
|
+
A.errors[E].append(CompareErr(err=H,msg=C,group=B.id,info=info));B.incr(E)
|
|
23
|
+
if A.count>=A.nb_max:B.error=f"Limit errors reached ({A.nb_max})";A.limit_reached=G;return G
|
|
20
24
|
def get_data(B):
|
|
21
25
|
D=[{'id':A.id,'type':A.type,'name':A.name,'error':A.error,'total_diffs':A.total_diffs,'total_warnings':A.total_warnings,'total_errors':A.total_errors,'data':A.data,'info':A.info,'parent_id':A.parent.id if A.parent else _A}for A in B.groups];A={'messages':B.messages,'groups':D}
|
|
22
26
|
for(C,E)in B.errors.items():A[C]=[A.model_dump()for A in E];A[C+'_nb']=len(A[C])
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
_C='amplitude'
|
|
2
2
|
_B=False
|
|
3
3
|
_A=None
|
|
4
|
-
from scilens.components.compare_models import SEVERITY_ERROR,SEVERITY_WARNING,CompareFloatsErr,Compare2ValuesResults
|
|
4
|
+
from scilens.components.compare_models import SEVERITY_ERROR,SEVERITY_WARNING,CompareGroup,CompareFloatsErr,Compare2ValuesResults
|
|
5
5
|
from scilens.components.compare_errors import CompareErrors
|
|
6
6
|
from scilens.config.models import CompareFloatThresholdsConfig
|
|
7
7
|
try:from scilens_compare import vectors as CheckVectors
|
|
@@ -21,8 +21,8 @@ class CompareFloats:
|
|
|
21
21
|
if err<thr.absolute_error_max:
|
|
22
22
|
if err>thr.absolute_error_min:return Compare2ValuesResults(SEVERITY_WARNING,f"Abs. err. > {thr.absolute_error_min} and < {thr.absolute_error_max}",comp_err)
|
|
23
23
|
else:return Compare2ValuesResults(SEVERITY_ERROR,f"Abs. err. > {thr.absolute_error_max}",comp_err)
|
|
24
|
-
def compare_vectors(self,test_vector,reference_vector,
|
|
25
|
-
B='ignore';A='RIAE_trapezoid'
|
|
24
|
+
def compare_vectors(self,test_vector,reference_vector,group,info_vector=_A):
|
|
25
|
+
B='ignore';A='RIAE_trapezoid'
|
|
26
26
|
if len(test_vector)!=len(reference_vector):raise Exception('Vectors have different lengths')
|
|
27
27
|
diffs_count=0;err_limit_reached=_B;ponderation_method=self.thresholds.vectors.ponderation_method if self.thresholds.vectors else _A
|
|
28
28
|
if ponderation_method=='RIAE':ponderation_method=A
|
|
@@ -54,14 +54,15 @@ class CompareFloats:
|
|
|
54
54
|
if info_vector:info['info']=info_vector[idx]
|
|
55
55
|
err_limit_reached=self.compare_errors.add(group,res_compare,info=info)
|
|
56
56
|
return err_limit_reached,diffs_count
|
|
57
|
-
def
|
|
58
|
-
|
|
57
|
+
def add_group_and_compare_vectors(self,group_name,parent_group,group_data,test_vector,reference_vector,info_vector=_A):_,group=self.compare_errors.add_group('vectors',group_name,parent=parent_group,data=group_data);return(group,)+self.compare_vectors(test_vector,reference_vector,group,info_vector=info_vector)
|
|
58
|
+
def compare_matrices(self,test_mat,ref_mat,group,x_vector=_A,y_vector=_A):
|
|
59
|
+
diffs_count=0;err_limit_reached=_B;test_nb_lines=len(test_mat);test_nb_columns=len(test_mat[0])if test_nb_lines>0 else 0;ref_nb_lines=len(ref_mat);ref_nb_columns=len(ref_mat[0])if ref_nb_lines>0 else 0
|
|
59
60
|
if test_nb_lines!=ref_nb_lines or test_nb_columns!=ref_nb_columns:raise Exception('Matrices have different dimensions')
|
|
60
61
|
for i in range(test_nb_lines):
|
|
61
62
|
for j in range(test_nb_columns):
|
|
62
63
|
diff=test_mat[i][j]-ref_mat[i][j]
|
|
63
64
|
if diff==0:continue
|
|
64
|
-
else:diffs_count+=1
|
|
65
|
+
else:diffs_count+=1;group.incr('diff')
|
|
65
66
|
if err_limit_reached:continue
|
|
66
67
|
res_compare=self.compare_2_values(test_mat[i][j],ref_mat[i][j])
|
|
67
68
|
if res_compare:
|
|
@@ -69,4 +70,5 @@ class CompareFloats:
|
|
|
69
70
|
if x_vector:info['x']=x_vector[j]
|
|
70
71
|
if y_vector:info['y']=y_vector[i]
|
|
71
72
|
err_limit_reached=self.compare_errors.add(group,res_compare,info=info)
|
|
72
|
-
return err_limit_reached,diffs_count
|
|
73
|
+
return err_limit_reached,diffs_count
|
|
74
|
+
def add_group_and_compare_matrices(self,group_name,parent_group,group_data,test_mat,ref_mat,x_vector=_A,y_vector=_A):_,group=self.compare_errors.add_group('matrix',group_name,parent=parent_group,data=group_data);return(group,)+self.compare_matrices(test_mat,ref_mat,group,x_vector=x_vector,y_vector=y_vector)
|
scilens/components/executor.py
CHANGED
|
@@ -29,8 +29,7 @@ def find_command(command_path,working_dirs,guess_os_extension=False):
|
|
|
29
29
|
class Executor:
|
|
30
30
|
def __init__(A,absolute_working_dir,config,alternative_working_dir=None):
|
|
31
31
|
D=alternative_working_dir;C=absolute_working_dir;B=config;A.config=B;A.working_dir=C;A.dirs=[C]+([D]if D else[]);A.command_path=None;A.temp_dir=None
|
|
32
|
-
if B.exe_url
|
|
33
|
-
if not B.exe_url and not B.exe_path:raise ValueError('Executable URL and Path are not defined. One must be defined.')
|
|
32
|
+
if not bool(B.exe_url)+bool(B.exe_url)!=1:raise Exception('exe_url and exe_path are mutually exclusive.')
|
|
34
33
|
if not os.path.exists(A.working_dir):logging.info(f"Creating working directory {A.working_dir}");dir_create(A.working_dir)
|
|
35
34
|
def __enter__(A):return A
|
|
36
35
|
def __exit__(A,exc_type,exc_value,traceback):A._cleanup()
|
|
@@ -40,16 +39,20 @@ class Executor:
|
|
|
40
39
|
for dir in A.config.pre_folder_delete or[]:dir_remove(os.path.join(A.working_dir,dir))
|
|
41
40
|
logging.info(f"Folders creation")
|
|
42
41
|
for dir in A.config.pre_folder_creation or[]:dir_create(os.path.join(A.working_dir,dir))
|
|
43
|
-
if A.config.exe_url:
|
|
44
|
-
logging.info(f"
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
42
|
+
if A.config.exe_url or A.config.exe_path:
|
|
43
|
+
logging.info(f"Executable file preparation")
|
|
44
|
+
if A.config.exe_url:
|
|
45
|
+
logging.info(f"Download executable {A.config.exe_url}");A.temp_dir=tempfile.mkdtemp();E='executable';B=os.path.join(A.temp_dir,E)
|
|
46
|
+
try:Web().download_progress(A.config.exe_url,B,headers=A.config.exe_url_headers,callback100=lambda percentage:logging.info(f"Downloaded {percentage}%"))
|
|
47
|
+
except Exception as F:raise ValueError(f"Error downloading executable: {F}")
|
|
48
|
+
logging.info(f"Download completed")
|
|
49
|
+
elif A.config.exe_path:B=A.config.exe_path
|
|
50
|
+
if A.config.exe_unzip_and_use:logging.info(f"Unzip archive");D=os.path.dirname(B);unzip_file(B,D);B=os.path.join(D,A.config.exe_unzip_and_use);logging.info(f"Unzip completed")
|
|
51
|
+
C=find_command(B,A.dirs,guess_os_extension=A.config.exe_guess_os_extension)
|
|
52
|
+
if not C:raise FileNotFoundError(f"Command not found: {B}")
|
|
53
|
+
logging.info(f"Command path resolved: {C}");logging.info(f"Add executable permissions");G=os.stat(C).st_mode;os.chmod(C,G|stat.S_IXUSR|stat.S_IXGRP|stat.S_IXOTH)
|
|
54
|
+
elif A.config.exe_command:logging.info(f"Command path: {A.config.exe_command}");C=A.config.exe_command
|
|
55
|
+
A.command_path=C
|
|
53
56
|
def _post_operations(A):logging.info(f"Execute - Post Operations")
|
|
54
57
|
def _run_command(A):logging.info(f"Execute - Run Command");C=A.command_path;B=f"{C}{A.config.command_suffix or''}";logging.info(f"RUN COMMAND {B} in {A.working_dir}");subprocess.run(B,shell=True,check=True,cwd=A.working_dir)
|
|
55
58
|
def process(A):logging.info(f"Execute");A._pre_operations();A._run_command();A._post_operations();A._cleanup()
|
scilens/config/models/execute.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
_B="Url de l'exécutable à télécharger avant de l'exécuter. Ex : `https://github.com/org/app/releases/download/v3.31.5/app-2.12.2-linux-x86-64`."
|
|
2
1
|
_A=None
|
|
3
2
|
from pydantic import BaseModel,Field
|
|
4
|
-
class ExecuteConfig(BaseModel):pre_folder_delete:list[str]|_A=Field(default=_A,description='Liste de répertoire à supprimer avant l\'éxecution. Ex: `["DEBUG", "LOG", "OUT"]`');pre_folder_creation:list[str]|_A=Field(default=_A,description='Liste de répertoire à créeravant l\'éxecution. Ex : `["INI", "DAT"]`');exe_path:str|_A=Field(default=_A,description="Chemin de l'exécutable. Ex : `/absolute/path/executable` or `relative/path/executable`. Dans le cas, d'un chemin relatif, il testera le `working directory` et le `origin working directory
|
|
3
|
+
class ExecuteConfig(BaseModel):pre_folder_delete:list[str]|_A=Field(default=_A,description='Liste de répertoire à supprimer avant l\'éxecution. Ex: `["DEBUG", "LOG", "OUT"]`');pre_folder_creation:list[str]|_A=Field(default=_A,description='Liste de répertoire à créeravant l\'éxecution. Ex : `["INI", "DAT"]`');exe_path:str|_A=Field(default=_A,description="Chemin de l'exécutable. Ex : `/absolute/path/executable` or `relative/path/executable`. Dans le cas, d'un chemin relatif, il testera le `working directory` et le `origin working directory` (exclusif avec `exe_url` et `exe_command`).");exe_url:str|_A=Field(default=_A,description="Url de l'exécutable à télécharger avant de l'exécuter. Ex : `https://github.com/org/app/releases/download/v3.31.5/app-2.12.2-linux-x86-64` (exclusif avec `exe_path` et `exe_command`).");exe_command:str|_A=Field(default=_A,description='Commande à exécuter sans résolution de chemin. Ex : `./app-2.12.2-linux-x86-64` ou `python3 app.py` (exclusif avec `exe_path` et `exe_url`).');exe_url_headers:dict[str,str]|_A=Field(default=_A,description='Si `exe_url` les en-têtes à ajouter à la requête de téléchargement de l\'exécutable. Ex : `{"Authorization": "Bearer token"}`');exe_unzip_and_use:str|_A=Field(default=_A,description="Si l'exécutable (`exe_path` ou `exe_url`) est zippé, alors décompresse et utilise le fichier spécifié. Ex : `app-2.12.2-linux-x86-64`");exe_guess_os_extension:bool=Field(default=False,description="Si l'exécutable (`exe_path` ou `exe_url`) n'est pas trouvée, cherche avec des extensions en fonction de l'OS. Ex : `.exe`, `.bat` pour windows");command_suffix:str|_A=Field(default=_A,description='Suffixe à ajouter à la commande. Typiquemnt des secrets. Ex : ` --token DGDFGDFGDH`');working_dir:str|_A=Field(default=_A,description="Chemin relatif du répertoire de travail pour l'éxecution de la commande. Dans le contexte processeur `ExecuteAndCompare` si non défini, récupère respectivement la valeur de `compare.sources.test_folder_relative_path` ou `compare.sources.reference_folder_relative_path`")
|
|
@@ -6,12 +6,12 @@ from scilens.components.executor import Executor
|
|
|
6
6
|
from scilens.components.compare_folders import CompareFolders
|
|
7
7
|
class ExecuteAndCompare:
|
|
8
8
|
def __init__(A,context):B=context;A.context=B;A.compare_folders=CompareFolders(B)
|
|
9
|
-
def process(
|
|
10
|
-
L='error';J='dir';I='label';B='config';H=ProcessorResults();E
|
|
9
|
+
def process(E):
|
|
10
|
+
L='error';J='dir';I='label';B='config';H=ProcessorResults();D=E.context.config.execute;F=E.context.config.execute_and_compare;M=os.path.join(E.context.working_dir,F.test.working_dir)if F.test.working_dir else E.compare_folders.test_base;N=os.path.join(E.context.working_dir,F.reference.working_dir)if F.reference.working_dir else E.compare_folders.ref_base;G=[{I:'test',J:M,B:F.test}]
|
|
11
11
|
if not F.test_only:G.append({I:'reference',J:N,B:F.reference})
|
|
12
12
|
for A in G:
|
|
13
|
-
if not A[B]:C=
|
|
14
|
-
else:C=ExecuteConfig();C.pre_folder_delete=A[B].pre_folder_delete or
|
|
13
|
+
if not A[B]:C=D
|
|
14
|
+
else:C=ExecuteConfig();C.pre_folder_delete=A[B].pre_folder_delete or D.pre_folder_delete;C.pre_folder_creation=A[B].pre_folder_creation or D.pre_folder_creation;C.exe_path=A[B].exe_path or D.exe_path;C.exe_url=A[B].exe_url or D.exe_url;C.exe_command=A[B].exe_command or D.exe_command;C.exe_url_headers=A[B].exe_url_headers or D.exe_url_headers;C.exe_unzip_and_use=A[B].exe_unzip_and_use or D.exe_unzip_and_use;C.exe_guess_os_extension=A[B].exe_guess_os_extension or D.exe_guess_os_extension;C.command_suffix=A[B].command_suffix or D.command_suffix
|
|
15
15
|
logging.info(f"Execute {A[I]} Command")
|
|
16
|
-
with Executor(A[J],C,alternative_working_dir=
|
|
17
|
-
G=
|
|
16
|
+
with Executor(A[J],C,alternative_working_dir=E.context.origin_working_dir)as O:O.process()
|
|
17
|
+
G=E.compare_folders.compute_list_filenames();logging.info(f"Number files to compare: {len(G)}");K=E.compare_folders.compute_comparison(G);H.warnings=[A[L]for A in K if A.get(L)];H.data=K;return H
|
scilens/readers/cols_dataset.py
CHANGED
|
@@ -26,22 +26,22 @@ def cols_dataset_get_curves_col_x(cols_dataset,col_x):
|
|
|
26
26
|
for D in J:B=A.data[C];K=A.data[D];L={I:A.names[D],'short_title':A.names[D],'series':[[B[A],K[A]]for A in range(A.rows_count)],_C:D};F+=[L];M={I:A.names[D],'type':'simple','xaxis':A.names[C],'yaxis':A.names[D],_B:[len(F)-1]};H+=[M]
|
|
27
27
|
return{_B:F,_E:H},E
|
|
28
28
|
def compare(group,compare_floats,reader_test,reader_ref,cols_curve):
|
|
29
|
-
|
|
30
|
-
if len(A.numeric_col_indexes)!=len(
|
|
31
|
-
D=[''for A in range(A.cols_count)];
|
|
32
|
-
if C and C.type==ReaderCurveParserNameConfig.COL_X:
|
|
33
|
-
|
|
29
|
+
J='Errors limit reached';F=reader_ref;E=group;C=cols_curve;A=reader_test;logging.debug(f"compare cols: {E.name}")
|
|
30
|
+
if len(A.numeric_col_indexes)!=len(F.numeric_col_indexes):E.error=f"Number Float columns indexes are different: {len(A.numeric_col_indexes)} != {len(F.numeric_col_indexes)}";return
|
|
31
|
+
D=[''for A in range(A.cols_count)];K=_A;G=_A
|
|
32
|
+
if C and C.type==ReaderCurveParserNameConfig.COL_X:L=C.info[_D];K=A.data[L];G=A.names[L]
|
|
33
|
+
H=False
|
|
34
34
|
for B in range(A.cols_count):
|
|
35
35
|
if B not in A.numeric_col_indexes:continue
|
|
36
|
-
if
|
|
37
|
-
|
|
38
|
-
if
|
|
39
|
-
if
|
|
36
|
+
if H:D[B]=J;continue
|
|
37
|
+
P=A.data[B];Q=F.data[B];logging.debug(f"compare cols: {A.names[B]}");M,R,T=compare_floats.add_group_and_compare_vectors(A.names[B],E,{'info_prefix':G}if G else _A,P,Q,info_vector=K)
|
|
38
|
+
if R:H=True;D[B]=J;continue
|
|
39
|
+
if M.total_errors>0:D[B]=f"{M.total_errors} comparison errors"
|
|
40
40
|
if C:
|
|
41
|
-
for
|
|
42
|
-
|
|
43
|
-
for
|
|
44
|
-
|
|
45
|
-
if D[
|
|
46
|
-
|
|
47
|
-
E.error=
|
|
41
|
+
for N in C.curves[_E]:
|
|
42
|
+
O=0
|
|
43
|
+
for S in N[_B]:
|
|
44
|
+
I=C.curves[_B][S]
|
|
45
|
+
if D[I[_C]]:I['comparison_error']=D[I[_C]];O+=1
|
|
46
|
+
N['comparison']={'curves_nb_with_error':O}
|
|
47
|
+
E.error=J if H else _A;E.info={'cols_has_error':D}
|
scilens/readers/mat_dataset.py
CHANGED
|
@@ -19,4 +19,4 @@ def from_reader(reader,x_value_line=_A,has_header=False,has_y=False):
|
|
|
19
19
|
else:
|
|
20
20
|
for C in B:G=[float(A)for A in C];A.append(G)
|
|
21
21
|
return MatDataset(nb_lines=len(A),nb_columns=len(A[0])if len(A)>0 else 0,data=A,x_values=H,y_values=I)
|
|
22
|
-
def compare(parent_group,compare_floats,test,ref,group_name=''):
|
|
22
|
+
def compare(parent_group,compare_floats,test,ref,group_name=''):B=parent_group;A=test;D,C,E=compare_floats.add_group_and_compare_matrices(group_name,B,group_data=_A,test_mat=A.data,ref_mat=ref.data,x_vector=A.x_values,y_vector=A.y_values);B.error='Errors limit reached'if C else _A
|
|
@@ -9,11 +9,11 @@ scilens/cli/main.py,sha256=LljcS0s2E35y4YZpV01GhMhMK9HyRRHYmxc_q_kSurI,6004
|
|
|
9
9
|
scilens/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
10
|
scilens/components/analyse_folder.py,sha256=yqc-dscKaHLZJCYeXGak2v0c3F2aeX0E11AFPfya6r0,208
|
|
11
11
|
scilens/components/compare_2_files.py,sha256=U4xumE28ijFbnrTPH8FgRyR_b5f04jOjaCmegJvCvSE,1483
|
|
12
|
-
scilens/components/compare_errors.py,sha256=
|
|
13
|
-
scilens/components/compare_floats.py,sha256=
|
|
12
|
+
scilens/components/compare_errors.py,sha256=vGb4DWP89HMIeBm0dZU2nt-ksppAs_37xtCHaPd0w5Y,1640
|
|
13
|
+
scilens/components/compare_floats.py,sha256=p1lnnwkGJXIsb6Y5psQc_5FcOuB2vP_cIQHXhZjWPXc,5617
|
|
14
14
|
scilens/components/compare_folders.py,sha256=LZ1AuYxLVHMNbtXWXQrdms4vZgOQthvDy-8NFD_EFjc,2617
|
|
15
15
|
scilens/components/compare_models.py,sha256=SCPd747h_nd4ewZsqLB6CFr27v6q99NELJb-gpkdj0o,918
|
|
16
|
-
scilens/components/executor.py,sha256=
|
|
16
|
+
scilens/components/executor.py,sha256=j5xejkCaaPyl3V38Q4HxxXcAx4Tnj8CILAjSJ1G7OIE,3417
|
|
17
17
|
scilens/components/file_reader.py,sha256=7SbKCqb4Co_pqAKX3wweYhqAcVkU7BDlT903sLd76Kc,1407
|
|
18
18
|
scilens/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
19
|
scilens/config/cli_run_options.py,sha256=Ls7yK5QDUPFbk73nbjGuPvuRbBRYw4Miag5ISpu3prg,281
|
|
@@ -23,7 +23,7 @@ scilens/config/models/__init__.py,sha256=eLCW1OLVINewGFy5GXSrOk8Rab_QsgKAuoErBjp
|
|
|
23
23
|
scilens/config/models/app.py,sha256=JltWRjjqXYkH6rg3OHYhMfkBqHFhZEZdthqES3LxvzY,1453
|
|
24
24
|
scilens/config/models/compare.py,sha256=_SLMxf81fpuod8izZm72Jn12euRPxB0wHJSfUuIANbE,1639
|
|
25
25
|
scilens/config/models/compare_float_thresholds.py,sha256=J5XBK1dAnmU-i2uA2bsaHnTM_m07_i17wsO8UiCw46o,1844
|
|
26
|
-
scilens/config/models/execute.py,sha256=
|
|
26
|
+
scilens/config/models/execute.py,sha256=8issd_hg49SdVkDq2TLDB1vBJY4M1t279XERNUd3VVs,2142
|
|
27
27
|
scilens/config/models/execute_and_compare.py,sha256=TWL6yXGvQSaaV6nhHqWLvtr3v396APIoDNt0U1TbMro,582
|
|
28
28
|
scilens/config/models/file_reader.py,sha256=c18vKhVcBX4ufpbnCBJyVyAsQtlxpwx0lGVuf1i8EGA,1176
|
|
29
29
|
scilens/config/models/reader_format_cols_curve.py,sha256=eKLvifq1xuN8sPds9ijfru3vgMZ3Odv5tGfeiK4Sfk4,1860
|
|
@@ -42,14 +42,14 @@ scilens/helpers/templates/style.css,sha256=2_IndKW2qtGhuoU9T3Sru4NkHR5CXTTs5_nc9
|
|
|
42
42
|
scilens/processors/__init__.py,sha256=x6bmqQVCcdJ7R2oG-_xTVtvl9qRleliEZlZR-Hq9Yc0,105
|
|
43
43
|
scilens/processors/analyse.py,sha256=hG2jALUqtoEwTPiLxDGV9Nbv6TU_SrfzwV_-1RkuiKw,828
|
|
44
44
|
scilens/processors/compare.py,sha256=wCdtDC8nJUeG9dolu2B6rTg4-jW0MYllPbvXFBX64nU,529
|
|
45
|
-
scilens/processors/execute_and_compare.py,sha256=
|
|
45
|
+
scilens/processors/execute_and_compare.py,sha256=KX0bVSLzsc2VvxivTksGoLg8612WRjPkFAMWqB0hfYg,1784
|
|
46
46
|
scilens/processors/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
47
|
scilens/processors/models/results.py,sha256=KoWxh13Zgi7PuPql8hkf4VjCis42ZxAuzIgJxBWVaX8,119
|
|
48
48
|
scilens/processors/processor_interface.py,sha256=jzMp1529JXnMGTJijVy6b_1zmARAMNv70f2lgys7vn4,452
|
|
49
49
|
scilens/readers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
-
scilens/readers/cols_dataset.py,sha256=
|
|
50
|
+
scilens/readers/cols_dataset.py,sha256=V4tAokAwY9_eVfyH-UINztxzJUcLJRk1CdaZprs8Wfk,2475
|
|
51
51
|
scilens/readers/exceptions.py,sha256=JzmxcjnR5sH-IOWVeCC5A1bSwxv-jCAtIJvDjzx1CTI,32
|
|
52
|
-
scilens/readers/mat_dataset.py,sha256
|
|
52
|
+
scilens/readers/mat_dataset.py,sha256=-2NJJxOu8qEMhni-kGT9F-MwDA98_Nrt2cC0TYMUNvw,1180
|
|
53
53
|
scilens/readers/reader_csv.py,sha256=aPd2IxFiUXYmH_EpNZkCHV1oMWctZW7YSPwC8q75SIo,3490
|
|
54
54
|
scilens/readers/reader_interface.py,sha256=nnttHL7wt4MOXpi-SBkk8DYxVWscOPG8JFl_z12mIAo,922
|
|
55
55
|
scilens/readers/reader_manager.py,sha256=DFinxIk3IIIcB6JxybGcv-mXt3jhXgCwUtzR0TqhB2Q,2684
|
|
@@ -97,7 +97,7 @@ scilens/utils/template.py,sha256=9dlXX3nmfzDRUwzPJOkoxk15UXivZ2SW-McdCwokFa4,443
|
|
|
97
97
|
scilens/utils/time_tracker.py,sha256=DdVBoMpVLXrX0qZZXyLm4g38EwDVLlRcBqcpNex1mYY,545
|
|
98
98
|
scilens/utils/vectors.py,sha256=4N2BZSC5n3HgZqPujDGF5NdjVmSL1rOHb_qw4OoABQY,103
|
|
99
99
|
scilens/utils/web.py,sha256=MAFWpIFOKz7QhqDoFh-Qwstvc76KpcxstSgHFT8FOL4,901
|
|
100
|
-
scilens-0.3.
|
|
101
|
-
scilens-0.3.
|
|
102
|
-
scilens-0.3.
|
|
103
|
-
scilens-0.3.
|
|
100
|
+
scilens-0.3.3.dist-info/METADATA,sha256=EWuw4LVn0kwm5tzOIdtA5Ayg-2M3Tm8fgeiHFi7-jbo,1367
|
|
101
|
+
scilens-0.3.3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
102
|
+
scilens-0.3.3.dist-info/entry_points.txt,sha256=DaKGgxUEUv34GJAoXtta6ecL37ercejep9sCSSRQK2s,48
|
|
103
|
+
scilens-0.3.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|