From 3b04d1e69e8021893f6b53a6350ec76e077971d0 Mon Sep 17 00:00:00 2001 From: PASCALE NOYRET Date: Mon, 16 May 2022 09:26:54 +0200 Subject: [PATCH] correction bug bloc imbrique --- Efi2Xsd/AccasXsd.py | 167 +++++++++++++++++++++++--------------------- 1 file changed, 87 insertions(+), 80 deletions(-) diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index aff2c51b..8279ecbe 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -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 -- 2.39.2