Salome HOME
Code and documentation update for ControledFunctionTest
[modules/adao.git] / test / test6901 / Verification_des_Assimilation_Algorithms.py
index 3523dcda197b62c9cd4c76521e11c8f2dc4a4d7d..4745c0c50c2f4bd08c9b40ed148b61a06bddfd09 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Copyright (C) 2008-2019 EDF R&D
+# Copyright (C) 2008-2023 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
@@ -27,10 +27,10 @@ import numpy
 from adao import adaoBuilder
 
 # ==============================================================================
-class InTest(unittest.TestCase):
+class Test_Adao(unittest.TestCase):
     def test1(self):
         """Verification de la disponibilite de l'ensemble des algorithmes\n(Utilisation d'un operateur matriciel)"""
-        print(self.test1.__doc__)
+        print(self.test1.__doc__.strip()+"\n")
         Xa = {}
         for algo in ("3DVAR", "Blue", "ExtendedBlue", "LinearLeastSquares", "NonLinearLeastSquares", "DerivativeFreeOptimization"):
             print("")
@@ -108,18 +108,16 @@ class InTest(unittest.TestCase):
         verify_similarity_of_algo_results(("3DVAR", "Blue", "ExtendedBlue", "4DVAR", "DerivativeFreeOptimization"), Xa, 5.e-5)
         verify_similarity_of_algo_results(("LinearLeastSquares", "NonLinearLeastSquares"), Xa, 5.e-7)
         verify_similarity_of_algo_results(("KalmanFilter", "ExtendedKalmanFilter", "UnscentedKalmanFilter"), Xa, 1.e-14)
-        verify_similarity_of_algo_results(("KalmanFilter", "EnsembleKalmanFilter"), Xa, 5.e-2)
+        verify_similarity_of_algo_results(("KalmanFilter", "EnsembleKalmanFilter"), Xa, 2.e-1)
         print("  Les resultats obtenus sont corrects.")
         print("")
-        #
-        return 0
 
     def test2(self):
         """Verification de la disponibilite de l'ensemble des algorithmes\n(Utilisation d'un operateur fonctionnel)"""
         print(self.test2.__doc__)
         Xa = {}
-        M = numpy.matrix("1 0 0;0 2 0;0 0 3")
-        def H(x): return M * numpy.asmatrix(numpy.ravel( x )).T
+        M = numpy.diag([1.,2.,3.])
+        def H(x): return M @ numpy.ravel( x )
         for algo in ("3DVAR", "Blue", "ExtendedBlue", "NonLinearLeastSquares", "DerivativeFreeOptimization"):
             print("")
             msg = "Algorithme en test : %s"%algo
@@ -137,8 +135,8 @@ class InTest(unittest.TestCase):
             Xa[algo] = adaopy.get("Analysis")[-1]
             del adaopy
         #
-        M = numpy.matrix("1 0 0;0 2 0;0 0 3")
-        def H(x): return M * numpy.asmatrix(numpy.ravel( x )).T
+        M = numpy.diag([1.,2.,3.])
+        def H(x): return M @ numpy.ravel( x )
         for algo in ("ExtendedKalmanFilter", "KalmanFilter", "EnsembleKalmanFilter", "UnscentedKalmanFilter", "4DVAR"):
             print("")
             msg = "Algorithme en test : %s"%algo
@@ -158,8 +156,8 @@ class InTest(unittest.TestCase):
             Xa[algo] = adaopy.get("Analysis")[-1]
             del adaopy
         #
-        M = numpy.matrix("1 0 0;0 1 0;0 0 1")
-        def H(x): return M * numpy.asmatrix(numpy.ravel( x )).T
+        M = numpy.identity(3)
+        def H(x): return M @ numpy.ravel( x )
         for algo in ("ParticleSwarmOptimization", "QuantileRegression", ):
             print("")
             msg = "Algorithme en test : %s"%algo
@@ -181,12 +179,10 @@ class InTest(unittest.TestCase):
         msg = "Tests des ecarts attendus :"
         print(msg+"\n"+"="*len(msg))
         verify_similarity_of_algo_results(("3DVAR", "Blue", "ExtendedBlue", "4DVAR", "DerivativeFreeOptimization"), Xa, 5.e-5)
-        verify_similarity_of_algo_results(("KalmanFilter", "ExtendedKalmanFilter", "UnscentedKalmanFilter"), Xa, 1.e14)
-        verify_similarity_of_algo_results(("KalmanFilter", "EnsembleKalmanFilter"), Xa, 5.e-2)
+        verify_similarity_of_algo_results(("KalmanFilter", "ExtendedKalmanFilter", "UnscentedKalmanFilter"), Xa, 2.e-14)
+        verify_similarity_of_algo_results(("KalmanFilter", "EnsembleKalmanFilter"), Xa, 2e-1)
         print("  Les resultats obtenus sont corrects.")
         print("")
-        #
-        return 0
 
 def almost_equal_vectors(v1, v2, precision = 1.e-15, msg = ""):
     """Comparaison de deux vecteurs"""
@@ -205,4 +201,5 @@ def verify_similarity_of_algo_results(serie = [], Xa = {}, precision = 1.e-15):
 #===============================================================================
 if __name__ == "__main__":
     print("\nAUTODIAGNOSTIC\n==============")
-    unittest.main()
+    sys.stderr = sys.stdout
+    unittest.main(verbosity=2)