scilens 0.3.4__py3-none-any.whl → 0.3.5__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 +22 -16
- scilens/config/models/compare.py +1 -1
- scilens/config/models/reader_format_csv.py +3 -2
- scilens/config/models/reader_format_netcdf.py +2 -1
- scilens/readers/mat_dataset.py +13 -3
- scilens/readers/reader_csv.py +16 -13
- scilens/report/templates/compare_12_sections.html +31 -21
- scilens/report/templates/index.html +33 -3
- scilens/report/templates/js_curvemgr.js +1 -1
- scilens/report/templates/{js_com_dom.js → js_dom.js} +3 -3
- scilens/report/templates/js_palette.js +7 -0
- scilens/report/templates/uti_matrix.js +90 -0
- scilens/report/templates/uti_spectrograms.js +110 -0
- scilens/report/templates/utils_compare_report_framesseries.js +2 -3
- {scilens-0.3.4.dist-info → scilens-0.3.5.dist-info}/METADATA +1 -1
- {scilens-0.3.4.dist-info → scilens-0.3.5.dist-info}/RECORD +18 -16
- scilens/report/templates/js_com_palette.js +0 -7
- {scilens-0.3.4.dist-info → scilens-0.3.5.dist-info}/WHEEL +0 -0
- {scilens-0.3.4.dist-info → scilens-0.3.5.dist-info}/entry_points.txt +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import os
|
|
1
|
+
import os,re
|
|
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
|
|
@@ -8,19 +8,25 @@ from scilens.components.compare_floats import CompareFloats
|
|
|
8
8
|
class Compare2Files:
|
|
9
9
|
def __init__(A,context):A.context=context
|
|
10
10
|
def compare(B,path_test,path_ref):
|
|
11
|
-
|
|
12
|
-
for(
|
|
13
|
-
if not
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if
|
|
24
|
-
C.
|
|
25
|
-
if
|
|
11
|
+
W='comparison_errors';V='comparison';S=path_ref;R=path_test;Q='reader';P='skipped';N='error';M=True;L='ref';G='path';F='test';A={F:{},L:{},V:None,W:None};D={F:{G:R},L:{G:S}};O=B.context.config.compare.sources.not_matching_source_ignore_pattern
|
|
12
|
+
for(H,I)in D.items():
|
|
13
|
+
if not I.get(G)or not os.path.exists(I[G]):
|
|
14
|
+
if O:
|
|
15
|
+
if O=='*':A[P]=M;return A
|
|
16
|
+
else:
|
|
17
|
+
X=os.path.basename(S if H==F else R);Y=re.search(O,X)
|
|
18
|
+
if Y:A[P]=M;return A
|
|
19
|
+
A[N]=f"file {H} does not exist";return A
|
|
20
|
+
Z=FileReader(B.context.working_dir,B.context.config.file_reader,B.context.config.readers,config_alternate_path=B.context.origin_working_dir)
|
|
21
|
+
for(H,I)in D.items():D[H][Q]=Z.read(I[G])
|
|
22
|
+
C=D[F][Q];J=D[L][Q]
|
|
23
|
+
if not C or not J:A[P]=M;return A
|
|
24
|
+
A[F]=C.info();A[L]=J.info()
|
|
25
|
+
if C.read_error:A[N]=C.read_error;return A
|
|
26
|
+
K=CompareErrors(B.context.config.compare.errors_limit,B.context.config.compare.ignore_warnings);a=CompareFloats(K,B.context.config.compare.float_thresholds);C.compare(a,J,param_is_ref=M);E=K.root_group;T={'total_diffs':E.total_diffs}
|
|
27
|
+
if E.info:T.update(E.info)
|
|
28
|
+
A[V]=T;A[W]=K.get_data()
|
|
29
|
+
if E.error:A[N]=E.error;return A
|
|
30
|
+
C.close();J.close();U=len(K.errors[SEVERITY_ERROR])
|
|
31
|
+
if U>0:b=f"{U} comparison errors";A[N]=b
|
|
26
32
|
return A
|
scilens/config/models/compare.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
_A=None
|
|
2
2
|
from pydantic import BaseModel,Field
|
|
3
3
|
from scilens.config.models.compare_float_thresholds import CompareFloatThresholdsConfig
|
|
4
|
-
class CompareSourceFoldersConfig(BaseModel):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.');additional_path_suffix:str=Field(default='',description='Additional path to add after test and reference folders.');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_`')
|
|
4
|
+
class CompareSourceFoldersConfig(BaseModel):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.');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.');additional_path_suffix:str=Field(default='',description='Additional path to add after test and reference folders.');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_`')
|
|
5
5
|
class CompareConfig(BaseModel):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='Seuil 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`).")
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
_B=False
|
|
1
2
|
_A=None
|
|
2
3
|
from pydantic import BaseModel,Field
|
|
3
4
|
from scilens.config.models.reader_format_cols_curve import ReaderColsCurveParserConfig
|
|
4
|
-
class ReaderCsvMatrixConfig(BaseModel):x_value_line:int|_A=Field(default=_A,description="Indique la ligne des valeurs x si applicable. Peut être la ligne d'en-tête (=1).");has_y:bool=Field(default=
|
|
5
|
-
class ReaderCsvConfig(BaseModel):delimiter:str|_A=Field(default=',',description='Délimiteur de colonnes.');quotechar:str|_A=Field(default='"',description='Délimiteur de texte.');has_header:bool|_A=Field(default=_A,description="Indique si la 1ère ligne est une ligne d'en-tête. Si non spécifié, il y aura une détection automatique.");is_matrix:bool=Field(default=
|
|
5
|
+
class ReaderCsvMatrixConfig(BaseModel):x_value_line:int|_A=Field(default=_A,description="Indique la ligne des valeurs x si applicable. Peut être la ligne d'en-tête (=1).");has_y:bool=Field(default=_B,description='Indique si la première colonne est la colonne des valeurs y.');display_spectrogram:bool=Field(default=_B,description='Indique si la matrice doit être affichée en mode spectrogramme.');display_frameseries:bool=Field(default=_B,description='Indique si la matrice doit être affichée en mode frameseries.')
|
|
6
|
+
class ReaderCsvConfig(BaseModel):delimiter:str|_A=Field(default=',',description='Délimiteur de colonnes.');quotechar:str|_A=Field(default='"',description='Délimiteur de texte.');has_header:bool|_A=Field(default=_A,description="Indique si la 1ère ligne est une ligne d'en-tête. Si non spécifié, il y aura une détection automatique.");is_matrix:bool=Field(default=_B,description='Indique si le fichier est une matrice.');ignore_columns:list[str]|_A=Field(default=_A,description='Liste des noms des colonnes à ignorer. (Valide seulement si la première ligne est une ligne en-têtes et non matrice)');curve_parser:ReaderColsCurveParserConfig|_A=Field(default=_A,description='Parseur de courbe à utiliser.');matrix:ReaderCsvMatrixConfig|_A=Field(default=_A,description='Configuration de la matrice. (Valide seulement si `is_matrix` est vrai)')
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
_B=False
|
|
1
2
|
_A=None
|
|
2
3
|
from typing import Literal
|
|
3
4
|
from pydantic import BaseModel,Field
|
|
4
5
|
CurveParser=Literal['simple_1D','frameseries_2D']
|
|
5
|
-
class ReaderNetcdfConfig(BaseModel):groups_depth:int|_A=Field(default=_A,description='Définit la profondeur de recherche des groupes. Si vide prendra tous les groupes.');units_attributes:list[str]|_A=Field(default=_A,description='Noms des attributs de variable qui spécifient les unités.');curve_parser:CurveParser|_A=Field(default=_A,description='Parser de courbes: `simple_1D` or `frameseries_2D`.');curve_x_variable:str|_A=Field(default=_A,description='Nom de variable pour les axes X (`
|
|
6
|
+
class ReaderNetcdfConfig(BaseModel):groups_depth:int|_A=Field(default=_A,description='Définit la profondeur de recherche des groupes. Si vide prendra tous les groupes.');units_attributes:list[str]|_A=Field(default=_A,description='Noms des attributs de variable qui spécifient les unités.');curve_parser:CurveParser|_A=Field(default=_A,description='Parser de courbes: `simple_1D` or `frameseries_2D`.');matrices_display_spectrogram:bool=Field(default=_B,description='Parseur de courbes les variables matricielles (`2D`).');curve_x_variable:str|_A=Field(default=_A,description='Nom de variable (`1D`) pour les axes X (tout parseur).');curve_y_variable:str|_A=Field(default=_A,description='Nom de variable (`1D`) pour les axes Y (`curve_parser_frameseries`).');curve_step_variable:str|_A=Field(default=_A,description='Nom de variable `Step` (`1D`) (`curve_parser_frameseries`).');compare_1D:bool=Field(default=_B,description='Pour les processeurs qui comparent, compare les variables vecteurs (`1D`).');compare_2D:bool=Field(default=_B,description='Pour les processeurs qui comparent, compare les variables matrices (`2D`).')
|
scilens/readers/mat_dataset.py
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
_B=False
|
|
1
2
|
_A=None
|
|
2
3
|
import csv
|
|
3
4
|
from collections.abc import Iterator
|
|
4
|
-
from dataclasses import dataclass,field
|
|
5
|
+
from dataclasses import dataclass,field,asdict
|
|
5
6
|
from scilens.components.compare_models import CompareGroup
|
|
6
7
|
from scilens.components.compare_floats import CompareFloats
|
|
7
8
|
@dataclass
|
|
8
9
|
class MatDataset:nb_lines:int=0;nb_columns:int=0;data:list[list[float]]=field(default_factory=lambda:[]);x_values:list[float]|_A=_A;y_values:list[float]|_A=_A
|
|
9
|
-
def from_reader(reader,x_value_line=_A,has_header=
|
|
10
|
+
def from_reader(reader,x_value_line=_A,has_header=_B,has_y=_B):
|
|
10
11
|
E=has_y;D=x_value_line;B=reader;H=_A;I=[]if E else _A;A=[];F=0
|
|
11
12
|
if D:
|
|
12
13
|
J=1 if E else 0
|
|
@@ -19,4 +20,13 @@ def from_reader(reader,x_value_line=_A,has_header=False,has_y=False):
|
|
|
19
20
|
else:
|
|
20
21
|
for C in B:G=[float(A)for A in C];A.append(G)
|
|
21
22
|
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=''):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
|
|
23
|
+
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
|
|
24
|
+
def get_data(datasets,names,display_spectrograms=_B,display_frameseries=_B,frameseries_steps_data=_A,frameseries_steps_name=_A):
|
|
25
|
+
F='frameseries';E='display';D=frameseries_steps_data;C=names;B=datasets
|
|
26
|
+
if len(B)!=len(C):raise ValueError('Datasets and names must have the same length')
|
|
27
|
+
A={'datasets':[asdict(A)for A in B],'names':C}
|
|
28
|
+
if display_spectrograms:A['spectrograms']={E:1}
|
|
29
|
+
if display_frameseries:
|
|
30
|
+
A[F]={E:1}
|
|
31
|
+
if D:A[F]['steps']={'name':frameseries_steps_name,'data':D}
|
|
32
|
+
return A
|
scilens/readers/reader_csv.py
CHANGED
|
@@ -2,7 +2,7 @@ _A=None
|
|
|
2
2
|
import logging,csv
|
|
3
3
|
from scilens.readers.reader_interface import ReaderInterface
|
|
4
4
|
from scilens.readers.cols_dataset import ColsDataset,ColsCurves,cols_dataset_get_curves_col_x,compare as cols_compare
|
|
5
|
-
from scilens.readers.mat_dataset import MatDataset,from_reader as mat_from_reader,compare as mat_compare
|
|
5
|
+
from scilens.readers.mat_dataset import MatDataset,from_reader as mat_from_reader,compare as mat_compare,get_data
|
|
6
6
|
from scilens.config.models.reader_format_csv import ReaderCsvConfig,ReaderCsvMatrixConfig
|
|
7
7
|
from scilens.config.models.reader_format_cols_curve import ReaderCurveParserNameConfig
|
|
8
8
|
from scilens.components.compare_models import CompareGroup
|
|
@@ -20,20 +20,23 @@ def csv_detect(path,delimiter,quotechar,encoding):
|
|
|
20
20
|
class ReaderCsv(ReaderInterface):
|
|
21
21
|
configuration_type_code='csv';category='datalines';extensions=['CSV']
|
|
22
22
|
def read(A,reader_options):
|
|
23
|
-
B=reader_options;A.reader_options=B;A.raw_lines_number=_A;A.curves=_A;D,
|
|
24
|
-
if B.is_matrix:
|
|
23
|
+
B=reader_options;A.reader_options=B;A.raw_lines_number=_A;A.curves=_A;A.report_matrices=_A;D,F,N=csv_detect(A.origin.path,A.reader_options.delimiter,A.reader_options.quotechar,encoding=A.encoding);A.has_header=D;A.cols=F;A.numeric_col_indexes=N;J=open(A.origin.path,'r',encoding=A.encoding);K=csv.reader(J,delimiter=A.reader_options.delimiter,quotechar=A.reader_options.quotechar)
|
|
24
|
+
if B.is_matrix:
|
|
25
|
+
E=B.matrix or ReaderCsvMatrixConfig();G=mat_from_reader(K,has_header=D,x_value_line=E.x_value_line,has_y=E.has_y)
|
|
26
|
+
if E.display_spectrogram or E.display_frameseries:A.report_matrices=get_data([G],['csv'],E.display_spectrogram,E.display_frameseries)
|
|
27
|
+
A.mat_dataset=G;A.raw_lines_number=G.nb_lines+(1 if D else 0)
|
|
25
28
|
else:
|
|
26
29
|
if B.ignore_columns:
|
|
27
30
|
if not D:raise Exception('Ignore columns is not supported without header.')
|
|
28
31
|
A.numeric_col_indexes=[C for C in A.numeric_col_indexes if A.cols[C]not in B.ignore_columns]
|
|
29
|
-
|
|
30
|
-
for O in
|
|
31
|
-
|
|
32
|
-
if D and
|
|
33
|
-
for(
|
|
34
|
-
if
|
|
35
|
-
C.data[
|
|
36
|
-
C.origin_line_nb.append(
|
|
32
|
+
L=len(F);C=ColsDataset(cols_count=L,names=F,numeric_col_indexes=A.numeric_col_indexes,data=[[]for A in range(L)]);H=0
|
|
33
|
+
for O in K:
|
|
34
|
+
H+=1
|
|
35
|
+
if D and H==1:continue
|
|
36
|
+
for(M,I)in enumerate(O):
|
|
37
|
+
if M in C.numeric_col_indexes:I=float(I)
|
|
38
|
+
C.data[M].append(I)
|
|
39
|
+
C.origin_line_nb.append(H)
|
|
37
40
|
C.rows_count=len(C.origin_line_nb);A.cols_dataset=C;A.raw_lines_number=C.rows_count+(1 if D else 0)
|
|
38
41
|
if B.curve_parser:
|
|
39
42
|
if B.curve_parser.name==ReaderCurveParserNameConfig.COL_X:
|
|
@@ -41,9 +44,9 @@ class ReaderCsv(ReaderInterface):
|
|
|
41
44
|
if A.curves:A.cols_curve=ColsCurves(type=ReaderCurveParserNameConfig.COL_X,info=P,curves=A.curves)
|
|
42
45
|
elif B.curve_parser.name==ReaderCurveParserNameConfig.COLS_COUPLE:raise NotImplementedError('cols_couple not implemented')
|
|
43
46
|
else:raise Exception('Curve parser not supported.')
|
|
44
|
-
|
|
47
|
+
J.close()
|
|
45
48
|
def compare(A,compare_floats,param_reader,param_is_ref=True):
|
|
46
49
|
H='node';D=param_is_ref;C=param_reader;B=compare_floats;I=A.reader_options
|
|
47
50
|
if I.is_matrix:E=A.mat_dataset if D else C.mat_dataset;F=A.mat_dataset if not D else C.mat_dataset;J,G=B.compare_errors.add_group(H,'csv matrix');mat_compare(G,B,E,F)
|
|
48
51
|
else:E=A.cols_dataset if D else C.cols_dataset;F=A.cols_dataset if not D else C.cols_dataset;K=A.cols_curve if hasattr(A,'cols_curve')else _A;J,G=B.compare_errors.add_group(H,'csv cols');cols_compare(G,B,E,F,K)
|
|
49
|
-
def class_info(A):return{'cols':A.cols,'raw_lines_number':A.raw_lines_number,'curves':A.curves}
|
|
52
|
+
def class_info(A):return{'cols':A.cols,'raw_lines_number':A.raw_lines_number,'curves':A.curves,'matrices':A.report_matrices}
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
{% for file in data.files %}
|
|
2
|
+
|
|
3
|
+
{% set file_index = loop.index %}
|
|
4
|
+
|
|
2
5
|
{% if not file.skipped %}
|
|
3
6
|
|
|
4
7
|
|
|
5
|
-
<section id="section_{{
|
|
8
|
+
<section id="section_{{ file_index }}" style="display: none;">
|
|
6
9
|
<!-- TITLE -->
|
|
7
10
|
<h2>
|
|
8
11
|
{{ file.name }}
|
|
9
|
-
<span class="{{ ns.statuses[
|
|
10
|
-
<span style="font-size:0.9rem;color:#666;">(#{{
|
|
12
|
+
<span class="{{ ns.statuses[file_index] }}">{{ ns.statuses[file_index] }}</span>
|
|
13
|
+
<span style="font-size:0.9rem;color:#666;">(#{{ file_index }})</span>
|
|
11
14
|
<!-- actions -->
|
|
12
|
-
<action data-command="toogle" data-args="file_content_{{
|
|
15
|
+
<action data-command="toogle" data-args="file_content_{{ file_index|string }}"></action>
|
|
13
16
|
{% if file.test.origin and file.test.origin.path %}<action data-command="open_file" data-args="{{ file.test.origin.path.replace(meta.execution_dir, "") }}" data-label="Open Test"></action>{% endif %}
|
|
14
17
|
{% if file.ref.origin and file.ref.origin.path %}<action data-command="open_file" data-args="{{ file.ref.origin.path.replace(meta.execution_dir, "") }}" data-label="Open Ref."></action>{% endif %}
|
|
15
18
|
</h2>
|
|
16
19
|
<!-- CONTENT -->
|
|
17
|
-
<div id="file_content_{{
|
|
20
|
+
<div id="file_content_{{ file_index }}" style="{% if not file.error and meta.config.collapse_if_successful %} display:none;{% endif %}">
|
|
18
21
|
|
|
19
22
|
<!--GENERAL ERROR-->
|
|
20
23
|
{% if file.error %}
|
|
@@ -27,14 +30,14 @@
|
|
|
27
30
|
|
|
28
31
|
|
|
29
32
|
|
|
30
|
-
<h3>Informations <action data-command="toogle" data-args="info_{{ (
|
|
31
|
-
<div id="info_{{
|
|
33
|
+
<h3>Informations <action data-command="toogle" data-args="info_{{ (file_index-1)|string }}"></action></h3>
|
|
34
|
+
<div id="info_{{ file_index-1 }}">
|
|
32
35
|
|
|
33
36
|
<!--error_rule_patterns-->
|
|
34
37
|
{% if file.test.read_data and file.test.read_data.error_rule_patterns %}
|
|
35
38
|
<div>
|
|
36
|
-
<h4>Error pattern<action data-command="toogle" data-args="info_error_pattern_{{ (
|
|
37
|
-
<div id="info_error_pattern_{{
|
|
39
|
+
<h4>Error pattern<action data-command="toogle" data-args="info_error_pattern_{{ (file_index-1)|string }}"></action></h4>
|
|
40
|
+
<div id="info_error_pattern_{{ file_index-1 }}">
|
|
38
41
|
<table>
|
|
39
42
|
<tr>
|
|
40
43
|
<th>Pattern</th>
|
|
@@ -54,8 +57,8 @@
|
|
|
54
57
|
<!--ignore_lines-->
|
|
55
58
|
{% if file.test.ignore_lines or file.ref.ignore_lines %}
|
|
56
59
|
<div>
|
|
57
|
-
<h4>Ignoring lines <action data-command="toogle" data-args="info_ignore_{{ (
|
|
58
|
-
<div id="info_ignore_{{
|
|
60
|
+
<h4>Ignoring lines <action data-command="toogle" data-args="info_ignore_{{ (file_index-1)|string }}"></action></h4>
|
|
61
|
+
<div id="info_ignore_{{ file_index-1 }}">
|
|
59
62
|
<table>
|
|
60
63
|
<tr>
|
|
61
64
|
<th>File</th>
|
|
@@ -81,8 +84,8 @@
|
|
|
81
84
|
{% endif %}
|
|
82
85
|
|
|
83
86
|
{% if file.float_thresholds %}
|
|
84
|
-
<h4>Float Thresholds <action data-command="toogle" data-args="info_thresholds_{{ (
|
|
85
|
-
<div id="info_thresholds_{{
|
|
87
|
+
<h4>Float Thresholds <action data-command="toogle" data-args="info_thresholds_{{ (file_index-1)|string }}"></action></h4>
|
|
88
|
+
<div id="info_thresholds_{{ file_index-1 }}">
|
|
86
89
|
<table>
|
|
87
90
|
<tr>
|
|
88
91
|
<th>Variable</th>
|
|
@@ -105,14 +108,14 @@
|
|
|
105
108
|
|
|
106
109
|
<!--CURVES-->
|
|
107
110
|
{% if file.test.curves %}
|
|
108
|
-
<h3>Curves <action data-command="toogle" data-args="curves_{{ (
|
|
109
|
-
<div id="curves_{{
|
|
111
|
+
<h3>Curves <action data-command="toogle" data-args="curves_{{ (file_index-1)|string }}"></action></h3>
|
|
112
|
+
<div id="curves_{{ file_index-1 }}"></div>
|
|
110
113
|
{% endif %}
|
|
111
114
|
|
|
112
115
|
<!--ANIMATIONS-->
|
|
113
116
|
{% if file.test.animations %}
|
|
114
|
-
<h3>Animations <action data-command="toogle" data-args="animations_{{
|
|
115
|
-
<div id="animations_{{
|
|
117
|
+
<h3>Animations <action data-command="toogle" data-args="animations_{{ file_index|string }}"></action></h3>
|
|
118
|
+
<div id="animations_{{ file_index }}" ></div>
|
|
116
119
|
{% endif %}
|
|
117
120
|
|
|
118
121
|
<!--img-->
|
|
@@ -126,14 +129,21 @@
|
|
|
126
129
|
|
|
127
130
|
<!--FRAMESSERIES-->
|
|
128
131
|
{% if file.test.framesseries %}
|
|
129
|
-
<h3>Frames Series <action data-command="toogle" data-args="framesseries_{{
|
|
130
|
-
<div id="framesseries_{{
|
|
132
|
+
<h3>Frames Series <action data-command="toogle" data-args="framesseries_{{ file_index|string }}"></action></h3>
|
|
133
|
+
<div id="framesseries_{{ file_index }}" ></div>
|
|
131
134
|
{% endif %}
|
|
132
135
|
|
|
136
|
+
{% for item in [{"id": "spectrograms", "label": "Spectrograms"}, {"id": "frameseries", "label": "Frameseries"}] %}
|
|
137
|
+
|
|
138
|
+
<h3>{{ item.label }} <action data-command="toogle" data-args="{{ item.id }}_{{ file_index|string }}"></action></h3>
|
|
139
|
+
<div id="{{ item.id }}_{{ file_index }}" ></div>
|
|
140
|
+
{% endfor %}
|
|
141
|
+
|
|
142
|
+
|
|
133
143
|
<!--COMPARISONS ERRORS AND WARNINGS-->
|
|
134
144
|
{% if file.comparison_errors and (file.comparison_errors.error_nb or file.comparison_errors.warning_nb) %}
|
|
135
|
-
<h3>Number Comparison Errors or Warnings <action data-command="toogle" data-args="numbers_errors_{{
|
|
136
|
-
<div id="numbers_errors_{{
|
|
145
|
+
<h3>Number Comparison Errors or Warnings <action data-command="toogle" data-args="numbers_errors_{{ file_index|string }}"></action></h3>
|
|
146
|
+
<div id="numbers_errors_{{ file_index }}" >
|
|
137
147
|
{% with file=file %}
|
|
138
148
|
{% include 'compare_13_section_numbers.html' %}
|
|
139
149
|
{% endwith %}
|
|
@@ -8,9 +8,14 @@
|
|
|
8
8
|
{{ content }}
|
|
9
9
|
</button>
|
|
10
10
|
{% endmacro %}
|
|
11
|
-
{% set ns = namespace(statuses=['']) %}
|
|
11
|
+
{% set ns = namespace(statuses=[''], has_matrices=false, has_spectrograms=false, has_frameseries=false) %}
|
|
12
12
|
{% for file in data.files %}
|
|
13
13
|
{% set ns.statuses = ns.statuses + ['SKIPPED' if file.skipped else ('ERROR' if file.error else ('WARNING' if file.comparison_errors and file.comparison_errors.error_nb > 0 else 'SUCCESS'))] %}
|
|
14
|
+
{% if file.test.matrices %}
|
|
15
|
+
{% set ns.has_matrices = true %}
|
|
16
|
+
{% if file.test.matrices.spectrograms %}{% set ns.has_spectrograms = true %}{% endif %}
|
|
17
|
+
{% if file.test.matrices.frameseries %}{% set ns.has_frameseries = true %}{% endif %}
|
|
18
|
+
{% endif %}
|
|
14
19
|
{% endfor %}
|
|
15
20
|
<html>
|
|
16
21
|
<head>
|
|
@@ -20,8 +25,10 @@
|
|
|
20
25
|
<script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
|
|
21
26
|
<script src="https://cdn.plot.ly/plotly-2.34.0.min.js" charset="utf-8"></script>
|
|
22
27
|
|
|
23
|
-
<script>
|
|
24
|
-
|
|
28
|
+
<script>
|
|
29
|
+
{% include 'js_dom.js' %}
|
|
30
|
+
{% include 'js_palette.js' %}
|
|
31
|
+
</script>
|
|
25
32
|
<script>{% include 'js_com_page.js' with context %}</script>
|
|
26
33
|
<script>{% include 'js_chartlibs_plotly.js' %}</script>
|
|
27
34
|
<script>{% include 'js_chartlibs_echarts.js' %}</script>
|
|
@@ -29,6 +36,10 @@
|
|
|
29
36
|
<script>{% include 'utils_compare_report_anim.js' %}</script>
|
|
30
37
|
<script>{% include 'utils_compare_report_framesseries.js' %}</script>
|
|
31
38
|
<script>
|
|
39
|
+
{% if ns.has_spectrograms %}{% include 'uti_spectrograms.js' %}{% endif %}
|
|
40
|
+
{% if ns.has_matrices %}{% include 'uti_matrix.js' %}{% endif %}
|
|
41
|
+
</script>
|
|
42
|
+
<script>
|
|
32
43
|
function load_animations(){
|
|
33
44
|
// console.log(global_animations)
|
|
34
45
|
for (i in global_animations.test) {
|
|
@@ -59,6 +70,15 @@ function load_framesseries(){
|
|
|
59
70
|
}
|
|
60
71
|
}
|
|
61
72
|
}
|
|
73
|
+
function load_file_section(global_var, section_prefix, cls) {
|
|
74
|
+
for (i in global_var.test) {
|
|
75
|
+
const data_test = global_var.test[i]
|
|
76
|
+
const data_ref = global_var.reference[i]
|
|
77
|
+
const parent = dom.get(section_prefix+"_"+(1+parseInt(i)))
|
|
78
|
+
if (data_test) { cls.create(parent, data_test, data_ref) }
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
62
82
|
</script>
|
|
63
83
|
<style type="text/css">{% include 'style.css' %}</style>
|
|
64
84
|
<style type="text/css">
|
|
@@ -77,6 +97,7 @@ function load_framesseries(){
|
|
|
77
97
|
|
|
78
98
|
{% include 'body_99_footer.html' with context %}
|
|
79
99
|
<script type="text/javascript">
|
|
100
|
+
const GLOBAL_VARS = {};
|
|
80
101
|
const GLOBAL_CONFIG = {{ meta.config_json }};
|
|
81
102
|
actions.init_page();
|
|
82
103
|
</script>
|
|
@@ -94,5 +115,14 @@ function load_framesseries(){
|
|
|
94
115
|
};
|
|
95
116
|
load_framesseries();
|
|
96
117
|
</script>
|
|
118
|
+
{% if ns.has_matrices %}
|
|
119
|
+
<script type="text/javascript">
|
|
120
|
+
GLOBAL_VARS.matrices = {
|
|
121
|
+
test : [ {% for file in data.files %} {{ file.test.matrices or 'null' }} , {% endfor %} ],
|
|
122
|
+
reference : [ {% for file in data.files %} {{ file.ref.matrices or 'null' }} , {% endfor %} ],
|
|
123
|
+
};
|
|
124
|
+
MatrixMgmt.loadGlobal();
|
|
125
|
+
</script>
|
|
126
|
+
{% endif %}
|
|
97
127
|
</body>
|
|
98
128
|
</html>
|
|
@@ -245,7 +245,7 @@ CurvesBlock.prototype = {
|
|
|
245
245
|
resize: function(direction) {
|
|
246
246
|
const mult = (1 + direction * 0.1);
|
|
247
247
|
this.eContainer.dataset.zoom = this.zoom * mult;
|
|
248
|
-
const curves = dom.
|
|
248
|
+
const curves = dom.q(this.eContainer, ".js-plotly-plot");
|
|
249
249
|
curves.forEach((e) => {
|
|
250
250
|
const w = parseFloat(e.style.width) * mult;
|
|
251
251
|
const h = parseFloat(e.style.height) * mult;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const dom = {
|
|
2
2
|
get: function(id) { return document.getElementById(id) },
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
qd(sel) { return document.querySelectorAll(sel); },
|
|
4
|
+
q(e, sel) { return e.querySelectorAll(sel); },
|
|
5
5
|
elt(tag,style,attrs,html) { const e = document.createElement(tag); e.style.cssText = style; if (attrs) { for (const k in attrs) { e.setAttribute(k, attrs[k]);}}; if (html) e.innerHTML=html; return e; },
|
|
6
6
|
elt_p(parent,tag,style,attrs,html) { const e = this.elt(tag,style,attrs,html); if (parent) parent.appendChild(e); return e; },
|
|
7
7
|
div(style,attrs,html) { return this.elt('div',style,attrs,html); },
|
|
@@ -18,4 +18,4 @@ tree(parent, data, out) {
|
|
|
18
18
|
tree_o(parent, data) { const out={} ; this.tree(parent, data, out); return out; },
|
|
19
19
|
getRadio(form,name) { return document.forms[form].elements[name].value },
|
|
20
20
|
toogle(e) { e.style.display = (e.style.display === "none") ? "" : "none" },
|
|
21
|
-
}
|
|
21
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
((w_1, undef) => {
|
|
2
|
+
//
|
|
3
|
+
// {
|
|
4
|
+
// "datasets": [
|
|
5
|
+
// {
|
|
6
|
+
// "nb_lines": 8,
|
|
7
|
+
// "nb_columns": 3,
|
|
8
|
+
// "data": [...],
|
|
9
|
+
// "x_values": [...],
|
|
10
|
+
// "y_values": [...]
|
|
11
|
+
// }
|
|
12
|
+
// ],
|
|
13
|
+
// "names": ["csv"],
|
|
14
|
+
// "spectrograms": {"display": 1},
|
|
15
|
+
// "frameseries": {"display": 1}
|
|
16
|
+
// }
|
|
17
|
+
//
|
|
18
|
+
function subtractMatrices(A, B) {
|
|
19
|
+
// // check dimensions
|
|
20
|
+
return A.map((row, i) =>
|
|
21
|
+
row.map((v, j) => v - B[i][j])
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
//
|
|
25
|
+
class Matrix {
|
|
26
|
+
constructor(data, x, y, name, ref) {
|
|
27
|
+
this.data = data; // Matrix data array[array[float]]
|
|
28
|
+
this.x = x; // X-axis values array[float]
|
|
29
|
+
this.y = y; // Y-axis values array[float]
|
|
30
|
+
this.name = name; // string
|
|
31
|
+
this.ref = ref; // Reference matrix data (optional) array[array[float]]
|
|
32
|
+
// // Check if the matrix is valid (rectangular)
|
|
33
|
+
// const rowLength = data[0].length;
|
|
34
|
+
// if (!data.every(row => row.length === rowLength)) {
|
|
35
|
+
// throw new Error("All rows must have the same number of columns.");
|
|
36
|
+
// }
|
|
37
|
+
// // Check if x and y dimensions match the data
|
|
38
|
+
// // check if ref has the same dimensions
|
|
39
|
+
}
|
|
40
|
+
subtract(other, name) {
|
|
41
|
+
// // check dimensions
|
|
42
|
+
// if (
|
|
43
|
+
// this.data.length !== other.data.length ||
|
|
44
|
+
// this.data[0].length !== other.data[0].length
|
|
45
|
+
// ) { throw new Error("Matrices must have the same dimensions."); }
|
|
46
|
+
return new Matrix(subtractMatrices(this.data, other.data), this.x, this.y, name);
|
|
47
|
+
}
|
|
48
|
+
ref_diff_data() {
|
|
49
|
+
return subtractMatrices(this.data, this.ref);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
class MatrixGroup {
|
|
53
|
+
constructor(arr, is_spectro, is_frameseries, has_ref) {
|
|
54
|
+
this.arr = arr; // array of Matrix objects
|
|
55
|
+
this.is_spectro = is_spectro;
|
|
56
|
+
this.is_frameseries = is_frameseries;
|
|
57
|
+
this.has_ref = has_ref;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const MatrixMgmt = {
|
|
61
|
+
groups: [],
|
|
62
|
+
loadGlobal: function() {
|
|
63
|
+
// load loop GLOBAL_VARS groups
|
|
64
|
+
const g = GLOBAL_VARS.matrices;
|
|
65
|
+
g.test.forEach((data, i) => {
|
|
66
|
+
const group_data = [];
|
|
67
|
+
const ref = g.reference[i];
|
|
68
|
+
data.datasets.forEach((dataset, j) => {
|
|
69
|
+
const mat = new Matrix(dataset.data, dataset.x_values, dataset.y_values, data.names[j], ref.datasets[j].data);
|
|
70
|
+
group_data.push(mat);
|
|
71
|
+
});
|
|
72
|
+
const group = new MatrixGroup(group_data, Boolean(data.spectrograms), Boolean(data.frameseries), true);
|
|
73
|
+
this.groups.push(group);
|
|
74
|
+
});
|
|
75
|
+
// IMPORTANT
|
|
76
|
+
// Release Global
|
|
77
|
+
delete GLOBAL_VARS.matrices;
|
|
78
|
+
// Init
|
|
79
|
+
this.groups.forEach((group, i) => {
|
|
80
|
+
// Init Spectrograms
|
|
81
|
+
if (group.is_spectro) {
|
|
82
|
+
const spec = new Spectrograms(i, group.arr);
|
|
83
|
+
}
|
|
84
|
+
// Init Frameseries
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
w_1.MatrixMgmt = MatrixMgmt;
|
|
90
|
+
})(window);
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
((w_1, undef) => {
|
|
2
|
+
//
|
|
3
|
+
// tmp
|
|
4
|
+
//
|
|
5
|
+
function resize22(obj, parent, dir) { // ASSUMPTIONS : obj.size int, "js-plotly-plot"
|
|
6
|
+
// size
|
|
7
|
+
const size = obj.size + (dir * obj.size * 0.1); // new size
|
|
8
|
+
obj.size = obj.size + (dir * obj.size * 0.1); // save
|
|
9
|
+
// update widgets
|
|
10
|
+
const update = { width: size, height: size };
|
|
11
|
+
const nodes = dom.q(parent, ".js-plotly-plot");
|
|
12
|
+
nodes.forEach((node) => {
|
|
13
|
+
node.style.width = size + "px";
|
|
14
|
+
node.style.height = size + "px";
|
|
15
|
+
Plotly.relayout(node, update); // update plotly
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//
|
|
19
|
+
//
|
|
20
|
+
//
|
|
21
|
+
const PREFIX = "spectrograms_"; // section prefix
|
|
22
|
+
const DEFAULT_SIZE = 300;
|
|
23
|
+
const COLORSCALE = "Viridis"; // plotly
|
|
24
|
+
const COLORSCALE_DIFF = "RdBu"; // plotly
|
|
25
|
+
//
|
|
26
|
+
class Spectrograms {
|
|
27
|
+
constructor(index, arr_mat) {
|
|
28
|
+
console.log("index data", index);
|
|
29
|
+
// data
|
|
30
|
+
this.size = DEFAULT_SIZE;
|
|
31
|
+
this.arr_mat = arr_mat;
|
|
32
|
+
this.elt = dom.get(PREFIX+(1+index));
|
|
33
|
+
// init
|
|
34
|
+
this.init();
|
|
35
|
+
}
|
|
36
|
+
init() {
|
|
37
|
+
// resize
|
|
38
|
+
const that = this;
|
|
39
|
+
//
|
|
40
|
+
const tmpls = []
|
|
41
|
+
this.arr_mat.forEach((mat, i) => { tmpls.push({tag:"button", html: mat.name, click: function() { that.var_toogle(i); } }) });
|
|
42
|
+
//
|
|
43
|
+
dom.tree(
|
|
44
|
+
this.elt,
|
|
45
|
+
{tag:"div", children: [
|
|
46
|
+
{tag:"div", attrs:{class:"py-2"}, children: [
|
|
47
|
+
{tag:"button", html: '+ Increase', click: function() { resize22(that, that.elt, 1); }},
|
|
48
|
+
{tag:"button", html: '- Decrease', click: function() { resize22(that, that.elt, -1); }},
|
|
49
|
+
]},
|
|
50
|
+
{tag:"div", attrs:{class:"py-2"}, children: tmpls},
|
|
51
|
+
]},
|
|
52
|
+
);
|
|
53
|
+
// toogle
|
|
54
|
+
// Show all
|
|
55
|
+
this.arr_mat.forEach((mat, i) => { this.var_add(i); });
|
|
56
|
+
}
|
|
57
|
+
var_get_id(idx) {
|
|
58
|
+
return PREFIX+"block_"+idx;
|
|
59
|
+
}
|
|
60
|
+
var_toogle(idx) {
|
|
61
|
+
if (dom.get(this.var_get_id(idx))) { this.var_rmv(idx); }
|
|
62
|
+
else { this.var_add(idx); }
|
|
63
|
+
}
|
|
64
|
+
var_add(idx) {
|
|
65
|
+
const mat = this.arr_mat[idx];
|
|
66
|
+
//
|
|
67
|
+
const style = "width:"+this.size+"px;height:"+this.size+"px;";
|
|
68
|
+
const attrs = { class: "m-1 shadow-lg" };
|
|
69
|
+
//
|
|
70
|
+
const templs = [{out:"var_"+i, tag:"div", attrs: attrs, style:style} ];
|
|
71
|
+
if (mat.ref) {
|
|
72
|
+
templs.push({out:"ref_"+i, tag:"div", attrs: attrs, style:style});
|
|
73
|
+
templs.push({out:"dif_"+i, tag:"div", attrs: attrs, style:style});
|
|
74
|
+
}
|
|
75
|
+
const e = {};
|
|
76
|
+
dom.tree(
|
|
77
|
+
this.elt,
|
|
78
|
+
{tag:"div", attrs: {id: this.var_get_id(idx)}, children: [
|
|
79
|
+
{tag:"div", style:"display: flex; flex-wrap: wrap;", children: templs},
|
|
80
|
+
]},
|
|
81
|
+
e
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
this.add_widget(e["var_"+idx], mat.data);
|
|
85
|
+
if (mat.ref) {
|
|
86
|
+
this.add_widget(e["ref_"+idx], mat.ref);
|
|
87
|
+
this.add_widget(e["dif_"+idx], mat.ref_diff_data(), COLORSCALE_DIFF);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
var_rmv(idx) {
|
|
91
|
+
dom.get(this.var_get_id(idx)).remove();
|
|
92
|
+
}
|
|
93
|
+
add_widget(elt, mat, colorscale=COLORSCALE) {
|
|
94
|
+
const data = [{
|
|
95
|
+
z: mat,
|
|
96
|
+
type: 'heatmap',
|
|
97
|
+
colorscale: colorscale,
|
|
98
|
+
}];
|
|
99
|
+
|
|
100
|
+
const layout = {
|
|
101
|
+
// title: mat.name,
|
|
102
|
+
xaxis: { title: 'X' },
|
|
103
|
+
yaxis: { title: 'Y' }
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
Plotly.newPlot(elt, data, layout);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
w_1.Spectrograms = Spectrograms;
|
|
110
|
+
})(window);
|
|
@@ -41,8 +41,7 @@ const Framesseries = function (elt, data, data_ref) {
|
|
|
41
41
|
divs.push({tag:"div", style:"display: inline-block;"+m+"width: "+(100*(stop-start)/(this.frame_max-this.frame_min))+"%; height: 15px; background-color: "+s.color+";"});
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
-
dom_steps = {tag:"div",
|
|
45
|
-
// {tag:"div", style:"", html: "ttiti"},
|
|
44
|
+
dom_steps = {tag:"div", children: [
|
|
46
45
|
{out:"step_label", tag:"div", style:"text-align: center;"},
|
|
47
46
|
{tag:"div", style:"height:15px;background-color:#eee;", children: divs},
|
|
48
47
|
]}
|
|
@@ -51,7 +50,7 @@ const Framesseries = function (elt, data, data_ref) {
|
|
|
51
50
|
dom.tree(
|
|
52
51
|
null,
|
|
53
52
|
{out:"root", tag:"div", children: [
|
|
54
|
-
{tag:"div",
|
|
53
|
+
{tag:"div", children: [
|
|
55
54
|
{out:"plus", tag:"button", html: '+ Increase' },
|
|
56
55
|
{out:"minus", tag:"button", html: '- Decrease' },
|
|
57
56
|
]},
|
|
@@ -8,7 +8,7 @@ scilens/cli/info.py,sha256=xE7q9epjrCQRL6Agi3nhKsG6Mr3B8HSUFMti-epMoXA,1929
|
|
|
8
8
|
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
|
-
scilens/components/compare_2_files.py,sha256=
|
|
11
|
+
scilens/components/compare_2_files.py,sha256=jbZNLbRj3x8TxUADM5QC2u_TGl4I7u5OdaEMh-gMBUk,1713
|
|
12
12
|
scilens/components/compare_errors.py,sha256=vGb4DWP89HMIeBm0dZU2nt-ksppAs_37xtCHaPd0w5Y,1640
|
|
13
13
|
scilens/components/compare_floats.py,sha256=p1lnnwkGJXIsb6Y5psQc_5FcOuB2vP_cIQHXhZjWPXc,5617
|
|
14
14
|
scilens/components/compare_folders.py,sha256=LZ1AuYxLVHMNbtXWXQrdms4vZgOQthvDy-8NFD_EFjc,2617
|
|
@@ -21,14 +21,14 @@ scilens/config/env_var.py,sha256=NqNBoIfngJEXaGEm7jGqre5pmkJ9eUjiWzbDrTVfi2c,292
|
|
|
21
21
|
scilens/config/load.py,sha256=4U51o4cJfqhSuRIHKUDIsDQA0C4wv6SzTkVmInGDJdI,1647
|
|
22
22
|
scilens/config/models/__init__.py,sha256=eLCW1OLVINewGFy5GXSrOk8Rab_QsgKAuoErBjphHRs,673
|
|
23
23
|
scilens/config/models/app.py,sha256=JltWRjjqXYkH6rg3OHYhMfkBqHFhZEZdthqES3LxvzY,1453
|
|
24
|
-
scilens/config/models/compare.py,sha256=
|
|
24
|
+
scilens/config/models/compare.py,sha256=esRqW3PNVOqkA_mt4_qbS7dVCLulUrZTBUhANQOHoqE,1847
|
|
25
25
|
scilens/config/models/compare_float_thresholds.py,sha256=J5XBK1dAnmU-i2uA2bsaHnTM_m07_i17wsO8UiCw46o,1844
|
|
26
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
|
|
30
|
-
scilens/config/models/reader_format_csv.py,sha256=
|
|
31
|
-
scilens/config/models/reader_format_netcdf.py,sha256=
|
|
30
|
+
scilens/config/models/reader_format_csv.py,sha256=si422pyd3kwxXWb4u_L-0dsBxTouHDu2AWdh2a5OfD4,1512
|
|
31
|
+
scilens/config/models/reader_format_netcdf.py,sha256=k-AMdm239T6I42R8jzyRlPKKJ8zkRrN8XS8yU6ZkFu0,1256
|
|
32
32
|
scilens/config/models/reader_format_txt.py,sha256=eHg90gwEI_VpqwqEjMRhwlS8dHcl5G4ow-37HjQq_zY,1168
|
|
33
33
|
scilens/config/models/reader_format_txt_fixed_cols.py,sha256=xHD1_JOoRZow8lSNaDSYFeNckojctkT4C61mbBcjeKg,1079
|
|
34
34
|
scilens/config/models/readers.py,sha256=Pq5kOGW3b6g1x5cp_BbwUF7LUB_P3m9bHDYLSTVXNBY,1769
|
|
@@ -49,8 +49,8 @@ scilens/processors/processor_interface.py,sha256=jzMp1529JXnMGTJijVy6b_1zmARAMNv
|
|
|
49
49
|
scilens/readers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
50
|
scilens/readers/cols_dataset.py,sha256=C4N030_Iqq5KZVpQ0NVjAw4DctALuz_YBb6f6yi35Jk,2452
|
|
51
51
|
scilens/readers/exceptions.py,sha256=JzmxcjnR5sH-IOWVeCC5A1bSwxv-jCAtIJvDjzx1CTI,32
|
|
52
|
-
scilens/readers/mat_dataset.py,sha256
|
|
53
|
-
scilens/readers/reader_csv.py,sha256=
|
|
52
|
+
scilens/readers/mat_dataset.py,sha256=6hmXIdGCfQrd4Y2_v-p65VmrO4I2J8ZddGBy-AgYLX0,1683
|
|
53
|
+
scilens/readers/reader_csv.py,sha256=LFjbTv2CLungV8UwXzob5o_9G2c4cLEUCMoRXAyErKQ,3739
|
|
54
54
|
scilens/readers/reader_interface.py,sha256=nnttHL7wt4MOXpi-SBkk8DYxVWscOPG8JFl_z12mIAo,922
|
|
55
55
|
scilens/readers/reader_manager.py,sha256=DFinxIk3IIIcB6JxybGcv-mXt3jhXgCwUtzR0TqhB2Q,2684
|
|
56
56
|
scilens/readers/reader_txt.py,sha256=WPsFunEA_idzAKkD3UJQbLnaOzG2U03P3gY4gphuIw0,3868
|
|
@@ -66,20 +66,22 @@ scilens/report/template.py,sha256=cPs5gd3uEwb-6JgitGQD_i4IiUxigBTlZLNRS9KVuos,58
|
|
|
66
66
|
scilens/report/templates/body_01_title.html,sha256=0mrMM62TSBdPOpPNCcam0bZsZtM0GjoMQ-jrSqI8HCw,2173
|
|
67
67
|
scilens/report/templates/body_99_footer.html,sha256=8cWebeWfZwZ-9bYAMZkZj8rbCWq3BLIMjKQThWQxoQM,362
|
|
68
68
|
scilens/report/templates/compare_11_summary.html,sha256=4rxBlOxTcn59ztYtqDbi6SRQXlaz30HkVl7dJpzCmZE,3776
|
|
69
|
-
scilens/report/templates/compare_12_sections.html,sha256=
|
|
69
|
+
scilens/report/templates/compare_12_sections.html,sha256=Sm5NtOkGhkm0Eo-H2R-97mNDjuuw84NLdcZntevzEVQ,6304
|
|
70
70
|
scilens/report/templates/compare_13_section_numbers copy.html,sha256=0PWK_I2kNX3LjPLkkY4eSYIeB7YFkA28nk-PPLDhnaY,1753
|
|
71
71
|
scilens/report/templates/compare_13_section_numbers.html,sha256=9etEMSqwrDyJIn_nMbKEVaDgnFL_hBxSjPR-hU2wgDI,851
|
|
72
72
|
scilens/report/templates/compare_13_section_numbers_table.html,sha256=sJy6ZYtjl80vM1b3oqZSXawZWp7KNIwLI_wCnvBwYPE,3270
|
|
73
|
-
scilens/report/templates/index.html,sha256=
|
|
73
|
+
scilens/report/templates/index.html,sha256=YRWtim7ZGmDEojD4fx_jqyiGqsPi1LqvF5P4qj5aZmk,4862
|
|
74
74
|
scilens/report/templates/js_chartlibs_echarts.js,sha256=6YicVhTNIBmmBpV31XCVN5oBeiD0t29JIosJZRUv01M,907
|
|
75
75
|
scilens/report/templates/js_chartlibs_plotly.js,sha256=uVAOKUB5XE33-r04phR-LlRkFoaHEIXyQ3jXT5r97Rc,1521
|
|
76
|
-
scilens/report/templates/js_com_dom.js,sha256=YAJNGmgq2YbF9D3TqB7YSms67-xB88Molp9cKhWlqsI,1228
|
|
77
76
|
scilens/report/templates/js_com_page.js,sha256=ZxYHR-KGQRH726rPOXrEgyzBKM9NtGH3_APvcawKxQw,6862
|
|
78
|
-
scilens/report/templates/
|
|
79
|
-
scilens/report/templates/
|
|
77
|
+
scilens/report/templates/js_curvemgr.js,sha256=Kmn2o9mKctKEXkIYOzWxqh2IVRtrpKcZvdBl8QmzdJ0,10798
|
|
78
|
+
scilens/report/templates/js_dom.js,sha256=XnxgdB0x-Xtt0eQFrwjcFO1cb_KPsTImpJBB6m_y8FI,1229
|
|
79
|
+
scilens/report/templates/js_palette.js,sha256=HeewAmkR67QiqXSanJS3cCgp6IPKomlULUTKt55F6es,218
|
|
80
80
|
scilens/report/templates/style.css,sha256=thZ_LZonmY9qH9oBie1BcK2H2FPPqik11YFr1hyo6ng,4071
|
|
81
|
+
scilens/report/templates/uti_matrix.js,sha256=L2NqR9fu1075JGStWy6yS7EX4pHGAcBrhfR_cAL4VYw,2675
|
|
82
|
+
scilens/report/templates/uti_spectrograms.js,sha256=z-LNIdgqH2aN6iXARJ6xO8imBlZtwnBMIfJvHvNTGcI,3090
|
|
81
83
|
scilens/report/templates/utils_compare_report_anim.js,sha256=a7FHRco17BmgOAHb9kiDsFcSoxbmTGqjBbXBprf3hnU,2923
|
|
82
|
-
scilens/report/templates/utils_compare_report_framesseries.js,sha256=
|
|
84
|
+
scilens/report/templates/utils_compare_report_framesseries.js,sha256=su4zy29yZMqBlL213B1oLFpzBrmwta5jlc96fN_pphc,5697
|
|
83
85
|
scilens/report/vendors/tailwindcss_3_4_15.js,sha256=niHw6Rf0uS2pE5_8h-E18NI24o1urZL5Ac31_n9htKE,407279
|
|
84
86
|
scilens/report/vendors/tailwindcss_min_4.0.0-beta.4.js,sha256=fy2LOvMX7m4b1V9WdtWC0dCPNIYhE2cLkFiD3JNcYhI,177617
|
|
85
87
|
scilens/run/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -97,7 +99,7 @@ scilens/utils/template.py,sha256=9dlXX3nmfzDRUwzPJOkoxk15UXivZ2SW-McdCwokFa4,443
|
|
|
97
99
|
scilens/utils/time_tracker.py,sha256=DdVBoMpVLXrX0qZZXyLm4g38EwDVLlRcBqcpNex1mYY,545
|
|
98
100
|
scilens/utils/vectors.py,sha256=4N2BZSC5n3HgZqPujDGF5NdjVmSL1rOHb_qw4OoABQY,103
|
|
99
101
|
scilens/utils/web.py,sha256=MAFWpIFOKz7QhqDoFh-Qwstvc76KpcxstSgHFT8FOL4,901
|
|
100
|
-
scilens-0.3.
|
|
101
|
-
scilens-0.3.
|
|
102
|
-
scilens-0.3.
|
|
103
|
-
scilens-0.3.
|
|
102
|
+
scilens-0.3.5.dist-info/METADATA,sha256=MAh2EUUaJAmB3cdkYutRwGiAdGil9i_w9eANAVN0Hxc,1367
|
|
103
|
+
scilens-0.3.5.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
104
|
+
scilens-0.3.5.dist-info/entry_points.txt,sha256=DaKGgxUEUv34GJAoXtta6ecL37ercejep9sCSSRQK2s,48
|
|
105
|
+
scilens-0.3.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|