o ?OglE@s< gdZddlmZddlmZddlmZeddZ ddZ Gd d d Z d9d dZ ddZ GdddZddlZedjfddZd:ddZddZ  d;ddZd d!Z  d;d"d#Zd$d%Z & 'dr3r?r@xi1j1Zk1Z non_adjacenti2j2Zk2rrrget_matching_blockss<    z#SequenceMatcher.get_matching_blockscCs |jdur |jSd}}g|_}|D]@\}}}d}||kr(||kr(d}n ||kr/d}n||kr5d}|rA||||||f||||}}|rV|d||||fq|S)Nr rreplacedeleteinsertequal)r#rPr,)rr3r?Zansweraibjsizetagrrr get_opcodess(  zSequenceMatcher.get_opcodesc 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|||}}| |||||fq[| rt| dkr| dddks| VdSdSdS)N)rTr r(r r(r rTr()rYmaxminr,r1) rr6ZcodesrXrLrNrMrOZnngrouprrrget_grouped_opcodes#s.&&(  z#SequenceMatcher.get_grouped_opcodescCs2 tdd|D}t|t|jt|jS)Ncss|]}|dVqdS)r[Nr).0Ztriplerrr ksz(SequenceMatcher.ratio..)sumrPrr1rr)rrrrrratioUszSequenceMatcher.ratiocCs |jduri|_}|jD] }||dd||<q|j}i}|jd}}|jD]}||r4||}n||d}|d||<|dkrH|d}q)t|t|jt|jSr7)r$rr:r8rrr1)rr$r4ZavailZavailhasrZnumbrrr quick_rations"       zSequenceMatcher.quick_ratiocCs, t|jt|j}}tt||||Sr)r1rrrr])rrHrIrrrreal_quick_ratiosz 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 rrZ333333?cCs |dks td|fd|krdksntd|fg}t}|||D]"}||||krL||krL||krL|||fq*t||}dd|DS)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 possibilitiesr6cutoffresultsrKrrrrs"      rcCs dddt||DS)Nrcss,|]\}}|dkr|r|n|VqdS) N)isspace)r`cZtag_crrrras  z$_keep_original_ws..)joinzip)rrZtag_srrr_keep_original_wss rxc@sHeZdZ dddZddZddZdd Zd d Zd d ZddZ dS)rNcCs ||_||_dSrlinejunkcharjunk)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+rTrsunknown tag %r)rrzrY_fancy_replace_dumprn) rrrcruncherrXr;r<r=r>grrrcompareAs zDiffer.compareccs* t||D] }d|||fVqdS)Nz%s %s)r9)rrXrKlohir3rrrrjs z Differ._dumpc csp||||kr|d|||}|d|||}n|d|||}|d|||}||fD]} | EdHq.dS)Nr}r|)r) rrr;r<rr=r>firstsecondrrrr_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||||}}| durd}}| ||| D]N\}}}}}||||}}|dkr|d|7}|d|7}q|dkr|d|7}q|d kr|d |7}q|d kr|d |7}|d |7}qt d |f| ||||EdHnd|V| ||d|||d|EdHdS)N)gGz?g?NNrrrQ^rRr|rSr}rTrsr~ r()rr{r9r!r rerdrcr _fancy_helperrrYrn_qformat)rrr;r<rr=r>Z best_ratiorprZeqiZeqjr?rVr3rUZbest_iZbest_jZaeltZbeltatagsbtagsrXZai1Zai2Zbj1Zbj2rHrIrrrr}s`            &zDiffer._fancy_replaceccsdg}||kr||kr|||||||}n|d|||}n ||kr+|d|||}|EdHdS)Nr|r})rr)rrr;r<rr=r>rrrrrszDiffer._fancy_helperccs` t||}t||}d|V|rd|dVd|V|r.d|dVdSdS)N- z?  + )rxrstrip)rZalineZblinerrrrrrs  zDiffer._qformatr) rfrgrhrrrrrrrrrrrrs U)^ rNz \s*(?:#\s*)?$cCs ||duSrr)lineZpatrrrrs r cCs ||vSrr)ZchZwsrrrr%srcCs< |d}||}|dkrd|S|s|d8}d||SNr(z{}z{},{}formatstartstopZ beginningrrrr_format_range_unified<s  rrrccsL 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|VqqdqdS)NFT {}r --- {}{}{}z +++ {}{}{}r r[r(rZz@@ -{} +{} @@{}rTrs>rRrQr|>rQrSr}) _check_typesrr_rr)rrfromfiletofile fromfiledate tofiledater6linetermstartedr^fromdatetodaterlast file1_range file2_rangerXrLrNrMrOrrrrr Gs:'   r cCsD |d}||}|s|d8}|dkrd|Sd|||dSrrrrrr_format_range_contexts rccs t|||||||tddddd}d} td|||D]} | sGd} |r,d|nd } |r5d|nd } d || |Vd || |V| d | d } }d|Vt| d|d}d||Vtdd| Dr| D]\}}}}}|dkr|||D] }|||Vqqpt| d|d}d||Vtdd| Dr| D]\}}}}}|dkr|||D] }|||VqqqdS)Nrrz! r)rSrRrQrTFTrrz *** {}{}{}rr r[z***************r(rz *** {} ****{}cs"|] \}}}}}|dvVqdS)>rRrQNrr`rX_rrrra zcontext_diff..rSrZrz --- {} ----{}csr)>rQrSNrrrrrrarrR)rdictrr_rrany)rrrrrrr6rprefixrr^rrrrrrXrLrNrrrrMrOrrrrs>* rcGs|rt|dtstdt|dj|df|r0t|dts0tdt|dj|df|D]}t|ts@td|fq2dS)Nr z)lines to compare must be str, not %s (%r)z"all arguments must be str, not: %r) isinstancestr TypeErrortyperf)rrargsargrrrrs r c cs dd} tt| |}tt| |}| |}| |}| |}| |}| |}|||||||||} | D] } | ddVq5dS)Nc SsDz|ddWSty!}zdt|j|f}t||d}~ww)Nasciisurrogateescapez(all arguments must be bytes, not %s (%r))decodeAttributeErrorrrfr)rrerrmsgrrrrs  zdiff_bytes..decoderr)rErFencode) Zdfuncrrrrrrr6rrlinesrrrrr s r cCs t||||Sr)rr)rrrzr{rrrrs"rc#s ddl}|dt||||ddgffdd fddfdd}|}|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|rt|\} } } | r|d }n|d 8}| | | fV|sWn tyYdSwq>) Nr z (\++|\-+|\^+)c s ||d7<|dur|||dddfS|dkra|d|d}}g}|fdd}||t|D]\}\} } |d| d||| | d|| d}q;|dd}n|ddd}|snd }d||d}|||fS) Nr(r r?cSs&||dd|g|dS)Nr(r )r,r^span)Z match_objectsub_inforrrrecord_sub_infos z3_mdiff.._make_line..record_sub_infors)rCsubreversed) rZ format_keysideZ num_linestextZmarkersrrkeyZbeginend) change_rerr _make_linefs"  2 z_mdiff.._make_linec3s` g}d\}} t|dkr|tdt|dksddd|D}|dr/|}n|drC|d d |d d dfVq|d rW|d 8}|d d ddfVq|drm|d d d}}|d d }}n|dr|dd |d d dfVq|dr|d d |dd dfVq|d r|d 8}|d d ddfVq|dr|d 7}d|dd dfVq|drd|dd }}|d d }}n,|dr|d 7}d|dd dfVq|dr|dddd |dd dfVq|d kr|d 7}dV|d ks|d kr!|d 8}dV|d ks|dr)dS||dfVq )N)r r TrXrcSsg|]}|dqS)r rr`rrrrrlrmz2_mdiff.._line_iterator..z-?+?rr r(z--++r|)z--?+z--+rz-+?z-?+z+--r})rz+-rsF)NrrT)rNT)r1r,nextrv startswith)rZnum_blanks_pendingZnum_blanks_to_yieldrr from_lineto_line)rdiff_lines_iteratorrr_line_iteratorsr              $    z_mdiff.._line_iteratorc3s }gg}} t|dkst|dkrMz t|\}}}Wn ty*YdSw|dur6|||f|durA|||ft|dkst|dks|d\}}|d\}}|||p`|fVq )NTr )r1r StopIterationr,rC)Z line_iterator fromlinestolinesrr found_diffZfromDiffZto_diff)rrr_line_pair_iterators(   z#_mdiff.._line_pair_iteratorr(TF)NNN)recompilerrr)rrcontextrzr{rrZline_pair_iteratorZlines_to_writeindexZ contextLinesrrrr3r)rrrrr_mdiff<sf 8 X!      ran %(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@seZdZ eZeZeZeZdZdddefddZ  dd d d d Z d dZ ddZ ddZ ddZddZddZddZ  dddZdS)r r NcCs ||_||_||_||_dSr)_tabsize _wrapcolumn _linejunk _charjunk)rtabsizeZ wrapcolumnrzr{rrrrs   zHtmlDiff.__init__rFzutf-8)charsetc Cs< |jt|j|j|j||||||d|d|d|S)N)rnumlines)ZstylesZlegendtablerxmlcharrefreplace)_file_templater_styles_legend make_tablerr)rrrfromdesctodescrrrrrr make_files zHtmlDiff.make_filecs: fddfdd|D}fdd|D}||fS)Ncs6|dd}|j}|dd}|dddS)Nrsr r)rQ expandtabsrr)r)rrr expand_tabss   z2HtmlDiff._tab_newline_replace..expand_tabscg|]}|qSrrrrrrrlrmz1HtmlDiff._tab_newline_replace..crrrrrrrrlrmr)rrrr)rrr_tab_newline_replaces   zHtmlDiff._tab_newline_replacec Cs" |s |||fdSt|}|j}||ks"||dd|kr+|||fdSd}d}d}||kri||kri||dkrL|d7}||}|d7}n||dkrY|d7}d}n|d7}|d7}||kri||ks9|d|} ||d} |r| d} d|| } ||| f||d| dS)NrrZr rr(r>)r,r1rcount _split_line) rZ data_listZline_numrrWr\r3r6ZmarkZline1Zline2rrrrs<      zHtmlDiff._split_linec cs |D]N\}}}|dur|||fVq||\}}\}}gg} } || |||| ||| s4| rR| r<| d}nd}| rF| d}nd}|||fV| s4| s4qdS)Nr )rrs)rrC) rdiffsfromdatatodataflagZfromlineZfromtextZtolineZtotextfromlisttolistrrr _line_wrappers*     zHtmlDiff._line_wrapperc Cs ggg}}}|D]:\}}}z||jd|g|R||jd|g|RWnty?|d|dYnw||q |||fSr7)r, _format_liner)rrrrflaglistrrrrrr_collect_lines.s    zHtmlDiff._collect_linescCsr zd|}d|j||f}Wn tyd}Ynw|dddddd }|d d }d |||fS) Nz%dz id="%s%s"r&z&rz>%s%s)_prefixrrQr)rrrZlinenumridrrrrCs zHtmlDiff._format_linecCs2 dtj}dtj}tjd7_||g|_dS)Nzfrom%d_zto%d_r()r _default_prefixr)rZ fromprefixtoprefixrrr _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 rrrnext_id next_hrefZnum_chgZ in_changerr3rrrr_convert_flagses@     zHtmlDiff._convert_flagsc CsR ||||\}}|r|}nd}t||||j|jd}|jr'||}||\} } } || | | ||\} } } } } g}d}t t | D](}| |durY|dkrX| dqG| || || || || || |fqG|st|rddd|dd|f}nd}|j t d|||jd d }|d d d dddddddS)NryzV %s%s%s%s r z) z %s%s%s%sz!
z+%srr()Z data_rows header_rowrz+zz-zz^zrzrr )rrrrrrrr rr9r1r,_table_templaterrvrrQ)rrrrrrrZ context_linesrrrr rrrrZfmtr3rrrrrrsX        zHtmlDiff.make_table)rrFr)rfrgrhrrrrrrrrrrrr rrrrrrrrr s2  7 /r ccsl z dddt|}Wntytd|dwd|f}|D]}|dd|vr3|ddVq"dS)Nrr)r(rz)unknown delta choice (must be 1 or 2): %rrr)intKeyErrorrn)ZdeltaZwhichrXprefixesrrrrrs" rcCsddl}ddl}||SrB)doctestdifflibZtestmod)rrrrr_tests r__main__)rZrk)r)rrrrrZr)rrrrrZr)%__all__heapqrro collectionsrZ _namedtupletypesrr rrrrxrrrmatchrrrr rrrr rrrrrrobjectr rrrfrrrrsf     r1 A   I  L %   a