]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
partage Eric bug Pyxb
authorPASCALE NOYRET <pascale.noyret@edf.fr>
Mon, 11 Jul 2022 09:51:56 +0000 (11:51 +0200)
committerPASCALE NOYRET <pascale.noyret@edf.fr>
Mon, 11 Jul 2022 09:51:56 +0000 (11:51 +0200)
ReacteurNumerique/creationAsEficas.py
ReacteurNumerique/creationAsEficasToutPetit.py [new file with mode: 0755]
ReacteurNumerique/essaiMCAccasCML.py [new file with mode: 0755]
ReacteurNumerique/toutPetit.comm [new file with mode: 0644]
ReacteurNumerique/toutPetitCata.py [new file with mode: 0644]
ReacteurNumerique/toutPetitCata.xsd [new file with mode: 0644]

index 761cfbb6b2b4136e917f57615031d52677e64441..23d46247271a01bb0ae6302a8587c45ab3f349ae 100755 (executable)
@@ -13,19 +13,61 @@ mdm.pyxb.GlobalValidationConfig._setContentInfluencesGeneration(mdm.pyxb.GlobalV
 mdm.pyxb.GlobalValidationConfig._setInvalidElementInContent(mdm.pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
 mdm.pyxb.GlobalValidationConfig._setOrphanElementInContent(mdm.pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
 
+#dd = mdm.CreateFromDocument(open('toto.xml').read())
+#eltOk=dd.AssemblyDKLibFile[0]
+#eltFils=dd.AssemblyDKLibFile[0].rod_bank_names
+#print ('eltOk.orderedContent()', eltOk.orderedContent())
+
+#elt=pyxb.binding.basis.ElementContent(eltFils, instance=eltOk, tag=pyxb.namespace.ExpandedName(mdm.Namespace, 'rod_bank_names'))
+#print ('eltContent', elt)
+#print ('elementDeclaration._ElementDeclaration__key',getattr(eltOk,elt.elementDeclaration._ElementDeclaration__key))
+
+
+listeArgAss=[]
+dicoArgAss={}
+filename=mdm.T_filename('/tmp/oo')
+listeArgAss.append(filename)
+dicoArgAss['filename']=filename
+pattern=mdm.T_filename('hhhh')
+listeArgAss.append(pattern)
+dicoArgAss['pattern']=pattern
 
 objPyxbRB=[]
 listeArg=[]
 listeArg.append(mdm.T_rod_bank_names_n1_tuple('A'))
 listeArg.append(mdm.T_rod_bank_names_n2_tuple('B'))
 objPyxbRB.append(mdm.T_rod_bank_names(*listeArg))
-print (objPyxbRB[0].toDOM(element_name='rb').toprettyxml())
+listeArg=[]
+listeArg.append(mdm.T_rod_bank_names_n1_tuple('C'))
+listeArg.append(mdm.T_rod_bank_names_n2_tuple('D'))
+objPyxbRB.append(mdm.T_rod_bank_names(*listeArg))
+print ('objPyxbRB', objPyxbRB)
+for o in objPyxbRB : print (o.toDOM(element_name='rb').toprettyxml())
+
+listeArgAss.append(objPyxbRB)
+dicoArgAss['rod_bank_names']=objPyxbRB
+AssemblyFileObjPyx=mdm.T_AssemblyDKLibFile(**dicoArgAss)
 
-listeArgGlob=[]
-dicoArgGlob={}
-listeArgGlob.append(objPyxbRB)
-dicoArgGlob['rod_bank_names']=objPyxbRB
+print ('listeArgAss', listeArgAss)
+newOrderedContent=[]
+for obj in listeArgAss:
+    print ('-------------------- for', newOrderedContent)
+    print (obj)
+    if  isinstance(obj, list):
+    # pour chaque liste de tuple
+        #dicoArgAss['rod_bank_names']=None
+        badObjPyxb=mdm.T_AssemblyDKLibFile(**dicoArgAss)
+        for newObj in obj :
+            print (newObj)
+            badObjPyxb.append(newObj)
+            for c in badObjPyxb.orderedContent() :
+                 if hasattr (c,'value') and c.value == newObj : newOrderedContent.append(c)
+                 continue
+        continue
+    newOrderedContent.append(AssemblyFileObjPyx.orderedContent()[list(map(lambda o:id(o.value), AssemblyFileObjPyx.orderedContent())).index(id(obj))] )
 
-AssemblyFile=mdm.T_AssemblyDKLibFile(**dicoArgGlob)
-print (AssemblyFile.toDOM(element_name='AssemblyFile').toprettyxml())
+for i in range(len(newOrderedContent)):
+    AssemblyFileObjPyx.orderedContent()[i]=newOrderedContent[i]
+print ('AssemblyFileObjPyx.orderedContent', AssemblyFileObjPyx.orderedContent())
 
+print (AssemblyFileObjPyx.toDOM(element_name='rb').toprettyxml())
diff --git a/ReacteurNumerique/creationAsEficasToutPetit.py b/ReacteurNumerique/creationAsEficasToutPetit.py
new file mode 100755 (executable)
index 0000000..16070b3
--- /dev/null
@@ -0,0 +1,81 @@
+#! /usr/bin/env python3
+# -*- coding:utf-8 -*-
+import sys
+
+#print(sys.argv[:])
+
+import toutPetitCata_driver as mdm
+import pyxb
+
+#THESE CONFIGURATION LINES ARE FOR ADVANCED INTERNAL TEST ONLY, YOU DON'T NEED TO CONFIGURE PYXB LIKE THIS
+#mdm.pyxb.GlobalValidationConfig._setContentInfluencesGeneration(mdm.pyxb.GlobalValidationConfig.NEVER)
+mdm.pyxb.GlobalValidationConfig._setContentInfluencesGeneration(mdm.pyxb.GlobalValidationConfig.ALWAYS)
+mdm.pyxb.GlobalValidationConfig._setInvalidElementInContent(mdm.pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
+mdm.pyxb.GlobalValidationConfig._setOrphanElementInContent(mdm.pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
+
+dd = mdm.CreateFromDocument(open('toto.xml').read())
+eltOk=dd.AssemblyDKLibFile[0]
+eltFils=dd.AssemblyDKLibFile[0].rod_bank_names
+print ('eltOk.orderedContent()', eltOk.orderedContent())
+
+elt=pyxb.binding.basis.ElementContent(eltFils, instance=eltOk, tag=pyxb.namespace.ExpandedName(mdm.Namespace, 'rod_bank_names'))
+print ('eltContent', elt)
+print ('elementDeclaration._ElementDeclaration__key',getattr(eltOk,elt.elementDeclaration._ElementDeclaration__key))
+
+
+listeArgAss=[]
+dicoArgAss={}
+#filename=mdm.T_filename('/tmp/oo')
+#listeArgAss.append(filename)
+#dicoArgAss['filename']=filename
+#pattern=mdm.T_filename('hhhh')
+#listeArgAss.append(pattern)
+#dicoArgAss['pattern']=pattern
+
+objPyxbRB=[]
+listeArg=[]
+listeArg.append(mdm.T_rod_bank_names_n1_tuple('A'))
+listeArg.append(mdm.T_rod_bank_names_n2_tuple('B'))
+objPyxbRB.append(mdm.T_rod_bank_names(*listeArg))
+listeArg=[]
+listeArg.append(mdm.T_rod_bank_names_n1_tuple('C'))
+listeArg.append(mdm.T_rod_bank_names_n2_tuple('D'))
+objPyxbRB.append(mdm.T_rod_bank_names(*listeArg))
+print ('objPyxbRB', objPyxbRB)
+for o in objPyxbRB : print (o.toDOM(element_name='rb').toprettyxml())
+
+listeArgAss.append(objPyxbRB)
+dicoArgAss['rod_bank_names']=objPyxbRB
+print ('dicoArgAss', dicoArgAss)
+AssemblyFileObjPyx=mdm.T_AssemblyDKLibFile(**dicoArgAss)
+
+print ('listeArgAss', listeArgAss)
+newOrderedContent=[]
+for obj in listeArgAss:
+    print ('-------------------- for', newOrderedContent)
+    print (obj)
+    if  isinstance(obj, list):
+    # pour chaque liste de tuple
+        #dicoArgAss['rod_bank_names']=None
+        badObjPyxb=mdm.T_AssemblyDKLibFile(**dicoArgAss)
+        for newObj in obj :
+            print (newObj)
+            print ('badObjPyxb ordredcontent', badObjPyxb.orderedContent())
+            badObjPyxb.append(newObj)
+            print ('badObjPyxb ordredcontent', badObjPyxb.orderedContent())
+            for c in badObjPyxb.orderedContent() :
+                 print ('___________________')
+                 print ('c.value', c.value)
+                 print ('___________________')
+                 if hasattr (c,'value') and c.value == newObj : print ('ajout de', c); newOrderedContent.append(c)
+                 continue
+        continue
+    #newOrderedContent.append(AssemblyFileObjPyx.orderedContent()[list(map(lambda o:id(o.value), AssemblyFileObjPyx.orderedContent())).index(id(obj))] )
+
+for i in range(len(newOrderedContent)):
+    print (newOrderedContent[i])
+    try : AssemblyFileObjPyx.orderedContent()[i]=newOrderedContent[i]
+    except : AssemblyFileObjPyx.orderedContent().append(newOrderedContent[i])
+print ('AssemblyFileObjPyx.orderedContent', AssemblyFileObjPyx.orderedContent())
+
+print (AssemblyFileObjPyx.toDOM(element_name='rb').toprettyxml())
diff --git a/ReacteurNumerique/essaiMCAccasCML.py b/ReacteurNumerique/essaiMCAccasCML.py
new file mode 100755 (executable)
index 0000000..a6987e0
--- /dev/null
@@ -0,0 +1,746 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2021   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
+#
+
+import sys,os
+import inspect
+import traceback
+def trace():
+    traceback.print_stack()
+#import raw.efficas as efficas
+import types
+
+sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
+
+try :
+    import pyxb
+    import pyxb.binding
+    import pyxb.binding.basis
+    #import pyxb.utils.utility
+    #import pyxb.utils.domutils
+except : pass
+
+from Accas import A_ASSD
+
+class X_OBJECT:
+# -------------
+
+    def delObjPyxb(self, debug=False):
+        if not self.cata or not self.cata.modeleMetier : return
+        if self.nom == 'Consigne' : return None
+        trouve = False
+
+        if debug : print ('--------------- in delObjPyxb pour ' , self.nom)
+        if debug : print (self.perePyxb.objPyxb.orderedContent())
+        if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
+
+        elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
+        if debug : print ('element moi = ', elt, 'id de moi = ', id(self.objPyxb), self.objPyxb)
+        if (elt.elementDeclaration.isPlural()):
+            if debug : print ('je suis Plural')
+        #   monIndexInOrderedContent=0
+        #   for c in self.perePyxb.objPyxb.orderedContent():
+        #     if isinstance(c._Content__value,list) and  isinstance(c._Content__value[0], type(self.objPyxb)): monIndexInOrderedContent += 1
+        #   listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui')
+        #   if len(listeObjetsAccas) == 1 : monIndex=0
+        #   else : monIndex=listeObjetsAccas.index(self)
+        #   listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
+        #   listeObjetsPyxb.pop(monIndex)
+        #   self.perePyxb.objPyxb.orderedContent().pop(monIndexInOrderedContent)
+            for c in self.perePyxb.objPyxb.orderedContent():
+                trouve=False
+                if isinstance(c._Content__value,list) and  isinstance(c._Content__value[0],type(self.objPyxb)):
+                    monIndex=c.value.index(self.objPyxb)
+                    trouve = True
+                if trouve : break
+            if not trouve : print ("************ pas trouve au delete"); return
+            listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
+            listeObjetsPyxb.pop(monIndex)
+            # si dernier ?
+        else :
+            newOrderedContent = []
+            for i in self.perePyxb.objPyxb.orderedContent():
+                if id(self.objPyxb) == id(i._Content__value) : trouve = True ;continue
+                newOrderedContent.append(i)
+            if not trouve : print ('elt a supprimer ', self.nom, 'non trouve')
+            for i in range(len(newOrderedContent)):
+                self.perePyxb.objPyxb.orderedContent()[i]=newOrderedContent[i]
+            self.perePyxb.objPyxb.orderedContent().pop(len(newOrderedContent))
+
+            setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,None)
+            if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
+
+
+
+    def addObjPyxb(self,indiceDsLeContenu,debug=False):
+        if not self.cata or not self.cata.modeleMetier : return
+        if debug :print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
+        # adherence Accas sur le parent
+        parent=self.parent
+        while (parent.isBLOC()):
+            if parent != self.parent : indiceDsLeContenu += parent.rangDsPyxb()
+            parent=parent.parent
+        self.perePyxb=parent
+
+        if debug :print ('indiceDsLeContenu',indiceDsLeContenu)
+        if debug :print (pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
+
+        if self.objPyxb != None : self.objPyxb.objAccas=self
+        elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom))
+        self.perePyxb.objPyxb.orderedContent().insert(indiceDsLeContenu,elt)
+        if (elt.elementDeclaration.isPlural()):
+        # je suis donc un MCList
+            listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui')
+            if len(listeObjetsAccas) == 1 : monIndex=1
+            else : monIndex=listeObjetsAccas.index(self)
+            listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key)
+            listeObjetsPyxb.insert(monIndex,self.objPyxb)
+        else :
+            setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb)
+        if debug : print (list(map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())))
+        if debug : print ('fin _____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
+
+
+    def rangDsPyxb(self):
+        monRangEnAccas=self.parent.mcListe.index(self)
+        rangEnPyxb=0
+        for frere in self.parent.mcListe[0: monRangEnAccas] :
+            rangEnPyxb += frere.longueurDsArbre()
+        return rangEnPyxb
+
+
+class X_MCSIMP(X_OBJECT):
+# -----------------------
+
+    def buildObjPyxb(self, debug=True) :
+        if not self.cata or not self.cata.modeleMetier : return
+        if self.nom == 'Consigne' : return None
+        if debug : print (self.definition.nomComplet())
+        if debug : print ('_______________ X_MCSIMP buildObjPyxb', self.nom, self,self.valeur)
+        if debug and self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
+        elif debug : print ('objPyxbDeConstruction', self.objPyxbDeConstruction)
+
+        if self.objPyxbDeConstruction != None :
+            self.objPyxb = self.objPyxbDeConstruction
+            self.maClasseModeleMetier =type(self.objPyxb)
+            self.objPyxbDeConstruction = None
+            if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union):
+                self.needFactory=True
+                self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory')
+            else : self.needFactory=False
+        else :
+            self.monNomClasseModeleMetier ='T_'+self.nom
+            if hasattr(self.definition,'nomXML') and self.definition.nomXML != None : self.monNomClasseModeleMetier='T_'+self.definition.nomXML
+            if self.monNomClasseModeleMetier in list(self.cata.DicoNomTypeDifferentNomElt.keys()) :
+                nomComplet=self.definition.nomComplet()
+                if nomComplet in list(self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier].keys()):
+                    self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier][nomComplet]
+            if debug : print ('Pour', self.nom, ' le type est ', self.monNomClasseModeleMetier)
+            self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+
+            if self.waitMatrice() :
+               #PNPN : Attention rien ne relie les objets listeObjPyxb a un objAccas
+               # 27/04 je ne sais pas si cela posera pb
+               self.listeLines = []
+               self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+               self.maClasseModeleMetier_line=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier+'_line')
+               if debug : print ('Matrice  de type ', self.maClasseModeleMetier)
+               for v in self.valeur: 
+                   l=self.maClasseModeleMetier_line(v)
+                   self.listeLines.append(l)
+               self.objPyxb=self.maClasseModeleMetier(*self.listeLines)
+               if self.objPyxb !=None : self.objPyxb.objAccas=self
+               if debug : print ('Matrice ', self.nom, self.objPyxb)
+               if debug : print (self.objPyxb.toDOM(element_name='RN_EDG').toprettyxml())
+               return
+            if self.waitTuple() :
+               self.objPyxb = []
+               self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+               # if faut traiter l autre cas
+               # et optimiser
+               if self.definition.max !=1 :
+                  for v in self.valeur :
+                    if debug : print ('je traite ', v)
+                    listeConstruction=[]
+                    for i in range(self.combienEltDsTuple()):
+                        num=i+1
+                        maClasseElt=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier+'_n'+str(num)+'_tuple')
+                        listeConstruction.append(maClasseElt(v[i]))
+                    self.objPyxb.append(self.maClasseModeleMetier(*listeConstruction))
+                    # on fait porter au 1er l objet Accas pour retrouver la definition
+                    if self.objPyxb[0] !=None : self.objPyxb[0].objAccas=self
+                    if debug  : print (self.objPyxb)
+                    if debug  : print (self.objPyxb[0].__class__)
+                    if debug : 
+                       for o in self.objPyxb : print ('x_MSIMP', o.toDOM(element_name='RN_EDG').toprettyxml())
+                  return
+            if self.waitChaineAvecBlancs() and self.definition.max > 1:
+               self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+               if debug : print (self.valeur)
+               if self.valeur != None and self.valeur != [] : self.objPyxb = self.maClasseModeleMetier(*self.valeur)
+               else :self.objPyxb = self.maClasseModeleMetier()
+               if self.objPyxb !=None : self.objPyxb.objAccas=self
+               if debug : print ('X_MCSIMP', self.nom, self.objPyxb, )
+               if debug : print ('__________ fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
+               return
+
+                        
+            if issubclass(self.maClasseModeleMetier, self.cata.modeleMetier.pyxb.binding.basis.STD_union):
+                if debug : print ('needFactory')
+                self.needFactory=True
+                self.maClasseModeleMetierFactory=getattr(self.maClasseModeleMetier,'Factory')
+            else : self.needFactory=False
+
+            if self.valeur != None :
+                if self.needFactory :
+                    if self.definition.max > 1 :
+                       # PNPN A corriger 
+                       # self.objPyxb=self.maClasseModeleMetier(self.valeur)
+                            self.objPyxb=self.maClasseModeleMetierFactory(self.valeur)
+                    else :  self.objPyxb=self.maClasseModeleMetierFactory(self.valeur)
+                else                :  self.objPyxb=self.maClasseModeleMetier(self.valeur)
+            else                   :
+                if self.needFactory : self.objPyxb=None
+                else                : self.objPyxb=self.maClasseModeleMetier(_validate_constraints=False)
+
+
+        if self.objPyxb !=None : self.objPyxb.objAccas=self
+        if debug : print ('X_MCSIMP', self.nom, self.objPyxb, )
+        if debug : print ('__________ fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
+
+
+    def setValeurObjPyxb(self,newVal, debug=False):
+        if not self.cata or not self.cata.modeleMetier : return
+        if debug : print (' ___________________________ dans setValeurObjPyxb MCSIMP ', self.nom, newVal)
+        if debug : print (' self.perePyxb = ', self.perePyxb.nom)
+        if debug : print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb)
+        if debug : print ('debut du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
+
+        #if newVal != None : nvlObj=self.maClasseModeleMetier(newVal)
+        if newVal != None :
+            if self.needFactory : nvlObj=self.maClasseModeleMetierFactory(newVal)
+            else                : nvlObj=self.maClasseModeleMetier(newVal)
+        else                   :
+            if self.needFactory : nvlObj =None
+            else                : nvlObj=self.maClasseModeleMetier(_validate_constraints=False)
+        self.val=newVal
+        if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
+
+        if inspect.isclass(newVal) and issubclass(newVal,A_ASSD)  :
+            newVal = newVal.nom
+        setattr(self.perePyxb.objPyxb,self.nom,nvlObj)
+        trouve=False
+        indice=0
+        for i in self.perePyxb.objPyxb.orderedContent():
+            if i.elementDeclaration.id() == self.nom:
+            #if isinstance(i._Content__value, self.maClasseModeleMetier) :
+                self.perePyxb.objPyxb.orderedContent()[indice]=self.perePyxb.objPyxb.orderedContent()[-1]
+                del(self.perePyxb.objPyxb.orderedContent()[-1])
+                trouve=True
+                break
+            indice+=1
+        if not trouve : print ('Attention souci au changement de valeur de ', self.nom)
+        self.objPyxb=nvlObj
+        #self.objPyxb.objAccas=self
+        if debug : print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent())
+
+
+
+
+class X_MCCOMPO(X_OBJECT) :
+# -------------------------
+#
+    def buildObjPyxb(self,mc_list, debug=True) :
+        if not self.cata or not self.cata.modeleMetier : return
+
+        if debug : print ('****************** X_MCCOMPO------------------------', self.nom)
+        deepDebug=False
+        self.listArg=[]
+        self.dicoArg={}
+        for objAccas in mc_list :
+            if debug : print ('dans le for', objAccas.nom)
+            if objAccas.nature == 'MCBLOC' :
+                self.exploreBLOC(objAccas)
+            elif objAccas.nature == 'MCList' :
+                if objAccas[0].definition.max > 1 :
+                    self.listArg.append(objAccas) # les MCList n ont pas objPyxb
+                    self.dicoArg[objAccas.nom]=[]
+                    for fils in objAccas :
+                        fils.perePyxb=self
+                        self.dicoArg[objAccas.nom].append(fils.objPyxb)
+                else :
+                    objAccas[0].perePyxb=self
+                    self.dicoArg[objAccas.nom]=objAccas[0].objPyxb
+                    self.listArg.append(objAccas[0].objPyxb)
+            else :
+                if objAccas.nom == 'Consigne'     : continue
+                if debug : print ('ds X_MCCOMPO de ', self.nom + '  pour ', objAccas.nom, objAccas.objPyxb)
+                self.listArg.append(objAccas.objPyxb)
+                self.dicoArg[objAccas.nom]=objAccas.objPyxb
+                objAccas.perePyxb=self
+
+        if debug : print('X_MCCOMPO -- listArg ---',self.nom,self.listArg)
+        if debug : print('X_MCCOMPO -- dicoArg ---',self.nom,self.dicoArg)
+
+
+        self.monNomClasseModeleMetier='T_'+self.nom
+        if self.monNomClasseModeleMetier in list(self.cata.DicoNomTypeDifferentNomElt.keys()) :
+            self.nomComplet=self.definition.nomComplet()
+            self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.monNomClasseModeleMetier][self.nomComplet]
+        self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+
+        # PN : Ne doit-on pas tester avant
+        if self.objPyxbDeConstruction != None :
+            self.objPyxb = self.objPyxbDeConstruction
+            self.objPyxbDeConstruction = None
+            if debug : print ('je passe dans le if pour ', self.nom, self.objPyxb, self)
+            if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb,self.listArg,self.objPyxb.orderedContent())
+        else :
+            if debug : print (self.listArg)
+            if debug : print (self.maClasseModeleMetier)
+            # self.objPyxb=self.maClasseModeleMetier(*self.listArg)
+            self.objPyxb=self.maClasseModeleMetier(**self.dicoArg)
+            deepDebug=False
+            if deepDebug :
+                print ('debut de __________ ordered content')
+                for o in self.objPyxb.orderedContent():
+                    print ('o', o)
+                    print ('value', o.value)
+                    print ('type', type(o.value))
+                    print ('id', id(o.value))
+                print ('fin __________ new  content')
+                print ('debut de  __________ listArg')
+                for obj in self.listArg:
+                    print ('obj',obj)
+                    print ('type obj', type(obj))
+                    print ('id(obj)', id(obj))
+                print ('fin __________  listArg')
+
+            newOrderedContent=[]
+            for obj in self.listArg:
+                if  isinstance(obj, list):
+                     # traitement particulier des tuples
+                     print ('iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii')
+                     if  hasattr(obj[0],'objAccas') and obj[0].objAccas.nature == 'MCSIMP' and obj[0].objAccas.waitTuple():
+                         print (self.dicoArg)
+                         badObjPyxb=self.maClasseModeleMetier(**self.dicoArg)
+                         for newObj in obj : 
+                             print (newObj)
+                             print ('jjjjjjjjjjjjjjjjjjjjjjjjj')
+                             badObjPyxb.append(newObj)
+                         for c in badObjPyxb.orderedContent() :
+                              if hasattr (c,'value') and c.value == newObj : newOrderedContent.append(c)
+                         continue
+
+                     for c in self.objPyxb.orderedContent() :
+                           if hasattr (c,'value') and c.value == obj :
+                              newOrderedContent.append(c)
+                     continue
+                if (hasattr(obj, 'nature')) : # attention on a un object Accas et non un pyxb car les MCList n ont pas de objPyxb
+                    max=obj[0].definition.max
+                else : max = 1
+                if  max == 1 :
+                    #if not(issubclass(type(obj), pyxb.binding.basis.enumeration_mixin) ):
+                    #   newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(obj))] )
+                    #else :
+                    #   newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:type(o.value), self.objPyxb.orderedContent())).index(type(obj))] )
+                    # PN 22 sept 2020 . pourquoi pas toujours l id. le tyoe ne convient pas en cas d union d enum
+                    newOrderedContent.append(self.objPyxb.orderedContent()[list(map(lambda o:id(o.value), self.objPyxb.orderedContent())).index(id(obj))] )
+                else  : # element Pural
+                    for c in self.objPyxb.orderedContent() :
+                        if isinstance(c._Content__value,list) and  isinstance(c._Content__value[0], type(obj[0].objPyxb)): newOrderedContent.append(c)
+
+            if debug : print ('construction X_MCCOMPO', self, self.nom, self.objPyxb)
+            i=0
+
+            #for i in range(len(self.listArg)):
+            # a priori on a a len(newOrderedContent) > len(orderedContent())
+            for i in range(len(newOrderedContent)):
+                self.objPyxb.orderedContent()[i]=newOrderedContent[i]
+
+            if debug : print ('X_MCCOMPO', self, self.nom, self.objPyxb)
+            if debug : print ('X_MCCOMPO', self.objPyxb.orderedContent())
+            deepDebug=True
+            if deepDebug :
+               for obj in self.objPyxb.orderedContent() :
+                   print (obj.value)
+                   try : 
+                       for objFils in obj.value.orderedContent():
+                           print (objFils.value)
+                   except : pass
+            if debug : print ('x_MCCOMPO', self.objPyxb.toDOM(element_name='RN_EDG').toprettyxml())
+            if debug : print ('X_MCCOMPO', self.objPyxb.orderedContent())
+        if debug : print ('fin buildObjetPyxb _______________________________________')
+        # assert(self.objPyxb.validateBinding())
+
+
+    def exploreBLOC(self,objAccas,debug=True):
+        if debug : print (' ds exploreBLOC', objAccas.nom)
+        laListeSsLesBlocs=[]
+        for fils in objAccas.mcListe:
+            if fils.nature == 'MCBLOC' :
+                self.exploreBLOC(fils)
+            elif fils.nature == 'MCList' :
+                #print ('exploreBLOC des MCList', fils.nom)
+                self.dicoArg[fils.nom]=[]
+                if fils[0].definition.max > 1 :
+                    #print ('ajout de ', fils)
+                    self.listArg.append(fils) # les MCList n ont pas objPyxb
+                    for objFils in fils :
+                        objFils.perePyxb=self
+                        self.dicoArg[fils.nom].append(objFils.objPyxb)
+                else:
+                    fils[0].perePyxb=self
+                    self.dicoArg[fils.nom]=fils[0].objPyxb
+                    self.listArg.append(fils[0].objPyxb)
+                    if debug : print ('ajout dans exploreBLOC  ', self.nom + '  de fact ', fils.nom, fils[0].objPyxb)
+            else :
+                if fils.nom == "Consigne" : continue
+                self.listArg.append(fils.objPyxb)
+                self.dicoArg[fils.nom]=fils.objPyxb
+                fils.perePyxb=self
+                if debug : print ('ajout dans exploreBLOC ', self.nom + '  de ', fils.nom, fils.objPyxb)
+                #if debug : print ('ds exploreBLOC de ', self.nom + '  pour ', fils.nom, fils.objPyxb)
+                #if debug : print (fils.nom ,' est un SIMP a pour pere Pyxb', self, self.nom)
+        if debug : print ('fin  ds exploreBLOC', objAccas .nom)
+
+
+
+
+class X_MCBLOC (X_MCCOMPO):
+# --------------------------
+    def buildObjPyxb(self,mc_list,debug=False):
+        if not self.cata or not self.cata.modeleMetier : return
+        if debug : print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list, 'ne fait rien')
+        self.perePyxb=None
+        self.objPyxb=None
+
+    def addObjPyxb(self, indiceDsLeContenu, debug=False):
+        if not self.cata or not self.cata.modeleMetier : return
+        if debug : print ('X_MCBLOC addObjPyxb', self.nom, self, self.mcListe, indiceDsLeContenu)
+        rangDeLObjet=indiceDsLeContenu
+        for obj in self.mcListe:
+            obj.addObjPyxb( rangDeLObjet)
+            rangDeLObjet=rangDeLObjet+obj.longueurDsArbre()
+
+    def delObjPyxb(self, debug=False):
+        if not self.cata or not self.cata.modeleMetier : return
+        if debug : print ('X_MCBLOC delObjPyxb', self.nom, ' --------------------------')
+        for obj in self.mcListe:
+            obj.delObjPyxb()
+        if debug : print ('fin X_MCBLOC delObjPyxb --------------------------')
+
+class X_MCLIST (X_MCCOMPO):
+# --------------------------
+
+    def buildObjPyxb(self,mc_list, debug=False):
+        if debug : print ('X_MCLIST buildObjPyxb ne fait rien', self.nom, self, mc_list)
+        pass
+
+    def addObjPyxb(self,indiceDsLeContenu, debug=False):
+        if debug : print ('X_MCLIST addObjPyxb', self.nom, indiceDsLeContenu)
+        rangDeLObjet=indiceDsLeContenu
+        for objFils in self :
+            objFils.addObjPyxb(rangDeLObjet)
+            rangDeLObjet= rangDeLObjet + 1
+
+    def delObjPyxb(self, debug=False):
+        if not self.cata or not self.cata.modeleMetier : return
+        if debug : print ('X_MCLIST delObjPyxb', self.nom, ' --------------------------')
+        for obj in self:
+            obj.delObjPyxb()
+        if debug : print ('fin X_MCLIST delObjPyxb --------------------------')
+
+
+class X_MCFACT (X_MCCOMPO):
+# -------------------------
+    pass
+
+class X_ETAPE(X_MCCOMPO) :
+# -------------------------
+
+    def metAJourNomASSD(self, nom,debug=False):
+        if not self.cata or not self.cata.modeleMetier : return
+        if debug : print ('X_ETAPE metAJourLesAttributs', self.nom, nom,' --------------------------')
+        self.objPyxb.sdName=nom
+
+class X_JDC (X_MCCOMPO):
+# ---------------------
+
+    def  __init__(self):
+        self.perePyxb=None
+        if not self.cata or not self.cata.modeleMetier : return
+        #if hasattr(self.cata,'DicoNomTypeDifferentNomElt') : print ('jkllllllllllllllll')
+        if not(hasattr(self.cata,'DicoNomTypeDifferentNomElt')) : self.cata.DicoNomTypeDifferentNomElt={}
+        self.monNomClasseModeleMetier=self.code
+        self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier)
+        self.objPyxb=self.maClasseModeleMetier()
+        #self.objPyxb.objAccas=self
+        pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.ALWAYS)
+        pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
+        pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION)
+
+
+
+    def enregistreEtapePyxb(self,etape,indice=0, debug=False):
+      # ne fonctionne pas : a reecrire avec les fonctions addObjPyxb et ReconstruitPerePyxb
+      # ne contient pas indice pour l insant
+
+        if debug : print ( 'hhhhhhhhhhhhhhh enregistreEtapePyxb hhhhhhhhhhhhhhhhhhhhhhhhh')
+        if debug : print ('enregistre ds ',self, etape.nom, 'indice = ', indice)
+        if etape.nature == 'COMMENTAIRE' : return
+        if not self.cata.modeleMetier : return
+        if debug : print ('etape.objPyxb', etape.objPyxb)
+        if debug : print (etape.objPyxb.toDOM(element_name='RN_EDG').toprettyxml())
+        self.objPyxb.append(etape.objPyxb)
+        etape.perePyxb = self
+
+        #print (self.objPyxb.orderedContent())
+        #if indice   != (len(self.objPyxb.orderedContent()) ) :
+        #  tampon=self.objPyxb.orderedContent()[-1]
+        #  for i in reversed(range(len(self.objPyxb.orderedContent()))):
+        #    self.objPyxb.orderedContent()[i]=self.objPyxb.orderedContent()[i-1]
+        #    if i == indice + 1 : break
+        #  self.objPyxb.orderedContent()[indice]=tampon
+
+        #print (self.objPyxb.orderedContent())
+        #try:
+        #   self.objPyxb.validateBinding()
+        #except pyxb.ValidationError as e:
+        #   print(e.details())
+
+    def toXml(self,fichier=None, debug=False):
+        if debug : print ('ds to XML')
+        if not self.cata or not self.cata.modeleMetier : return
+        #if debug : print (' to xml ***************',self.objPyxb,'***************',)
+        #if debug : print (' to xml ***************',self,'***************',)
+        #if debug : print (' to xml ***************',self.objPyxb.orderedContent(),'***************',)
+        #if debug : print(self.objPyxb.toDOM().toprettyxml())
+        #if debug : print(self.objPyxb.toxml())
+        #ns1 = pyxb.namespace.Namespace("xsi:schemaLocation")
+        #monUri='http://chercheurs.edf.com/logiciels/{} {}'.format(self.code,os.path.basename(self.cata.fileModeleMetier))
+        #print ('monUri', monUri)
+        #pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, monUri)
+
+        ns1 = pyxb.namespace.NamespaceForURI("http://www.w3.org/2001/XMLSchema-instance",True)
+        pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, 'xsi')
+        texteXML  = self.objPyxb.toDOM().toprettyxml()
+        if debug : print (texteXML)
+        if debug : print ('__________________________________________________________________________')
+        #enteteXML = '<ns1:{} xmlns:ns1="http://chercheurs.edf.com/logiciels/{}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://chercheurs.edf.com/logiciels/{} file:{}>'.format(self.code,self.code,self.code,self.cata.fileModeleMetier)
+        return (self.objPyxb.toDOM().toprettyxml())
+
+
+    def analyseFromXML(self,debug=False):
+        if debug : print ("je suis ds analyseFromXML -- > appel ds analyseXML de I_JDC.py")
+        if self.procedure == "" : return
+        self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure)
+        if not hasattr(self.cata.modeleMetier,'AccasUserAssd'):
+            from Accas import UserASSD
+            self.cata.modeleMetier.AccasUserAssd=UserASSD
+        if not hasattr(self.cata.modeleMetier,'AccasUserAssdMultiple'):
+            from Accas import UserASSDMultiple
+            self.cata.modeleMetier.AccasUserAssdMultiple=UserASSDMultiple
+        for contentObjEtape in self.objPyxb.orderedContent():
+            objEtape=contentObjEtape.value
+            objEtape.dictArgs=(self.pyxbToDict(objEtape))
+            objEtape.monNomClasseAccas=objEtape._ExpandedName.localName()
+            objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:]
+            # doute sur les 2 lignes suivantes : objEtape peut etre contentObjEtape 2juin20
+            objEtape.dictPyxb['objEnPyxb']=objEtape
+            objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb
+            if debug : print ('dicoPyxbDeConstruction', objEtape.dictArgs['dicoPyxbDeConstruction'])
+            maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
+            if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
+            if debug : print ('maClasseAccas ', maClasseAccas)
+            if debug : print ('objEtape ', objEtape , type(objEtape))
+            if debug : print ('nomClasseAccas ',objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas))
+            if debug : print ('_ExpandedName ', objEtape._ExpandedName, type(objEtape._ExpandedName))
+            if debug : print ('dictArgs ',objEtape.dictArgs)
+            if debug : print ('dictPyxb ',objEtape.dictPyxb)
+            # attention au call d Oper qui renomme l objet pyxb
+            if hasattr(objEtape,'sdName') :
+                if debug and hasattr(objEtape,'sdName') :print ('sdName',objEtape.sdName)
+                objAccasEtape=maClasseAccas(nomXML=objEtape.sdName, **(objEtape.dictArgs))
+            else : objAccasEtape=maClasseAccas(**(objEtape.dictArgs))
+            if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
+
+
+    def pyxbToDict(self,objAAnalyser, debug=False):
+        # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout
+        if objAAnalyser is None: return
+        #if (objAAnalyser.__class__.__name__.find('BU_map')>0) : debug=True
+        #if (objAAnalyser.__class__.__name__.find('n1')>0) : debug=True
+        #if debug : print ('debut pour_____________________________ ',objAAnalyser, objAAnalyser.__class__.__name__)
+        dictArgs = {}
+        # traitement SIMP
+        # ---------------
+        # a revoir pour les matrices
+        # et les tuples
+        if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition):
+            if debug : print ('je suis un MCSimple', objAAnalyser)
+            # traitement scalaire
+            objAAnalyser.dictPyxb=objAAnalyser
+            if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)):
+                if debug :  print ('je suis un scalaire')
+                #if (objAAnalyser.__class__.__name__.find('n1')>0) : 
+                #if (isinstance(objAAnalyser,self.cata.modeleMetier.AccasTuple)): return objAAnalyser
+                if isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssd) or isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssdMultiple):
+                    laClassePyxbUserAssd=type(objAAnalyser)
+                    return self.creeUserAssd(objAAnalyser,laClassePyxbUserAssd)
+                if issubclass(objAAnalyser.__class__,self.cata.modeleMetier.AccasAssd): return (self.g_context[str(objAAnalyser)])
+                if isinstance(objAAnalyser, pyxb.binding.datatypes.boolean) : return bool(objAAnalyser)
+                if isinstance(objAAnalyser, str)  : return str(objAAnalyser)
+                if isinstance(objAAnalyser, int)  : return int(objAAnalyser)
+                if isinstance(objAAnalyser, float): return float(objAAnalyser)
+                if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin):    return str(objAAnalyser)
+                return objAAnalyser
+            else :
+                if debug : print ('je suis une liste')
+                laListe=[]
+
+                # liste homogene
+                #if len(objAAnalyser)>0:
+                #    if issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssd) or issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssdMultiple): estUnUserASSDorUserASSDMultiple = True
+                #    else : estUnUserASSDorUserASSDMultiple=False
+                #    print (objAAnalyser[0].__class__,objAAnalyser, estUnUserASSDorUserASSDMultiple)
+                #else : estUnUserASSDorUserASSDMultiple=False
+                #if debug : print ('estUnUserASSDorUserASSDMultiple', estUnUserASSDorUserASSDMultiple)
+
+                for obj in objAAnalyser :
+                    if issubclass(obj.__class__,self.cata.modeleMetier.AccasUserAssd) or issubclass(obj.__class__,self.cata.modeleMetier.AccasUserAssdMultiple):
+                       laClassePyxbUserAssd=obj.__class__
+                       laListe.append(self.creeUserAssd(obj,laClassePyxbUserAssd))
+                    elif issubclass(obj.__class__,self.cata.modeleMetier.AccasAssd):
+                         laListe.append(self.g_context[str(obj)])
+                    elif isinstance(obj, str): laListe.append (str(obj))
+                    elif isinstance(obj, int): laListe.append (int(obj))
+                    elif isinstance(obj, float): laListe.append (float(obj))
+                    elif isinstance(obj, pyxb.binding.basis.enumeration_mixin): laListe.append(str(obj))
+                    else :  laListe.append(obj)
+                return (laListe)
+            #  if debug : print ('je suis Plural')
+            # ou ? return objAAnalyser
+            #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,)
+            #pour une enum getattr(value dans le type)
+            # return pythonLiteral(ReferenceFacet(facet=value, **kw))
+        #print ('je suis un mot complexe')
+        # traitement FACT ou BLOC
+        # ------------------------
+        # il faut traiter les fact multiples
+        objAAnalyser.dictPyxb = {}
+        objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser
+        #for expandedName, elementDeclaration in objAAnalyser._ElementMap.items():
+        #    objPyxbName  = expandedName.localName()
+        #    objPyxbValue = getattr(objAAnalyser, objPyxbName)
+        for objEltContentFils in objAAnalyser.orderedContent():
+            objPyxbValue = objEltContentFils.value
+            objPyxbName  = objEltContentFils.elementDeclaration.id()
+            elementDeclaration = objEltContentFils.elementDeclaration
+            #if objPyxbValue == None or objPyxbValue == [] : continue
+            if elementDeclaration.isPlural():
+                if objPyxbName not in list(dictArgs.keys()) : dictArgs[objPyxbName]=[]
+                if objPyxbName not in list(objAAnalyser.dictPyxb.keys()) : objAAnalyser.dictPyxb[objPyxbName]=[]
+                dictArgs[objPyxbName].append(self.pyxbToDict(objPyxbValue))
+                objAAnalyser.dictPyxb[objPyxbName].append(objPyxbValue.dictPyxb)
+            else:
+                dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName))
+                objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb
+                # print ('ajout dans dictPyxb', objPyxbName, objPyxbValue.dictPyxb)
+                #print ('avec la valeur', 'de',  objAAnalyser.dictPyxb[objPyxbName])
+
+        if debug : print ("***********************************")
+        if debug : print ('pyxbToDict  fin pour ********** ', objAAnalyser)
+        if debug : print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
+        if debug : print ('pyxbToDict  fin pour ********** ', objAAnalyser)
+        if debug : print ("***********************************")
+        # traitement des Matrices et des Tuples
+        # on change ce qu on retourne pour ne garder que la valeur de la matrice
+        if hasattr(objAAnalyser,'sdType') and objAAnalyser.sdType == 'Matrice': return dictArgs['line']
+        # on estime que les elements du tuple sont nommes par ordre 1..., n
+        # ou par ordre alpha
+        if hasattr(objAAnalyser,'sdType') and objAAnalyser.sdType == 'Tuple': 
+            liste=[]
+            listeKeys = list(dictArgs.keys()) 
+            listeKeys.sort()
+            for k in listeKeys : liste.append(dictArgs[k])
+            return tuple(liste)
+        if debug : print ('fin pour ',objAAnalyser)
+        return dictArgs
+
+    def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd,debug=False):
+
+        enCreation=False
+        if debug : print ('creeUserAssd ', objAAnalyser, ' ',laClassePyxbUserAssd)
+        leTypeIntermediaire=laClassePyxbUserAssd.XsdSuperType()  
+        if debug : print ('leTypeIntermediaire ', leTypeIntermediaire)
+        if debug : print ('leTypeIntermediaire ', leTypeIntermediaire.XsdSuperType())
+        if leTypeIntermediaire.__name__[-2:]== '_C' : enCreation = True
+        elif leTypeIntermediaire.__name__[-2:] != '_U' : print ('pb avec', laClassePyxbUserAssd); return None #exit() 
+        nomClasseAccasUserAssd=leTypeIntermediaire.XsdSuperType().__name__
+        if debug : print ('nomClasseAccasUserAssd', nomClasseAccasUserAssd)
+        laClasseAccas=getattr(self.cata,nomClasseAccasUserAssd)
+        print (laClasseAccas)
+        if not(enCreation):
+            if str(objAAnalyser) in self.g_context.keys():return self.g_context[str(objAAnalyser)]
+            else :
+                obj=laClasseAccas()
+                self.g_context[str(objAAnalyser)]=obj
+                return obj
+        if str(objAAnalyser) in self.g_context.keys():
+            if isinstance(self.g_context[str(objAAnalyser)],laClasseAccas):
+                return self.g_context[str(objAAnalyser)]
+            else :
+                nvlObj=laClasseAccas()
+                oldObj=self.g_context[str(objAAnalyser)]
+                nvlObj.transfere(oldObj)
+                self.g_context[str(objAAnalyser)]=nvlObj
+                return nvlObj
+        else :
+            obj=laClasseAccas()
+            self.g_context[str(objAAnalyser)]=obj
+            return obj
+
+#   def analyseContent(self,objAAnalyser):
+#       objAAnalyser.dictArgs={}
+#       for objContenu in objAAnalyser.content():
+#          #print ('j analyse ', objContenu)
+#          objContenu.monNomClasseModeleMetier=str(objContenu.__class__).split('.')[-1]
+#          objContenu.monNomClasseAccas=objContenu.monNomClasseModeleMetier[2:-2]
+#          #maClasseAccas=classeAccasPere.entites[objContenu.monNomClasseAccas]
+#          if objContenu._IsSimpleTypeContent():
+#             print (objContenu.monNomClasseAccas,objContenu.pythonLiteral())
+#             print (objContenu.monNomClasseAccas,objContenu.xsdLiteral())
+#             #chaine=objContenu.pythonLiteral().split('(')[1].split(')')[0]
+#             print (dir(objContenu))
+#             objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=None
+#             #objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.pythonLiteral()
+#          else :
+#             self.analyseContent(objContenu)
+#             objAAnalyser.dictArgs[objContenu.monNomClasseAccas]=objContenu.dictArgs
+            #print ( '________________')
+            #print (objAAnalyser.monNomClasseAccas)
+            #for i in objAAnalyser.dictArgs : print (i, objAAnalyser.dictArgs[i])
+            #print ( '________________')
+
+
+
+if __name__ == "__main__":
+    print ('a faire')
diff --git a/ReacteurNumerique/toutPetit.comm b/ReacteurNumerique/toutPetit.comm
new file mode 100644 (file)
index 0000000..00c2fa3
--- /dev/null
@@ -0,0 +1,6 @@
+
+AF3R_400=AssemblyDKLibFile(#filename='/tmp/oo',
+                           #pattern='aaa',
+                           rod_bank_names=(('Black','black_rods'),),);
+#VERSION_CATALOGUE:V_0:FIN VERSION_CATALOGUE
+#CHECKSUM:d7e06c28bd7405b0913257d383914c9f:FIN CHECKSUM
diff --git a/ReacteurNumerique/toutPetitCata.py b/ReacteurNumerique/toutPetitCata.py
new file mode 100644 (file)
index 0000000..29bb649
--- /dev/null
@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+
+"""Definition of the data model used by the integration bench.
+
+Warnings
+--------
+EFICAS will import this file as Python module with the ``__import__`` special
+function so, this module must not use relative import.
+"""
+# pylint: disable=import-error
+# pylint: disable=too-few-public-methods
+
+# TODO: Create a main object that point on the different subobjects and force its name
+
+# EFICAS
+from Accas import OPER, BLOC, FACT, SIMP, ASSD, JDC_CATA, VerifTypeTuple, Matrice, Tuple
+from Accas import Tuple as _Tuple
+from Extensions.i18n import tr
+
+# Warning: The names of these variables are defined by EFICAS
+JdC = JDC_CATA(code="RN_EDG")
+VERSION_CATALOGUE = "V_0"
+
+# Define the minimum and the maximum number of elements (reflectors and fuel
+# assemblies) on the core's side
+NMIN_CORE_FUEL_ELTS = 1
+NMAX_CORE_FUEL_ELTS = 18
+
+# Available absorbing material type in the rod clusters
+ROD_COMPOSITIONS = (
+    "Black",   # Full AIC rods
+    "Grey",    # Mix between AIC and steel rods
+    "B4C",     # Full B4C rods
+)
+
+# Available options for the core elements rotation
+ASSEMBLY_ROTATIONS = (
+    ".",   # identity
+    "R1",  # 90° counter-clock
+    "R2",  # 180°
+    "R3",  # 270° counter-clock
+    "UD",  # up-down
+    "LR",  # left-right
+    "TR",  # transpose x/y
+    "RT",  # transpose x/-y
+)
+
+
+
+class _AssemblyDKLibFile(ASSD):
+    """Manage informations about a fuel assembly DKLib file."""
+
+
+
+AssemblyDKLibFile = OPER(
+    nom="AssemblyDKLibFile",
+    sd_prod=_AssemblyDKLibFile,
+    fr="Description d'un fichier DKLib assemblage combustible",
+    ang="Description of a fuel assembly DKLib file",
+    #filename=SIMP(
+    #    fr="Nom du fichier DKLib",
+    #    ang="DKLib filename",
+    #    statut="o",
+    #    typ=("Fichier", "DKLib Files (.dklib);;DKZip Files (.dkzip);;All Files ()", "Sauvegarde")),
+    #pattern=SIMP(
+    #   fr="Nom du pattern à utiliser dans le fichier DKLib",
+    #    ang="Name of the pattern to use in the DKLib file",
+    #    statut="o",
+    #    typ="TXM"),
+    rod_bank_names=SIMP(
+        fr=("Nom de la configuration de grappe dans la DKLib pour chaque type "
+            "de matériaux absorbants disponibles dans le modèle sous la forme "
+            "({{{}}}, nom dans la DKLib)").format(", ".join(ROD_COMPOSITIONS)),
+        ang=("Name of the rod cluster configuration in the DKLib file for any "
+             "type of absorbing materials available in the model under the form "
+             "({{{}}}, name in the DKLib)").format(", ".join(ROD_COMPOSITIONS)),
+        statut="o",
+        typ=Tuple(2),
+        # TODO: Check if the first string is ROD_COMPOSITIONS
+        validators=VerifTypeTuple(("TXM", "TXM")),
+        max="**"))
+
+
diff --git a/ReacteurNumerique/toutPetitCata.xsd b/ReacteurNumerique/toutPetitCata.xsd
new file mode 100644 (file)
index 0000000..9c88ba4
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+xmlns="http://chercheurs.edf.com/logiciels/RN_EDG"
+xmlns:RN_EDG="http://chercheurs.edf.com/logiciels/RN_EDG"
+targetNamespace="http://chercheurs.edf.com/logiciels/RN_EDG"
+elementFormDefault="qualified" attributeFormDefault="unqualified" version="0">
+       <xs:simpleType name="AccasAssd">
+               <xs:restriction base="xs:string">
+               </xs:restriction>
+       </xs:simpleType>
+       <xs:simpleType name="T_rod_bank_names_n1_tuple">
+               <xs:restriction base="xs:string"/>
+               </xs:simpleType>
+       <xs:simpleType name="T_rod_bank_names_n2_tuple">
+               <xs:restriction base="xs:string"/>
+               </xs:simpleType>
+       <xs:complexType name="T_rod_bank_names">
+               <xs:sequence>
+                       <xs:element name="n1" type="T_rod_bank_names_n1_tuple" minOccurs="1" maxOccurs="1"/>
+                       <xs:element name="n2" type="T_rod_bank_names_n2_tuple" minOccurs="1" maxOccurs="1"/>
+               </xs:sequence>
+               <xs:attribute name="sdType" type="xs:string" fixed="Tuple"/>
+       </xs:complexType>
+       <xs:complexType name="T_AssemblyDKLibFile" >
+               <xs:sequence>
+                       <xs:element name="rod_bank_names" type="RN_EDG:T_rod_bank_names" minOccurs="1" maxOccurs="unbounded"/>
+               </xs:sequence>
+               <xs:attribute name="sdName" type="xs:string"/>
+               <xs:attribute name="sdType" type="xs:string" fixed="ASSD"/>
+               <xs:attribute name="typeUtilisateur" type="xs:string" fixed="_AssemblyDKLibFile"/>
+       </xs:complexType>
+       <xs:element name="RN_EDG" type="RN_EDG:T_RN_EDG"/>
+               <xs:complexType name="T_RN_EDG">
+                 <xs:choice minOccurs="0" maxOccurs="unbounded">
+                       <xs:element name="AssemblyDKLibFile" type="RN_EDG:T_AssemblyDKLibFile" minOccurs="0" maxOccurs="1">
+                               <xs:annotation>
+                                       <xs:documentation>Description of a fuel assembly DKLib file</xs:documentation>
+                               </xs:annotation>
+                       </xs:element>
+                 </xs:choice>
+               </xs:complexType>
+</xs:schema>
\ No newline at end of file