]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
Chgt de la reference sur l objet deterministe
authorPASCALE NOYRET <pascale.noyret@edf.fr>
Tue, 21 Jun 2022 16:24:00 +0000 (18:24 +0200)
committerPASCALE NOYRET <pascale.noyret@edf.fr>
Tue, 21 Jun 2022 16:24:00 +0000 (18:24 +0200)
12 files changed:
Ihm/I_ETAPE.py
Ihm/I_JDC.py
Ihm/I_MCBLOC.py
Ihm/I_MCFACT.py
Ihm/I_MCLIST.py
Ihm/I_MCSIMP.py
Ihm/I_OBJECT.py
Ihm/I_PROC_ETAPE.py
Noyau/N_SIMP.py
ReacteurNumerique/cata_UQ.py
convert/convert_UQPython.py
generator/generator_UQ.py

index 31172dd21759a51f4fe426c9414efe8cf7b861eb..4a3aad74129204b023d4eb32210b43563a3a7e7e 100644 (file)
@@ -374,6 +374,9 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
     def getGenealogiePrecise(self):
         return [self.nom]
 
+    def getMCPath(self):
+        return [self.nom, '@sdname '+self.sd.nom+ ' @']
+
     def getNomDsXML(self):
         # en xml on a un choice
         index=0
index 9488009f76d0e462679bfade98829f8095fb71db..f87e3033f7273c28f068de706f0f43993fd43fad 100644 (file)
@@ -690,9 +690,26 @@ class JDC(I_OBJECT.OBJECT):
                     if l : l_mc.extend(l)
         return l_mc
 
+    def getMCPath(self):
+        return []
+
     def getGenealogiePrecise(self):
         return []
 
+    def getObjetByMCPath(self,MCPath):
+        etape=None
+        nomEtape   = MCPath[0]
+        nomSuivant = MCPath[1]
+        if nomSuivant.startswith('@sdname '):
+           nomEtape=nomSuivant.split(' ')[1]
+           etape=self.getEtapeByConceptName(nomEtape)
+        elif nomSuivant.startswith('@index '):
+           indexEtape=nomSuivant.split(' ')[1]
+           etape=self.getEtapesByName(nomEtape)[indexEtape]
+        if not etape : return None
+        return etape.getObjetByMCPath(MCPath[2:]) 
+
+
     def getGenealogie(self):
         """
             Retourne la liste des noms des ascendants de l'objet self
index c96a9f80f6e43934cc80d70863dca98fd28b3187..e0e6128275a33dd709aa7f4055e102a5dd3e2262 100644 (file)
@@ -23,3 +23,6 @@ class MCBLOC(I_MCCOMPO.MCCOMPO):
 
     def getNomDsXML(self):
         return self.parent.getNomDsXML()
+
+    def getMCPath(self):
+        return self.parent.getMCPath()
index b42c028c8a0156139e278dfacc5bb8436df7d71d..81378d821c3690a9666936627886d8c6660a0822 100644 (file)
@@ -92,6 +92,20 @@ class MCFACT(I_MCCOMPO.MCCOMPO):
         else:
             return [nom.strip()]
 
+    def getMCPath(self):
+        objet = self.parent.getChild(self.nom, restreint='oui')
+        if objet is None or objet is self: return ('mauvais MCPath')
+        if len(objet) > 1: index = objet.getIndex(self)
+        else : index = 0
+        nom = self.nom
+        if self.parent:
+            l=self.parent.getMCPath()
+        else:
+            l=[]
+        l.append(nom.strip())
+        l.append('@index ' +str(index)+ ' @')
+        return l 
+
 
     def initModif(self):
         """
index ea3b4ba611e489807932a8f19672efcce868f921..e5f694244a5e510b920f2bcdba7199b1180a9af0 100644 (file)
@@ -235,6 +235,10 @@ class MCList:
         else:
             return []
 
