Salome HOME
Minor documentation and code review corrections (25)
[modules/adao.git] / src / daComposant / daCore / PlatformInfo.py
index f08b80a57659ec7b0cbb9007425ef8563e96b5ef..3a01d6a268852e56de7d0328693dde2c6b368313 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Copyright (C) 2008-2020 EDF R&D
+# Copyright (C) 2008-2022 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
@@ -21,7 +21,7 @@
 # Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
 
 """
-    Informations sur le code et la plateforme, et mise à jour des chemins
+    Informations sur le code et la plateforme, et mise à jour des chemins.
 
     La classe "PlatformInfo" permet de récupérer les informations générales sur
     le code et la plateforme sous forme de strings, ou d'afficher directement
@@ -49,6 +49,7 @@ import sys
 import platform
 import locale
 import logging
+import re
 
 # ==============================================================================
 class PlatformInfo(object):
@@ -97,13 +98,18 @@ class PlatformInfo(object):
                 __msg += "\n%s%30s : %s" %(__prefix,"platform.dist",str(platform.dist()))
         elif sys.platform.startswith('darwin'):
             if hasattr(platform, 'mac_ver'):
-                __macosxv = {'5': 'Leopard',       '6': 'Snow Leopard', '7': 'Lion',
-                             '8': 'Mountain Lion', '9': 'Mavericks',   '10': 'Yosemite',
-                             '11': 'El Capitan',  '12': 'Sierra'}
+                __macosxv = {
+                     '0': 'Cheetah',       '1': 'Puma',         '2': 'Jaguar',
+                     '3': 'Panther',       '4': 'Tiger',        '5': 'Leopard',
+                     '6': 'Snow Leopard',  '7': 'Lion',         '8': 'Mountain Lion',
+                     '9': 'Mavericks',    '10': 'Yosemite',    '11': 'El Capitan',
+                    '12': 'Sierra',       '13': 'High Sierra', '14': 'Mojave',
+                    '15': 'Catalina',     '16': 'Big Sur',     '17': 'Monterey',
+                    }
                 for key in __macosxv:
                     if (platform.mac_ver()[0].split('.')[1] == key):
                         __msg += "\n%s%30s : %s" %(__prefix,
-                            "platform.mac_ver",str(platform.mac_ver()[0]+"(" + macosx_dict[key]+")"))
+                            "platform.mac_ver",str(platform.mac_ver()[0]+"(" + __macosxv[key]+")"))
             elif hasattr(platform, 'dist'):
                 __msg += "\n%s%30s : %s" %(__prefix,"platform.dist",str(platform.dist()))
         elif os.name == 'nt':
@@ -116,6 +122,12 @@ class PlatformInfo(object):
         __msg += "\n%s%30s : %s" %(__prefix,"sys.getfilesystemencoding",str(sys.getfilesystemencoding()))
         __msg += "\n%s%30s : %s" %(__prefix,"locale.getdefaultlocale",str(locale.getdefaultlocale()))
         __msg += "\n"
+        __msg += "\n%s%30s : %s" %(__prefix,"os.cpu_count",os.cpu_count())
+        if hasattr(os, 'sched_getaffinity'):
+            __msg += "\n%s%30s : %s" %(__prefix,"len(os.sched_getaffinity(0))",len(os.sched_getaffinity(0)))
+        else:
+            __msg += "\n%s%30s : %s" %(__prefix,"len(os.sched_getaffinity(0))","Unsupported on this platform")
+        __msg += "\n"
         __msg += "\n%s%30s : %s" %(__prefix,"platform.node",platform.node())
         __msg += "\n%s%30s : %s" %(__prefix,"os.path.expanduser",os.path.expanduser('~'))
         return __msg
@@ -253,9 +265,12 @@ def uniq( __sequence ):
 
 def isIterable( __sequence, __check = False, __header = "" ):
     """
-    Vérification que l'argument est un itérable
+    Vérification que l'argument est un itérable interne.
+    Remarque : pour permettre le test correct en MultiFonctions,
+    - Ne pas accepter comme itérable un "numpy.ndarray"
+    - Ne pas accepter comme itérable avec hasattr(__sequence, "__iter__")
     """
-    if  isinstance( __sequence, (list, tuple, map) ):
+    if  isinstance( __sequence, (list, tuple, map, dict) ):
         __isOk = True
     elif type(__sequence).__name__ in ('generator','range'):
         __isOk = True
@@ -284,6 +299,34 @@ def date2int( __date, __lang="FR" ):
         raise ValueError("Cannot convert \"%s\" as a D/M/Y H:M date"%d)
     return __number
 
+def strvect2liststr( __strvect ):
+    """
+    Fonction de secours, conversion d'une chaîne de caractères de
+    représentation de vecteur en une liste de chaînes de caractères de
+    représentation de flottants
+    """
+    for s in ("array", "matrix", "list", "tuple", "[", "]", "(", ")"):
+        __strvect = __strvect.replace(s,"")  # Rien
+    for s in (",", ";"):
+        __strvect = __strvect.replace(s," ") # Blanc
+    return __strvect.split()
+
+def strmatrix2liststr( __strvect ):
+    """
+    Fonction de secours, conversion d'une chaîne de caractères de
+    représentation de matrice en une liste de chaînes de caractères de
+    représentation de flottants
+    """
+    for s in ("array", "matrix", "list", "tuple", "[", "(", "'", '"'):
+        __strvect = __strvect.replace(s,"")  # Rien
+    __strvect = __strvect.replace(","," ") # Blanc
+    for s in ("]", ")"):
+        __strvect = __strvect.replace(s,";") # "]" et ")" par ";"
+    __strvect = re.sub(';\s*;',';',__strvect)
+    __strvect = __strvect.rstrip(";") # Après ^ et avant v
+    __strmat = [l.split() for l in __strvect.split(";")]
+    return __strmat
+
 def checkFileNameConformity( __filename, __warnInsteadOfPrint=True ):
     if sys.platform.startswith("win") and len(__filename) > 256:
         __conform = False
@@ -310,8 +353,9 @@ def checkFileNameImportability( __filename, __warnInsteadOfPrint=True ):
             "no \"__init__.py\" file in the same directory."+\
             "\n  The name of the file in question is the following:"+\
             "\n  %s")%(int(str(__filename).count(".")-1), __filename)
-        if __warnInsteadOfPrint: logging.warning(__msg)
-        else:                    print(__msg)
+        if __warnInsteadOfPrint is None: pass
+        elif __warnInsteadOfPrint:       logging.warning(__msg)
+        else:                            print(__msg)
     else:
         __conform = True
     #