X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FdaComposant%2FdaCore%2FPersistence.py;h=e77dd456bbef2894c2787db2c082eb4857ca4ef4;hb=0dcf34aa02ea5c2319204fbca51f6bc860406fde;hp=43c18965cd6860bcd12bba63770886e998609e75;hpb=101e87f86f33799493b98013b19107c5c69061f2;p=modules%2Fadao.git diff --git a/src/daComposant/daCore/Persistence.py b/src/daComposant/daCore/Persistence.py index 43c1896..e77dd45 100644 --- a/src/daComposant/daCore/Persistence.py +++ b/src/daComposant/daCore/Persistence.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2008-2018 EDF R&D +# Copyright (C) 2008-2021 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 @@ -31,7 +31,8 @@ import os, sys, numpy, copy import gzip, bz2 from daCore.PlatformInfo import PathManagement ; PathManagement() -from daCore.PlatformInfo import has_gnuplot +from daCore.PlatformInfo import has_gnuplot, PlatformInfo +mfp = PlatformInfo().MaximumPrecision() if has_gnuplot: import Gnuplot @@ -146,6 +147,9 @@ class Persistence(object): "x.__len__() <==> len(x)" return len(self.__values) + def name(self): + return self.__name + def __getitem__(self, index=None ): "x.__getitem__(y) <==> x[y]" return copy.copy(self.__values[index]) @@ -276,7 +280,7 @@ class Persistence(object): élémentaires numpy. """ try: - return [numpy.matrix(item).mean() for item in self.__values] + return [numpy.mean(item, dtype=mfp).astype('float') for item in self.__values] except: raise TypeError("Base type is incompatible with numpy") @@ -291,9 +295,9 @@ class Persistence(object): """ try: if numpy.version.version >= '1.1.0': - return [numpy.matrix(item).std(ddof=ddof) for item in self.__values] + return [numpy.array(item).std(ddof=ddof, dtype=mfp).astype('float') for item in self.__values] else: - return [numpy.matrix(item).std() for item in self.__values] + return [numpy.array(item).std(dtype=mfp).astype('float') for item in self.__values] except: raise TypeError("Base type is incompatible with numpy") @@ -304,7 +308,7 @@ class Persistence(object): numpy. """ try: - return [numpy.matrix(item).sum() for item in self.__values] + return [numpy.array(item).sum() for item in self.__values] except: raise TypeError("Base type is incompatible with numpy") @@ -315,7 +319,7 @@ class Persistence(object): numpy. """ try: - return [numpy.matrix(item).min() for item in self.__values] + return [numpy.array(item).min() for item in self.__values] except: raise TypeError("Base type is incompatible with numpy") @@ -326,7 +330,7 @@ class Persistence(object): numpy. """ try: - return [numpy.matrix(item).max() for item in self.__values] + return [numpy.array(item).max() for item in self.__values] except: raise TypeError("Base type is incompatible with numpy") @@ -460,6 +464,7 @@ class Persistence(object): eval(input('Please press return to continue...\n')) # --------------------------------------------------------- + # On pourrait aussi utiliser d'autres attributs d'un "array" comme "tofile" def mean(self): """ Renvoie la moyenne sur toutes les valeurs sans tenir compte de la @@ -467,10 +472,7 @@ class Persistence(object): les types élémentaires numpy. """ try: - if self.__basetype in [int, float]: - return float( numpy.array(self.__values).mean() ) - else: - return numpy.array(self.__values).mean(axis=0) + return numpy.mean(self.__values, axis=0, dtype=mfp).astype('float') except: raise TypeError("Base type is incompatible with numpy") @@ -485,9 +487,9 @@ class Persistence(object): """ try: if numpy.version.version >= '1.1.0': - return numpy.array(self.__values).std(ddof=ddof,axis=0) + return numpy.array(self.__values).std(ddof=ddof,axis=0).astype('float') else: - return numpy.array(self.__values).std(axis=0) + return numpy.array(self.__values).std(axis=0).astype('float') except: raise TypeError("Base type is incompatible with numpy") @@ -535,9 +537,6 @@ class Persistence(object): except: raise TypeError("Base type is incompatible with numpy") - # On pourrait aussi utiliser les autres attributs d'une "matrix", comme - # "tofile", "min"... - def plot(self, steps = None, title = "", @@ -712,15 +711,15 @@ class OneVector(Persistence): class OneMatrix(Persistence): """ - Classe de stockage d'une matrice de valeurs (numpy.matrix) par pas. + Classe de stockage d'une matrice de valeurs homogènes par pas. """ def __init__(self, name="", unit="", basetype = numpy.matrix): Persistence.__init__(self, name, unit, basetype) class OneList(Persistence): """ - Classe de stockage d'une liste de valeurs hétérogènes (list) par pas. Ne pas - utiliser cette classe pour des données numériques homogènes, mais + Classe de stockage d'une liste de valeurs hétérogènes (list) par pas. Ne + pas utiliser cette classe pour des données numériques homogènes, mais "OneVector". """ def __init__(self, name="", unit="", basetype = list): @@ -734,8 +733,8 @@ class OneNoType(Persistence): """ Classe de stockage d'un objet sans modification (cast) de type. Attention, selon le véritable type de l'objet stocké à chaque pas, les opérations - arithmétiques à base de numpy peuvent être invalides ou donner des résultats - inattendus. Cette classe n'est donc à utiliser qu'à bon escient + arithmétiques à base de numpy peuvent être invalides ou donner des + résultats inattendus. Cette classe n'est donc à utiliser qu'à bon escient volontairement, et pas du tout par défaut. """ def __init__(self, name="", unit="", basetype = NoType): @@ -754,9 +753,9 @@ class CompositePersistence(object): """ name : nom courant - La gestion interne des données est exclusivement basée sur les variables - initialisées ici (qui ne sont pas accessibles depuis l'extérieur des - objets comme des attributs) : + La gestion interne des données est exclusivement basée sur les + variables initialisées ici (qui ne sont pas accessibles depuis + l'extérieur des objets comme des attributs) : __StoredObjects : objets de type persistence collectés dans cet objet """ self.__name = str(name) @@ -792,8 +791,8 @@ class CompositePersistence(object): def add_object(self, name=None, persistenceType=Persistence, basetype=None ): """ - Ajoute dans les objets stockables un nouvel objet défini par son nom, son - type de Persistence et son type de base à chaque pas. + Ajoute dans les objets stockables un nouvel objet défini par son nom, + son type de Persistence et son type de base à chaque pas. """ if name is None: raise ValueError("Object name is required for adding an object.") if name in self.__StoredObjects.keys(): @@ -926,4 +925,4 @@ class CompositePersistence(object): # ============================================================================== if __name__ == "__main__": - print('\n AUTODIAGNOSTIC \n') + print('\n AUTODIAGNOSTIC\n')