]> SALOME platform Git repositories - modules/adao.git/commitdiff
Salome HOME
Python 3 compatibility improvement
authorJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Fri, 17 Mar 2017 22:32:16 +0000 (23:32 +0100)
committerJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Fri, 17 Mar 2017 22:32:16 +0000 (23:32 +0100)
20 files changed:
src/daComposant/daAlgorithms/3DVAR.py
src/daComposant/daAlgorithms/4DVAR.py
src/daComposant/daAlgorithms/ExtendedBlue.py
src/daComposant/daAlgorithms/ExtendedKalmanFilter.py
src/daComposant/daAlgorithms/KalmanFilter.py
src/daComposant/daAlgorithms/ParticleSwarmOptimization.py
src/daComposant/daAlgorithms/QuantileRegression.py
src/daComposant/daAlgorithms/UnscentedKalmanFilter.py
src/daComposant/daCore/AssimilationStudy.py
src/daComposant/daCore/BasicObjects.py
src/daComposant/daCore/ExtendedLogging.py
src/daComposant/daCore/Persistence.py
src/daComposant/daCore/PlatformInfo.py
src/daComposant/daCore/Templates.py
src/daComposant/daDiagnostics/PlotVector.py
src/daComposant/daDiagnostics/PlotVectors.py
src/daComposant/daDiagnostics/RMS.py
src/daComposant/daDiagnostics/ReduceVariance.py
src/daComposant/daNumerics/ApproximatedDerivatives.py
src/daComposant/daNumerics/mmqr.py

index 7ddc1bbdc5f7359521767276e8bfe0b76e17fdc9..adf96269d9d5a7f6ea379149157c60b887763ce0 100644 (file)
@@ -110,7 +110,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         self._pre_run(Parameters)
         #
         # Correction pour pallier a un bug de TNC sur le retour du Minimum
-        if self._parameters.has_key("Minimizer") == "TNC":
+        if "Minimizer" in self._parameters and self._parameters["Minimizer"] == "TNC":
             self.setParameterValue("StoreInternalVariables",True)
         #
         # Opérateurs
@@ -118,9 +118,9 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         Hm = HO["Direct"].appliedTo
         Ha = HO["Adjoint"].appliedInXTo
         #
-        # Utilisation éventuelle d'un vecteur H(Xb) précalculé (sans cout)
-        # ----------------------------------------------------------------
-        if HO["AppliedToX"] is not None and HO["AppliedToX"].has_key("HXb"):
+        # Utilisation éventuelle d'un vecteur H(Xb) précalculé
+        # ----------------------------------------------------
+        if HO["AppliedToX"] is not None and "HXb" in HO["AppliedToX"]:
             HXb = Hm( Xb, HO["AppliedToX"]["HXb"])
         else:
             HXb = Hm( Xb )
@@ -271,8 +271,8 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         #
         if "OMA"                           in self._parameters["StoreSupplementaryCalculations"] or \
            "SigmaObs2"                     in self._parameters["StoreSupplementaryCalculations"] or \
-           "SimulatedObservationAtOptimum" in self._parameters["StoreSupplementaryCalculations"] or \
-           "SimulationQuantiles"           in self._parameters["StoreSupplementaryCalculations"]:
+           "SimulationQuantiles"           in self._parameters["StoreSupplementaryCalculations"] or \
+           "SimulatedObservationAtOptimum" in self._parameters["StoreSupplementaryCalculations"]:
             if "SimulatedObservationAtCurrentState" in self._parameters["StoreSupplementaryCalculations"]:
                 HXa = self.StoredVariables["SimulatedObservationAtCurrentState"][IndexMin]
             elif "SimulatedObservationAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]:
@@ -312,9 +312,9 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         # Calculs et/ou stockages supplémentaires
         # ---------------------------------------
         if "Innovation" in self._parameters["StoreSupplementaryCalculations"] or \
-            "OMB" in self._parameters["StoreSupplementaryCalculations"] or \
             "SigmaObs2" in self._parameters["StoreSupplementaryCalculations"] or \
-            "MahalanobisConsistency" in self._parameters["StoreSupplementaryCalculations"]:
+            "MahalanobisConsistency" in self._parameters["StoreSupplementaryCalculations"] or \
+            "OMB" in self._parameters["StoreSupplementaryCalculations"]:
             d  = Y - HXb
         if "Innovation" in self._parameters["StoreSupplementaryCalculations"]:
             self.StoredVariables["Innovation"].store( numpy.ravel(d) )
