]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
correction bug bloc imbrique
authorPASCALE NOYRET <pascale.noyret@edf.fr>
Mon, 16 May 2022 07:26:54 +0000 (09:26 +0200)
committerPASCALE NOYRET <pascale.noyret@edf.fr>
Mon, 16 May 2022 07:26:54 +0000 (09:26 +0200)
Efi2Xsd/AccasXsd.py

index aff2c51bc6f1ea42e2e878f32f9fe0a33fe2c251..8279ecbe6092ae0d811c17cdd0bfd91dcb23339b 100755 (executable)
@@ -343,8 +343,6 @@ class X_compoFactoriseAmbigu(X_definition):
         else :
             declencheChoiceAvecSeqVid=False
             #min=1
-        
-
 
         for ligne in laListe :
             if ligne[0] in aReduire.keys():
@@ -355,7 +353,7 @@ class X_compoFactoriseAmbigu(X_definition):
                 else : aReduire[ligne[0]]=[ligne[1:],]
 
 
-        if debug : print ('la Liste', laListe, declencheChoiceAvecSeqVid)
+        if debug : print ('la Liste', laListe, 'declencheChoiceAvecSeqVid : ',declencheChoiceAvecSeqVid)
         if debug : print (aReduire)
         if len(aReduire.keys()) == 1 :
             if declencheChoiceAvecSeqVid == False :
@@ -375,6 +373,7 @@ class X_compoFactoriseAmbigu(X_definition):
             creeChoice=True
             creeSequence=False
 
+        if debug : print ('self.texteComplexe', self.texteComplexe)
         if debug : print ('creeSequence', creeSequence, aReduire)
         for nomMC in aReduire.keys():
             if debug : print ('--------------------------------------------- boucle for', nomMC, aReduire[nomMC])
@@ -387,10 +386,8 @@ class X_compoFactoriseAmbigu(X_definition):
             aTraiter=listeSuivante
             while len(aTraiter) == 1 and isinstance(aTraiter[0],list): aTraiter=aTraiter[0]
             if debug : print ('aTraiter', aTraiter)
-            if len(aTraiter) == 1 :
-                self.ajouteAuxTextes(aTraiter[0],indent)
-            else : 
-                for mc in aTraiter : self.ajouteAuxTextes(mc, indent)
+            if len(listeSuivante) == 1 : self.ajouteAuxTextes(listeSuivante[0],indent)
+            else : self.factoriseEtCreeDump(listeSuivante, indent+int(creeSequence),nomMC)
             if creeChoice   : indent=indent -1 ; self.texteComplexe += '\t'*(indent) + finSequenceDsBloc
             if debug : print ('--------------------------------------------- fin boucle for', nomMC)
 
@@ -411,10 +408,9 @@ class X_compoFactoriseAmbigu(X_definition):
 
 
     def ajouteAuxTextes(self,nomMC,indent,debug=False) :
-        #if nomMC == 'radial_meshing' : debug =True
         if debug : 
-           print ('______________________________________________________')
-           print ('ajouteAuxTextes', nomMC, self.nom)
+            print ('______________________________________________________')
+            print ('ajouteAuxTextes', nomMC, self.nom)
  
         #  for i in self.entites.keys() : print (self.entites[i][0].nom)
         if (indent  > 3) : indent = indent - 3
@@ -422,10 +418,19 @@ class X_compoFactoriseAmbigu(X_definition):
         # PN change le 17 fevrier . Est-ce normal  d arriver la ?
         # if faut traiter les Blocs exclusifs qui donnent des choices de sequences
         # mais celles-ci risquent d etre ambigues
+
+        if nomMC==[] : return
+        # on a un niveau de liste par niveau de bloc imbrique
+        # voir cata_UQ
         while (isinstance(nomMC,list)) :
             if nomMC==[] : return
-            nomMC=nomMC[0]
+            if len(nomMC) ==1 : nomMC = nomMC[0]
+            elif isinstance(nomMC[0],list) : nomMC = nomMC[0]
+            else : 
+                for mc in nomMC : self.ajouteAuxTextes(mc, indent,debug)
+                return
 