+    def getMCPath(self):
+        if self.parent: return self.parent.getMCPath()
+        else: return []
+
     def getGenealogie(self):
         """
             Retourne la liste des noms des ascendants.
index 05db2c6c96b629c9bee856b658c50e69f3584613..c224e5448366994feef14b4cd530680bbfd10768 100644 (file)
@@ -914,6 +914,11 @@ class MCSIMP(I_OBJECT.OBJECT):
         newVariable.variableDeterministe = self
         self.variableProbabiliste=newVariable
 
+        
+        if self.etape.nature== 'OPERATEUR' :
+           itemObjet=newVariable.addEntite('ObjectName', 0)
+           itemObjet.definition.addInto(self.etape.sd.nom)
+           itemObjet.setValeur(self.etape.sd.nom)
         itemModelVariable=newVariable.getChild('ModelVariable')
         itemModelVariable.setValeur(self.nom)
 
@@ -921,7 +926,7 @@ class MCSIMP(I_OBJECT.OBJECT):
         itemConsigne.setValeur('la valeur entrée pour {} est {}'.format(self.nom, self.valeur))
 
         itemXPath=newVariable.getChild('MCPath')
-        itemXPath.setValeur(self.getGenealogiePrecise())
+        itemXPath.setValeur(self.getMCPath())
         #print (itemXPath)
 
         self.definition.siValide = self.changeValeursRefUQ
index b4d58b84b234e072073cec2e2fe55f711d36e69a..4dc804a9cce7e47dde447db28b7a93c1abf2c6d3 100644 (file)
@@ -117,6 +117,31 @@ class OBJECT:
         else:
             return [self.nom.strip()]
 
+    def getMCPath(self):
+        if self.parent: 
+            l=self.parent.getMCPath()
+            l.append(self.nom.strip())
+            return l
+        else:
+           # a priori on ne devrait pas passer la
+           print ('Erreur dans getMCPath de I_OBJECT')
+           return [self.nom.strip()]
+
+    def getObjetByMCPath(self,MCPath):
+    # a revoir avec les MCFACTs dans les MCLists
+        debug = 1
+        if debug : print ('getObjetByMCPath pour', self, self.nom)
+        objet=None
+        nomFils=MCPath[0]
+        if debug : print ('nomFils', nomFils)
+        if debug : print ('MCPath restant',MCPath[1:])
+        if MCPath[1:] == [] or MCPath[1:] == ()  :
+            if debug : print ('objFils',self.getChildOrChildInBloc(nomFils))
+            return self.getChildOrChildInBloc(nomFils)
+        else :
+            objetFils=self.getChildOrChildInBloc(nomFils)
+            if debug : print ('objFils dans le else',objetFils)
+            return objetFils.getObjetByMCPath(MCPath[1:])
 
     def getGenealogie(self):
         """
index d775f59c70c9201d2e69ccfc5f90e30c0525c456..e4354b0f56766791e88755fa363c6d5aa675e43e 100644 (file)
@@ -73,6 +73,12 @@ class PROC_ETAPE(I_ETAPE.ETAPE):
         for child in self.mcListe :
             child.replaceConcept(old_sd,sd)
 
+
+    def getMCPath(self):
+        index=self.jdc.getIndex(self)
+        return [self.nom, '@index '+str(index)+ ' @']
+
+  
     def delieIncertitude(self):
         mcVP=self.getChild('Input').getChild('VariableProbabiliste')
         for vp in mcVP :
index fdeae65b8e7e04d63e97df6fadf8d8e7872dad5b..b61b0a11d4a291c5de756cdb1e4915f5c79eddd5 100644 (file)
@@ -152,6 +152,15 @@ class SIMP(N_ENTITE.ENTITE):
             self.filtreVariables = []
         self.metAJour=metAJour
 