index 344ee6cd5306c1e0dcfcd3d08df27befcdf17169..48a015dd7a18d9fa32d0630d3b63cc249a133d98 100644 (file)
@@ -97,7 +97,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         self._pre_run(Parameters)
         #
         # Correction pour pallier a un bug de TNC sur le retour du Minimum
-        if self._parameters.has_key("Minimizer") == "TNC":
+        if "Minimizer" in self._parameters and self._parameters["Minimizer"] == "TNC":
             self.setParameterValue("StoreInternalVariables",True)
         #
         # Opérateurs
@@ -106,7 +106,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         #
         Mm = EM["Direct"].appliedControledFormTo
         #
-        if CM is not None and CM.has_key("Tangent") and U is not None:
+        if CM is not None and "Tangent" in CM and U is not None:
             Cm = CM["Tangent"].asMatrix(Xb)
         else:
             Cm = None
index 8f775140031683fd9c6f55561d6595a23db0458b..4752f141f9a144bf3d5d871c4f8bdd502f591807 100644 (file)
@@ -80,7 +80,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         #
         # Utilisation éventuelle d'un vecteur H(Xb) précalculé
         # ----------------------------------------------------
-        if HO["AppliedToX"] is not None and HO["AppliedToX"].has_key("HXb"):
+        if HO["AppliedToX"] is not None and "HXb" in HO["AppliedToX"]:
             HXb = H( Xb, HO["AppliedToX"]["HXb"])
         else:
             HXb = H( Xb )
index f15f183305725695f4c259e1ef96a06906993aeb..0fbd0db655fb1dc8257f6cedf7c1a0bed21d7833 100644 (file)
@@ -78,7 +78,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         if self._parameters["EstimationOf"] == "State":
             M = EM["Direct"].appliedControledFormTo
         #
-        if CM is not None and CM.has_key("Tangent") and U is not None:
+        if CM is not None and "Tangent" in CM and U is not None:
             Cm = CM["Tangent"].asMatrix(Xb)
         else:
             Cm = None
index 6684c8b93609c711fda66dac1c39e12c85978458..e613ae2cf0f653e92a8ad95d3e0070ff8633ba47 100644 (file)
@@ -69,7 +69,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             Mt = EM["Tangent"].asMatrix(Xb)
             Ma = EM["Adjoint"].asMatrix(Xb)
         #
-        if CM is not None and CM.has_key("Tangent") and U is not None:
+        if CM is not None and "Tangent" in CM and U is not None:
             Cm = CM["Tangent"].asMatrix(Xb)
         else:
             Cm = None
index 7b7edd0caafa5d6b0016a9e607e919437350c74c..aaa289d891828ac15143d6a7f2082af6e54d3f16 100644 (file)
@@ -101,7 +101,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)
         #
-        if self._parameters.has_key("BoxBounds") and (type(self._parameters["BoxBounds"]) is type([]) or type(self._parameters["BoxBounds"]) is type(())) and (len(self._parameters["BoxBounds"]) > 0):
+        if "BoxBounds" in self._parameters and (type(self._parameters["BoxBounds"]) is type([]) or type(self._parameters["BoxBounds"]) is type(())) and (len(self._parameters["BoxBounds"]) > 0):
             BoxBounds = self._parameters["BoxBounds"]
             logging.debug("%s Prise en compte des bornes d'incréments de paramètres effectuee"%(self._name,))
         else:
index d6c50c1a41d911d37c4cc6cce61882899f93da1d..3d95d36f2b476aca69fd5b07d1eb6bcae0b88878 100644 (file)
@@ -81,7 +81,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         #
         # Utilisation éventuelle d'un vecteur H(Xb) précalculé
         # ----------------------------------------------------
-        if HO["AppliedToX"] is not None and HO["AppliedToX"].has_key("HXb"):
+        if HO["AppliedToX"] is not None and "HXb" in HO["AppliedToX"]:
             HXb = Hm( Xb, HO["AppliedToX"]["HXb"])
         else:
             HXb = Hm( Xb )
index fdb6b4f1da464af3a56c153c8dc963efce4c531c..b08461030dc41e01616ae077ca2aa2aa08338058 100644 (file)
@@ -130,7 +130,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         if self._parameters["EstimationOf"] == "State":
             M = EM["Direct"].appliedControledFormTo
         #