+        if debug : print ('ajouteAuxTextes apresWhile', nomMC)
         if nomMC == 'Consigne' or nomMC == 'blocConsigne' : return
         #if debug : print (nomMC, 'dans ajoute vraiment aux textes', self.entites )
         if debug : print (nomMC, 'dans ajoute vraiment aux textes' )
@@ -446,33 +451,35 @@ class X_compoFactoriseAmbigu(X_definition):
 
         # cas des matrices : 
         if (self.entites[nomMC][0].label == 'SIMP') and hasattr (self.entites[nomMC][0].type[0], 'typElt') : 
-           typeEltMatrice=self.entites[nomMC][0].type[0].typElt
-           memeElt=1
-           nbColsMin=self.entites[nomMC][0].type[0].nbCols
-           nbColsMax=self.entites[nomMC][0].type[0].nbCols
-           nbLigsMin=self.entites[nomMC][0].type[0].nbLigs
-           nbLigsMax=self.entites[nomMC][0].type[0].nbLigs
-           for e in (self.entites[nomMC][1:]) :
-               if not (hasattr(e.type[0], 'typElt')) : 
-                   print ('Projection XSD impossible, changez un des ', nomMC)
-                   print ('melange de matrice et de non matrice')
-                   exit()
-               if not (e.type[0].typElt == typeEltMatrice) : memeElt=O 
-               else :
-                  if nbColsMin > e.type[0].nbCols : nbColsMin = e.type[0].nbCols
-                  if nbColsMax < e.type[0].nbCols : nbColsMax = e.type[0].nbCols
-                  if nbLigsMin > e.type[0].nbLigs : nbLigsMin = e.type[0].nbLigs
-                  if nbLigsMax < e.type[0].nbLigs : nbLigsMax = e.type[0].nbLigs
-           if debug and memeElt : print ('memeElt : ', memeElt)
-           if memeElt : self.fusionneDesMatricesDeMemeType(nomMC,nbColsMin,nbColsMax,nbLigsMin,nbLigsMax)
-           else : self.fusionneDesMatrices(self,nomMC)
-           if debug : print ('fin fusion des matrices')
-           return
+            typeEltMatrice=self.entites[nomMC][0].type[0].typElt
+            memeElt=1
+            nbColsMin=self.entites[nomMC][0].type[0].nbCols
+            nbColsMax=self.entites[nomMC][0].type[0].nbCols
+            nbLigsMin=self.entites[nomMC][0].type[0].nbLigs
+            nbLigsMax=self.entites[nomMC][0].type[0].nbLigs
+            for e in (self.entites[nomMC][1:]) :
+                if not (hasattr(e.type[0], 'typElt')) : 
+                    print ('Projection XSD impossible, changez un des ', nomMC)
+                    print ('melange de matrice et de non matrice')
+                    exit()
+                if not (e.type[0].typElt == typeEltMatrice) : memeElt=O 
+                else :
+                    if nbColsMin > e.type[0].nbCols : nbColsMin = e.type[0].nbCols
+                    if nbColsMax < e.type[0].nbCols : nbColsMax = e.type[0].nbCols
+                    if nbLigsMin > e.type[0].nbLigs : nbLigsMin = e.type[0].nbLigs
+                    if nbLigsMax < e.type[0].nbLigs : nbLigsMax = e.type[0].nbLigs
+            if debug and memeElt : print ('memeElt : ', memeElt)
+            if memeElt : self.fusionneDesMatricesDeMemeType(nomMC,nbColsMin,nbColsMax,nbLigsMin,nbLigsMax)
+            else : self.fusionneDesMatrices(self,nomMC)
+            if debug : print ('fin fusion des matrices')
+            return
 
         
         # cette boucle ne fonctionne que pour des SIMP
         resteATraiter=copy(self.entites[nomMC])
