]> SALOME platform Git repositories - modules/adao.git/commitdiff
Salome HOME
Internal tests improvements and version update
authorJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Thu, 29 Jun 2017 21:48:06 +0000 (23:48 +0200)
committerJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Thu, 29 Jun 2017 21:48:06 +0000 (23:48 +0200)
25 files changed:
bin/module_version.py
resources/SalomeApp.xml
src/daComposant/daAlgorithms/3DVAR.py
src/daComposant/daAlgorithms/4DVAR.py
src/daComposant/daAlgorithms/AdjointTest.py
src/daComposant/daAlgorithms/Blue.py
src/daComposant/daAlgorithms/DerivativeFreeOptimization.py
src/daComposant/daAlgorithms/EnsembleBlue.py
src/daComposant/daAlgorithms/ExtendedBlue.py
src/daComposant/daAlgorithms/ExtendedKalmanFilter.py
src/daComposant/daAlgorithms/FunctionTest.py
src/daComposant/daAlgorithms/GradientTest.py
src/daComposant/daAlgorithms/KalmanFilter.py
src/daComposant/daAlgorithms/LinearLeastSquares.py
src/daComposant/daAlgorithms/LinearityTest.py
src/daComposant/daAlgorithms/NonLinearLeastSquares.py
src/daComposant/daAlgorithms/ObserverTest.py
src/daComposant/daAlgorithms/ParticleSwarmOptimization.py
src/daComposant/daAlgorithms/QuantileRegression.py
src/daComposant/daAlgorithms/SamplingTest.py
src/daComposant/daAlgorithms/TabuSearch.py
src/daComposant/daAlgorithms/TangentTest.py
src/daComposant/daAlgorithms/UnscentedKalmanFilter.py
src/daComposant/daCore/BasicObjects.py
src/daComposant/daCore/version.py

index bb129205a6e029ab4cdf6be0699e5ffadeb412a3..362dbc6e84910bc82d1c1c1f47c1b60bccf19fb1 100644 (file)
@@ -23,6 +23,6 @@
 # Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
 
 name    = "ADAO"
-version = "V8_3_0" # Version pour catalogue, avec des "_" entre les numeros
+version = "V8_4_0" # Version pour catalogue, avec des "_" entre les numeros
 date    = ""
 year    = "2017" # Annee de copyright
index 66533b1121bad45a167eb4057454d78292d3bc00..198b61ecdf7a6c23f3ade9500948e72f6a5c4f1d 100644 (file)
@@ -18,7 +18,7 @@
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 
   See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-  
+
   Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
 -->
 <document>
@@ -28,7 +28,7 @@
     <parameter name="icon"          value="ADAO.png"/>
     <parameter name="library"       value="SalomePyQtGUI"/>
     <parameter name="documentation" value="adao_help"/>
-    <parameter name="version"       value="8.3.0"/>
+    <parameter name="version"       value="8.4.0"/>
   </section>
   <section name="resources">
     <!-- Module resources -->
index 14240051724a47c66a77e9bf14cbf658ce77ab34..852a2a0e7e4d89da665ace3cc0d14ce1e12cdd7b 100644 (file)
@@ -110,7 +110,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         # Correction pour pallier a un bug de TNC sur le retour du Minimum
         if "Minimizer" in self._parameters and self._parameters["Minimizer"] == "TNC":
index ebeea0b0397cc666db4333264dfdc9720a5da1a9..ca35410027e97bbc2f2a744ff6663626de548ca0 100644 (file)
@@ -98,7 +98,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         # Correction pour pallier a un bug de TNC sur le retour du Minimum
         if "Minimizer" in self._parameters and self._parameters["Minimizer"] == "TNC":
index 888e1c535768dd3424e815da5d01ce5b99a72a4b..3801641a849797a4eb1410206212b11e8931bfb4 100644 (file)
@@ -82,7 +82,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         Hm = HO["Direct"].appliedTo
         Ht = HO["Tangent"].appliedInXTo
