Salome HOME
gitignore V1
[tools/eficas.git] / generator / generator_openturns_wrapper.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 """
21     Ce module contient le plugin generateur de fichier au format 
22     openturns pour EFICAS.
23
24 """
25 import traceback
26 import types,string,re
27 from Extensions.i18n import tr
28
29
30 from generator_python import PythonGenerator
31 from OpenturnsBase import Generateur 
32 #from OpenturnsXML import XMLGenerateur 
33 #from OpenturnsSTD import STDGenerateur 
34
35 def entryPoint():
36    """
37        Retourne les informations necessaires pour le chargeur de plugins
38
39        Ces informations sont retournees dans un dictionnaire
40    """
41    return {
42         # Le nom du plugin
43           'name' : 'openturns_wrapper',
44         # La factory pour creer une instance du plugin
45           'factory' : OpenturnsGenerator,
46           }
47
48
49 class OpenturnsGenerator(PythonGenerator):
50    """
51        Ce generateur parcourt un objet de type JDC et produit
52        un texte au format eficas et 
53        un texte au format xml 
54
55    """
56    # Les extensions de fichier permis?
57    extensions=('.comm',)
58
59    def initDico(self):
60        self.dictMCVal={}
61        self.dictVariables={}
62        self.listeFichiers=[]
63        self.dictTempo={}
64        self.traiteMCSIMP=1
65        self.numOrdre=0
66        self.texteSTD="""#!/usr/bin/env python
67        import sys
68        print "Invalid file. Check build process."
69        sys.exit(1)
70        """
71        self.wrapperXML=None
72
73    def gener(self,obj,format='brut',config=None):
74        #print "IDM: gener dans generator_openturns_wrapper.py"
75        self.initDico()
76        self.text=PythonGenerator.gener(self,obj,format)
77        self.genereXML()
78        #self.genereSTD()
79        return self.text
80
81    def generMCSIMP(self,obj) :
82        """
83        Convertit un objet MCSIMP en texte python
84        Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable
85        """
86        s=PythonGenerator.generMCSIMP(self,obj)
87        if not( type(obj.valeur) in (list, tuple)) and (obj.get_min_max()[1] != 1):
88           valeur=(obj.valeur,)
89        else :
90           valeur=obj.valeur
91        if self.traiteMCSIMP == 1 : 
92           self.dictMCVal[obj.nom]=valeur
93        else :
94           self.dictTempo[obj.nom]=valeur
95        return s
96
97    def generETAPE(self,obj):
98        #print "generETAPE" , obj.nom
99        if obj.nom == "VARIABLE" :
100           self.traiteMCSIMP=0
101           self.dictTempo={}
102        s=PythonGenerator.generETAPE(self,obj)
103        if obj.nom == "VARIABLE" :
104           self.dictTempo["numOrdre"]=self.numOrdre
105           self.numOrdre = self.numOrdre +1
106           if obj.sd == None :
107              self.dictVariables["SansNom"]=self.dictTempo
108           else :
109              self.dictVariables[obj.sd.nom]=self.dictTempo
110           self.dictTempo={}
111        self.traiteMCSIMP=1
112        return s
113
114    def generMCFACT(self,obj):
115        # Il n est pas possible d utiliser obj.valeur qui n est pas 
116        # a jour pour les nouvelles variables ou les modifications 
117        if obj.nom in ( "Files", ) :
118           self.traiteMCSIMP=0
119           self.dictTempo={}
120        s=PythonGenerator.generMCFACT(self,obj)
121        self.listeFichiers.append(self.dictTempo)
122        self.traiteMCSIMP=1
123        return s
124
125    def genereXML(self):
126        print "IDM: genereXML dans generator_openturns_wrapper.py"
127        #print "appli.CONFIGURATION=",self.appli.CONFIGURATION.__dict__
128        if self.listeFichiers != [] :
129           self.dictMCVal["Files"]=self.listeFichiers
130        print "dictMCVal", self.dictMCVal, "dictVariables", self.dictVariables
131        MonBaseGenerateur=Generateur(self.appli,self.dictMCVal, [], {} ,self.dictVariables)
132        MonGenerateur=MonBaseGenerateur.getXMLGenerateur()
133        try :
134        #if 1== 1 :
135           self.wrapperXML=MonGenerateur.CreeXML()
136        except :
137        #else :
138           self.wrapperXML=None
139
140    def writeDefault(self, filename):
141       fileXML = filename[:filename.rfind(".")] + '.xml'
142       self.wrapperXML.writeFile( str(fileXML) )