-        if CM is not None and CM.has_key("Tangent") and U is not None:
+        if CM is not None and "Tangent" in CM and U is not None:
             Cm = CM["Tangent"].asMatrix(Xb)
         else:
             Cm = None
index ac5abc971abbe741aa86167fa0d64efd89e54c82..82fca1b0225c881cddf2f105f63476821667dc58 100644 (file)
@@ -32,16 +32,16 @@ __all__ = ["AssimilationStudy"]
 
 import os, sys
 import numpy
-import ExtendedLogging ; ExtendedLogging.ExtendedLogging() # A importer en premier
+from daCore import ExtendedLogging ; ExtendedLogging.ExtendedLogging() # A importer en premier
 import logging
 try:
     import scipy.optimize
     logging.debug("Succeed initial import of scipy.optimize with Scipy %s", scipy.version.version)
 except ImportError:
     logging.debug("Fail initial import of scipy.optimize")
-import Persistence
-from BasicObjects import Operator, Covariance
-import PlatformInfo
+from daCore import Persistence
+from daCore.BasicObjects import Operator, Covariance
+from daCore import PlatformInfo
 
 # ==============================================================================
 class AssimilationStudy:
index f86fc820beb32e5bb48627b4d946c9a6c0bee2af..6d992710eb7d4cf40f0928f9cd2836f6d5998f87 100644 (file)
@@ -30,8 +30,8 @@ __all__ = []
 
 import logging, copy
 import numpy
-import Persistence
-import PlatformInfo
+from daCore import Persistence
+from daCore import PlatformInfo
 
 # ==============================================================================
 class CacheManager(object):
@@ -59,7 +59,7 @@ class CacheManager(object):
         "Vérifie l'existence d'un calcul correspondant à la valeur"
         __alc = False
         __HxV = None
-        for i in xrange(min(len(self.__listOPCV),self.__lenghtOR)-1,-1,-1):
+        for i in range(min(len(self.__listOPCV),self.__lenghtOR)-1,-1,-1):
             if xValue.size != self.__listOPCV[i][0].size:
                 # logging.debug("CM Différence de la taille %s de X et de celle %s du point %i déjà calculé", xValue.shape,i,self.__listOPCP[i].shape)
                 continue
@@ -175,7 +175,7 @@ class Operator(object):
         #
         return HxValue
 
-    def appliedControledFormTo(self, (xValue, uValue) ):
+    def appliedControledFormTo(self, paire ):
         """
         Permet de restituer le résultat de l'application de l'opérateur à une
         paire (xValue, uValue). Cette méthode se contente d'appliquer, son
@@ -185,6 +185,8 @@ class Operator(object):
         - xValue : argument X adapté pour appliquer l'opérateur
         - uValue : argument U adapté pour appliquer l'opérateur
         """
+        assert len(paire) == 2, "Incorrect number of arguments"
+        xValue, uValue = paire
         if self.__Matrix is not None:
             self.__addOneMatrixCall()
             return self.__Matrix * xValue
@@ -195,7 +197,7 @@ class Operator(object):
             self.__addOneMethodCall()
             return self.__Method( xValue )
 
-    def appliedInXTo(self, (xNominal, xValue) ):
+    def appliedInXTo(self, paire ):
         """
         Permet de restituer le résultat de l'application de l'opérateur à un
         argument xValue, sachant que l'opérateur est valable en xNominal.
@@ -208,6 +210,8 @@ class Operator(object):
           est construit pour etre ensuite appliqué
         - xValue : argument adapté pour appliquer l'opérateur
         """
+        assert len(paire) == 2, "Incorrect number of arguments"
+        xNominal, xValue = paire
         if self.__Matrix is not None:
             self.__addOneMatrixCall()
             return self.__Matrix * xValue
@@ -365,7 +369,7 @@ class Algorithm(object):
         self.__setParameters(Parameters)
         #
         # Corrections et complements
-        if self._parameters.has_key("Bounds") and (type(self._parameters["Bounds"]) is type([]) or type(self._parameters["Bounds"]) is type(())) and (len(self._parameters["Bounds"]) > 0):
+        if "Bounds" in self._parameters and (type(self._parameters["Bounds"]) is type([]) or type(self._parameters["Bounds"]) is type(())) and (len(self._parameters["Bounds"]) > 0):
             logging.debug("%s Prise en compte des bornes effectuee"%(self._name,))
         else:
             self._parameters["Bounds"] = None
