From: pascale.noyret Date: Thu, 9 Feb 2017 17:14:44 +0000 (+0100) Subject: menage X-Git-Tag: V8_3_0~77 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=4147504b4d035ba277d39be61779ed638405c48a;p=tools%2Feficas.git menage --- diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index 708741bb..5b33fb6f 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -24,27 +24,8 @@ install ( FILES __init__.py generator_python.py Formatage.py generator_aplat.py DESTINATION ${CMAKE_INSTALL_PREFIX}/generator ) -# Installation des fichiers : Open TURNS -if (WITH_OPENTURNS) - install ( FILES generator_openturns.py generator_openturns_study.py generator_openturns_wrapper.py - OpenturnsBase.py OpenturnsSTD.py OpenturnsXML.py - DESTINATION ${CMAKE_INSTALL_PREFIX}/generator - ) -endif (WITH_OPENTURNS) -# Installation des fichiers : Aster -if (WITH_ASTER) - install ( FILES generator_asterv5.py generator_GroupMA.py generator_vers3DSalome.py - DESTINATION ${CMAKE_INSTALL_PREFIX}/generator - ) -endif (WITH_ASTER) -# Installation des fichiers : ZCRACKS -if (WITH_ASTER) - install ( FILES generator_ZCracks.py - DESTINATION ${CMAKE_INSTALL_PREFIX}/generator - ) -endif (WITH_ASTER) # Installation des fichiers : MAP if (WITH_MAP) diff --git a/generator/DefautASTER.py b/generator/DefautASTER.py deleted file mode 100644 index 7a120f32..00000000 --- a/generator/DefautASTER.py +++ /dev/null @@ -1,232 +0,0 @@ -# Copyright (C) 2007-2013 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 -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -""" -Ce module contient les variables -par defaut pour Aster -""" - -from OpenturnsSTD import STDGenerateur -from OpenturnsXML import XMLGenerateur - -#==================================================== -# Preparation du fichier STD -#==================================================== -# C.1. Parties du texte en dur dans le fichier STD -#------------------------------------------------- - -DecalSTD = " " -DecalSTDsaut = "\n " - -TexteSTDFIN ="\n\nexcept : \n" -TexteSTDFIN += DecalSTD + "error_message = sys.exc_type\n" -TexteSTDFIN += "\nif error_message is not None :\n" -TexteSTDFIN += DecalSTD + "texte = \"\\n=================================================\"" -TexteSTDFIN += DecalSTD + "texte += \"\\nMessage d'erreur : \" + str(error_message)" -TexteSTDFIN += DecalSTD + "texte += \"\\n=================================================\\n\"" -TexteSTDFIN += DecalSTD + "print (texte)" -TexteSTDFIN += DecalSTD + "\nsys.exit(error_message)\n" - -# C.2. Definition de composants dans le fichier STD -#-------------------------------------------------- - -NomFunction = "myFunction" -NomPhysicalStartingPoint = "myPhysicalStartingPoint" -NomCollection = "myCollection" -NomCopule = "myCopula" -NomDistribution = "myDistribution" -NomRandomVector_in = "myRandomVector_in" -NomRandomVector_out = "myRandomVector_out" -NomEvent = "myEvent" -NomMethod = "myMethod" -NomAlgo = "myAlgo" -NomRoot = "myRoot" -NomSampling = "mySampling" -NomSolverSD = "mySolver" -NomResu = "myResu" - -class Defaut : -# Cette classe ajoute les parametres par defaut propres au Solver Aster -# Elle va d abord enrichir le dictionnaire DictMCVal avec des valeurs par defaut -# C est la methode enrichitMCVal -# Elle va ensuite enrichir les variables -# C est la methode enrichitListeVariables - - def __init__(self, parent) : - self.parent=parent - self.enrichitMCVal() - self.enrichitListeVariables() - - - def enrichitMCVal(self) : - #===================== - # InformationSolver : nom du wrapper, type de fichiers d'echange, etc - #---------------------------------------------------------------------- - # Ajoute les informations sur le wrapper - # nom du wrapper, type de fichiers d'echange, etc. - dico = { "WrapperPath" : "Code_Aster.so", - "FunctionName" : "Code_Aster", - "WrapCouplingMode" : "fork", - "State" : "shared", - "InDataTransfer" : "files", - "OutDataTransfer" : "files", - } - - self.parent.ajouteDictMCVal(dico) - - #InformationSolverFile : parametres par defaut pour les fichiers d'echange - #-------------------------------------------------------------------------- - - liste = [] - dicoIn = { "Id" : "file_in", "Type" : "in", "Name" : "StdIn", "Path" : "commandes_aster" } - liste.append(dicoIn) - dicoOut = { "Id" : "file_out", "Type" : "out", "Name" : "StdOut", "Path" : "resultats_aster", } - liste.append(dicoOut) - dicoFile={"exchange_file" : liste} - self.parent.ajouteDictMCVal(dicoFile) - -# D.2. InformationSolverCommande : arguments, etc -#------------------------------------------------------------------------- -# InformationSolverCommande est un dictionnaire indexe par le nom du solveur externe appele. -# InformationSolverCommande[solveur] est lui-meme un dictionnaire qui contient les parametres -# supplementaires pour la commande. -# Des parametres sont donnes sous forme de tuple : (ok/nok, "mot-cle") ou (ok/nok, "mot-cle", valeur) -# . On ajoute seulement si ok -# . Avec (ok/nok, "mot-cle"), on ajoute en arguments les couples ("mot-cle", nom_du_parametre) -# . Avec (ok/nok, "mot-cle", valeur), on ajoute en arguments les couples ("mot-cle", valeur) - - -# dico = { "file_out" : (1, "-fic_de_aster_vers_ot"), -# "variable_in" : (1, "-variable") } -# self.parent.InformationSolverCommande["Code_Aster"] = dico - - - def enrichitListeVariables(self) : - # parametres par defaut pour chaque variable - #-------------------------------------------- - - dico_in = { "Regexp" : '"^" , "Name", "(.*)= *[0-9eE.+-]+([)]?;?)$"', - "Format" : '"Name", "\\1=%20.13G\\2"' - } - dico_out = { "Regexp" : '"(.*)"' } - self.parent.ajouteInfoVariables(dico_in,dico_out) - -class MonSTDGenerateur(STDGenerateur) : - - def CreeResu (self) : - #------------------ - ''' - Le resultat : - . Donnees : - . l'algorithme choisi. - . Resultats : - . Ecriture des odres d'impression. - ''' - if self.DictMCVal.has_key("Analysis"): - self.Analysis = str(self.DictMCVal["Analysis"]) - else : - self.Analysis = None - self.fic_resu_OpenTURNS = "fic_resu_OpenTURNS_glop" - Algorithm = str (self.DictMCVal["Algorithm"]) - texte = "\n\n# Le resultat\n" - texte += DecalSTDsaut + NomResu + " = " + NomAlgo + ".getResult()" - texte += DecalSTDsaut + "###" + "print ( " + NomResu+")" - texte += DecalSTDsaut + "text_resu = \"Resultats\\n=======\\n\"" - -# Particularites des algorithmes de fiabilite - - if self.Analysis in ( "Reliability", ) : - texte += DecalSTDsaut + "aux = " + NomResu + ".getIsStandardPointOriginInFailureSpace()" - texte += DecalSTDsaut + "if aux :" - texte += DecalSTDsaut + DecalSTD + "texte_bis = \"est\"" - texte += DecalSTDsaut + "else :" - texte += DecalSTDsaut + DecalSTD + "texte_bis = \"n\'est pas\"" - texte += DecalSTDsaut + "text_resu += \"\\nLe point initial \" + texte_bis + \" dans l\'espace de defaillance.\"" - l_aux = [ ("Probabilite de defaillance", "EventProbability") ] - l_aux.append ( ("Indice de confiance generalise", "GeneralisedReliabilityIndex") ) - l_aux.append ( ("Indice de confiance de Hasofer", "HasoferReliabilityIndex") ) - for t_aux in l_aux : - texte += DecalSTDsaut + "text_resu += \"\\n" + t_aux[0] + " = \" + str(" \ - + NomResu + ".get" + t_aux[1] + "())" - l_aux = [] - l_aux.append("StandardSpaceDesignPoint") - l_aux.append("PhysicalSpaceDesignPoint") - l_aux.append("ImportanceFactors") - texte += DecalSTDsaut + "l_aux_var = []" - for DictVariable in self.ListeVariables : - if ( DictVariable["Type"] == "in" ) : - texte += DecalSTDsaut + "l_aux_var.append(\"" + DictVariable["Name"] + "\")" - texte += DecalSTDsaut + "l_aux = []" - for type_resu in l_aux : - texte += DecalSTDsaut + "l_aux.append(" + NomResu + ".get" + type_resu + "())" - texte += DecalSTDsaut + "for resu in l_aux :" - texte += DecalSTDsaut + DecalSTD + "if not resu.isEmpty() :" - texte += DecalSTDsaut + DecalSTD + DecalSTD + "text_resu += \"\\n\" + resu.getName() + \" :\"" - texte += DecalSTDsaut + DecalSTD + DecalSTD + "size = resu.getDimension()" - texte += DecalSTDsaut + DecalSTD + DecalSTD + "l_aux_1 = resu.getCollection()" - texte += DecalSTDsaut + DecalSTD + DecalSTD + "for iaux in range(size) :" - texte += DecalSTDsaut + DecalSTD + DecalSTD + DecalSTD + "text_resu += \"\\n. \" + l_aux_var[iaux] + \" : \" + str(l_aux_1[iaux])" - -# Particularites des algorithmes de simulation - - if self.Analysis in ( "Simulation", ) : - l_aux = [ ("Probabilite de defaillance", "ProbabilityEstimate") ] - l_aux.append ( ("Variance", "VarianceEstimate") ) - l_aux.append ( ("Nombre d\'iterations", "OuterSampling") ) - for t_aux in l_aux : - texte += DecalSTDsaut + "text_resu += \"\\n" + t_aux[0] + " = \" + str(" \ - + NomResu + ".get" + t_aux[1] + "())" - texte += DecalSTDsaut + "text_resu += \"\\nNombre d'evaluations de l'etat limite = \" + str(" \ - + NomResu + ".getOuterSampling()*" + NomResu + ".getBlockSize())" - if self.DictMCVal.has_key("ConfidenceIntervalProbability") : - aux = self.DictMCVal["ConfidenceIntervalProbability"] - texte += DecalSTDsaut + "proba = " + NomResu + ".getProbabilityEstimate()" - texte += DecalSTDsaut + "t_aux = " - if ( type(aux) is type(0.) ) : - texte += "(" + str(aux) + ")" - t_aux = [ str(aux) ] - else : - texte += str(aux) - texte += DecalSTDsaut + "for val in t_aux :" - texte += DecalSTDsaut + DecalSTD + "length = " + NomResu + ".getConfidenceLength(val)" - texte += DecalSTDsaut + DecalSTD + "vinf = str( proba - 0.5*length )" - texte += DecalSTDsaut + DecalSTD + "vsup = str( proba + 0.5*length )" - texte += DecalSTDsaut + DecalSTD + "text_resu += \"\\nIntervalle de confiance a \" + str(val) + \" = [ \" " - texte += "+ vinf + \" , \" + vsup + \" ]\"" - -# Generalites - - texte += DecalSTDsaut + "d_aux = {}" - texte += DecalSTDsaut + "d_aux[\"E\"] = ( \"de la fonction\", " + NomFunction + ".getEvaluationCallsNumber() )" - texte += DecalSTDsaut + "d_aux[\"G\"] = ( \"du gradient\", " + NomFunction + ".getGradientCallsNumber() )" - texte += DecalSTDsaut + "d_aux[\"H\"] = ( \"du hessien\", " + NomFunction + ".getHessianCallsNumber() )" - texte += DecalSTDsaut + "for cle in d_aux.keys() :" - texte += DecalSTDsaut + DecalSTD + "if d_aux[cle][1] > 0 :" - texte += DecalSTDsaut + DecalSTD + DecalSTD + "text_resu += \"\\nNombre d\'appels au solveur pour le calcul \"" \ - + " + d_aux[cle][0] + \" = \" + str(d_aux[cle][1])" - -# Impression - - texte += DecalSTDsaut + "print ( \"\\n\", text_resu, \" ) \\n\"" - texte += DecalSTDsaut + "file_resu = open(\"" + self.fic_resu_OpenTURNS + "\", \"w\")" - texte += DecalSTDsaut + "file_resu.write(text_resu)" - texte += DecalSTDsaut + "file_resu.close()" - texte += DecalSTDsaut + "probability = " + NomResu + ".getEventProbability()" - - return texte - diff --git a/generator/generator_asterv5.py b/generator/generator_asterv5.py deleted file mode 100644 index d544321f..00000000 --- a/generator/generator_asterv5.py +++ /dev/null @@ -1,510 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2007-2013 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 -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -# -""" - Ce module contient le plugin generateur de fichier au format asterv5 pour EFICAS. - - -""" -import traceback -import types,string -from Extensions.i18n import tr -from Extensions.eficas_exception import EficasException -from Noyau import N_CR -from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE -from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL -from Accas import GEOM,ASSD -from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM -from Formatage import Formatage - -def entryPoint(): - """ - Retourne les informations necessaires pour le chargeur de plugins - - Ces informations sont retournees dans un dictionnaire - """ - return { - # Le nom du plugin - 'name' : 'asterv5', - # La factory pour creer une instance du plugin - 'factory' : AsterGenerator, - } - - -class AsterGenerator: - """ - Ce generateur parcourt un objet de type JDC et produit - un fichier au format asterv5 - - L'acquisition et le parcours sont realises par la methode - generator.gener(objet_jdc,format) - - L'ecriture du fichier au format asterv5 est realisee par appel de la methode - generator.writefile(nom_fichier) - - Ses caracteristiques principales sont exposees dans des attributs - de classe : - - extensions : qui donne une liste d'extensions de fichier preconisees - - """ - # Les extensions de fichier preconisees - extensions=('.comm',) - - def __init__(self,cr=None): - # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard - if cr : - self.cr=cr - else: - self.cr=N_CR.CR(debut='CR generateur format asterv5', - fin='fin CR format asterv5') - # Le texte au format asterv5 est stocke dans l'attribut text - self.text='' - - def writefile(self,filename): - fp=open(filename,'w') - fp.write(self.text) - fp.close() - - def gener(self,obj,format='brut'): - """ - Retourne une representation du JDC obj sous une - forme qui est parametree par format. - Si format vaut 'brut', retourne une liste de listes de ... - Si format vaut 'standard', retourne un texte obtenu par concatenation de la liste - Si format vaut 'beautifie', retourne le meme texte beautifie - """ - liste= self.generator(obj) - if format == 'brut': - self.text=liste - elif format == 'standard': - self.text=string.join(liste) - elif format == 'beautifie': - jdc_formate = Formatage(liste,sep=':',l_max=72) - self.text=jdc_formate.formate_jdc() - else: - raise EficasException(tr("Format pas implemente : %s", format)) - return self.text - - def generator(self,obj): - """ - Cette methode joue un role d'aiguillage en fonction du type de obj - On pourrait utiliser les methodes accept et visitxxx à la - place (depend des gouts !!!) - """ - # ATTENTION a l'ordre des tests : il peut avoir de l'importance (heritage) - if isinstance(obj,PROC_ETAPE): - return self.generPROC_ETAPE(obj) - elif isinstance(obj,MACRO_ETAPE): - return self.generMACRO_ETAPE(obj) - elif isinstance(obj,FORM_ETAPE): - return self.generFORM_ETAPE(obj) - elif isinstance(obj,ETAPE): - return self.generETAPE(obj) - elif isinstance(obj,MCFACT): - return self.generMCFACT(obj) - elif isinstance(obj,MCList): - return self.generMCList(obj) - elif isinstance(obj,MCBLOC): - return self.generMCBLOC(obj) - elif isinstance(obj,MCSIMP): - return self.generMCSIMP(obj) - elif isinstance(obj,ASSD): - return self.generASSD(obj) - elif isinstance(obj,ETAPE_NIVEAU): - return self.generETAPE_NIVEAU(obj) - elif isinstance(obj,COMMENTAIRE): - return self.generCOMMENTAIRE(obj) - # Attention doit etre place avant PARAMETRE (raison : heritage) - elif isinstance(obj,PARAMETRE_EVAL): - return self.generPARAMETRE_EVAL(obj) - elif isinstance(obj,PARAMETRE): - return self.generPARAMETRE(obj) - elif isinstance(obj,EVAL): - return self.generEVAL(obj) - elif isinstance(obj,COMMANDE_COMM): - return self.generCOMMANDE_COMM(obj) - elif isinstance(obj,JDC): - return self.generJDC(obj) - else: - raise EficasException(tr("Type d'objet non prevu : %s", repr(obj))) - - def generJDC(self,obj): - """ - Cette methode convertit un objet JDC en une liste de chaines de - caracteres à la syntaxe asterv5 - """ - l=[] - if obj.definition.l_niveaux == (): - # Il n'y a pas de niveaux - for etape in obj.etapes: - l.append(self.generator(etape)) - else: - # Il y a des niveaux - for etape_niveau in obj.etapes_niveaux: - l.extend(self.generator(etape_niveau)) - if l != [] : - # Si au moins une etape, on ajoute le retour chariot sur la derniere etape - if type(l[-1])==types.ListType: - l[-1][-1] = l[-1][-1]+'\n' - elif type(l[-1])==types.StringType: - l[-1] = l[-1]+'\n' - return l - - def generCOMMANDE_COMM(self,obj): - """ - Cette methode convertit un COMMANDE_COMM - en une liste de chaines de caracteres à la syntaxe asterv5 - """ - l_lignes = string.split(obj.valeur,'\n') - txt='' - for ligne in l_lignes: - txt = txt + '%%'+ligne+'\n' - return txt - - def generEVAL(self,obj): - """ - Cette methode convertit un EVAL - en une liste de chaines de caracteres à la syntaxe asterv5 - """ - return 'EVAL(u"'+ obj.valeur +'")' - - def generCOMMENTAIRE(self,obj): - """ - Cette methode convertit un COMMENTAIRE - en une liste de chaines de caracteres à la syntaxe asterv5 - """ - l_lignes = string.split(obj.valeur,'\n') - txt='' - for ligne in l_lignes: - txt = txt + '%'+ligne+'\n' - return txt - - def generPARAMETRE_EVAL(self,obj): - """ - Cette methode convertit un PARAMETRE_EVAL - en une liste de chaines de caracteres à la syntaxe asterv5 - """ - if obj.valeur == None: - return obj.nom + ' = None ;\n' - else: - return obj.nom + ' = '+ self.generator(obj.valeur) +';\n' - - def generPARAMETRE(self,obj): - """ - Cette methode convertit un PARAMETRE - en une liste de chaines de caracteres à la syntaxe asterv5 - """ - if type(obj.valeur) == types.StringType: - return obj.nom + " = '" + obj.valeur + "';\n" - else: - return obj.nom + ' = ' + str(obj.valeur) + ';\n' - - def generETAPE_NIVEAU(self,obj): - """ - Cette methode convertit une etape niveau - en une liste de chaines de caracteres à la syntaxe asterv5 - """ - l=[] - if obj.etapes_niveaux == []: - for etape in obj.etapes: - l.append(self.generator(etape)) - else: - for etape_niveau in obj.etapes_niveaux: - l.extend(self.generator(etape_niveau)) - return l - - def generETAPE(self,obj): - """ - Cette methode convertit une etape - en une liste de chaines de caracteres à la syntaxe asterv5 - """ - try: - if obj.reuse != None: - sdname= "&" + self.generator(obj.reuse) - else: - sdname= self.generator(obj.sd) - except: - sdname='sansnom' - l=[] - label=sdname + '='+obj.definition.nom+'(' - l.append(label) - for v in obj.mc_liste: - if isinstance(v,MCBLOC) or isinstance(v,MCList): - liste=self.generator(v) - for mocle in liste : - l.append(mocle) - else: - l.append(self.generator(v)) - if len(l) == 1: - l[0]=label+');' - else : - l.append(');') - return l - - def generFORM_ETAPE(self,obj): - """ - Methode particuliere pour les objets de type FORMULE - """ - l=[] - nom = obj.get_nom() - if nom == '' : nom = 'sansnom' - if len(obj.mc_liste)>0: - l.append(nom + ' = FORMULE(') - s=obj.type_retourne + ' = ' + "'''" + obj.arguments + ' = ' + obj.corps+"'''" - l.append(s) - l.append(');') - else: - l.append(nom+' = FORMULE();') - return l - - def generMACRO_ETAPE(self,obj): - """ - Cette methode convertit une macro-etape - en une liste de chaines de caracteres à la syntaxe asterv5 - """ - if obj.definition.nom == 'FORMULE' : return self.gen_ast_formule(obj) - try: - if obj.reuse != None: - sdname= "&" + self.generator(obj.reuse)+'=' - elif obj.sd == None: - sdname='' - else: - sdname= self.generator(obj.sd)+'=' - except: - sdname='sansnom=' - l=[] - label = sdname + obj.definition.nom+'(' - l.append(label) - for v in obj.mc_liste: - if isinstance(v,MCBLOC) or isinstance(v,MCList): - liste=self.generator(v) - for mocle in liste : - l.append(mocle) - else: - # MCFACT ou MCSIMP - l.append(self.generator(v)) - if len(l) == 1: - l[0]=label+');' - else : - l.append(');') - return l - - def gen_ast_formule(self,obj): - """ - Methode gen_ast particuliere aux objets de type FORMULE - """ - label='!FORMULE(' - try: - sdname= self.generator(obj.sd) - except: - sdname='sansnom' - l=[] - l.append(label) - for v in obj.mc_liste: - s='' - s= v.nom+':'+sdname+'('+v.valeur+')' - l.append(s) - if len(l) == 1: - l[0]=label+');' - else : - l.append(');') - return l - - def generPROC_ETAPE(self,obj): - """ - Cette methode convertit une etape - en une liste de chaines de caracteres à la syntaxe asterv5 - """ - l=[] - label=obj.definition.nom+'(' - l.append(label) - for v in obj.mc_liste: - if isinstance(v,MCBLOC) or isinstance(v,MCList): - liste=self.generator(v) - for mocle in liste : - l.append(mocle) - else: - l.append(self.generator(v)) - if len(l) == 1: - l[0]=label+');' - else : - l.append(');') - return l - - def generMCSIMP(self,obj) : - """ - Convertit un objet MCSIMP en une liste de chaines de caracteres à la - syntaxe asterv5 - """ - if type(obj.valeur) == types.TupleType : - s = '(' - for val in obj.valeur : - if s != '(': s = s + ',' - if type(val) == types.InstanceType : - if isinstance(val,PARAMETRE): - # il ne faut pas prendre la string que retourne gen_ast - # mais seulement le nom dans le cas d'un parametre - s = s + val.nom - else: - s = s + self.generator(val) - elif self.wait_geom(obj): - s = s + val - elif type(val) == types.FloatType : - #s = s + self.repr_float(val) - s = s + str(val) - else : - s = s + `val` - s = s + ')' - s=obj.nom+':'+s+' ' - return s - else : - if type(obj.valeur) == types.InstanceType : - if isinstance(obj.valeur,PARAMETRE): - # il ne faut pas prendre la string que retourne gen_ast - # mais seulement str dans le cas d'un parametre - s = obj.valeur.nom - else: - s = self.generator(obj.valeur) - elif self.wait_geom(obj): - s = obj.valeur - elif type(obj.valeur) == types.FloatType : - #s = self.repr_float(obj.valeur) - s = str(obj.valeur) - else : - s = `obj.valeur` - s=obj.nom+':'+s+' ' - return s - - def wait_geom(self,obj): - for typ in obj.definition.type: - if type(typ) == types.ClassType : - if issubclass(typ,GEOM) : return 1 - return 0 - - def repr_float(self,valeur): - """ - Cette fonction represente le reel valeur comme une chaîne de caracteres - sous forme mantisse exposant si necessaire cad si le nombre contient plus de 5 caracteres - NB : valeur est un reel au format Python ou une chaîne de caracteres representant un reel - """ - if type(valeur) == types.StringType : valeur = eval(valeur) - if valeur == 0. : return '0.0' - if abs(valeur) > 1. : - if abs(valeur) < 10000. : return repr(valeur) - else : - if abs(valeur) > 0.01 : return repr(valeur) - t=repr(valeur) - if string.find(t,'e') != -1 or string.find(t,'E') != -1 : - # le reel est dejà sous forme mantisse exposant ! - # --> on remplace e par E - t=string.replace(t,'e','E') - # --> on doit encore verifier que la mantisse contient bien un '.' - if string.find(t,'.')!= -1: - return t - else: - # -->il faut rajouter le point avant le E - t=string.replace(t,'E','.E') - return t - s='' - neg = 0 - if t[0]=='-': - s=s+t[0] - t=t[1:] - cpt = 0 - if string.atof(t[0]) == 0.: - # reel plus petit que 1 - neg = 1 - t=t[2:] - cpt=1 - while string.atof(t[0]) == 0. : - cpt = cpt+1 - t=t[1:] - s=s+t[0]+'.' - for c in t[1:]: - s=s+c - else: - # reel plus grand que 1 - s=s+t[0]+'.' - if string.atof(t[1:]) == 0.: - l=string.split(t[1:],'.') - cpt = len(l[0]) - else: - r=0 - pt=0 - for c in t[1:]: - r=r+1 - if c != '.' : - if pt != 1 : cpt = cpt + 1 - s=s+c - else: - pt = 1 - if r+1 == len(t) or string.atof(t[r+1:]) == 0.:break - s=s+'E'+neg*'-'+repr(cpt) - return s - - def generASSD(self,obj): - """ - Convertit un objet derive d'ASSD en une chaine de caracteres à la - syntaxe asterv5 - """ - return obj.get_name() - - def generMCFACT(self,obj): - """ - Convertit un objet MCFACT en une liste de chaines de caracteres à la - syntaxe asterv5 - """ - l=[] - label=obj.nom + ':(' - l.append(label) - for v in obj.mc_liste: - if isinstance(v,MCBLOC) or isinstance(v,MCList): - liste=self.generator(v) - for mocle in liste : - l.append(mocle) - else: - l.append(self.generator(v)) - l.append(')') - return l - - def generMCList(self,obj): - """ - Convertit un objet MCList en une liste de chaines de caracteres à la - syntaxe asterv5 - """ - l=[] - for mcfact in obj.data: - l.append(self.generator(mcfact)) - return l - - def generMCBLOC(self,obj): - """ - Convertit un objet MCBLOC en une liste de chaines de caracteres à la - syntaxe asterv5 - """ - l=[] - for v in obj.mc_liste: - if isinstance(v,MCBLOC) or isinstance(v,MCList): - liste=self.generator(v) - for mocle in liste : - l.append(mocle) - else: - l.append(self.generator(v)) - return l - diff --git a/generator/oldCodes/DefautASTER.py b/generator/oldCodes/DefautASTER.py new file mode 100644 index 00000000..7a120f32 --- /dev/null +++ b/generator/oldCodes/DefautASTER.py @@ -0,0 +1,232 @@ +# Copyright (C) 2007-2013 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 +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +""" +Ce module contient les variables +par defaut pour Aster +""" + +from OpenturnsSTD import STDGenerateur +from OpenturnsXML import XMLGenerateur + +#==================================================== +# Preparation du fichier STD +#==================================================== +# C.1. Parties du texte en dur dans le fichier STD +#------------------------------------------------- + +DecalSTD = " " +DecalSTDsaut = "\n " + +TexteSTDFIN ="\n\nexcept : \n" +TexteSTDFIN += DecalSTD + "error_message = sys.exc_type\n" +TexteSTDFIN += "\nif error_message is not None :\n" +TexteSTDFIN += DecalSTD + "texte = \"\\n=================================================\"" +TexteSTDFIN += DecalSTD + "texte += \"\\nMessage d'erreur : \" + str(error_message)" +TexteSTDFIN += DecalSTD + "texte += \"\\n=================================================\\n\"" +TexteSTDFIN += DecalSTD + "print (texte)" +TexteSTDFIN += DecalSTD + "\nsys.exit(error_message)\n" + +# C.2. Definition de composants dans le fichier STD +#-------------------------------------------------- + +NomFunction = "myFunction" +NomPhysicalStartingPoint = "myPhysicalStartingPoint" +NomCollection = "myCollection" +NomCopule = "myCopula" +NomDistribution = "myDistribution" +NomRandomVector_in = "myRandomVector_in" +NomRandomVector_out = "myRandomVector_out" +NomEvent = "myEvent" +NomMethod = "myMethod" +NomAlgo = "myAlgo" +NomRoot = "myRoot" +NomSampling = "mySampling" +NomSolverSD = "mySolver" +NomResu = "myResu" + +class Defaut : +# Cette classe ajoute les parametres par defaut propres au Solver Aster +# Elle va d abord enrichir le dictionnaire DictMCVal avec des valeurs par defaut +# C est la methode enrichitMCVal +# Elle va ensuite enrichir les variables +# C est la methode enrichitListeVariables + + def __init__(self, parent) : + self.parent=parent + self.enrichitMCVal() + self.enrichitListeVariables() + + + def enrichitMCVal(self) : + #===================== + # InformationSolver : nom du wrapper, type de fichiers d'echange, etc + #---------------------------------------------------------------------- + # Ajoute les informations sur le wrapper + # nom du wrapper, type de fichiers d'echange, etc. + dico = { "WrapperPath" : "Code_Aster.so", + "FunctionName" : "Code_Aster", + "WrapCouplingMode" : "fork", + "State" : "shared", + "InDataTransfer" : "files", + "OutDataTransfer" : "files", + } + + self.parent.ajouteDictMCVal(dico) + + #InformationSolverFile : parametres par defaut pour les fichiers d'echange + #-------------------------------------------------------------------------- + + liste = [] + dicoIn = { "Id" : "file_in", "Type" : "in", "Name" : "StdIn", "Path" : "commandes_aster" } + liste.append(dicoIn) + dicoOut = { "Id" : "file_out", "Type" : "out", "Name" : "StdOut", "Path" : "resultats_aster", } + liste.append(dicoOut) + dicoFile={"exchange_file" : liste} + self.parent.ajouteDictMCVal(dicoFile) + +# D.2. InformationSolverCommande : arguments, etc +#------------------------------------------------------------------------- +# InformationSolverCommande est un dictionnaire indexe par le nom du solveur externe appele. +# InformationSolverCommande[solveur] est lui-meme un dictionnaire qui contient les parametres +# supplementaires pour la commande. +# Des parametres sont donnes sous forme de tuple : (ok/nok, "mot-cle") ou (ok/nok, "mot-cle", valeur) +# . On ajoute seulement si ok +# . Avec (ok/nok, "mot-cle"), on ajoute en arguments les couples ("mot-cle", nom_du_parametre) +# . Avec (ok/nok, "mot-cle", valeur), on ajoute en arguments les couples ("mot-cle", valeur) + + +# dico = { "file_out" : (1, "-fic_de_aster_vers_ot"), +# "variable_in" : (1, "-variable") } +# self.parent.InformationSolverCommande["Code_Aster"] = dico + + + def enrichitListeVariables(self) : + # parametres par defaut pour chaque variable + #-------------------------------------------- + + dico_in = { "Regexp" : '"^" , "Name", "(.*)= *[0-9eE.+-]+([)]?;?)$"', + "Format" : '"Name", "\\1=%20.13G\\2"' + } + dico_out = { "Regexp" : '"(.*)"' } + self.parent.ajouteInfoVariables(dico_in,dico_out) + +class MonSTDGenerateur(STDGenerateur) : + + def CreeResu (self) : + #------------------ + ''' + Le resultat : + . Donnees : + . l'algorithme choisi. + . Resultats : + . Ecriture des odres d'impression. + ''' + if self.DictMCVal.has_key("Analysis"): + self.Analysis = str(self.DictMCVal["Analysis"]) + else : + self.Analysis = None + self.fic_resu_OpenTURNS = "fic_resu_OpenTURNS_glop" + Algorithm = str (self.DictMCVal["Algorithm"]) + texte = "\n\n# Le resultat\n" + texte += DecalSTDsaut + NomResu + " = " + NomAlgo + ".getResult()" + texte += DecalSTDsaut + "###" + "print ( " + NomResu+")" + texte += DecalSTDsaut + "text_resu = \"Resultats\\n=======\\n\"" + +# Particularites des algorithmes de fiabilite + + if self.Analysis in ( "Reliability", ) : + texte += DecalSTDsaut + "aux = " + NomResu + ".getIsStandardPointOriginInFailureSpace()" + texte += DecalSTDsaut + "if aux :" + texte += DecalSTDsaut + DecalSTD + "texte_bis = \"est\"" + texte += DecalSTDsaut + "else :" + texte += DecalSTDsaut + DecalSTD + "texte_bis = \"n\'est pas\"" + texte += DecalSTDsaut + "text_resu += \"\\nLe point initial \" + texte_bis + \" dans l\'espace de defaillance.\"" + l_aux = [ ("Probabilite de defaillance", "EventProbability") ] + l_aux.append ( ("Indice de confiance generalise", "GeneralisedReliabilityIndex") ) + l_aux.append ( ("Indice de confiance de Hasofer", "HasoferReliabilityIndex") ) + for t_aux in l_aux : + texte += DecalSTDsaut + "text_resu += \"\\n" + t_aux[0] + " = \" + str(" \ + + NomResu + ".get" + t_aux[1] + "())" + l_aux = [] + l_aux.append("StandardSpaceDesignPoint") + l_aux.append("PhysicalSpaceDesignPoint") + l_aux.append("ImportanceFactors") + texte += DecalSTDsaut + "l_aux_var = []" + for DictVariable in self.ListeVariables : + if ( DictVariable["Type"] == "in" ) : + texte += DecalSTDsaut + "l_aux_var.append(\"" + DictVariable["Name"] + "\")" + texte += DecalSTDsaut + "l_aux = []" + for type_resu in l_aux : + texte += DecalSTDsaut + "l_aux.append(" + NomResu + ".get" + type_resu + "())" + texte += DecalSTDsaut + "for resu in l_aux :" + texte += DecalSTDsaut + DecalSTD + "if not resu.isEmpty() :" + texte += DecalSTDsaut + DecalSTD + DecalSTD + "text_resu += \"\\n\" + resu.getName() + \" :\"" + texte += DecalSTDsaut + DecalSTD + DecalSTD + "size = resu.getDimension()" + texte += DecalSTDsaut + DecalSTD + DecalSTD + "l_aux_1 = resu.getCollection()" + texte += DecalSTDsaut + DecalSTD + DecalSTD + "for iaux in range(size) :" + texte += DecalSTDsaut + DecalSTD + DecalSTD + DecalSTD + "text_resu += \"\\n. \" + l_aux_var[iaux] + \" : \" + str(l_aux_1[iaux])" + +# Particularites des algorithmes de simulation + + if self.Analysis in ( "Simulation", ) : + l_aux = [ ("Probabilite de defaillance", "ProbabilityEstimate") ] + l_aux.append ( ("Variance", "VarianceEstimate") ) + l_aux.append ( ("Nombre d\'iterations", "OuterSampling") ) + for t_aux in l_aux : + texte += DecalSTDsaut + "text_resu += \"\\n" + t_aux[0] + " = \" + str(" \ + + NomResu + ".get" + t_aux[1] + "())" + texte += DecalSTDsaut + "text_resu += \"\\nNombre d'evaluations de l'etat limite = \" + str(" \ + + NomResu + ".getOuterSampling()*" + NomResu + ".getBlockSize())" + if self.DictMCVal.has_key("ConfidenceIntervalProbability") : + aux = self.DictMCVal["ConfidenceIntervalProbability"] + texte += DecalSTDsaut + "proba = " + NomResu + ".getProbabilityEstimate()" + texte += DecalSTDsaut + "t_aux = " + if ( type(aux) is type(0.) ) : + texte += "(" + str(aux) + ")" + t_aux = [ str(aux) ] + else : + texte += str(aux) + texte += DecalSTDsaut + "for val in t_aux :" + texte += DecalSTDsaut + DecalSTD + "length = " + NomResu + ".getConfidenceLength(val)" + texte += DecalSTDsaut + DecalSTD + "vinf = str( proba - 0.5*length )" + texte += DecalSTDsaut + DecalSTD + "vsup = str( proba + 0.5*length )" + texte += DecalSTDsaut + DecalSTD + "text_resu += \"\\nIntervalle de confiance a \" + str(val) + \" = [ \" " + texte += "+ vinf + \" , \" + vsup + \" ]\"" + +# Generalites + + texte += DecalSTDsaut + "d_aux = {}" + texte += DecalSTDsaut + "d_aux[\"E\"] = ( \"de la fonction\", " + NomFunction + ".getEvaluationCallsNumber() )" + texte += DecalSTDsaut + "d_aux[\"G\"] = ( \"du gradient\", " + NomFunction + ".getGradientCallsNumber() )" + texte += DecalSTDsaut + "d_aux[\"H\"] = ( \"du hessien\", " + NomFunction + ".getHessianCallsNumber() )" + texte += DecalSTDsaut + "for cle in d_aux.keys() :" + texte += DecalSTDsaut + DecalSTD + "if d_aux[cle][1] > 0 :" + texte += DecalSTDsaut + DecalSTD + DecalSTD + "text_resu += \"\\nNombre d\'appels au solveur pour le calcul \"" \ + + " + d_aux[cle][0] + \" = \" + str(d_aux[cle][1])" + +# Impression + + texte += DecalSTDsaut + "print ( \"\\n\", text_resu, \" ) \\n\"" + texte += DecalSTDsaut + "file_resu = open(\"" + self.fic_resu_OpenTURNS + "\", \"w\")" + texte += DecalSTDsaut + "file_resu.write(text_resu)" + texte += DecalSTDsaut + "file_resu.close()" + texte += DecalSTDsaut + "probability = " + NomResu + ".getEventProbability()" + + return texte + diff --git a/generator/oldCodes/generator_asterv5.py b/generator/oldCodes/generator_asterv5.py new file mode 100644 index 00000000..d544321f --- /dev/null +++ b/generator/oldCodes/generator_asterv5.py @@ -0,0 +1,510 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2007-2013 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 +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +""" + Ce module contient le plugin generateur de fichier au format asterv5 pour EFICAS. + + +""" +import traceback +import types,string +from Extensions.i18n import tr +from Extensions.eficas_exception import EficasException +from Noyau import N_CR +from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE +from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL +from Accas import GEOM,ASSD +from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM +from Formatage import Formatage + +def entryPoint(): + """ + Retourne les informations necessaires pour le chargeur de plugins + + Ces informations sont retournees dans un dictionnaire + """ + return { + # Le nom du plugin + 'name' : 'asterv5', + # La factory pour creer une instance du plugin + 'factory' : AsterGenerator, + } + + +class AsterGenerator: + """ + Ce generateur parcourt un objet de type JDC et produit + un fichier au format asterv5 + + L'acquisition et le parcours sont realises par la methode + generator.gener(objet_jdc,format) + + L'ecriture du fichier au format asterv5 est realisee par appel de la methode + generator.writefile(nom_fichier) + + Ses caracteristiques principales sont exposees dans des attributs + de classe : + - extensions : qui donne une liste d'extensions de fichier preconisees + + """ + # Les extensions de fichier preconisees + extensions=('.comm',) + + def __init__(self,cr=None): + # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard + if cr : + self.cr=cr + else: + self.cr=N_CR.CR(debut='CR generateur format asterv5', + fin='fin CR format asterv5') + # Le texte au format asterv5 est stocke dans l'attribut text + self.text='' + + def writefile(self,filename): + fp=open(filename,'w') + fp.write(self.text) + fp.close() + + def gener(self,obj,format='brut'): + """ + Retourne une representation du JDC obj sous une + forme qui est parametree par format. + Si format vaut 'brut', retourne une liste de listes de ... + Si format vaut 'standard', retourne un texte obtenu par concatenation de la liste + Si format vaut 'beautifie', retourne le meme texte beautifie + """ + liste= self.generator(obj) + if format == 'brut': + self.text=liste + elif format == 'standard': + self.text=string.join(liste) + elif format == 'beautifie': + jdc_formate = Formatage(liste,sep=':',l_max=72) + self.text=jdc_formate.formate_jdc() + else: + raise EficasException(tr("Format pas implemente : %s", format)) + return self.text + + def generator(self,obj): + """ + Cette methode joue un role d'aiguillage en fonction du type de obj + On pourrait utiliser les methodes accept et visitxxx à la + place (depend des gouts !!!) + """ + # ATTENTION a l'ordre des tests : il peut avoir de l'importance (heritage) + if isinstance(obj,PROC_ETAPE): + return self.generPROC_ETAPE(obj) + elif isinstance(obj,MACRO_ETAPE): + return self.generMACRO_ETAPE(obj) + elif isinstance(obj,FORM_ETAPE): + return self.generFORM_ETAPE(obj) + elif isinstance(obj,ETAPE): + return self.generETAPE(obj) + elif isinstance(obj,MCFACT): + return self.generMCFACT(obj) + elif isinstance(obj,MCList): + return self.generMCList(obj) + elif isinstance(obj,MCBLOC): + return self.generMCBLOC(obj) + elif isinstance(obj,MCSIMP): + return self.generMCSIMP(obj) + elif isinstance(obj,ASSD): + return self.generASSD(obj) + elif isinstance(obj,ETAPE_NIVEAU): + return self.generETAPE_NIVEAU(obj) + elif isinstance(obj,COMMENTAIRE): + return self.generCOMMENTAIRE(obj) + # Attention doit etre place avant PARAMETRE (raison : heritage) + elif isinstance(obj,PARAMETRE_EVAL): + return self.generPARAMETRE_EVAL(obj) + elif isinstance(obj,PARAMETRE): + return self.generPARAMETRE(obj) + elif isinstance(obj,EVAL): + return self.generEVAL(obj) + elif isinstance(obj,COMMANDE_COMM): + return self.generCOMMANDE_COMM(obj) + elif isinstance(obj,JDC): + return self.generJDC(obj) + else: + raise EficasException(tr("Type d'objet non prevu : %s", repr(obj))) + + def generJDC(self,obj): + """ + Cette methode convertit un objet JDC en une liste de chaines de + caracteres à la syntaxe asterv5 + """ + l=[] + if obj.definition.l_niveaux == (): + # Il n'y a pas de niveaux + for etape in obj.etapes: + l.append(self.generator(etape)) + else: + # Il y a des niveaux + for etape_niveau in obj.etapes_niveaux: + l.extend(self.generator(etape_niveau)) + if l != [] : + # Si au moins une etape, on ajoute le retour chariot sur la derniere etape + if type(l[-1])==types.ListType: + l[-1][-1] = l[-1][-1]+'\n' + elif type(l[-1])==types.StringType: + l[-1] = l[-1]+'\n' + return l + + def generCOMMANDE_COMM(self,obj): + """ + Cette methode convertit un COMMANDE_COMM + en une liste de chaines de caracteres à la syntaxe asterv5 + """ + l_lignes = string.split(obj.valeur,'\n') + txt='' + for ligne in l_lignes: + txt = txt + '%%'+ligne+'\n' + return txt + + def generEVAL(self,obj): + """ + Cette methode convertit un EVAL + en une liste de chaines de caracteres à la syntaxe asterv5 + """ + return 'EVAL(u"'+ obj.valeur +'")' + + def generCOMMENTAIRE(self,obj): + """ + Cette methode convertit un COMMENTAIRE + en une liste de chaines de caracteres à la syntaxe asterv5 + """ + l_lignes = string.split(obj.valeur,'\n') + txt='' + for ligne in l_lignes: + txt = txt + '%'+ligne+'\n' + return txt + + def generPARAMETRE_EVAL(self,obj): + """ + Cette methode convertit un PARAMETRE_EVAL + en une liste de chaines de caracteres à la syntaxe asterv5 + """ + if obj.valeur == None: + return obj.nom + ' = None ;\n' + else: + return obj.nom + ' = '+ self.generator(obj.valeur) +';\n' + + def generPARAMETRE(self,obj): + """ + Cette methode convertit un PARAMETRE + en une liste de chaines de caracteres à la syntaxe asterv5 + """ + if type(obj.valeur) == types.StringType: + return obj.nom + " = '" + obj.valeur + "';\n" + else: + return obj.nom + ' = ' + str(obj.valeur) + ';\n' + + def generETAPE_NIVEAU(self,obj): + """ + Cette methode convertit une etape niveau + en une liste de chaines de caracteres à la syntaxe asterv5 + """ + l=[] + if obj.etapes_niveaux == []: + for etape in obj.etapes: + l.append(self.generator(etape)) + else: + for etape_niveau in obj.etapes_niveaux: + l.extend(self.generator(etape_niveau)) + return l + + def generETAPE(self,obj): + """ + Cette methode convertit une etape + en une liste de chaines de caracteres à la syntaxe asterv5 + """ + try: + if obj.reuse != None: + sdname= "&" + self.generator(obj.reuse) + else: + sdname= self.generator(obj.sd) + except: + sdname='sansnom' + l=[] + label=sdname + '='+obj.definition.nom+'(' + l.append(label) + for v in obj.mc_liste: + if isinstance(v,MCBLOC) or isinstance(v,MCList): + liste=self.generator(v) + for mocle in liste : + l.append(mocle) + else: + l.append(self.generator(v)) + if len(l) == 1: + l[0]=label+');' + else : + l.append(');') + return l + + def generFORM_ETAPE(self,obj): + """ + Methode particuliere pour les objets de type FORMULE + """ + l=[] + nom = obj.get_nom() + if nom == '' : nom = 'sansnom' + if len(obj.mc_liste)>0: + l.append(nom + ' = FORMULE(') + s=obj.type_retourne + ' = ' + "'''" + obj.arguments + ' = ' + obj.corps+"'''" + l.append(s) + l.append(');') + else: + l.append(nom+' = FORMULE();') + return l + + def generMACRO_ETAPE(self,obj): + """ + Cette methode convertit une macro-etape + en une liste de chaines de caracteres à la syntaxe asterv5 + """ + if obj.definition.nom == 'FORMULE' : return self.gen_ast_formule(obj) + try: + if obj.reuse != None: + sdname= "&" + self.generator(obj.reuse)+'=' + elif obj.sd == None: + sdname='' + else: + sdname= self.generator(obj.sd)+'=' + except: + sdname='sansnom=' + l=[] + label = sdname + obj.definition.nom+'(' + l.append(label) + for v in obj.mc_liste: + if isinstance(v,MCBLOC) or isinstance(v,MCList): + liste=self.generator(v) + for mocle in liste : + l.append(mocle) + else: + # MCFACT ou MCSIMP + l.append(self.generator(v)) + if len(l) == 1: + l[0]=label+');' + else : + l.append(');') + return l + + def gen_ast_formule(self,obj): + """ + Methode gen_ast particuliere aux objets de type FORMULE + """ + label='!FORMULE(' + try: + sdname= self.generator(obj.sd) + except: + sdname='sansnom' + l=[] + l.append(label) + for v in obj.mc_liste: + s='' + s= v.nom+':'+sdname+'('+v.valeur+')' + l.append(s) + if len(l) == 1: + l[0]=label+');' + else : + l.append(');') + return l + + def generPROC_ETAPE(self,obj): + """ + Cette methode convertit une etape + en une liste de chaines de caracteres à la syntaxe asterv5 + """ + l=[] + label=obj.definition.nom+'(' + l.append(label) + for v in obj.mc_liste: + if isinstance(v,MCBLOC) or isinstance(v,MCList): + liste=self.generator(v) + for mocle in liste : + l.append(mocle) + else: + l.append(self.generator(v)) + if len(l) == 1: + l[0]=label+');' + else : + l.append(');') + return l + + def generMCSIMP(self,obj) : + """ + Convertit un objet MCSIMP en une liste de chaines de caracteres à la + syntaxe asterv5 + """ + if type(obj.valeur) == types.TupleType : + s = '(' + for val in obj.valeur : + if s != '(': s = s + ',' + if type(val) == types.InstanceType : + if isinstance(val,PARAMETRE): + # il ne faut pas prendre la string que retourne gen_ast + # mais seulement le nom dans le cas d'un parametre + s = s + val.nom + else: + s = s + self.generator(val) + elif self.wait_geom(obj): + s = s + val + elif type(val) == types.FloatType : + #s = s + self.repr_float(val) + s = s + str(val) + else : + s = s + `val` + s = s + ')' + s=obj.nom+':'+s+' ' + return s + else : + if type(obj.valeur) == types.InstanceType : + if isinstance(obj.valeur,PARAMETRE): + # il ne faut pas prendre la string que retourne gen_ast + # mais seulement str dans le cas d'un parametre + s = obj.valeur.nom + else: + s = self.generator(obj.valeur) + elif self.wait_geom(obj): + s = obj.valeur + elif type(obj.valeur) == types.FloatType : + #s = self.repr_float(obj.valeur) + s = str(obj.valeur) + else : + s = `obj.valeur` + s=obj.nom+':'+s+' ' + return s + + def wait_geom(self,obj): + for typ in obj.definition.type: + if type(typ) == types.ClassType : + if issubclass(typ,GEOM) : return 1 + return 0 + + def repr_float(self,valeur): + """ + Cette fonction represente le reel valeur comme une chaîne de caracteres + sous forme mantisse exposant si necessaire cad si le nombre contient plus de 5 caracteres + NB : valeur est un reel au format Python ou une chaîne de caracteres representant un reel + """ + if type(valeur) == types.StringType : valeur = eval(valeur) + if valeur == 0. : return '0.0' + if abs(valeur) > 1. : + if abs(valeur) < 10000. : return repr(valeur) + else : + if abs(valeur) > 0.01 : return repr(valeur) + t=repr(valeur) + if string.find(t,'e') != -1 or string.find(t,'E') != -1 : + # le reel est dejà sous forme mantisse exposant ! + # --> on remplace e par E + t=string.replace(t,'e','E') + # --> on doit encore verifier que la mantisse contient bien un '.' + if string.find(t,'.')!= -1: + return t + else: + # -->il faut rajouter le point avant le E + t=string.replace(t,'E','.E') + return t + s='' + neg = 0 + if t[0]=='-': + s=s+t[0] + t=t[1:] + cpt = 0 + if string.atof(t[0]) == 0.: + # reel plus petit que 1 + neg = 1 + t=t[2:] + cpt=1 + while string.atof(t[0]) == 0. : + cpt = cpt+1 + t=t[1:] + s=s+t[0]+'.' + for c in t[1:]: + s=s+c + else: + # reel plus grand que 1 + s=s+t[0]+'.' + if string.atof(t[1:]) == 0.: + l=string.split(t[1:],'.') + cpt = len(l[0]) + else: + r=0 + pt=0 + for c in t[1:]: + r=r+1 + if c != '.' : + if pt != 1 : cpt = cpt + 1 + s=s+c + else: + pt = 1 + if r+1 == len(t) or string.atof(t[r+1:]) == 0.:break + s=s+'E'+neg*'-'+repr(cpt) + return s + + def generASSD(self,obj): + """ + Convertit un objet derive d'ASSD en une chaine de caracteres à la + syntaxe asterv5 + """ + return obj.get_name() + + def generMCFACT(self,obj): + """ + Convertit un objet MCFACT en une liste de chaines de caracteres à la + syntaxe asterv5 + """ + l=[] + label=obj.nom + ':(' + l.append(label) + for v in obj.mc_liste: + if isinstance(v,MCBLOC) or isinstance(v,MCList): + liste=self.generator(v) + for mocle in liste : + l.append(mocle) + else: + l.append(self.generator(v)) + l.append(')') + return l + + def generMCList(self,obj): + """ + Convertit un objet MCList en une liste de chaines de caracteres à la + syntaxe asterv5 + """ + l=[] + for mcfact in obj.data: + l.append(self.generator(mcfact)) + return l + + def generMCBLOC(self,obj): + """ + Convertit un objet MCBLOC en une liste de chaines de caracteres à la + syntaxe asterv5 + """ + l=[] + for v in obj.mc_liste: + if isinstance(v,MCBLOC) or isinstance(v,MCList): + liste=self.generator(v) + for mocle in liste : + l.append(mocle) + else: + l.append(self.generator(v)) + return l +