-        #print ('________resteATraiter', resteATraiter)
+        if debug :
+           print ('________ calcul des unions resteATraiter', resteATraiter)
+           for i in resteATraiter : print (i.nom)
         listePourUnion=[]
         first=1
         while resteATraiter != [] :
@@ -504,14 +511,14 @@ class X_compoFactoriseAmbigu(X_definition):
                 for mcFrere in self.entites[nomMC][index:]:
                     ok = mc.isDisjoint(mcFrere) 
                     if not ok : 
-                       sontTousDisjoint=False
-                       break
+                        sontTousDisjoint=False
+                        break
                 if not(sontTousDisjoint) : break 
                 index+=1
             if not sontTousDisjoint: 
-               print ('2 blocs freres ont le meme nom et ne sont pas disjoints : pas encore traite')
-               print ('Projection XSD impossible, changez un des ', nomMC)
-               exit()
+                print ('2 blocs freres ont le meme nom et ne sont pas disjoints : pas encore traite')
+                print ('Projection XSD impossible, changez un des ', nomMC)
+                exit()
             self.fusionneDsUnChoix(nomMC,indent)
             #if debug : print ('self.nom', self.nom)
             #if debug : print ('self.texteComplexe' , self.texteComplexe)
@@ -575,9 +582,9 @@ class X_compoFactoriseAmbigu(X_definition):
         mcRef= self.entites[nomMC][0]
         # max = 1 : a priori les choix sont exclusifs
         if (hasattr (mcRef, 'aDejaEteDumpe')) : 
-          self.texteComplexe += '\t'*(indent) + mcRef.texteElt
-          if debug : print ("je passe la NORMALEMENT car j ai deja ete dumpe, j ajoute juste l elt")
-          return
+            self.texteComplexe += '\t'*(indent) + mcRef.texteElt
+            if debug : print ("je passe la NORMALEMENT car j ai deja ete dumpe, j ajoute juste l elt")
+            return
         leNomDuTypePyxb  = mcRef.definitNomDuTypePyxb(forceACreer=True)
         if debug : print ('nomMC', nomMC)
         i=0
@@ -632,8 +639,8 @@ class X_compoFactoriseAmbigu(X_definition):
         typeDeMatrice =elt.type[0]
         elt.dumpXsd(dansFactorisation=True)
         if debug : 
-           #print ('fusionneDesMatricesDeMemeType self.texteSimple avant', self.texteSimple)
-           print ('fusionneDesMatricesDeMemeType self.texteComplexe avant', self.texteComplexe)
+            #print ('fusionneDesMatricesDeMemeType self.texteSimple avant', self.texteSimple)
+            print ('fusionneDesMatricesDeMemeType self.texteComplexe avant', self.texteComplexe)
 # if 
         self.texteSimple  += debutSimpleType.format(elt.nomDuTypePyxb+'_element')
         self.texteSimple  += debutRestrictionBase.format(elt.nomDuTypeDeBase)
@@ -712,10 +719,10 @@ class X_definitionComposee (X_definition):
             self.texteComplexe += debutTypeCompoSeq
             texteComplexeVenantDesFils= self.creeTexteComplexeVenantDesFils(dansFactorisation)
             if not dansFactorisationDeFusion : 
-               self.texteComplexe  = texteComplexeVenantDesFils + self.texteComplexe
-               self.texteComplexeVenantDesFils  = ''
+                self.texteComplexe  = texteComplexeVenantDesFils + self.texteComplexe
+                self.texteComplexeVenantDesFils  = ''
             else : 
-               self.texteComplexeVenantDesFils  = texteComplexeVenantDesFils 
+                self.texteComplexeVenantDesFils  = texteComplexeVenantDesFils 
             # la fin de l oper est traitee dans le dumpXSD de X_OPER
             if not isinstance(self,X_OPER ) : self.texteComplexe += finTypeCompoSeq
             if isinstance(self,X_PROC) and avecEltAbstrait      : self.texteComplexe += finTypeCompoEtape
