]> SALOME platform Git repositories - modules/adao.git/commitdiff
Salome HOME
Updating and extending generic tests
authorJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Wed, 30 Jan 2019 17:20:40 +0000 (18:20 +0100)
committerJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Wed, 30 Jan 2019 17:20:40 +0000 (18:20 +0100)
test/CTestTestfileInstall.cmake.in
test/Makefile.am
test/test1001/Versions.py
test/test6701/Doc_TUI_Exemple_01.py
test/test6702/Doc_TUI_Exemple_02.py
test/test6703/Doc_TUI_Exemple_03.py
test/test6704/CTestTestfile.cmake [new file with mode: 0644]
test/test6704/Doc_TUI_Exemple_03_en_multifonction.py [new file with mode: 0644]
test/test6704/utExtend.py [new file with mode: 0644]
test/test6711/Doc_TUI_Exemple_01_Savings.py

index 8015311444ddb7ba37d2fbc0379fa3b68560c15a..a7eadf2ecaea453df401c186af36159622fecee5 100644 (file)
@@ -31,6 +31,7 @@ SUBDIRS(
     test6701
     test6702
     test6703
+    test6704
     test6711
     test6901
     test6902
index 8e00e30ca142fbcb5a8947288041b971d90c1c19..59e568ebef26461da3ee0554f443338fe88c682f 100644 (file)
@@ -34,6 +34,7 @@ install-data-local:
        cp -R $(DIR)test6701 $(SALOMETESTDIR)
        cp -R $(DIR)test6702 $(SALOMETESTDIR)
        cp -R $(DIR)test6703 $(SALOMETESTDIR)
+       cp -R $(DIR)test6704 $(SALOMETESTDIR)
        cp -R $(DIR)test6711 $(SALOMETESTDIR)
        cp -R $(DIR)test6901 $(SALOMETESTDIR)
        cp -R $(DIR)test6902 $(SALOMETESTDIR)
@@ -47,6 +48,7 @@ uninstall-local:
        rm -rf $(SALOMETESTDIR)/test6701
        rm -rf $(SALOMETESTDIR)/test6702
        rm -rf $(SALOMETESTDIR)/test6703
+       rm -rf $(SALOMETESTDIR)/test6704
        rm -rf $(SALOMETESTDIR)/test6711
        rm -rf $(SALOMETESTDIR)/test6901
        rm -rf $(SALOMETESTDIR)/test6902
index 021884e2bc4ac82b9faf27554293bb3216e6e7c3..29f307fe9dc5c4a045bec169b75eaa1bb894810a 100644 (file)
@@ -105,6 +105,8 @@ def testSysteme():
     except ImportError:
         pass
     print("")
+    print("  Les résultats obtenus sont corrects.")
+    print("")
     #
     return 0
 
index 24d902882caacca972fd9e79bcfa358d3695c3fe..f2bacb9e34d37d1b39d7811ce26a72b25baa5ac7 100644 (file)
@@ -49,4 +49,8 @@ if __name__ == "__main__":
     +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     """)
     xa = test1()
-    assertAlmostEqualArrays(xa, [0.25, 0.80, 0.95], places = 5)
+    ecart = assertAlmostEqualArrays(xa, [0.25, 0.80, 0.95], places = 5)
+    print("")
+    print("  L'écart absolu maximal obtenu lors du test est de %.2e."%ecart)
+    print("  Les résultats obtenus sont corrects.")
+    print("")
index ee2301e45c96c53d9019e89997a51f1b56f326ec..0877647c3494e44a93647c17604bf11d817017e8 100644 (file)
@@ -77,4 +77,7 @@ if __name__ == "__main__":
     xa1 = test1()
     xa2 = test2()
     ecart = assertAlmostEqualArrays(xa1, xa2, places = 15)
-    print("  Difference maximale entre les deux : %.2e"%ecart)
+    print("")
+    print("  L'écart absolu maximal obtenu lors du test est de %.2e."%ecart)
+    print("  Les résultats obtenus sont corrects.")
+    print("")
index fda1bac34a85ef4248badcc4a8e1f4891983aab5..5e578dad30df436848a9bbf00622175a578f3d14 100644 (file)
@@ -112,4 +112,8 @@ if __name__ == "__main__":
     ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     """)
     xa = test1()