index e9daddc9e613c700e09973ba224adfebea2d196c..a3bbf222e4a23b72b229eabe98ce1752ad68ce02 100644 (file)
@@ -76,7 +76,7 @@ __all__ = []
 import os
 import sys
 import logging
-import PlatformInfo
+from daCore import PlatformInfo
 
 LOGFILE = os.path.join(os.path.abspath(os.curdir),"AssimilationStudy.log")
 
index e095a3894316606e55f847cd38efa183ca9cd930..b9c657758262d8d8d34af6a31cde672ef8f1ef65 100644 (file)
@@ -29,7 +29,7 @@ __all__ = []
 
 import numpy, copy
 
-from PlatformInfo import PathManagement ; PathManagement()
+from daCore.PlatformInfo import PathManagement ; PathManagement()
 
 # ==============================================================================
 class Persistence(object):
index 78d621bea5885a9faea650077cdaa4f816a93dab..1ab3a7e45432b6734e18783dca20fd69ee5bf1d9 100644 (file)
@@ -52,17 +52,17 @@ class PlatformInfo(object):
 
     def getName(self):
         "Retourne le nom de l'application"
-        import version as dav
+        import daCore.version as dav
         return dav.name
 
     def getVersion(self):
         "Retourne le numéro de la version"
-        import version as dav
+        import daCore.version as dav
         return dav.version
 
     def getDate(self):
         "Retourne la date de création de la version"
-        import version as dav
+        import daCore.version as dav
         return dav.date
 
     def getPythonVersion(self):
@@ -138,7 +138,7 @@ class PlatformInfo(object):
         return sys.float_info.epsilon
 
     def __str__(self):
-        import version as dav
+        import daCore.version as dav
         return "%s %s (%s)"%(dav.name,dav.version,dav.date)
 
 # ==============================================================================
index 60b46724221180d273ec41b339cd62114b21df65..c7ab6b1e20d3e6a4a5897fed44832fe053f570b5 100644 (file)
@@ -60,9 +60,9 @@ class TemplateStorage(object):
         __keys.sort()
         return __keys
 
-    def has_key(self, name):
-        "D.has_key(k) -> True if D has a key k, else False"
-        return name in self.__values
+    def has_key(self, name):
+        "D.has_key(k) -> True if D has a key k, else False"
+        return name in self.__values
 
     def __contains__(self, name):
         "D.__contains__(k) -> True if D has a key k, else False"
index 69179d3ff3982b70f2b15965b748569f71d53f5a..97751e4b20106df3157e47852a2f4c1bf6e0e08d 100644 (file)
@@ -124,7 +124,7 @@ class ElementaryDiagnostic(BasicObjects.Diagnostic):
 
 # ==============================================================================
 if __name__ == "__main__":
-    print '\n AUTODIAGNOSTIC \n'
+    print('\n AUTODIAGNOSTIC \n')
 
     D = ElementaryDiagnostic("Mon Plot")
 
@@ -146,4 +146,4 @@ if __name__ == "__main__":
     D.calculate(vect, title = "Vecteur 8", ltitle = "Vecteur 8")
     temps = [0.1,0.2,0.3,0.4,0.5]
     D.calculate(vect, temps, title = "Vecteur 8 avec axe du temps modifie")
-    print
+    print("")
index c1058a89606e1113d9cc4df81995213cd35b62f5..e3d58c98e5e42f4c3b690b14d6220eab46a183ba 100644 (file)
@@ -58,9 +58,9 @@ class ElementaryDiagnostic(BasicObjects.Diagnostic):
         self.__g('set style data lines')
         self.__g('set grid')
         self.__g('set autoscale')
-        self.__g('set title  "'+title +'"')
-        self.__g('set xlabel "'+xlabel+'"')
-        self.__g('set ylabel "'+ylabel+'"')
+        self.__g('set title  "'+str(title) +'"')
+        self.__g('set xlabel "'+str(xlabel)+'"')
+        self.__g('set ylabel "'+str(ylabel)+'"')
         self.__g.plot( self.__gnuplot.Data( Steps, Vector.pop(0), title=ltitle.pop(0) ) )
         for vector in Vector:
             self.__g.replot( self.__gnuplot.Data( Steps, vector, title=ltitle.pop(0) ) )
