grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026o ®û|jlEã@s< gd¢ZddlmZddlmZddlmZeddƒZ dd„Z Gd d „d ƒZ d9d d„Z dd„Z Gdd„dƒZddlZe d¡jfdd„Zd:dd„Zdd„Z  d;dd„Zd d!„Z  d;d"d#„Zd$d%„Z & 'dr3r?r@ÚxÚi1Új1Zk1Z non_adjacentÚi2Új2Zk2rrrÚget_matching_blocks¥s<  õ  z#SequenceMatcher.get_matching_blockscCs² |jdur |jSd}}g|_}| ¡D]@\}}}d}||kr(||kr(d}n ||kr/d}n||kr5d}|rA| |||||f¡||||}}|rV| d||||f¡q|S)Nr rÚreplaceÚdeleteÚinsertÚequal)r#rPr,)rr3r?ZanswerÚaiÚbjÚsizeÚtagrrrÚ get_opcodesìs(  €zSequenceMatcher.get_opcodeséc csp� | ¡}|s dg}|dddkr/|d\}}}}}|t|||ƒ|t|||ƒ|f|d<|dddkrS|d\}}}}}||t|||ƒ|t|||ƒf|d<||}g} |D]C\}}}}}|dkr”|||kr”|  ||t|||ƒ|t|||ƒf¡| Vg} t|||ƒt|||ƒ}}|  |||||f¡q[| r´t| ƒdkr¯| dddks¶| VdSdSdS)N)rTr r(r r(r rTéÿÿÿÿr()rYÚmaxÚminr,r1) rr6ZcodesrXrLrNrMrOZnnÚgrouprrrÚget_grouped_opcodes#s.€&&(  ÿz#SequenceMatcher.get_grouped_opcodescCs2 tdd„| ¡Dƒƒ}t|t|jƒt|jƒƒS)Ncss�|]}|dVqdS)r[Nr)Ú.0ZtriplerrrÚ ks€z(SequenceMatcher.ratio..)ÚsumrPrr1rr)rrrrrÚratioUszSequenceMatcher.ratiocCs¬ |jduri|_}|jD] }| |d¡d||<q|j}i}|jd}}|jD]}||ƒr4||}n| |d¡}|d||<|dkrH|d}q)t|t|jƒt|jƒƒSr7)r$rr:r8rrr1)rr$r4ZavailZavailhasrZnumbrrrÚ quick_rations"       €zSequenceMatcher.quick_ratiocCs, t|jƒt|jƒ}}tt||ƒ||ƒSr)r1rrrr])rrHrIrrrÚreal_quick_ratio‹sz SequenceMatcher.real_quick_ratio)NrrT)r Nr N)rZ)Ú__name__Ú __module__Ú __qualname__rrr r!r%rArPrYr_rcrdreÚ classmethodrÚ__class_getitem__rrrrr,s J@ , 'tG 72 rrZç333333ã?cCs² |dks td|fƒ‚d|krdksntd|fƒ‚g}tƒ}| |¡|D]"}| |¡| ¡|krL| ¡|krL| ¡|krL| | ¡|f¡q*t||ƒ}dd„|DƒS)Nr zn must be > 0: %rgrz cutoff must be in [0.0, 1.0]: %rcSsg|]\}}|‘qSrr)r`ZscorerKrrrÚ Èóz%get_close_matches..) Ú ValueErrorrr!r rerdrcr,Ú _nlargest)ZwordZ possibilitiesr6ÚcutoffÚresultÚsrKrrrršs"     € rcCs d dd„t||ƒDƒ¡S)Nrcss,�|]\}}|dkr| ¡r|n|VqdS)ú N)Úisspace)r`ÚcZtag_crrrraÍs €ÿ ÿz$_keep_original_ws..)ÚjoinÚzip)rrZtag_srrrÚ_keep_original_wsËs þrxc@sHeZdZ ddd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dS)rNcCs ||_||_dSr©ÚlinejunkÚcharjunk)rrzr{rrrr*s zDiffer.__init__c cs²� t|j||ƒ}| ¡D]I\}}}}}|dkr#| ||||||¡} n.|dkr0| d|||¡} n!|dkr=| d|||¡} n|dkrJ| d|||¡} ntd|fƒ‚| EdHq dS) NrQrRú-rSú+rTrsúunknown tag %r)rrzrYÚ_fancy_replaceÚ_dumprn) rrrÚcruncherrXr;r<r=r>ÚgrrrÚcompareAs€ ôzDiffer.compareccs*� t||ƒD] }d|||fVqdS)Nz%s %s)r9)rrXrKÚloÚhir3rrrr€js €ÿz Differ._dumpc csp�||||kr| d|||¡}| d|||¡}n| d|||¡}| d|||¡}||fD]} | EdHq.dS)Nr}r|)r€) rrr;r<rr=r>ÚfirstÚsecondr‚rrrÚ_plain_replaceos€  ÿzDiffer._plain_replaceccs2� d\}}t|jƒ} d\} } t||ƒD]F} || } |  | ¡t||ƒD]5}||}|| kr8| dur7|| } } q$|  |¡|  ¡|krY|  ¡|krY|  ¡|krY|  ¡|| }}}q$q||kr{| durr| ||||||¡EdHdS| | d}}}nd} |  ||||||¡EdH||||}}| du�rd}}|   ||¡|   ¡D]N\}}}}}||||}}|dkrÇ|d|7}|d|7}q¦|dkrÒ|d|7}q¦|d krÝ|d |7}q¦|d krî|d |7}|d |7}q¦t d |fƒ‚|  ||||¡EdHnd|V|  ||d|||d|¡EdHdS)N)g®Gáz®ç?gè?©NNrrrQú^rRr|rSr}rTrsr~ú r()rr{r9r!r rerdrcrˆÚ _fancy_helperrrYrnÚ_qformat)rrr;r<rr=r>Z best_ratiorpr�ZeqiZeqjr?rVr3rUZbest_iZbest_jZaeltZbeltÚatagsÚbtagsrXZai1Zai2Zbj1Zbj2rHrIrrrr}s`€       €ð     &zDiffer._fancy_replaceccsd�g}||kr||kr| ||||||¡}n| d|||¡}n ||kr+| d|||¡}|EdHdS)Nr|r})rr€)rrr;r<rr=r>r‚rrrrŒÛs€zDiffer._fancy_helperccs`� t||ƒ ¡}t||ƒ ¡}d|V|rd|›d�Vd|V|r.d|›d�VdSdS)Nú- z? Ú ú+ )rxÚrstrip)rZalineZblinerŽr�rrrr�çs€  ÿzDiffer._qformatr‰) rfrgrhrrƒr€rˆrrŒr�rrrrrÔs U)^ rNz \s*(?:#\s*)?$cCs ||ƒduSrr)ÚlineZpatrrrrs rú cCs ||vSrr)ZchZwsrrrr%srcCs< |d}||}|dkrd |¡S|s|d8}d ||¡S©Nr(z{}z{},{}©Úformat©ÚstartÚstopZ beginningrrrrÚ_format_range_unified<s  rœrr‘ccsL� t|||||||ƒd}td||ƒ |¡D]Œ} |s?d}|r$d |¡nd} |r-d |¡nd} d || |¡Vd || |¡V| d| d} } t| d | d ƒ}t| d | d ƒ}d  |||¡V| D]>\}}}}}|dkr~|||…D]}d|Vquqd|dvr�|||…D]}d|Vqˆ|dvr¢|||…D]}d|VqšqdqdS)NFTú {}rú --- {}{}{}z +++ {}{}{}r r[r(érZéz@@ -{} +{} @@{}rTrs>rRrQr|>rSrQr})Ú _check_typesrr_r˜rœ)rrÚfromfileÚtofileÚ fromfiledateÚ tofiledater6ÚlinetermÚstartedr^ÚfromdateÚtodater†ÚlastÚ file1_rangeÚ file2_rangerXrLrNrMrOr”rrrr Gs:€'   €öór cCsD |d}||}|s|d8}|dkrd |¡Sd |||d¡Sr–r—r™rrrÚ_format_range_context�s r­ccsŒ� t|||||||ƒtddddd�}d} td||ƒ |¡D]¤} | sGd} |r,d |¡nd } |r5d |¡nd } d  || |¡Vd  || |¡V| d | d } }d|Vt| d|dƒ}d ||¡Vtdd„| DƒƒrŒ| D]\}}}}}|dkr‹|||…D] }|||Vq�qpt| d|dƒ}d ||¡Vtdd„| DƒƒrÃ| D]\}}}}}|dkrÂ|||…D] }|||Vq¸q§qdS)Nr’r�z! r‹)rSrRrQrTFTr�rz *** {}{}{}ržr r[z***************r(rŸz *** {} ****{}csó"�|] \}}}}}|dvVqdS)>rRrQNr©r`rXÚ_rrrraÙó€ zcontext_diff..rSrZr z --- {} ----{}csr®)>rSrQNrr¯rrrraâr±rR)r¡Údictrr_r˜r­Úany)rrr¢r£r¤r¥r6r¦Úprefixr§r^r¨r©r†rªr«rXrLrNr°r”r¬rMrOrrrrœs>€* €€årcGs†|rt|dtƒstdt|dƒj|dfƒ‚|r0t|dtƒs0tdt|dƒj|dfƒ‚|D]}t|tƒs@td|fƒ‚q2dS)Nr z)lines to compare must be str, not %s (%r)z"all arguments must be str, not: %r)Ú isinstanceÚstrÚ TypeErrorÚtyperf)rrÚargsÚargrrrr¡èsÿÿ ÿÿr¡óó c cs‚� dd„} tt| |ƒƒ}tt| |ƒƒ}| |ƒ}| |ƒ}| |ƒ}| |ƒ}| |ƒ}|||||||||ƒ} | D] } |  dd¡Vq5dS)Nc SsDz| dd¡WSty!}zdt|ƒj|f}t|ƒ|‚d}~ww)NÚasciiÚsurrogateescapez(all arguments must be bytes, not %s (%r))ÚdecodeÚAttributeErrorr¸rfr·)rrÚerrÚmsgrrrr¿s ÿ €ýzdiff_bytes..decoder½r¾)rErFÚencode) Zdfuncrrr¢r£r¤r¥r6r¦r¿Úlinesr”rrrr ùs€ ÿr cCs t||ƒ ||¡Sr)rrƒ)rrrzr{rrrrs"rc#sˆ� ddl}| d¡‰t||||ƒ‰ddgf‡fdd„ ‰‡‡fdd„‰‡fdd„}|ƒ}|dur7|EdHdS|d 7}d} ddg|} } d } | d ursz t|ƒ\} } } Wn ty_YdSw| |}| | | f| |<| d 7} | d usL| |kr}d V|}n| }d} |r–| |}| d 7} | |V|d 8}|sƒ|d }z|r·t|ƒ\} } } | r«|d }n|d 8}| | | fV|s�Wn tyÂYdSwq>) Nr z (\++|\-+|\^+)c sø ||d7<|dur||| d¡dd…fS|dkra| d¡| d¡}}g}|fdd„}ˆ ||¡t|ƒD]\}\} } |d| …d||| | …d|| d…}q;|dd…}n| d¡dd…}|snd }d||d}|||fS) Nr(r rŸú?cSs&| | d¡d| ¡g¡| d¡S)Nr(r )r,r^Úspan)Z match_objectÚsub_inforrrÚrecord_sub_info‡s z3_mdiff.._make_line..record_sub_infoúúrs)rCÚsubÚreversed) rÄZ format_keyÚsideZ num_linesÚtextZmarkersrÇrÈÚkeyZbeginÚend)Ú change_rerrÚ _make_linefs"  2 z_mdiff.._make_linec3s`� g}d\}} t|ƒdkr| tˆdƒ¡t|ƒdksd dd„|Dƒ¡}| d¡r/|}nÐ| d¡rCˆ|d d ƒˆ|d d ƒdfVq| d ¡rW|d 8}ˆ|d d ƒddfVq| d¡rmˆ|d d ƒd}}|d d }}n’| d¡r�ˆ|dd ƒˆ|d d ƒdfVq| d¡r•ˆ|d d ƒˆ|dd ƒdfVq| d ¡r©|d 8}ˆ|d d ƒddfVq| d¡r½|d 7}dˆ|dd ƒdfVq| d¡rÓdˆ|dd ƒ}}|d d }}n,| d¡rç|d 7}dˆ|dd ƒdfVq| d¡rÿˆ|dd…dd ƒˆ|dd ƒdfVq|d k�r|d 7}dV|d k�s|d k�r!|d 8}dV|d k�s| d¡�r)dS||dfVq )N)r r Tr ÚXrcSsg|]}|d‘qS)r r©r`r”rrrrl´rmz2_mdiff.._line_iterator..z-?+?rÅr r(z--++r|)z--?+z--+r�z-+?z-?+z+--r})r’z+-rsF)N©rr‘T)rÕNT)r1r,ÚnextrvÚ startswith)rÄZnum_blanks_pendingZnum_blanks_to_yieldrrÚ from_lineÚto_line)rÒÚdiff_lines_iteratorrrÚ_line_iteratoržsr€   ÿ           $  þ  þ  ºz_mdiff.._line_iteratorc3sÈ� ˆƒ}gg}} t|ƒdkst|ƒdkrMz t|ƒ\}}}Wn ty*YdSw|dur6| ||f¡|durA| ||f¡t|ƒdkst|ƒdks| d¡\}}| d¡\}}|||p`|fVq )NTr )r1rÖÚ StopIterationr,rC)Z line_iteratorÚ fromlinesÚtolinesrØrÙÚ found_diffZfromDiffZto_diff)rÛrrÚ_line_pair_iteratorös(€  ÿø òz#_mdiff.._line_pair_iteratorr(TF)NNN)ÚreÚcompilerrÖrÜ)rÝrÞÚcontextrzr{ráràZline_pair_iteratorZlines_to_writeÚindexZ contextLinesrßrØrÙr3r)rÛrÒrÑrÚrÚ_mdiff<sf€ 8 X! ÿù  ü  ù€ þÚråan %(table)s%(legend)s aH table.diff {font-family:Courier; border:medium;} .diff_header {background-color:#e0e0e0} td.diff_header {text-align:right} .diff_next {background-color:#c0c0c0} .diff_add {background-color:#aaffaa} .diff_chg {background-color:#ffff77} .diff_sub {background-color:#ffaaaa}aZ %(header_row)s %(data_rows)s
aõ
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op
c@sŽeZdZ eZeZeZeZdZdddefdd„Z  dd d œd d „Z d d„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Z  ddd„ZdS)r r éNcCs ||_||_||_||_dSr)Ú_tabsizeÚ _wrapcolumnÚ _linejunkÚ _charjunk)rÚtabsizeZ wrapcolumnrzr{rrrr˜s   zHtmlDiff.__init__rFézutf-8)Úcharsetc Cs< |jt|j|j|j||||||d�|d� |d¡ |¡S)N)rãÚnumlines)ZstylesZlegendÚtableríÚxmlcharrefreplace)Ú_file_templater²Ú_stylesÚ_legendÚ make_tablerÃr¿)rrÝrÞÚfromdescÚtodescrãrîrírrrÚ make_file©s ÿûúzHtmlDiff.make_filecs: ‡fdd„‰‡fdd„|Dƒ}‡fdd„|Dƒ}||fS)Ncs6| dd¡}| ˆj¡}| dd¡}| dd¡ d¡S)NrsrÉú r‘)rQÚ expandtabsrçr“)r”)rrrÚ expand_tabsÎs   z2HtmlDiff._tab_newline_replace..expand_tabscóg|]}ˆ|ƒ‘qSrrrÔ©rúrrrl×rmz1HtmlDiff._tab_newline_replace..crûrrrÔrürrrlØrmr)rrÝrÞr)rúrrÚ_tab_newline_replaceÄs   zHtmlDiff._tab_newline_replacec Cs" |s | ||f¡dSt|ƒ}|j}||ks"|| d¡d|kr+| ||f¡dSd}d}d}||kri||kri||dkrL|d7}||}|d7}n||dkrY|d7}d}n|d7}|d7}||kri||ks9|d|…} ||d…} |r�| d} d|| } | || f¡| |d| ¡dS)NrÉrZr rr(rÊú>)r,r1rèÚcountÚ _split_line) rZ data_listZline_numrÎrWr\r3r6ZmarkZline1Zline2rrrrÛs<    ö  zHtmlDiff._split_linec csª� |D]N\}}}|dur|||fVq||\}}\}}gg} } | | ||¡| | ||¡| s4| rR| r<|  d¡}nd}| rF|  d¡}nd}|||fV| s4| s4qdS)Nr )rrs)rrC) rÚdiffsÚfromdataÚtodataÚflagZfromlineZfromtextZtolineZtotextÚfromlistÚtolistrrrÚ _line_wrappers*€     ÷€ózHtmlDiff._line_wrapperc Cs– ggg}}}|D]:\}}}z| |jd|g|¢RŽ¡| |jd|g|¢RŽ¡Wnty?| d¡| d¡Ynw| |¡q |||fSr7)r,Ú _format_liner·)rrrrÚflaglistrrrrrrÚ_collect_lines.s  ý  zHtmlDiff._collect_linescCsr zd|}d|j||f}Wn tyd}Ynw| dd¡ dd¡ dd ¡}| d d ¡ ¡}d |||fS) Nz%dz id="%s%s"rú&z&rþz>ú%s%s)Ú_prefixr·rQr“)rrÍrZlinenumrÎÚidrrrrCs þÿzHtmlDiff._format_linecCs2 dtj}dtj}tjd7_||g|_dS)Nzfrom%d_zto%d_r()r Ú_default_prefixr)rZ fromprefixÚtoprefixrrrÚ _make_prefixZs   zHtmlDiff._make_prefixcCsö |jd}dgt|ƒ}dgt|ƒ}d\} } d} t|ƒD]+\} } | rG| sFd} | } td| |gƒ} d|| f|| <| d7} d|| f|| <qd} q|sddg}dg}dg}d} |r_d g}|}nd g}}|dsnd ||d<d ||| <|||||fS) Nr(r)r Fr Tz id="difflib_chg_%s_%d"z"nFz2 No Differences Found z( Empty File z!fz#t)rr1r*r\)rrrr rãrîrÚnext_idÚ next_hrefZnum_chgZ in_changerªr3rrrrÚ_convert_flagses@  ÿ€   zHtmlDiff._convert_flagsc CsR | ¡| ||¡\}}|r|}nd}t||||j|jd�}|jr'| |¡}| |¡\} } } | | | | ||¡\} } } } } g}d}t t | ƒƒD](}| |durY|dkrX|  d¡qG|  || || || || || |f¡qG|st|r�ddd|dd|f}nd}|j t d |¡||jd d �}| d d ¡ d d¡ dd¡ dd¡ dd¡S)NryzV %s%s%s%s r z) z %s%s%s%sz!
z+%srr()Z data_rowsÚ header_rowr´z+zz-zz^zrÊzrør )rrýrårérêrèrr rr9r1r,Ú_table_templater²rvrrQ)rrÝrÞrõrörãrîZ context_linesrrrr rrrrZfmtr3rrïrrrrô”sX ÿ  ÿ  €  ÿüý üzHtmlDiff.make_table)rrFrì)rfrgrhrñròrrórrrr÷rýrrr rrrrôrrrrr ‚s2 ÿÿ ÿ7 /ÿr ccsl� z dddœt|ƒ}Wntytd|ƒd‚wd|f}|D]}|dd…|vr3|dd…Vq"dS)Nr�r’)r(rŸz)unknown delta choice (must be 1 or 2): %rr‹rŸ)ÚintÚKeyErrorrn)ZdeltaZwhichrXÚprefixesr”rrrrãs"€ ÿÿÿ€þrcCsddl}ddl}| |¡SrB)ÚdoctestÚdifflibZtestmod)rrrrrÚ_tests rÚ__main__)rZrk)r•)rrrrrZr‘)r»r»r»r»rZr¼)%Ú__all__ÚheapqrroÚ collectionsrZ _namedtupleÚtypesrr rrrrxrrárâÚmatchrrrœr r­rr¡r rrårñròrróÚobjectr rrrfrrrrÚsf     r1 A   ÿI  ÿL ÿ% ÿ  a  ÿ