-    assertAlmostEqualArrays(xa, [ 2., 3., 4.])
+    ecart = assertAlmostEqualArrays(xa, [ 2., 3., 4.])
+    #
+    print("  L'écart absolu maximal obtenu lors du test est de %.2e."%ecart)
+    print("  Les résultats obtenus sont corrects.")
+    print("")
diff --git a/test/test6704/CTestTestfile.cmake b/test/test6704/CTestTestfile.cmake
new file mode 100644 (file)
index 0000000..1dbec7a
--- /dev/null
@@ -0,0 +1,31 @@
+# Copyright (C) 2008-2019 EDF R&D
+#
+# This file is part of SALOME ADAO module
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+SET(TEST_NAMES
+  Doc_TUI_Exemple_03_en_multifonction
+  )
+
+FOREACH(tfile ${TEST_NAMES})
+  SET(TEST_NAME ADAO_${tfile})
+  ADD_TEST(${TEST_NAME} python ${tfile}.py)
+  #ADD_TEST(${TEST_NAME} python ${SALOME_TEST_DRIVER} ${TIMEOUT} ${tfile}.py)
+  SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES LABELS "${COMPONENT_NAME}")
+ENDFOREACH()
diff --git a/test/test6704/Doc_TUI_Exemple_03_en_multifonction.py b/test/test6704/Doc_TUI_Exemple_03_en_multifonction.py
new file mode 100644 (file)
index 0000000..18abfd3
--- /dev/null
@@ -0,0 +1,126 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2008-2019 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# 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
+"Verification d'un exemple de la documentation"
+
+from utExtend import assertAlmostEqualArrays
+
+# ==============================================================================
+#
+# Construction artificielle d'un exemple de donnees utilisateur
+# -------------------------------------------------------------
+alpha = 5.
+beta = 7
+gamma = 9.0
+#
+alphamin, alphamax = 0., 10.
+betamin,  betamax  = 3, 13
+gammamin, gammamax = 1.5, 15.5
+#
+def simulation(x):
+    "Fonction de simulation H pour effectuer Y=H(X)"
+    import numpy
+    __x = numpy.matrix(numpy.ravel(numpy.matrix(x))).T
+    __H = numpy.matrix("1 0 0;0 2 0;0 0 3; 1 2 3")
+    return __H * __x
+#
+def multisimulation( xserie ):
+    yserie = []
+    for x in xserie:
+        yserie.append( simulation( x ) )
+    return yserie
+#
+# Observations obtenues par simulation
+# ------------------------------------
+observations = simulation((2, 3, 4))
+
+# ==============================================================================
+def test1():
+    "Test"
+    import numpy
+    from adao import adaoBuilder
+    #
+    # Mise en forme des entrees
+    # -------------------------
+    Xb = (alpha, beta, gamma)
+    Bounds = (
+        (alphamin, alphamax),
+        (betamin,  betamax ),
+        (gammamin, gammamax))
+    #
+    # TUI ADAO
+    # --------
+    case = adaoBuilder.New()
+    case.set(
+        'AlgorithmParameters',
+        Algorithm = '3DVAR',
+        Parameters = {
+            "Bounds":Bounds,
+            "MaximumNumberOfSteps":100,
+            "StoreSupplementaryCalculations":[
+                "CostFunctionJ",
+                "CurrentState",
+                "SimulatedObservationAtOptimum",
+                ],
+            }
+        )
+    case.set( 'Background', Vector = numpy.array(Xb), Stored = True )
+    case.set( 'Observation', Vector = numpy.array(observations) )
+    case.set( 'BackgroundError', ScalarSparseMatrix = 1.0e10 )
+    case.set( 'ObservationError', ScalarSparseMatrix = 1.0 )
+    case.set(
+        'ObservationOperator',
+        OneFunction = multisimulation,
+        Parameters  = {"DifferentialIncrement":0.0001},
+        InputFunctionAsMulti = True,
+        )
+    case.set( 'Observer', Variable="CurrentState", Template="ValuePrinter" )
+    case.execute()
+    #
+    # Exploitation independante
+    # -------------------------
+    Xbackground   = case.get("Background")
+    Xoptimum      = case.get("Analysis")[-1]
+    FX_at_optimum = case.get("SimulatedObservationAtOptimum")[-1]
+    J_values      = case.get("CostFunctionJ")[:]
+    print("")
+    print("Number of internal iterations...: %i"%len(J_values))
+    print("Initial state...................: %s"%(numpy.ravel(Xbackground),))
+    print("Optimal state...................: %s"%(numpy.ravel(Xoptimum),))
+    print("Simulation at optimal state.....: %s"%(numpy.ravel(FX_at_optimum),))
+    print("")
+    #
+    return case.get("Analysis")[-1]
+
+# ==============================================================================
+if __name__ == "__main__":
+    print('\nAUTODIAGNOSTIC\n')
+    print("""Exemple de la doc :
+
+    Exploitation independante des resultats d'un cas de calcul
+    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+    """)
+    xa = test1()
+    ecart = assertAlmostEqualArrays(xa, [ 2., 3., 4.])
+    #
+    print("  L'écart absolu maximal obtenu lors du test est de %.2e."%ecart)
+    print("  Les résultats obtenus sont corrects.")
+    print("")
diff --git a/test/test6704/utExtend.py b/test/test6704/utExtend.py
new file mode 100644 (file)
index 0000000..5bf358a
--- /dev/null
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2008-2019 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# 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
+
+"""
+    Unittest extensions for Numpy objects
+"""
+__author__ = "Jean-Philippe ARGAUD"
+__all__ = ["assertAlmostEqualVector"]
+
+import numpy
+
+# ==============================================================================
+def assertAlmostEqualArrays(first, second, places=7, msg=None, delta=None):
+    "Compare two vectors, like unittest.assertAlmostEqual"
+    if msg is not None:
+        print(msg)
+    if delta is not None:
+        if ( (numpy.asarray(first) - numpy.asarray(second)) > float(delta) ).any():
+            raise AssertionError("%s != %s within %s places"%(first,second,delta))
+    else:
+        if ( (numpy.asarray(first) - numpy.asarray(second)) > 10**(-int(places)) ).any():
+            raise AssertionError("%s != %s within %i places"%(first,second,places))
+    return max(abs(numpy.asarray(first) - numpy.asarray(second)))
index 4e7e40cfb4e608c370beae4428c1609dd343fd69..d5402f93fdfe58c2249f5baf4dff7beb560c3e9b 100644 (file)
@@ -90,4 +90,8 @@ if __name__ == "__main__":
     ++++++++++++++++++++++++++++++++++
 """)
     xa = test1()
-    assertAlmostEqualArrays(xa, [0.25, 0.80, 0.95], places = 5)
+    ecart = assertAlmostEqualArrays(xa, [0.25, 0.80, 0.95], places = 5)
+    #
+    print("  L'écart absolu maximal obtenu lors du test est de %.2e."%ecart)
+    print("  Les résultats obtenus sont corrects.")
+    print("")