From 3e6dbef103fce9f6f28a981f85550edee0d1cc98 Mon Sep 17 00:00:00 2001 From: Jean-Philippe ARGAUD Date: Tue, 16 Jul 2019 14:43:32 +0200 Subject: [PATCH] Extending data file input capacity --- bin/AdaoCatalogGenerator.py | 1 + doc/en/snippets/EntryTypeDataFile.rst | 8 +++++--- doc/fr/snippets/EntryTypeDataFile.rst | 12 +++++++----- resources/ADAOSchemaCatalog.xml | 12 ++++++++++-- src/daEficas/generator_adao.py | 2 ++ .../daYacsSchemaCreator/infos_daComposant.py | 19 ++++++++++++------- src/daSalome/daYacsSchemaCreator/methods.py | 10 ++++++++++ 7 files changed, 47 insertions(+), 17 deletions(-) diff --git a/bin/AdaoCatalogGenerator.py b/bin/AdaoCatalogGenerator.py index ed2c5f1..2fad697 100644 --- a/bin/AdaoCatalogGenerator.py +++ b/bin/AdaoCatalogGenerator.py @@ -144,6 +144,7 @@ def F_{data_name}(statut, fv=NoCheckInNS) : return FACT( ), DATA_DATA = BLOC ( condition = " FROM in ( 'DataFile', ) ", DATA_FILE = SIMP(statut = "o", typ = ("FichierNoAbs",'CSV Text Files (*.csv);;TSV Text Files (*.tsv);;TXT Text Files (*.txt);;NPY Binary Numpy Files (*.npy);;NPZ Binary Numpy Files (*.npz);;All Files (*)", ',), validators=[OnlyStr(), FunctionVal(ColDataFileExtVal)], fr="En attente d'un nom de fichier de données, avec ou sans le chemin complet pour le trouver, contenant ou plusieurs colonnes pour définir un unique vecteur continu", ang="Waiting for a data file name, with or without the full path to find it, containing one or more columns to define a unique continuous vector"), + ColMajor = SIMP(statut="f", typ = "I", into=(0, 1), defaut=0, fr="Variables en colonnes acquises par ligne (0) ou par colonne (1)", ang="Variables in columns acquired by line (0) or by column (1)"), ), STRING_DATA = BLOC ( condition = " FROM in ( 'String', ) ", STRING = SIMP(statut = "o", typ = "TXM",{ms_default} fr="En attente d'une chaine de caractères entre guillements. Pour construire un vecteur ou une matrice, ce doit être une suite de nombres, utilisant un espace ou une virgule pour séparer deux éléments et un point-virgule pour séparer deux lignes", ang="Waiting for a string in quotes. To build a vector or a matrix, it has to be a float serie, using a space or comma to separate two elements in a line, a semi-colon to separate rows"), diff --git a/doc/en/snippets/EntryTypeDataFile.rst b/doc/en/snippets/EntryTypeDataFile.rst index ed34fe5..d2cc263 100644 --- a/doc/en/snippets/EntryTypeDataFile.rst +++ b/doc/en/snippets/EntryTypeDataFile.rst @@ -15,13 +15,15 @@ - in binary format (single-variable in a Numpy file with a ".npy" extension, multi-variables in a NumpyZ file with a ".npz" extension) - By default, the values of a variable has to be ordered in rows - ("ColMajor=False"), but they can also be ordered in lines + By default, the values of a variable has to be ordered in rows to be + acquired record line by record line ("ColMajor=False"), but they can also + be ordered in lines to be acquired record row by record row ("ColMajor=True"). Without information or with a void list, all the values of all the variables are used, but one can also select only the ones of the variables - that are indicated in the name list in "ColNames". + that are indicated in the name list "ColNames". the variable names are + always as header of columns. Example of CSV file for "*Observation*" variable in "*DataFile*" :: diff --git a/doc/fr/snippets/EntryTypeDataFile.rst b/doc/fr/snippets/EntryTypeDataFile.rst index e322159..49629fc 100644 --- a/doc/fr/snippets/EntryTypeDataFile.rst +++ b/doc/fr/snippets/EntryTypeDataFile.rst @@ -18,13 +18,15 @@ ".npy", multi-variables dans un fichier NumpyZ à extension ".npz"). Par défaut, les valeurs d'une variable doivent être rangées en colonnes - ("ColMajor=False"), mais elles peuvent aussi être rangées en lignes + pour être acquises ligne d'enregistrement par ligne d'enregistrement + ("ColMajor=False"), mais elles peuvent aussi être rangées en lignes pour + être acquises colonne d'enregistrement par colonne d'enregistrement ("ColMajor=True"). - Sans précision ou avec une liste vide pour les noms de variable, on utilise - les valeurs toutes les variables, mais on peut aussi sélectionner - uniquement celles des variables indiquées dans la liste indiquée de noms - dans "ColNames". + Sans précision ou avec une liste vide pour les noms de variables, on + utilise les valeurs toutes les variables, mais on peut aussi sélectionner + uniquement celles des variables indiquées dans la liste de noms fournie + dans "ColNames". Les noms de variable sont toujours en entête de colonne. Exemple de fichier CSV pour la variable "*Observation*" en "*DataFile*" :: diff --git a/resources/ADAOSchemaCatalog.xml b/resources/ADAOSchemaCatalog.xml index 0b7d4d5..b818c89 100644 --- a/resources/ADAOSchemaCatalog.xml +++ b/resources/ADAOSchemaCatalog.xml @@ -415,10 +415,14 @@ type = "Vector" if sys.version_info.major > 2: import adao from daCore.Interfaces import ImportFromFile as aif -vector = numpy.ravel( aif(script).getvalue(columns)[1] ) +if colmajor: + vector = numpy.ravel( numpy.transpose( aif(script).getvalue(columns)[1] ) ) +else: + vector = numpy.ravel( aif(script).getvalue(columns)[1] ) ]]> + @@ -481,10 +485,14 @@ type = "VectorSerie" if sys.version_info.major > 2: import adao from daCore.Interfaces import ImportFromFile as aif if len(columns) == 0: columns = None -vector = numpy.transpose( aif(script).getvalue(columns)[1] ) +if colmajor: + aif(script).getvalue(columns)[1] +else: + vector = numpy.transpose( aif(script).getvalue(columns)[1] ) ]]> + diff --git a/src/daEficas/generator_adao.py b/src/daEficas/generator_adao.py index 9b66d87..af993c9 100644 --- a/src/daEficas/generator_adao.py +++ b/src/daEficas/generator_adao.py @@ -185,6 +185,8 @@ class AdaoGenerator(PythonGenerator): self.text_da += data_name + "_config['Data'] = '" + data + "'\n" if search_text+"Stored" in self.dictMCVal.keys(): self.text_da += data_name + "_config['Stored'] = '" + str(self.dictMCVal[search_text+"Stored"]) + "'\n" + if search_type+"DATA_DATA__ColMajor" in self.dictMCVal.keys(): + self.text_da += data_name + "_config['ColMajor'] = '" + str(self.dictMCVal[search_type+"DATA_DATA__ColMajor"]) + "'\n" self.text_da += "study_config['" + data_name + "'] = " + data_name + "_config\n" if from_type == "ScriptWithSwitch": diff --git a/src/daSalome/daYacsSchemaCreator/infos_daComposant.py b/src/daSalome/daYacsSchemaCreator/infos_daComposant.py index 3323f41..374780d 100644 --- a/src/daSalome/daYacsSchemaCreator/infos_daComposant.py +++ b/src/daSalome/daYacsSchemaCreator/infos_daComposant.py @@ -29,13 +29,18 @@ AnalysisData = {} AnalysisFromList = ["String", "Script"] # -- Infos from daCore -- -AssimData = ["Background", "BackgroundError", - "Observation", "ObservationError", - "ObservationOperator", - "EvolutionModel", "EvolutionError", - "AlgorithmParameters", - "CheckingPoint", "ControlInput", - ] +AssimData = [ + "Background", + "BackgroundError", + "Observation", + "ObservationError", + "ObservationOperator", + "EvolutionModel", + "EvolutionError", + "AlgorithmParameters", + "CheckingPoint", + "ControlInput", + ] AssimType = {} AssimType["Background"] = ["Vector", "VectorSerie"] diff --git a/src/daSalome/daYacsSchemaCreator/methods.py b/src/daSalome/daYacsSchemaCreator/methods.py index accc553..6a1ac12 100644 --- a/src/daSalome/daYacsSchemaCreator/methods.py +++ b/src/daSalome/daYacsSchemaCreator/methods.py @@ -267,6 +267,11 @@ def create_yacs_proc(study_config): back_node = factory_back_node.cloneNode("Get" + key) back_node.getInputPort("script").edInitPy(data_config["Data"]) back_node.getInputPort("columns").edInitPy((key,)) # On impose le concept, et le schéma YACS est ammendable + if "ColMajor" in data_config: + colmajor = bool(data_config["ColMajor"]) + else: + colmajor = False + back_node.getInputPort("colmajor").edInitPy(colmajor) # On impose le concept, et le schéma YACS est ammendable ADAO_Case.edAddChild(back_node) # Set content of the node back_node_script = back_node.getScript() @@ -349,6 +354,11 @@ def create_yacs_proc(study_config): back_node = factory_back_node.cloneNode("Get" + key) back_node.getInputPort("script").edInitPy(data_config["Data"]) back_node.getInputPort("columns").edInitPy(()) # On impose aucun nom et le schéma YACS est ammendable + if "ColMajor" in data_config: + colmajor = bool(data_config["ColMajor"]) + else: + colmajor = False + back_node.getInputPort("colmajor").edInitPy(colmajor) # On impose le concept, et le schéma YACS est ammendable ADAO_Case.edAddChild(back_node) # Set content of the node back_node_script = back_node.getScript() -- 2.39.2