index d621343739fff1e3da27ba4f1ae9b9c25b80412b..8ffcdfbc2df5e84c5a50cbeb7f44c39edbf415d7 100644 (file)
@@ -73,7 +73,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         Hm = HO["Tangent"].asMatrix(Xb)
         Hm = Hm.reshape(Y.size,Xb.size) # ADAO & check shape
index 478107043f78e7e1c089707548f170ed9e7249d1..548c25fea59c8c47b77bae88dd0a85fd2ed5bad6 100644 (file)
@@ -94,7 +94,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         if not PlatformInfo.has_nlopt and not self._parameters["Minimizer"] in ["COBYLA", "POWELL", "SIMPLEX"]:
             logging.debug("%s Absence de NLopt, utilisation forcee du minimiseur SIMPLEX"%(self._name,))
index 7c085a3e1dae45c68fdbeb8d1669b62ea1e2aa03..1cc80cd485c614bbd9a92304dbdab2ac1635feef 100644 (file)
@@ -51,7 +51,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         # Précalcul des inversions de B et R
         # ----------------------------------
index 9271629e1b856cdcdf9c42e49871106d685ea98f..5dbfd804e731374a1a94c74f827f7cc4a2fbbc9b 100644 (file)
@@ -73,7 +73,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         Hm = HO["Tangent"].asMatrix(Xb)
         Hm = Hm.reshape(Y.size,Xb.size) # ADAO & check shape
index 66a6fcdc245ab73c3cb14d8cfde2de603c55b052..02829208450d7f5ce51c94dd71c8127e104e8d4d 100644 (file)
@@ -65,7 +65,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         if self._parameters["EstimationOf"] == "Parameters":
             self._parameters["StoreInternalVariables"] = True
index 4b1adbdf8538859608a8b14a1a78fcafc03e5857..4b80e289ffb41b937933e51c25949d8bd946fce8 100644 (file)
@@ -70,7 +70,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         Hm = HO["Direct"].appliedTo
         #
index 109088e059758109472cae11a7ff09d6e9e2a4bf..03a43520e25967b70381bb3ef2b9204b4a8091a1 100644 (file)
@@ -107,7 +107,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         Hm = HO["Direct"].appliedTo
         if self._parameters["ResiduFormula"] in ["Taylor", "TaylorOnNorm"]:
index 50546ebd6b21483377d0c665b1474bd70f908535..d2ec3f1e68a21fe573d964a1efa87f46a7e63bd2 100644 (file)
@@ -54,7 +54,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         if self._parameters["EstimationOf"] == "Parameters":
             self._parameters["StoreInternalVariables"] = True