@@ -135,7 +135,7 @@ class ElementaryDiagnostic(BasicObjects.Diagnostic):
 
 # ==============================================================================
 if __name__ == "__main__":
-    print '\n AUTODIAGNOSTIC \n'
+    print('\n AUTODIAGNOSTIC \n')
 
     D = ElementaryDiagnostic("Mon Plot")
 
@@ -152,4 +152,4 @@ if __name__ == "__main__":
         [0.1,0.2,0.3,0.4,0.5],
         title = "Vecteurs 1 a 3, temps modifie",
         ltitle = ["Vecteur 1","Vecteur 2","Vecteur 3"])
-    print
+    print("")
index 6fe3272f8044fedf3a3cd3fac65bc2c664326669..509c15bc92e71856a9acd74a925dde1ae6eb59e3 100644 (file)
@@ -59,7 +59,7 @@ class ElementaryDiagnostic(BasicObjects.Diagnostic,Persistence.OneScalar):
 
 # ==============================================================================
 if __name__ == "__main__":
-    print '\n AUTODIAGNOSTIC \n'
+    print('\n AUTODIAGNOSTIC \n')
 
     D = ElementaryDiagnostic("Ma RMS")
 
@@ -81,8 +81,8 @@ if __name__ == "__main__":
     vect1 = [-0.23262176, 1.36065207,  0.32988102, 0.24400551, -0.66765848, -0.19088483, -0.31082575,  0.56849814,  1.21453443,  0.99657516]
     vect2 = [0,0,0,0,0,0,0,0,0,0]
     D.calculate(vect1,vect2)
-    print " Les valeurs de RMS attendues sont les suivantes : [1.0, 1.0, 1.0, 3.0, 0.53162016515553656, 0.73784217096601323]"
-    print " Les RMS obtenues................................:", D[:]
-    print " La moyenne......................................:", D.mean()
-    print
+    print(" Les valeurs de RMS attendues sont les suivantes : [1.0, 1.0, 1.0, 3.0, 0.53162016515553656, 0.73784217096601323]")
+    print(" Les RMS obtenues................................: %s"%(D[:],))
+    print(" La moyenne......................................: %s"%(D.mean(),))
+    print("")
 
index b78edb652c3e4bfd4e4d44ca4fa0c28decd903f8..23225ccc0eb438e0001af217c0040bc5af665899 100644 (file)
@@ -68,7 +68,7 @@ class ElementaryDiagnostic(BasicObjects.Diagnostic,Persistence.OneScalar):
 
 #===============================================================================
 if __name__ == "__main__":
-    print '\n AUTODIAGNOSTIC \n'
+    print('\n AUTODIAGNOSTIC \n')
     #
     # Instanciation de l'objet diagnostic
     # -----------------------------------
@@ -78,34 +78,34 @@ if __name__ == "__main__":
     # ----------------------
     x1 = numpy.matrix(([3. , 4., 5. ]))
     x2 = numpy.matrix(([1.5, 2., 2.5]))
-    print " L'écart entre les observations et l'ébauche est OMB :", x1
-    print " La moyenne de OMB (i.e. le biais) est de............:", x1.mean()
-    print " La variance de OMB est de...........................:", x1.var()
-    print " L'écart entre les observations et l'analyse est OMA :", x2
-    print " La moyenne de OMA (i.e. le biais) est de............:", x2.mean()
-    print " La variance de OMA est de...........................:", x2.var()
+    print(" L'écart entre les observations et l'ébauche est OMB :", x1)
+    print(" La moyenne de OMB (i.e. le biais) est de............:", x1.mean())
+    print(" La variance de OMB est de...........................:", x1.var())
+    print(" L'écart entre les observations et l'analyse est OMA :", x2)
+    print(" La moyenne de OMA (i.e. le biais) est de............:", x2.mean())
+    print(" La variance de OMA est de...........................:", x2.var())
     #
     D.calculate( vectorOMB = x1,  vectorOMA = x2)
     if not D[0] :
-            print " Résultat : l'analyse NE RÉDUIT PAS la variance"
+            print(" Résultat : l'analyse NE RÉDUIT PAS la variance")
     else :
