Salome HOME
Adding data file input capacity for vectors
authorJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Sat, 8 Jun 2019 15:33:49 +0000 (17:33 +0200)
committerJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Sat, 8 Jun 2019 15:33:49 +0000 (17:33 +0200)
bin/AdaoCatalogGenerator.py
resources/ADAOSchemaCatalog.xml
src/daComposant/daCore/Interfaces.py
src/daSalome/daYacsSchemaCreator/infos_daComposant.py
src/daSalome/daYacsSchemaCreator/methods.py

index 153f5ef83f659daf7a4f565095069168ff9cc6aa..406de4fe9a9a55a5c32ba5ea0a6559870abe2ad9 100644 (file)
@@ -142,6 +142,9 @@ def F_{data_name}(statut, fv=NoCheckInNS) : return FACT(
     SCRIPT_DATA = BLOC ( condition = " FROM in ( 'Script', ) ",
         SCRIPT_FILE = SIMP(statut = "o", typ = ("FichierNoAbs",'Python Files (*.py)',), validators=[OnlyStr(), FileExtVal('py'), FunctionVal(fv)], fr="En attente d'un nom de fichier script, avec ou sans le chemin complet pour le trouver, contenant si nécessaire la définition d'une variable interne de même nom que le concept parent", ang="Waiting for a script file name, with or without the full path to find it, containing if necessary the definition of an internal variable of the same name as the parent concept"),
         ),
+    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"),
+        ),
     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"),
         ),
index 62f434006d37902a75c0c35f82741949a8309dbf..6506dfa9a44688ecef7e004f37e22166f645f21a 100644 (file)
@@ -407,6 +407,23 @@ if sys.path.count(filepath)==0 or (sys.path.count(filepath)>0 and sys.path.index
     <outport name="stored" type="bool"/>
   </inline>
 
+  <inline name="CreateNumpyVectorFromDataFile">
+    <script><code><![CDATA[
+import logging, sys, os
+logging.debug("CREATE YI Entering in CreateNumpyVectorFromDataFile")
+type = "Vector"
+
+if sys.version_info.major > 2: import adao
+from daCore.Interfaces import ImportFromFile as aif
+vector = aif(script).getvalue(columns)[1]
+]]></code></script>
+    <inport name="script" type="string"/>
+    <inport name="columns" type="stringvec"/>
+    <outport name="vector" type="pyobj"/>
+    <outport name="type" type="string"/>
+    <outport name="stored" type="bool"/>
+  </inline>
+
   <inline name="CreateNumpyVectorSerieFromString">
     <script><code><![CDATA[
 import numpy, logging
index e7313469823b1865499b06c9fb0b47561d648154..3dd3138b74392e2b0a5c2726f7549075e0515331 100644 (file)
@@ -268,6 +268,9 @@ class _COMViewer(GenericCaseViewer):
                         if __ifrom == 'Script':
                             __argumentsList.append([__itype,True])
                             __argumentsList.append(['Script',__idata['SCRIPT_FILE']])
+                        if __ifrom == 'DataFile':
+                            __argumentsList.append([__itype,True])
+                            __argumentsList.append(['DataFile',__idata['DATA_FILE']])
                         if __ifrom == 'ScriptWithOneFunction':
                             __argumentsList.append(['OneFunction',True])
                             __argumentsList.append(['Script',__idata.pop('SCRIPTWITHONEFUNCTION_FILE')])
@@ -686,6 +689,8 @@ class ImportFromFile(object):
                 self._delimiter = ","
             elif self.__filestring.count(";") > 1:
                 self._delimiter = ";"
+            else:
+                self._delimiter = None
         elif self._format == "text/tab-separated-values" or Format.upper() == "TSV":
             self._format = "text/tab-separated-values"
             self._delimiter = "\t"
index 5bc0979e65072b26c80a55d01a1aecfd8d1752f3..76aaed0b3460dc9573e5ac27449e54852b4983d8 100644 (file)
@@ -51,7 +51,7 @@ AssimType["CheckingPoint"]       = ["Vector"]
 AssimType["ControlInput"]        = ["Vector", "VectorSerie"]
 
 FromNumpyList = {}
-FromNumpyList["Vector"]               = ["String", "Script"]
+FromNumpyList["Vector"]               = ["String", "Script", "DataFile"]
 FromNumpyList["VectorSerie"]          = ["String", "Script"]
 FromNumpyList["Matrix"]               = ["String", "Script"]
 FromNumpyList["ScalarSparseMatrix"]   = ["String", "Script"]
@@ -235,7 +235,7 @@ BasicDataInputs = ["String", "Script", "ScriptWithOneFunction", "ScriptWithFunct
 
 # Data input dict
 DataTypeDict = {}
-DataTypeDict["Vector"]               = ["String", "Script"]
+DataTypeDict["Vector"]               = ["String", "Script", "DataFile"]
 DataTypeDict["VectorSerie"]          = ["String", "Script"]
 DataTypeDict["Matrix"]               = ["String", "Script"]
 DataTypeDict["ScalarSparseMatrix"]   = ["String", "Script"]
index b940789030b88a03cc6e5600cab05eb0babc19bb..e19962a3559e77d51b0d2d5a4f25408b860c04a5 100644 (file)
@@ -261,6 +261,33 @@ def create_yacs_proc(study_config):
         ADAO_Case.edAddDFLink(back_node.getOutputPort("type"), CAS_node.getInputPort(key_type))
         ADAO_Case.edAddDFLink(back_node.getOutputPort("stored"), CAS_node.getInputPort(key_stored))
 
+      if data_config["Type"] == "Vector" and data_config["From"] == "DataFile":
+        # Create node
+        factory_back_node = catalogAd.getNodeFromNodeMap("CreateNumpyVectorFromDataFile")
+        back_node = factory_back_node.cloneNode("Get" + key)
+        back_node.getInputPort("script").edInitPy(data_config["Data"])
+        back_node.getInputPort("columns").edInitPy((key,))
+        ADAO_Case.edAddChild(back_node)
+        # Set content of the node
+        back_node_script = back_node.getScript()
+        if "Stored" in data_config:
+            back_node_script += "stored = " + str(data_config["Stored"]) + "\n"
+        else:
+            back_node_script += "stored = 0\n"
+        if key in init_config["Target"]:
+          # Connect node with InitUserData
+          back_node_script += "__builtins__[\"init_data\"] = init_data\n"
+          back_node.edAddInputPort("init_data", t_pyobj)
+          ADAO_Case.edAddDFLink(init_node.getOutputPort("init_data"), back_node.getInputPort("init_data"))
+        back_node.setScript(back_node_script)
+        # Connect node with CreateAssimilationStudy
+        CAS_node.edAddInputPort(key, t_pyobj)
+        CAS_node.edAddInputPort(key_type, t_string)
+        CAS_node.edAddInputPort(key_stored, t_bool)
+        ADAO_Case.edAddDFLink(back_node.getOutputPort("vector"), CAS_node.getInputPort(key))
+        ADAO_Case.edAddDFLink(back_node.getOutputPort("type"), CAS_node.getInputPort(key_type))
+        ADAO_Case.edAddDFLink(back_node.getOutputPort("stored"), CAS_node.getInputPort(key_stored))
+
       if data_config["Type"] == "VectorSerie" and data_config["From"] == "String":
         # Create node
         factory_back_node = catalogAd.getNodeFromNodeMap("CreateNumpyVectorSerieFromString")