index e2525dd450b8b62ad0f7d9cd237ce501e123595a..31234e68c968f91db325561c871ecf5746e5c222 100644 (file)
@@ -42,11 +42,11 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             listval  = ["OMA", "CurrentState", "CostFunctionJ", "CostFunctionJb", "CostFunctionJo", "SimulatedObservationAtCurrentState", "SimulatedObservationAtOptimum"]
             )
         self.requireInputArguments(
-            mandatory= ("Xb", "Y", "HO", "R"),
+            mandatory= ("Y", "HO", "R"),
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         Hm = HO["Tangent"].asMatrix(None)
         Hm = Hm.reshape(Y.size,-1) # ADAO & check shape
index c2464c20d613010aa0da166736f661502fbe842b..5d59a648ab03c3022f8b103c47e54fc14c852bd7 100644 (file)
@@ -85,11 +85,11 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             listval  = ["CurrentState", "Residu", "SimulatedObservationAtCurrentState"]
             )
         self.requireInputArguments(
-            mandatory= ("Xb", "Y", "HO"),
+            mandatory= ("Xb", "HO"),
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         def RMS(V1, V2):
             import math
index 5ea90cfe424dd5c8558073b5e67130896719b61e..7cd98ae4e9122728e2672308a28f2d7cf575151d 100644 (file)
@@ -83,7 +83,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         # Correction pour pallier a un bug de TNC sur le retour du Minimum
         if "Minimizer" in self._parameters and self._parameters["Minimizer"] == "TNC":
index 4ae19ed11d52af4d30dbb80a66350009a94540b2..cc692374f7789e1ff3c8d858da2e4f1af6dcee12 100644 (file)
@@ -30,7 +30,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         BasicObjects.Algorithm.__init__(self, "OBSERVERTEST")
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         print("Results of observer check on all potential variables or commands,")
         print("         only activated on selected ones by explicit association.")
         print("")
index 644081789803bdce2f371bdd5a1c5dd47f932086..4103b853fbbcec800a4475c35a03bc3a10dbf1af 100644 (file)
@@ -102,7 +102,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         if ("BoxBounds" in self._parameters) and isinstance(self._parameters["BoxBounds"], (list, tuple)) and (len(self._parameters["BoxBounds"]) > 0):
             BoxBounds = self._parameters["BoxBounds"]
index 0d0cf2ae1f9e98afc0342e9e644423951058a4f1..076f4c294167e5ce1309a3b324bf44c1eb4a5842 100644 (file)
@@ -78,7 +78,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         Hm = HO["Direct"].appliedTo
         #
index c94c97a2ece5e7023fc552749013629b175b4723..58c16b14e35076266801b2c273026607b8344192 100644 (file)
@@ -86,7 +86,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         Hm = HO["Direct"].appliedTo
         #
index 49183b0ff360369c05c1d414b6f3c88b9250cec4..46e042468d973394863c6e2afed27e62631d8069 100644 (file)
@@ -114,7 +114,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         if self._parameters["NoiseDistribution"] == "Uniform":
             nrange = numpy.ravel(self._parameters["NoiseHalfRange"]) # Vecteur
index bff1e735df064dc5e71f71016af2d46db9e439db..9419d0526d62083dd935d683f219209b160f9784 100644 (file)
@@ -89,7 +89,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         Hm = HO["Direct"].appliedTo
         Ht = HO["Tangent"].appliedInXTo
index 19bc20def6a33975dec4c420b8831fbbbc88dd3c..276e4fbfe4d9af3bfb36c4e7023fff3659346752 100644 (file)
@@ -94,7 +94,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             )
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
-        self._pre_run(Parameters, R, B, Q)
+        self._pre_run(Parameters, Xb, Y, R, B, Q)
         #
         if self._parameters["EstimationOf"] == "Parameters":
             self._parameters["StoreInternalVariables"] = True
index f8e7040fa5d5b3d354c723cc3b3700a315fb85ab..05e9943946e8c2f51b770a0692baec2e351150e1 100644 (file)
@@ -405,7 +405,7 @@ class FullOperator(object):
             self.__FO["Tangent"] = Operator( fromMethod = __Function["Tangent"], avoidingRedundancy = avoidRC )
             self.__FO["Adjoint"] = Operator( fromMethod = __Function["Adjoint"], avoidingRedundancy = avoidRC )
         elif asMatrix is not None:
-            __matrice = numpy.matrix( asMatrix, numpy.float )
+            __matrice = numpy.matrix( __Matrix, numpy.float )
             self.__FO["Direct"]  = Operator( fromMatrix = __matrice,   avoidingRedundancy = avoidRC )
             self.__FO["Tangent"] = Operator( fromMatrix = __matrice,   avoidingRedundancy = avoidRC )
             self.__FO["Adjoint"] = Operator( fromMatrix = __matrice.T, avoidingRedundancy = avoidRC )
@@ -527,7 +527,7 @@ class Algorithm(object):
         self.StoredVariables["SimulationQuantiles"]                  = Persistence.OneMatrix(name = "SimulationQuantiles")
         self.StoredVariables["Residu"]                               = Persistence.OneScalar(name = "Residu")
 