-            print " Résultat : l'analyse RÉDUIT la variance"
-    print
+            print(" Résultat : l'analyse RÉDUIT la variance")
+    print("")
     #
     # Vecteur de type array
     # ---------------------
     x1 = numpy.array(range(11))
     x2 = numpy.matrix(range(-10,12,2))
-    print " L'écart entre les observations et l'ébauche est OMB :", x1
-    print " La moyenne de OMB (i.e. le biais) est de............:", x1.mean()
-    print " La variance de OMB est de...........................:", x1.var()
-    print " L'écart entre les observations et l'analyse est OMA :", x2
-    print " La moyenne de OMA (i.e. le biais) est de............:", x2.mean()
-    print " La variance de OMA est de...........................:", x2.var()
+    print(" L'écart entre les observations et l'ébauche est OMB :", x1)
+    print(" La moyenne de OMB (i.e. le biais) est de............:", x1.mean())
+    print(" La variance de OMB est de...........................:", x1.var())
+    print(" L'écart entre les observations et l'analyse est OMA :", x2)
+    print(" La moyenne de OMA (i.e. le biais) est de............:", x2.mean())
+    print(" La variance de OMA est de...........................:", x2.var())
     #
     D.calculate( vectorOMB = x1,  vectorOMA = x2)
     if not D[1] :
-            print " Résultat : l'analyse NE RÉDUIT PAS la variance"
+            print(" Résultat : l'analyse NE RÉDUIT PAS la variance")
     else :
-            print " Résultat : l'analyse RÉDUIT la variance"
-    print
+            print(" Résultat : l'analyse RÉDUIT la variance")
+    print("")
index ec60fc40620eaad7eceb541b4ed091bec3ed6686..4cc812d799dca38e83c623b49bd7e2d697c73580 100644 (file)
@@ -31,7 +31,9 @@ from daCore.BasicObjects import Operator
 # logging.getLogger().setLevel(logging.DEBUG)
 
 # ==============================================================================
-def ExecuteFunction( (X, funcrepr) ):
+def ExecuteFunction( paire ):
+    assert len(paire) == 2, "Incorrect number of arguments"
+    X, funcrepr = paire
     __X = numpy.asmatrix(numpy.ravel( X )).T
     __sys_path_tmp = sys.path ; sys.path.insert(0,funcrepr["__userFunction__path"])
     __module = __import__(funcrepr["__userFunction__modl"], globals(), locals(), [])
@@ -122,7 +124,7 @@ class FDApproximation(object):
             self.__listJPIN = [] # Jacobian Previous Calculated Increment Norms
         else:
             self.__avoidRC = False
-        if float(increment) <> 0.:
+        if abs(float(increment)) > 1.e-15:
             self.__increment  = float(increment)
         else:
             self.__increment  = 0.01
@@ -318,10 +320,12 @@ class FDApproximation(object):
         return _Jacobienne
 
     # ---------------------------------------------------------
-    def TangentOperator(self, (X, dX) ):
+    def TangentOperator(self, paire ):
         """
         Calcul du tangent à l'aide de la Jacobienne.
         """
+        assert len(paire) == 2, "Incorrect number of arguments"
+        X, dX = paire
         _Jacobienne = self.TangentMatrix( X )
         if dX is None or len(dX) == 0:
             #
@@ -337,10 +341,12 @@ class FDApproximation(object):
             return _HtX.A1
 
     # ---------------------------------------------------------
-    def AdjointOperator(self, (X, Y) ):
+    def AdjointOperator(self, paire ):
         """
         Calcul de l'adjoint à l'aide de la Jacobienne.
         """
+        assert len(paire) == 2, "Incorrect number of arguments"
+        X, Y = paire
         _JacobienneT = self.TangentMatrix( X ).T
         if Y is None or len(Y) == 0:
             #
@@ -357,4 +363,4 @@ class FDApproximation(object):
 
 # ==============================================================================
 if __name__ == "__main__":
-    print '\n AUTODIAGNOSTIC \n'
+    print('\n AUTODIAGNOSTIC \n')
index de88e1cb569ef527105bcbe4017c3e1104ece42a..698398d0f4a78507fd7bea2b3086acef038e8345 100644 (file)
@@ -105,4 +105,4 @@ def mmqr(
 
 # ==============================================================================
 if __name__ == "__main__":
-    print '\n AUTODIAGNOSTIC \n'
+    print('\n AUTODIAGNOSTIC \n')