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.
@@ -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
- F=group;C=comp_res;D=C.severity;E=C.message;G=C.comp_err
15
- if A.ignore_warnings and D==SEVERITY_WARNING:return _B
16
- A.count+=1;B=A._messages_map.get(E)
17
- if B is _A:B=len(A.messages);A.messages.append(E);A._messages_map[E]=B
18
- A.errors[D].append(CompareErr(err=G,msg=B,group=F.id,info=info));F.incr(D)
19
- if A.count>=A.nb_max:A.limit_reached=True;return True
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,group_id,info_vector=_A):
25
- B='ignore';A='RIAE_trapezoid';group=self.compare_errors.groups[group_id]
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 compare_matrices(self,test_mat,ref_mat,group_id,x_vector=_A,y_vector=_A):
58
- group=self.compare_errors.groups[group_id];info={};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
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)
@@ -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 and B.exe_path:raise ValueError('Executable URL and Path are defined. Only one can be defined.')
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"Download executable {A.config.exe_url}");A.temp_dir=tempfile.mkdtemp();E='executable';B=os.path.join(A.temp_dir,E)
45
- try:Web().download_progress(A.config.exe_url,B,headers=A.config.exe_url_headers,callback100=lambda percentage:logging.info(f"Downloaded {percentage}%"))
46
- except Exception as F:raise ValueError(f"Error downloading executable: {F}")
47
- logging.info(f"Download completed")
48
- else:B=A.config.exe_path
49
- 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")
50
- C=find_command(B,A.dirs,guess_os_extension=A.config.exe_guess_os_extension)
51
- if not C:raise FileNotFoundError(f"Command not found: {B}")
52
- 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);A.command_path=C
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()
@@ -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`.");exe_url:str|_A=Field(default=_A,description=_B);exe_url_headers:dict[str,str]|_A=Field(default=_A,description=_B);exe_unzip_and_use:str|_A=Field(default=_A,description="Si l'exécutable (path ou 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 la commande à exécuter 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`")
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(D):
10
- L='error';J='dir';I='label';B='config';H=ProcessorResults();E=D.context.config.execute;F=D.context.config.execute_and_compare;M=os.path.join(D.context.working_dir,F.test.working_dir)if F.test.working_dir else D.compare_folders.test_base;N=os.path.join(D.context.working_dir,F.reference.working_dir)if F.reference.working_dir else D.compare_folders.ref_base;G=[{I:'test',J:M,B:F.test}]
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=E
14
- else:C=ExecuteConfig();C.pre_folder_delete=A[B].pre_folder_delete or E.pre_folder_delete;C.pre_folder_creation=A[B].pre_folder_creation or E.pre_folder_creation;C.exe_path=A[B].exe_path or E.exe_path;C.exe_url=A[B].exe_url or E.exe_url;C.exe_url_headers=A[B].exe_url_headers or E.exe_url_headers;C.exe_unzip_and_use=A[B].exe_unzip_and_use or E.exe_unzip_and_use;C.exe_guess_os_extension=A[B].exe_guess_os_extension or E.exe_guess_os_extension;C.command_suffix=A[B].command_suffix or E.command_suffix
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=D.context.origin_working_dir)as O:O.process()
17
- G=D.compare_folders.compute_list_filenames();logging.info(f"Number files to compare: {len(G)}");K=D.compare_folders.compute_comparison(G);H.warnings=[A[L]for A in K if A.get(L)];H.data=K;return H
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
@@ -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
- L=compare_floats;K='Errors limit reached';G=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(G.numeric_col_indexes):E.error=f"Number Float columns indexes are different: {len(A.numeric_col_indexes)} != {len(G.numeric_col_indexes)}";return
31
- D=[''for A in range(A.cols_count)];M=_A;H=_A
32
- if C and C.type==ReaderCurveParserNameConfig.COL_X:N=C.info[_D];M=A.data[N];H=A.names[N]
33
- I=False
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 I:D[B]=K;continue
37
- Q=A.data[B];R=G.data[B];U,F=L.compare_errors.add_group('vectors',A.names[B],parent=E,data={'info_prefix':H}if H else _A);logging.debug(f"compare cols: {F.name}");S,V=L.compare_vectors(Q,R,group_id=F.id,info_vector=M)
38
- if S:I=True;D[B]=K;continue
39
- if F.total_errors>0:D[B]=f"{F.total_errors} comparison errors"
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 O in C.curves[_E]:
42
- P=0
43
- for T in O[_B]:
44
- J=C.curves[_B][T]
45
- if D[J[_C]]:J['comparison_error']=D[J[_C]];P+=1
46
- O['comparison']={'curves_nb_with_error':P}
47
- E.error=K if I else _A;E.info={'cols_has_error':D}
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}
@@ -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=''):C=compare_floats;B=parent_group;A=test;F,D=C.compare_errors.add_group('matrix',group_name,parent=B);E,G=C.compare_matrices(A.data,ref.data,D.id,x_vector=A.x_values,y_vector=A.y_values);B.error='Errors limit reached'if E else _A
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scilens
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: A CesGensLaB framework for data collecting and deep analysis
5
5
  Home-page: https://scilens.dev
6
6
  License: Proprietary
@@ -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=Kw_zpVmA3Fb7yVDXog2poLaTsV_K81eLqv-z-b73Nlw,1495
13
- scilens/components/compare_floats.py,sha256=tmHwS4ivzdA9iJBePHDQrDlnA9zxqjLhIjxuvwPxIKc,5063
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=LaT6QnWk8Xf2qdFqBSa58iDh-cUfu_uMIvllpLHmLCk,3314
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=pFY-gZuBvLbcjTEcoNhPPO7FMFmKa6_TU5IXyKaf81A,1706
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=oUaI8kh8pkR86kGvN2EXtq-tbgphkzKiURcrhjXbnL4,1736
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=JIfPBzQZml6VlykbrMcCanR12eEnjY1A-ECgXs8wtZ4,2527
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=vUEjAK6nuY7miLJvjSkiHAU64KaNa1VCx7EhGPazp-U,1190
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.1.dist-info/METADATA,sha256=AmSUTNHDOlrHTmC0Qp60jHaju--5SiGbDR-EG-uNKm4,1367
101
- scilens-0.3.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
102
- scilens-0.3.1.dist-info/entry_points.txt,sha256=DaKGgxUEUv34GJAoXtta6ecL37ercejep9sCSSRQK2s,48
103
- scilens-0.3.1.dist-info/RECORD,,
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,,