From 8365800086dd5833e688baaf2824d43f457b3a53 Mon Sep 17 00:00:00 2001 From: Pascale Noyret Date: Thu, 27 Nov 2008 14:12:26 +0000 Subject: [PATCH] *** empty log message *** --- generator/OpenturnsBase.py | 7 +- generator/OpenturnsSTD.py | 269 ++++++++++++++++++++++- generator/OpenturnsXML.py | 3 +- generator/generator_openturns_study.py | 2 +- generator/generator_openturns_wrapper.py | 2 +- 5 files changed, 275 insertions(+), 8 deletions(-) diff --git a/generator/OpenturnsBase.py b/generator/OpenturnsBase.py index 316a34eb..da8da81f 100644 --- a/generator/OpenturnsBase.py +++ b/generator/OpenturnsBase.py @@ -30,7 +30,7 @@ class Generateur : ListeVariables : chaque variable est decrite par un dictionnaire ; cette liste les regroupe DictLois : dictionnaires des lois ''' - def __init__ (self, DictMCVal, ListeVariables, DictLois ) : + def __init__ (self, appli, DictMCVal, ListeVariables, DictLois ) : #---------------------------------------------------------# self.ListeVariables = ListeVariables self.ListeVariablesIn = [] @@ -39,6 +39,7 @@ class Generateur : self.DictTypeVar = {} self.nbVarIn = 0 self.creeInfoVar() + self.appli = appli # # On charge eventuellement le Solver par defaut # et les valeurs par defaut du Solver (dans l init) @@ -61,7 +62,7 @@ class Generateur : monSTDGenerateur=gener( self.DictMCVal, self.ListeVariablesIn, self.DictLois ) except : from OpenturnsSTD import STDGenerateur - monSTDGenerateur = STDGenerateur( self.DictMCVal, self.ListeVariablesIn, self.DictLois ) + monSTDGenerateur = STDGenerateur( self.appli, self.DictMCVal, self.ListeVariablesIn, self.DictLois ) return monSTDGenerateur def getXMLGenerateur(self) : @@ -71,7 +72,7 @@ class Generateur : monXMLGenerateur=gener( self.DictMCVal, self.ListeVariables, self.DictLois ) except : from OpenturnsXML import XMLGenerateur - monXMLGenerateur = XMLGenerateur( self.DictMCVal, self.ListeVariables, self.DictLois ) + monXMLGenerateur = XMLGenerateur( self.appli, self.DictMCVal, self.ListeVariables, self.DictLois ) return monXMLGenerateur def creeInfoVar (self) : diff --git a/generator/OpenturnsSTD.py b/generator/OpenturnsSTD.py index bbe2873d..3501a91a 100644 --- a/generator/OpenturnsSTD.py +++ b/generator/OpenturnsSTD.py @@ -10,7 +10,33 @@ __revision__ = "V1.0" import os +defaultSTD = """#! /usr/bin/env python +class StudyFileGenerationError: + def __init__ (self, st): + self.st = st + def __str__(self): + return "'%s'" % self.st + +raise StudyFileGenerationError, "The study file was not generated" +""" + +enteteSTD = """#! /usr/bin/env python + +# Chargement du module systeme +import sys +sys.path.append( '%s' ) + +# Chargement du module Open TURNS +from openturns import * + +""" + +piedDePageSTD = """ + +# Terminaison du fichier +sys.exit( 0 ) +""" #============================================= # La classe de creation du fichier STD @@ -21,18 +47,257 @@ class STDGenerateur : ''' Generation du fichier python ''' - def __init__ (self, DictMCVal, ListeVariables, DictLois ) : + def __init__ (self, appli, DictMCVal, ListeVariables, DictLois ) : self.DictMCVal = DictMCVal self.ListeVariables = ListeVariables self.DictLois = DictLois print "DictMCVal=", DictMCVal print "ListeVariables=", ListeVariables print "DictLois=", DictLois + self.texteSTD = defaultSTD + self.OpenTURNS_path = appli.CONFIGURATION.OpenTURNS_path + + # Ce dictionnaire fait la correspondance entre le mot lu dans le dictionnaire des mots-clefs et la methode a appeler + self.traitement = { + "Min/Max" : "MinMax", + "Central Uncertainty" : "CentralUncertainty", + "Threshold Exceedence" : "ThresholdExceedence", + "Experiment Plane" : "ExperimentPlane", + "Random Sampling" : "RandomSampling", + } + + # Ce dictionnaire liste le nom des variables utilisees dans le script + # La clef est le nom attendu par les methodes, la valeur est le nom produit dans le fichier de sortie + # Le fait de passer par un dictionnaire permet de controler que les variables existent et sont correctement nommees + # meme si clef == valeur + self.variable = { + "n" : "n", + "p" : "p", + "model" : "model", + "scaledVector" : "scaledVector", + "translationVector" : "translationVector", + "levels" : "levels", + "myCenteredReductedGrid" : "myCenteredReductedGrid", + "myExperimentPlane" : "myExperimentPlane", + "inputSample" : "inputSample", + "outputSample" : "outputSample", + "minValue" : "minValue", + "maxValue" : "maxValue", + "flags" : "flags", + } + # Ce dictionnaire fait la correspondance entre le mot-clef du catalogue et le flag de la bibliotheque + self.logFlags = { + "DebugMessages" : "Log.DBG", + "WrapperMessages" : "Log.WRAPPER", + "UserMessages" : "Log.USER", + "InfoMessages" : "Log.INFO", + "WarningMessages" : "Log.WARN", + "ErrorMessages" : "Log.ERROR", + } + def CreeSTD (self) : ''' Pilotage de la creation du fichier python ''' - return 'Zloup !' + TypeAnalyse = None + if ( self.DictMCVal.has_key( 'Type' ) ): + TypeAnalyse = self.DictMCVal[ 'Type' ] + + Traitement = None + if ( self.traitement.has_key( TypeAnalyse ) ): + Traitement = self.traitement[ TypeAnalyse ] + + if ( Traitement is not None ): + self.texteSTD = apply( STDGenerateur.__dict__[ Traitement ], (self,) ) + + return self.texteSTD + + def Entete (self) : + ''' + Imprime l entete commun a tous les fichiers + ''' + txt = enteteSTD % self.OpenTURNS_path + txt += "# Definit le niveau d'affichage de la log\n" + txt += "%s = Log.NONE\n" % self.variable["flags"] + for flag in self.logFlags.keys(): + if ( self.DictMCVal.has_key( flag ) ): + val = self.DictMCVal[ flag ] + op = "-" + if val == 'yes' : + op = "+" + txt += "%s = %s %s %s\n" % (self.variable["flags"], self.variable["flags"], op, self.logFlags[ flag ]) + txt += "Log.Show( %s )\n" % self.variable["flags"] + txt += "\n" + return txt + + def PiedDePage (self) : + ''' + Imprime le pied de page commun a tous les fichiers + ''' + return piedDePageSTD + + def MinMax (self): + ''' + Produit le fichier study correspondant a une analyse Min/Max + ''' + txt = self.Entete() + txt += "# Etude 'Min/Max'\n" + + txt += self.Model() + + Methode = None + if ( self.DictMCVal.has_key( 'Method' ) ): + Methode = self.DictMCVal[ 'Method' ] + + Traitement = None + if ( self.traitement.has_key( Methode ) ): + Traitement = self.traitement[ Methode ] + + if ( Traitement is not None ): + txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) ) + + txt += self.MinMaxComputation() + txt += self.MinMaxResult() + + txt += self.PiedDePage() + return txt + + def Model (self): + ''' + Importe le modele physique + ''' + fonction = None + if ( self.DictMCVal.has_key( 'Name' ) ): + fonction = self.DictMCVal[ 'Name' ] + + txt = "# Charge le modele physique\n" + txt += "%s = NumericalMathFunction( '%s' )\n" % (self.variable["model"], fonction) + txt += "%s = %s.getInputNumericalPointDimension()\n" % (self.variable["n"], self.variable["model"]) + txt += "\n" + return txt + + def ExperimentPlane (self): + ''' + Etude par plan d experience + ''' + txt = "# Etude par plan d'experience\n" + txt += self.Levels() + txt += self.CenteredReductedGrid() + txt += self.ScaledVector() + txt += self.TranslationVector() + return txt + + def RandomSampling (self): + ''' + Etude par echantillonage aleatoire + ''' + txt = "# Etude par echantillonage aleatoire\n" + return txt + + def ScaledVector (self): + ''' + Definit les coefficients multiplicateurs par composante du vecteur + ''' + dimension = 0 + if ( self.DictMCVal.has_key( 'UnitsPerDimension' ) ): + unitsPerDimension = self.DictMCVal[ 'UnitsPerDimension' ] + dimension = len( unitsPerDimension ) + + txt = "# Definit les facteurs d'echelle dans chaque direction\n" + txt += "%s = NumericalPoint( %s )\n" % (self.variable["scaledVector"], self.variable["n"]) + for i in range(dimension): + txt += "%s[%d] = %g\n" % (self.variable["scaledVector"], i, unitsPerDimension[i]) + txt += "%s.scale( %s )\n" % (self.variable["myExperimentPlane"], self.variable["scaledVector"]) + txt += "\n" + return txt + + def TranslationVector (self): + ''' + Definit le vecteur de translation + ''' + dimension = 0 + if ( self.DictMCVal.has_key( 'Center' ) ): + center = self.DictMCVal[ 'Center' ] + dimension = len( center ) + + txt = "# Definit le vecteur de translation\n" + txt += "%s = NumericalPoint( %s )\n" % (self.variable["translationVector"], self.variable["n"]) + for i in range(dimension): + txt += "%s[%d] = %g\n" % (self.variable["translationVector"], i, center[i]) + txt += "%s.translate( %s )\n" % (self.variable["myExperimentPlane"], self.variable["translationVector"]) + txt += "\n" + return txt + + def Levels (self): + ''' + Definit les niveaux du plan d experience + ''' + dimension = 0 + if ( self.DictMCVal.has_key( 'Levels' ) ): + levels = self.DictMCVal[ 'Levels' ] + dimension = len( levels ) + + txt = "# Definit les niveaux de la structure de grille\n" + txt += "%s = NumericalPoint( %d )\n" % (self.variable["levels"], dimension) + for i in range(dimension): + txt += "%s[%d] = %g\n" % (self.variable["levels"], i, levels[i]) + txt += "\n" + return txt + + def CenteredReductedGrid (self): + ''' + Definit la grille reduite du plan d experience + ''' + plane = None + if ( self.DictMCVal.has_key( 'ExperimentPlane' ) ): + plane = self.DictMCVal[ 'ExperimentPlane' ] + + txt = "# Cree le plan d'experience centre reduit\n" + txt += "%s = %s(%s, %s)\n" % (self.variable["myCenteredReductedGrid"], plane, self.variable["n"], self.variable["levels"]) + txt += "%s = %s.generate()\n" % (self.variable["myExperimentPlane"], self.variable["myCenteredReductedGrid"]) + txt += "\n" + return txt + + def MinMaxComputation (self): + ''' + Realise le calcul deterministe + ''' + txt = "# Calcul\n" + txt += "%s = %s\n" % (self.variable["inputSample"], self.variable["myExperimentPlane"]) + txt += "%s = %s( %s )\n" % (self.variable["outputSample"], self.variable["model"], self.variable["inputSample"]) + txt += "\n" + return txt + + def MinMaxResult (self): + ''' + Produit les resultats de l etude + ''' + txt = "# Resultats\n" + txt += "%s = %s.getMin()\n" % (self.variable["minValue"], self.variable["outputSample"]) + txt += "%s = %s.getMax()\n" % (self.variable["maxValue"], self.variable["outputSample"]) + txt += "\n" + txt += "print '%s = ', %s\n" % (self.variable["minValue"], self.variable["minValue"]) + txt += "print '%s = ', %s\n" % (self.variable["maxValue"], self.variable["maxValue"]) + txt += "\n" + return txt + + def CentralUncertainty (self): + ''' + Produit le fichier study correspondant a une analyse d incertitude en valeur centrale + ''' + txt = self.Entete() + txt += "# Etude 'Central Uncertainty'\n\n" + txt += self.PiedDePage() + return txt + + def ThresholdExceedence (self): + ''' + Produit le fichier study correspondant a une analyse de depassement de seuil + ''' + txt = self.Entete() + txt += "# Etude 'Threshold Exceedence'\n\n" + txt += self.PiedDePage() + return txt diff --git a/generator/OpenturnsXML.py b/generator/OpenturnsXML.py index 74903cac..0c12acb3 100644 --- a/generator/OpenturnsXML.py +++ b/generator/OpenturnsXML.py @@ -60,10 +60,11 @@ class XMLGenerateur : ''' Generation du fichier XML ''' - def __init__ (self, DictMCVal, ListeVariables, DictLois ) : + def __init__ (self, appli, DictMCVal, ListeVariables, DictLois ) : self.DictMCVal = DictMCVal self.ListeVariables = ListeVariables self.DictLois = DictLois + self.appli = appli def CreeXML (self) : ''' diff --git a/generator/generator_openturns_study.py b/generator/generator_openturns_study.py index be56baf9..7aad619d 100644 --- a/generator/generator_openturns_study.py +++ b/generator/generator_openturns_study.py @@ -115,7 +115,7 @@ class OpenturnsGenerator(PythonGenerator): def genereSTD(self): print "IDM: genereSTD dans generator_openturns_study.py" - MonBaseGenerateur=Generateur(self.dictMCVal, self.listeVariables, self.dictMCLois) + MonBaseGenerateur=Generateur(self.appli,self.dictMCVal, self.listeVariables, self.dictMCLois) MonGenerateur=MonBaseGenerateur.getSTDGenerateur() #try : if 1== 1 : diff --git a/generator/generator_openturns_wrapper.py b/generator/generator_openturns_wrapper.py index 6db16932..4caa19a4 100644 --- a/generator/generator_openturns_wrapper.py +++ b/generator/generator_openturns_wrapper.py @@ -109,7 +109,7 @@ class OpenturnsGenerator(PythonGenerator): #print "appli.CONFIGURATION=",self.appli.CONFIGURATION.__dict__ if self.listeFichiers != [] : self.dictMCVal["Files"]=self.listeFichiers - MonBaseGenerateur=Generateur(self.dictMCVal, self.listeVariables, self.dictMCLois) + MonBaseGenerateur=Generateur(self.appli,self.dictMCVal, self.listeVariables, self.dictMCLois) MonGenerateur=MonBaseGenerateur.getXMLGenerateur() #try : if 1== 1 : -- 2.39.2