+    def changeInto(self, listeDesIntos):
+        self.into=listeDesIntos
+
+    def addInto(self, nvlInto):
+        self.into.append(nvlInto)
+
+    def changeStatut(self, nvlStatut):
+        self.statut=nvlStatut
+
     def verifCata(self):
         """
             Cette methode sert à valider les attributs de l'objet de définition
index 89a78a80c2f5ac7ee519d29bb76fc259b2d029b6..a8b28b61c704bd10d241875c6ab3537f933ee9cb 100644 (file)
@@ -1638,7 +1638,7 @@ def creeOutput(monDicoVarSortie):
 def creeOperExpressionIncertitude(monDicoVarDeter, monDicoVarSortie):
     listeDesVariablesPossibles = list(monDicoVarDeter.keys())
     monOutput = creeOutput(monDicoVarSortie)
-    objectName =  SIMP ( statut = "o", typ =  'TXM', homo='constant'),
+    objectName =  SIMP ( statut = "f", typ =  'TXM', into=[],  fenetreIhm='menuDeroulant', homo='constant' ) # on ne met pas [] pour la projection XSD, intoXML=?
     modelVariable = SIMP ( statut = "o",
             typ = ( 'TXM'),
             fr = "Variable d'entrée du modèle",
@@ -1653,11 +1653,12 @@ def creeOperExpressionIncertitude(monDicoVarDeter, monDicoVarSortie):
     # Attention
     # l ordre des motclefs en 3.7 a l air de dépendre de l ordre de creation des objets
     # et non d un dict ordonné. on retombe toujours sur ce pb
-    return  PROC ( nom = "ExpressionIncertitude",  #UIinfo={"groupes":("CACHE",)},
+    return  PROC ( nom = "ExpressionIncertitude",  UIinfo={"groupes":("CACHE",)},
         Input = FACT( max=1, statut ='o',
             VariableProbabiliste = FACT ( max='**', statut ='cache',
                 fr  = "Variable probabiliste",
                 ang = "Probabilistic variable",
+                ObjectName = objectName,
                 ModelVariable = modelVariable,
                 Consigne = laConsigne,
                 MCPath = MCPath,
index 5eb17eeb52ffabb76a6b7490550a9230a9e8874f..073308c8c79a8d08d7cde3d1f8372eb5fcc1b631 100644 (file)
@@ -62,11 +62,18 @@ class pythonUQParser(Pythonparser):
             if not (mcVDPath) : 
                mc.parent.suppentite(mc)
                break # on admet ici que le . comm n est pas valide 
+            mcModelVariable=mc.getChild('ModelVariable')
+            mcModelVariable.definition.addInto(mcModelVariable.valeur)
+            #try :
+            #   mcObjectName=mc.getChild('ObjectName')
+            #   mcObjectName.changeStatut('f')
+            #except : 
+            #  pass
             mcCherche=jdc.getObjetByMCPath(mcVDPath)
-            for mcFils in mcVDPath[1:]:
-                if debug : print(mcCherche, mcFils)
-                mcCherche=mcCherche.getChildOrChildInBloc(mcFils)
-            if debug : print(mcCherche, mcFils)
+            if not (mcCherche) : 
+               mc.parent.suppentite(mc)
+               break # on admet ici que le . comm n est pas valide 
+            if debug : print(mcCherche)
             if mc.nature=='MCFACT' : 
                mc[0].variableDeterministe=mcCherche
                mcCherche.variableProbabiliste=mc[0]
index c36d1a50bc78860948d338e3ba9fd173ba57045d..9979224024cb20e569c0b5a48a15be20389a3ee7 100644 (file)
@@ -65,6 +65,7 @@ class UQGenerator(PythonGenerator):
     def gener(self,jdc,format='beautifie'):
 
         self.indent = '    '
+        self.nomsDesVariablesInput2 = []
         
         print (jdc.code)
         if jdc.nature !=  'JDC' : 
@@ -117,7 +118,13 @@ class UQGenerator(PythonGenerator):
     def generMCSIMP(self,obj) :
         if not self.inGenerUQ : return PythonGenerator.generMCSIMP(self,obj)
         if not obj in self.mcIncertains : return PythonGenerator.generMCSIMP(self,obj)
-        else : return '@'+obj.nom+'@'
+        else : 
+          # a refaire si on decide que les incertains sont sous des fact multiples
+          # ce qui ne me parait pas possible mais ?
+          if obj.etape.nature == 'OPERATEUR' :
+              return '@'+obj.etape.sd.nom +'__' + obj.nom+'@'
+          else :  
+              return '@'+obj.nom+'@'
 
     def analyseIncertitude(self) :
 
@@ -133,11 +140,15 @@ class UQGenerator(PythonGenerator):
         self.chaineDesVariablesInput=''
         for mc in self.lesVariablesInput :
             self.nomsDesVariablesInput.append(mc.variableDeterministe.nom)
-            self.chaineDesVariablesInput+=mc.variableDeterministe.nom + ', '
+            if mc.variableDeterministe.etape.nature == 'OPERATEUR' :
+                self.chaineDesVariablesInput+=mc.variableDeterministe.etape.sd.nom +'__' + mc.variableDeterministe.nom
+            else :
+                self.chaineDesVariablesInput+=mc.variableDeterministe.nom + ', '
             self.mcIncertains.append(mc.variableDeterministe)
         sectionOutput = etapeIncertitude.getChildOrChildInBloc('Output')[0]
         self.chaineDesVariablesInput=self.chaineDesVariablesInput[0:-2]
 
+        return 1, "rrr"
         sectionPropagation = etapeIncertitude.getChildOrChildInBloc('Propagation')[0]
         self.Methode = sectionPropagation.getChildOrChildInBloc('Methode').valeur
         self.Result = sectionPropagation.getChildOrChildInBloc('Result')[0]