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)
+++ /dev/null
-# 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
-
+++ /dev/null
-# -*- 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
-
--- /dev/null
+# 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
+
--- /dev/null
+# -*- 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
+