1 #@ MODIF N_FONCTION Noyau DATE 10/11/2009 AUTEUR COURTOIS M.COURTOIS
2 # -*- coding: iso-8859-1 -*-
3 # RESPONSABLE COURTOIS M.COURTOIS
4 # CONFIGURATION MANAGEMENT OF EDF VERSION
5 # ======================================================================
6 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
7 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
8 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
9 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
10 # (AT YOUR OPTION) ANY LATER VERSION.
12 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
13 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
14 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
15 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
17 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
18 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
19 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
22 # ======================================================================
24 # attention ! cet import permet d'avoir, dans les formules, le comportement
25 # de la division réelle pour les entiers, et non la division entière
27 from __future__ import division
29 from N_ASSD import ASSD
30 from asojb import AsBase
32 class FONCTION(ASSD):pass
34 class formule(ASSD,AsBase):
35 def __init__(self,**args):
36 ASSD.__init__(self,**args)
40 def __call__(self,*val):
42 # cas de INCLUDE (ou POURSUITE dans Eficas)
43 context.update(getattr(self.parent, 'contexte_fichier_init', {}))
44 # récupération des constantes locales en cas de MACRO
45 context.update(getattr(self.parent, 'macro_const_context', {}))
47 for param in self.nompar :
51 res=eval(self.expression,self.jdc.const_context, context)
54 print '! ' + '%-72s' % ('Erreur evaluation formule '+self.nom) + '!'
59 def setFormule(self,nom_para,texte):
61 Cette methode sert a initialiser les attributs
62 nompar, expression et code qui sont utilisés
63 dans l'évaluation de la formule
65 self.nompar = nom_para
66 self.expression = texte
68 self.code=compile(texte,texte,'eval')
71 print '! ' + '%-72s' % ('Erreur evaluation formule '+self.nom) + '!'
75 def __setstate__(self,state):
77 Cette methode sert a restaurer l'attribut code
80 self.__dict__.update(state) # update attributes
81 self.setFormule(self.nompar,self.expression) # restore code attribute
83 def __getstate__(self):
85 Pour les formules, il faut enlever l'attribut code
86 qui n'est pas picklable
88 d=ASSD.__getstate__(self)
93 """Equivalent de fonction.Parametres pour pouvoir utiliser des formules
94 à la place de fonctions dans certaines macro-commandes.
96 from SD.sd_fonction import sd_formule
97 from Utilitai.Utmess import UTMESS
99 TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT', 'I':'INTERPRE' }
100 sd = sd_formule(self.get_name())
103 if prol is None or nova is None:
104 UTMESS('F', 'SDVERI_2', valk=[objev])
106 'INTERPOL' : ['LIN','LIN'],
107 'NOM_PARA' : [s.strip() for s in nova],
108 'NOM_RESU' : prol[3][0:16].strip(),
109 'PROL_DROITE' : TypeProl['E'],
110 'PROL_GAUCHE' : TypeProl['E'],
113 raise Accas.AsException("Erreur dans fonction.Parametres en PAR_LOT='OUI'")
117 class formule_c(formule):