@@ -1019,17 +1026,17 @@ class X_SIMP (X_definition):
         if dansFactorisation : minOccurs = 1
 
         if self.suisUneMatrice :
-           if dansFactorisation : return
-           self.dumpSpecifiqueMatrice(minOccurs)
-           return
+            if dansFactorisation : return
+            self.dumpSpecifiqueMatrice(minOccurs)
+            return
 
         if self.suisUnTuple :
-           self.dumpSpecifiqueTuple(minOccurs)
-           return
+            self.dumpSpecifiqueTuple(minOccurs)
+            return
 
         if self.avecBlancs and self.max > 1 :
-           self.dumpSpecifiqueTexteAvecBlancs(minOccurs,multiple)
-           return
+            self.dumpSpecifiqueTexteAvecBlancs(minOccurs,multiple)
+            return
 
         #print ('minOccurs',minOccurs)
         # le defaut est dans l elt Name -> tester la coherence d existence avec Accas
@@ -1043,13 +1050,13 @@ class X_SIMP (X_definition):
             if self.ang != '' : texteAide = self.ang
             else : texteAide = self.fr
             if self.intoXML and self.into :
-               if self.intoXML != self.into :
-                  #print ('je passe la pour ', self.nom)
-                  texteAide =  texteAide+'\nPossible choices for '+ self.nom + 'at this place : \n'+str(self.into)+'\n'
+                if self.intoXML != self.into :
+                    #print ('je passe la pour ', self.nom)
+                    texteAide =  texteAide+'\nPossible choices for '+ self.nom + 'at this place : \n'+str(self.into)+'\n'
 
             if self.defaut :
-               if debug : print ('j ai un defaut')
-               if self.max > 1 or self.max == '**' or self.max ==  float('inf') : 
+                if debug : print ('j ai un defaut')
+                if self.max > 1 or self.max == '**' or self.max ==  float('inf') : 
                     txtDefaut=""
                     for val in self.defaut : txtDefaut+=str(val) + " " 
                     # cela ne fonctionne pas tres bien. a revoir
@@ -1061,15 +1068,15 @@ class X_SIMP (X_definition):
                     else :
                         texteAide +=  texteAide+'\ndefault Value in MDM : \n'+txtDefaut
                         self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,texteAide)
-               else :
+                else :
                     if str(self.defaut)   == 'True'  : txtDefaut = 'true'
                     elif str(self.defaut) == 'False' : txtDefaut = 'false'
                     else : txtDefaut = str(self.defaut)
                     if texteAide != ''  : self.texteElt = eltDsSequenceWithDefautAndHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut,texteAide)
                     else : self.texteElt = eltDsSequenceWithDefaut.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,txtDefaut)
             else :
-               if texteAide  != '' : self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,texteAide)
-               else : self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1)
+                if texteAide  != '' : self.texteElt = eltDsSequenceWithHelp.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1,texteAide)
+                else : self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,minOccurs,1)
         elif first:
             # l'aide est geree a la fusion 
             self.texteElt = eltDsSequence.format(self.nom,self.code,self.nomDuTypePyxb,1,1)
@@ -1092,15 +1099,15 @@ class X_SIMP (X_definition):
             if typeATraduire.__name__  not in cata.listeUserASSDDumpes :
                 cata.listeUserASSDDumpes.add(typeATraduire.__name__)
                 if issubclass(typeATraduire, Accas.UserASSDMultiple) : 
-                   self.texteSimplePart1 = defUserASSDMultiple.format(typeATraduire.__name__)
-                   if cata.definitUserASSDMultiple == False  :
-                      cata.definitUserASSDMultiple = True
-                      cata.texteSimple = cata.texteSimple + defBaseXSDUserASSDMultiple
+                    self.texteSimplePart1 = defUserASSDMultiple.format(typeATraduire.__name__)
+                    if cata.definitUserASSDMultiple == False  :
+                        cata.definitUserASSDMultiple = True
+                        cata.texteSimple = cata.texteSimple + defBaseXSDUserASSDMultiple
                 else :
