self.mcXSD=[]
self.ordre_mc=[]
self.mcDejaDumpe=set()
- #print (listeDeCreation)
- for (mc, index) in listeDeCreation :
+ for mc in listeDeCreation :
self.mcXSD.append(mc)
self.ordre_mc.append(mc.nom)
- #self.mcXSD=list(deepcopy(self.ordre_mc))
- #for i in self.entites : print (i,self.entites[i])
- #print ('creation de X_compoFactoriseAmbigu', self.nom, self.mcXSD)
+
self.construitEntites(self.mcXSD)
self.constructionArbrePossibles()
lesPossibles=deepcopy(self.arbrePossibles)
mc=self.entites[nomMC]
self.mcXSD.append(mc)
mc.prepareDumpXSD()
- self.chercheListesDeBlocsNonDisjointsAvecIndex()
- #print (self.listeDesBlocsNonDisjointsAvecIndex)
- for l in list(self.listeDesBlocsNonDisjointsAvecIndex) :
- #print ('je traite ', l, self.besoinDeFactoriserTrivial(l))
- if not(self.besoinDeFactoriserTrivial(l)) : self.listeDesBlocsNonDisjointsAvecIndex.remove(l)
+ self.chercheListesDeBlocsNonDisjoints()
+ for l in list(self.listeDesBlocsNonDisjoints) :
+ if not(self.besoinDeFactoriserTrivial(l)) : self.listeDesBlocsNonDisjoints.remove(l)
else : self.factorise(l)
- #print (self.aUnPremierCommunDansLesPossibles(l))
- #if self.aUnPremierCommunDansLesPossibles(l) :
- # print ('aUnCommunDansLesPossibles --> Factorisation')
- #else : self.listeDesBlocsNonDisjointsAvecIndex.remove(l)
- # trouver un cas test
-
- def chercheListesDeBlocsNonDisjointsAvecIndex(self):
- self.listeDesBlocsNonDisjointsAvecIndex=[]
- index=-1
+
+ def chercheListesDeBlocsNonDisjoints(self):
+ self.listeDesBlocsNonDisjoints=[]
for nomChild in self.ordre_mc :
child=self.entites[nomChild]
- index=index+1
if child.label != 'BLOC' : continue
- if self.listeDesBlocsNonDisjointsAvecIndex == [] :
- self.listeDesBlocsNonDisjointsAvecIndex.append([(child,index),])
+ if self.listeDesBlocsNonDisjoints == [] :
+ self.listeDesBlocsNonDisjoints.append([child])
continue
vraimentIndependant=True
- for liste in list(self.listeDesBlocsNonDisjointsAvecIndex):
+ for liste in list(self.listeDesBlocsNonDisjoints):
independant=True
- for (bloc,indInListe) in liste :
- if bloc.isDisjoint(child) : continue
+ for bloc in liste :
+ if bloc.isDisjoint(child) : continue
if bloc.estLeMemeQue(child) : continue
independant=False
vraimentIndependant=False
if not (independant) :
- liste.append((child, index))
+ liste.append(child)
if vraimentIndependant:
- self.listeDesBlocsNonDisjointsAvecIndex.append([(child,index),])
+ self.listeDesBlocsNonDisjoints.append([child])
# on nettoye la liste des blocs tous seuls
- for l in list(self.listeDesBlocsNonDisjointsAvecIndex) :
- if len(l) ==1 : self.listeDesBlocsNonDisjointsAvecIndex.remove(l)
+ for l in list(self.listeDesBlocsNonDisjoints) :
+ if len(l) ==1 : self.listeDesBlocsNonDisjoints.remove(l)
def estLeMemeQue(self,autreMC):
if hasattr(self,'nomXML') and hasattr(autreMC,'nomXML') and self.nomXML==autreMC.nomXML and self.nomXML != None: return True
def besoinDeFactoriserTrivial(self,laListe):
besoin=False
lesPremiers=set()
- for mcBloc,indice in laListe :
+ for mcBloc in laListe :
mc=mcBloc.mcXSD[0]
- if mc.label == 'BLOC': return True
- if not(mc.statut=='o') : return True
- if mc.nom in lesPremiers : return True
+ if mc.label == 'BLOC' : return True
+ if not(mc.statut=='o') : return True
+ if mc.nom in lesPremiers : return True
lesPremiers.add(mc.nom)
return False
def factorise(self,liste):
self.listeConstruction=liste
- #print ('liste-------',liste)
- #print ( self.mcXSD )
- #indexDebut=liste[0][1]
- nomDebut=liste[0][0].nom
- indexDebut=self.mcXSD.index(liste[0][0])
- #indexFin=liste[-1][1]+1
- nomFin=liste[-1][0].nom
- indexFin=self.mcXSD.index(liste[-1][0]) + 1
+ nomDebut=liste[0].nom
+ indexDebut=self.mcXSD.index(liste[0])
+ nomFin=liste[-1].nom
+ indexFin=self.mcXSD.index(liste[-1]) + 1
nom=nomDebut+'_'+nomFin
listeAFactoriser=[]
for i in range(indexDebut, indexFin) :
- listeAFactoriser.append((self.mcXSD[i],i))
+ listeAFactoriser.append(self.mcXSD[i])
newListe=self.mcXSD[0:indexDebut]
- #print (newListe, newListe.__class__)
- #print ('je factorise dans -->', self.nom)
+
monEltFacteur=X_compoFactoriseAmbigu(nom,listeAFactoriser,self)
+
newListe.append(monEltFacteur)
newListe=newListe+self.mcXSD[indexFin:]
self.mcXSD=newListe
- #print (self.mcXSD)
- #for i in self.mcXSD : print (i.nom)
def construitTousLesFils(self):
for nomChild in self.ordre_mc :