2 Ce module contient des fonctions utilitaires
10 from N_Exception import AsException
15 # Si la version de Python possède la fonction _getframe
17 cur_frame=sys._getframe
20 def cur_frame(offset=0):
21 """ Retourne la frame d execution effective eventuellement en remontant
22 de offset niveaux dans la pile d execution
23 Si il y a moins de offset niveaux retourne None
27 frame=sys.exc_info()[2].tb_frame.f_back
29 if frame == None:return None
35 def callee_where(niveau=4):
37 recupere la position de l appel
39 frame=cur_frame(niveau)
40 if frame == None: return 0,"inconnu",0,{}
42 return frame.f_lineno,frame.f_code.co_filename,frame.f_code.co_firstlineno,frame.f_locals
44 return 0,"inconnu",0,{}
48 Retourne le type d'un concept (a) à partir
49 des caractéristiques de l'objet Python
51 if type(a) in (types.TupleType,types.ListType):return AsType(a[0])
52 if type(a) == types.InstanceType:return a.__class__
53 if type(a) == types.FloatType:return "R"
54 if type(a) == types.IntType:return "I"
55 if type(a) == types.StringType:return "TXM"
56 if a == None : return None
58 raise AsException("type inconnu")
62 print "*"*5 + s + "*"*5
65 def repr_float(valeur):
67 Cette fonction représente le réel valeur comme une chaîne de caractères
68 sous forme mantisse exposant si nécessaire cad si le nombre contient plus de
70 NB : valeur est un réel au format Python ou une chaîne de caractères représentant un réel
72 if type(valeur) == types.StringType : valeur = eval(valeur)
73 if valeur == 0. : return '0.0'
75 if abs(valeur) < 10000. : return repr(valeur)
77 if abs(valeur) > 0.01 : return repr(valeur)
79 if string.find(t,'e') != -1 or string.find(t,'E') != -1 :
80 # le réel est déjà sous forme mantisse exposant !
81 # --> on remplace e par E
82 t=string.replace(t,'e','E')
83 # --> on doit encore vérifier que la mantisse contient bien un '.'
84 if string.find(t,'.')!= -1:
87 # -->il faut rajouter le point avant le E
88 t=string.replace(t,'E','.E')
96 if string.atof(t[0]) == 0.:
97 # réel plus petit que 1
101 while string.atof(t[0]) == 0. :
108 # réel plus grand que 1
110 if string.atof(t[1:]) == 0.:
111 l=string.split(t[1:],'.')
119 if pt != 1 : cpt = cpt + 1
123 if r+1 == len(t) or string.atof(t[r+1:]) == 0.:break
124 s=s+'E'+neg*'-'+repr(cpt)