-                   self.texteSimplePart1 = defUserASSD.format(typeATraduire.__name__)
-                   if cata.definitUserASSD == False  :
-                      cata.definitUserASSD = True
-                      cata.texteSimple = cata.texteSimple + defBaseXSDUserASSD
+                    self.texteSimplePart1 = defUserASSD.format(typeATraduire.__name__)
+                    if cata.definitUserASSD == False  :
+                        cata.definitUserASSD = True
+                        cata.texteSimple = cata.texteSimple + defBaseXSDUserASSD
             if typeATraduire.__name__+'_'+suffixe not in cata.listeUserASSDDumpes :
                 cata.texteSimple = cata.texteSimple + defUserASSDOrUserASSDMultiple.format(typeATraduire.__name__, suffixe,typeATraduire.__name__)
                 cata.listeUserASSDDumpes.add(typeATraduire.__name__+'_'+suffixe)
@@ -1171,11 +1178,11 @@ class X_SIMP (X_definition):
             if self.intoXML != None : into = self.intoXML
             else : into = self.into
             if into  == None :
-               self.texteSimple += typeEltChaineAvecBlancSansInto.format(self.nomDuTypePyxb)
+                self.texteSimple += typeEltChaineAvecBlancSansInto.format(self.nomDuTypePyxb)
             else : 
-               self.texteSimple += debutChaineAvecBlancsInto.format(self.nomDuTypePyxb)
-               for val in into : self.texteSimple += milieuChaineAvecBlancsInto.format(val)
-               self.texteSimple += finChaineAvecBlancsInto
+                self.texteSimple += debutChaineAvecBlancsInto.format(self.nomDuTypePyxb)
+                for val in into : self.texteSimple += milieuChaineAvecBlancsInto.format(val)
+                self.texteSimple += finChaineAvecBlancsInto
            
         
     def dumpSpecifiqueTuple(self,minOccurs):
@@ -1190,7 +1197,7 @@ class X_SIMP (X_definition):
         for leTypeComp in self.nomDuTypeDeBase[1:] :
             if leTypeComp != leType : 
                 tousPareil = False
-                break;
+                break
         #if tousPareil :
         #PN PN a statuer
         #    self.texteSimple  += debutSimpleType.format(self.nomDuTypePyxb)
@@ -1272,7 +1279,7 @@ class X_SIMP (X_definition):
                 # a Reprendre
                 typeATraduire = self.validators.typeDesTuples[i]
                 if not (typeATraduire in list(dictNomsDesTypes.keys())) :
-                   enRetour.append('AccasAssd')
+                    enRetour.append('AccasAssd')
                 else : 
                     enRetour.append(dictNomsDesTypes[self.validators.typeDesTuples[i]])
             return enRetour
@@ -1554,9 +1561,9 @@ class X_JDC_CATA :
             self.texteCata   += c.texteElt
 
     def dumpSimpleDesCommandes(self):
-       self.texteCata  = eltCataSimple.format(self.code, self.code, self.code, self.code)
-       # on remplace les extensions par rien
-       for c in  self.commandes :
+        self.texteCata  = eltCataSimple.format(self.code, self.code, self.code, self.code)
+        # on remplace les extensions par rien
+        for c in  self.commandes :
             c.nomDuCodeDumpe=self.nomDuCodeDumpe
             c.code=self.implement
             c.dumpXsd(avecEltAbstrait=False)
@@ -1566,5 +1573,5 @@ class X_JDC_CATA :
             elif c.fr != '' : c.texteElt = eltEtapeSimpleWithHelp.format(c.nom,self.implement,c.nomDuTypePyxb,0,1,c.fr)
             else : c.texteElt = eltEtapeSimple.format(c.nom,self.implement,c.nomDuTypePyxb,0,1)
             self.texteCata  += c.texteElt
-       self.texteCata += finEltCataSimple 
+        self.texteCata += finEltCataSimple