-    def _pre_run(self, Parameters, R=None, B=None, Q=None ):
+    def _pre_run(self, Parameters, Xb=None, Y=None, R=None, B=None, Q=None ):
         "Pré-calcul"
         logging.debug("%s Lancement", self._name)
         logging.debug("%s Taille mémoire utilisée de %.0f Mio", self._name, self._m.getUsedMemory("Mio"))
@@ -536,6 +536,18 @@ class Algorithm(object):
         self.__setParameters(Parameters)
         #
         # Corrections et complements
+        def __test_vvalue( argument, variable, argname):
+            if argument is None:
+                if variable in self.__required_inputs["RequiredInputValues"]["mandatory"]:
+                    raise ValueError("%s %s vector %s has to be properly defined!"%(self._name,argname,variable))
+                elif variable in self.__required_inputs["RequiredInputValues"]["optional"]:
+                    logging.debug("%s %s vector %s is not set, but is optional."%(self._name,argname,variable))
+                else:
+                    logging.debug("%s %s vector %s is not set, but is not required."%(self._name,argname,variable))
+            else:
+                logging.debug("%s %s vector %s is set, and its size is %i."%(self._name,argname,variable,numpy.array(argument).size))
+        __test_vvalue( Xb, "Xb", "Background or initial state" )
+        __test_vvalue( Y,  "Y",  "Observation" )
         def __test_cvalue( argument, variable, argname):
             if argument is None:
                 if variable in self.__required_inputs["RequiredInputValues"]["mandatory"]:
@@ -1873,20 +1885,20 @@ class ImportFromScript(object):
         "Verifie l'existence et importe le script"
         self.__filename = __filename.rstrip(".py")
         if self.__filename is None:
-            raise ValueError("The name of the file containing the variable to be imported has to be specified.")
+            raise ValueError("The name of the file, containing the variable to be read, has to be specified.")
         if not os.path.isfile(str(self.__filename)+".py"):
-            raise ValueError("The file containing the variable to be imported doesn't seem to exist. The given file name is:\n  \"%s\""%self.__filename)
+            raise ValueError("The file containing the variable to be imported doesn't seem to exist. Please check the file. The given file name is:\n  \"%s\""%self.__filename)
         self.__scriptfile = __import__(self.__filename, globals(), locals(), [])
         self.__scriptstring = open(self.__filename+".py",'r').read()
     def getvalue(self, __varname=None, __synonym=None ):
         "Renvoie la variable demandee"
         if __varname is None:
-            raise ValueError("The name of the variable to be imported has to be specified.")
+            raise ValueError("The name of the variable to be read has to be specified. Please check the content of the file and the syntax.")
         if not hasattr(self.__scriptfile, __varname):
             if __synonym is None:
-                raise ValueError("The imported script file \"%s\" doesn't contain the specified variable \"%s\"."%(str(self.__filename)+".py",__varname))
+                raise ValueError("The imported script file \"%s\" doesn't contain the mandatory variable \"%s\" to be read. Please check the content of the file and the syntax."%(str(self.__filename)+".py",__varname))
             elif not hasattr(self.__scriptfile, __synonym):
-                raise ValueError("The imported script file \"%s\" doesn't contain the specified variable \"%s\"."%(str(self.__filename)+".py",__synonym))
+                raise ValueError("The imported script file \"%s\" doesn't contain the mandatory variable \"%s\" to be read. Please check the content of the file and the syntax."%(str(self.__filename)+".py",__synonym))
             else:
                 return getattr(self.__scriptfile, __synonym)
         else:
index 20b824650322fa16aeb5afeb40ef3adba1614d0e..6b182f03c714d12f340e46f0b907c07d2bfc514a 100644 (file)
@@ -27,5 +27,5 @@ __author__ = "Jean-Philippe ARGAUD"
 __all__ = []
 
 name    = "Data Assimilation Package"
-version = "17.04.30"
-date    = "samedi 30 avril 2017, 12:12:12 (UTC+0100)"
+version = "2017.09.30"
+date    = "samedi 30 septembre 2017, 12:12:12 (UTC+0100)"