# -*- coding: utf-8 -*-
#
-# Copyright (C) 2008-2019 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
# 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
import platform
import locale
import logging
+import re
# ==============================================================================
class PlatformInfo(object):
if hasattr(platform, 'linux_distribution'):
__msg += "\n%s%30s : %s" %(__prefix,
"platform.linux_distribution",str(platform.linux_distribution()))
- else:
+ elif hasattr(platform, 'dist'):
__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]+")"))
- else:
+ "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':
__msg += "\n%s%30s : %s" %(__prefix,"platform.win32_ver",platform.win32_ver()[1])
__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
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
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(r';\s*;',r';',__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
"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
#
self.__paths["daNumerics"] = os.path.join(parent,"daNumerics")
#
for v in self.__paths.values():
- sys.path.insert(0, v )
+ if os.path.isdir(v): sys.path.insert(0, v )
#
# Conserve en unique exemplaire chaque chemin
sys.path = uniq( sys.path )