1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 import sys,logging,contract,Utile.decodage
24 import numpy
25 import planTravail
26 import MediteAppli.utile
27 contract.checkmod(__name__)
28
30 """ Classe qui retourne le resulat obtenu apres comparaison de deux etats """
31 - def __init__(self, pLI, pLS, pLD, pLR, pLgSource, pTextes, pBlocsCommuns, pairesBlocsDepl):
32 self._li = pLI
33 self._ls = pLS
34 self._ld = pLD
35 self._lr = pLR
36 self._lgTexteS = pLgSource
37 self._textes = pTextes
38 self._blocsCom = pBlocsCommuns
39 self._pairesBlocsDepl = pairesBlocsDepl
40
43
46
49
51 """ Renvoie la sous-liste des items de liste compris entre deb et fin
52
53 pre: 0<=deb<fin #<=len(self._textes)
54 post: isinstance(__return__,list)
55 forall([x in __return__],deb<=x[0]<=x[1]<=fin)
56 """
57 res=[]
58 for x in liste:
59 if deb <= x[0] < x[1] <= fin:
60 res.append(x)
61 return res
62
64 return self._filtre(self._ld,0,self._lgTexteS)
65
67 return self._filtre(self._ld,self._lgTexteS,len(self._textes))
68
71
73 return self._filtre(self._lr,0,self._lgTexteS)
74
76 return self._filtre(self._lr,self._lgTexteS,len(self._textes))
77
80
83
86
88 return self._filtre(self._blocsCom,0,self._lgTexteS)
89
91 return self._filtre(self._blocsCom,self._lgTexteS,len(self._textes))
92
94 return self._pairesBlocsDepl
95
97 self._pairesBlocsDepl = liste
98
100 s = u"Type RESULTAT \nInsertions : "
101 for i in self._li:
102 s += unicode(i).encode("iso-8859-2", "replace")+u" / "
103 s += u"\nSuppressions : "
104 for i in self._ls:
105 s += unicode(i).encode("iso-8859-2", "replace")+u" / "
106 s += u"\nDéplacements : "
107 for i in self._ld:
108 s += unicode(i).encode("iso-8859-2", "replace")+u" / "
109 s += "\nRemplacements : "
110 if self._lr != []:
111 for i in self._lr:
112 s += unicode(i).encode("iso-8859-2", "replace")+" / "
113
114
115
116
117 s += "\nBlocs communs : "
118 if self._blocsCom != []:
119 for i in self._blocsCom:
120 s += "["
121 for ii in i:
122
123 s += str(ii)+"/"
124 s +="]"
125 s += "\n lgTexteSource : "+str(self._lgTexteS)
126 sys.stderr.write(unicode(s).encode("iso-8859-2", "replace"))
127 sys.stderr.flush()
128
130 """Retourne le texte correspondant aux listes de blocs"""
131 f = lambda res,l: [res.append(self.getTextesConcatenes()[x[0]:x[1]]) for x in l]
132 def f(res,l):
133 """Fonction anonyme permettant de traiter les paires de blocs déplacés"""
134 for x in l:
135 if isinstance(x,tuple):
136 res.extend(['(', self.getTextesConcatenes()[x[0][0]:x[0][1]],
137 '/',self.getTextesConcatenes()[x[1][0]:x[1][1]],')'])
138 else:
139 res.extend(['(',self.getTextesConcatenes()[x[0]:x[1]],')'])
140 return self.__str(f)
141
143 """Retourne uniquement les listes de blocs"""
144 f = lambda res,l: [res.append(str(x)) for x in l]
145 return "longueur T1="+str(self._lgTexteS)+"\n"+self.__str(f)
146
148 """Fonction privée construisant la chaine à retourner
149
150 f est une fonction concaténant de la manière souhaitée le bloc courant
151
152 pre: callable(f)"""
153 res = ['BC :']
154
155 f(res,self.getBlocsCommuns())
156 res.append('\nDEP: ')
157 f(res,self.getListeDeplacements())
158 res.append('\nPDEP: ')
159 f(res,self.getPairesBlocsDeplaces())
160 res.append('\nSUP: ')
161 f(res,self.getListeSuppressions())
162 res.append('\nINS: ')
163 f(res,self.getListeInsertions())
164 res.append('\nREMP: ')
165 f(res,self.getListeRemplacements())
166 return ''.join(res)
167
169 """Différence symétrique
170
171 Extrait les intervalles de chaque liste présents dans l'un ou l'autre des 2 objets
172 mais pas dans les 2, cad une différence symétrique de chaque liste.
173
174 pre: isinstance(res,Resultat) """
175 assert self.getTextesConcatenes() == res.getTextesConcatenes()
176 assert self.getLgSource() == res.getLgSource()
177 bc = self.__diff_sym(self.getBlocsCommuns(), res.getBlocsCommuns())
178 dep = self.__diff_sym(self.getListeDeplacements(), res.getListeDeplacements())
179 pdep = self.__diff_sym(self.getPairesBlocsDeplaces(), res.getPairesBlocsDeplaces())
180 ins = self.__diff_sym(self.getListeInsertions(), res.getListeInsertions())
181 sup = self.__diff_sym(self.getListeSuppressions(), res.getListeSuppressions())
182 remp = self.__diff_sym(self.getListeRemplacements(), res.getListeRemplacements())
183
184 return Resultat(ins, sup, dep, remp, self.getLgSource(),
185 self.getTextesConcatenes(),bc, pdep)
186
196
198 """Différence: objet courant - res"""
199 assert self.getTextesConcatenes() == res.getTextesConcatenes()
200 assert self.getLgSource() == res.getLgSource()
201 bc = self.__diff(self.getBlocsCommuns(), res.getBlocsCommuns())
202 dep = self.__diff(self.getListeDeplacements(), res.getListeDeplacements())
203 pdep = self.__diff(self.getPairesBlocsDeplaces(), res.getPairesBlocsDeplaces())
204 ins = self.__diff(self.getListeInsertions(), res.getListeInsertions())
205 sup = self.__diff(self.getListeSuppressions(), res.getListeSuppressions())
206 remp = self.__diff(self.getListeRemplacements(), res.getListeRemplacements())
207
208 return Resultat(ins, sup, dep, remp, self.getLgSource(),
209 self.getTextesConcatenes(),bc, pdep)
217
219 - def __init__(self, pLI, pLS, pLD, pLR, pLgSource, pTextes, pBlocsCommuns, pairesBlocsDepl):
227
229 if isinstance(liste,list):
230 tab = numpy.array(liste)
231 else: tab = liste
232 return tab
233
235 return self._li.tolist()
237 return self._ls.tolist()
239 return self._ld.tolist()
241 return self._filtre(self._ld,0,self._lgTexteS)
243 return self._filtre(self._ld,self._lgTexteS,len(self._textes))
245 return self._lr.tolist()
247 return self._filtre(self._lr,0,self._lgTexteS)
249 return self._filtre(self._lr,self._lgTexteS,len(self._textes))
251 return self._blocsCom.tolist()
253 return self._filtre(self._blocsCom,0,self._lgTexteS)
255 return self._filtre(self._blocsCom,self._lgTexteS,len(self._textes))
257 return self._pairesBlocsDepl.tolist()
260
309
369
370
384