
    daflE                    l   	 g d Z ddlmZ ddlmZ ddlmZ  edd      Z	d Z
 G d d	      Zd#d
Zd Z G d d      ZddlZ ej                   d      j"                  fdZd$dZd Z	 	 d%dZd Z	 	 d%dZd Z	 	 d&dZdefdZddefdZdZdZdZdZ G d de       Z![d  Z"d! Z#e$d"k(  r e#        yy)')get_close_matchesndiffrestoreSequenceMatcherDifferIS_CHARACTER_JUNKIS_LINE_JUNKcontext_diffunified_diff
diff_bytesHtmlDiffMatch    )nlargest)
namedtuple)GenericAliasr   za b sizec                     |rd| z  |z  S y)Ng       @      ? )matcheslengths     "/root/Python-3.12.4/Lib/difflib.py_calculate_ratior   '   s    W}v%%    c                   l    e Zd Z	 ddZd Zd Zd Zd ZddZd Z	d	 Z
dd
Zd Zd Zd Z ee      Zy)r   Nc                 b    	 || _         d x| _        | _        || _        | j	                  ||       y N)isjunkabautojunkset_seqs)selfr   r   r   r    s        r   __init__zSequenceMatcher.__init__x   s4    	t  ar   c                 J    	 | j                  |       | j                  |       y r   )set_seq1set_seq2)r"   r   r   s      r   r!   zSequenceMatcher.set_seqs   s!    	 	aar   c                 N    	 || j                   u ry || _         d x| _        | _        y r   )r   matching_blocksopcodes)r"   r   s     r   r%   zSequenceMatcher.set_seq1   s-    	( ;.22t|r   c                 |    	 || j                   u ry || _         d x| _        | _        d | _        | j	                          y r   )r   r(   r)   
fullbcount_SequenceMatcher__chain_b)r"   r   s     r   r&   zSequenceMatcher.set_seq2   s>    	( ;.22t|r   c                 <   | j                   }i x| _        }t        |      D ](  \  }}|j                  |g       }|j	                  |       * t               x| _        }| j                  }|r9|j                         D ]  } ||      s|j                  |        |D ]  }||=  t               x| _
        }t        |      }	| j                  rQ|	dk\  rK|	dz  dz   }
|j                         D ]%  \  }}t        |      |
kD  s|j                  |       ' |D ]  }||=  y y y )N   d      )r   b2j	enumerate
setdefaultappendsetbjunkr   keysaddbpopularlenr    items)r"   r   r1   ieltindicesjunkr   popularnntestidxss               r   	__chain_bzSequenceMatcher.__chain_b
  s*    FF3l 	FAsnnS"-GNN1	
  E!
Txxz "#;HHSM"  H #&%'F==Q#XHqLE YY[ %	Tt9u$KK$%  H &=r   c                    	 | j                   | j                  | j                  | j                  j                  f\  }}}}|t        |      }|t        |      }||d}}
}	i }g }t        ||      D ]e  }|j                  }i }|j                  ||   |      D ];  }||k  r	||k\  r n. ||dz
  d      dz   x}||<   ||kD  s*||z
  dz   ||z
  dz   |}}
}	= |}g |	|kD  r]|
|kD  rX |||
dz
           sJ||	dz
     ||
dz
     k(  r9|	dz
  |
dz
  |dz   }}
}	|	|kD  r%|
|kD  r  |||
dz
           s||	dz
     ||
dz
     k(  r9|	|z   |k  r\|
|z   |k  rT |||
|z            sF||	|z      ||
|z      k(  r5|dz  }|	|z   |k  r(|
|z   |k  r  |||
|z            s||	|z      ||
|z      k(  r5|	|kD  r]|
|kD  rX |||
dz
           rJ||	dz
     ||
dz
     k(  r9|	dz
  |
dz
  |dz   }}
}	|	|kD  r%|
|kD  r  |||
dz
           r||	dz
     ||
dz
     k(  r9|	|z   |k  r\|
|z   |k  rT |||
|z            rF||	|z      ||
|z      k(  r5|dz   }|	|z   |k  r(|
|z   |k  r  |||
|z            r||	|z      ||
|z      k(  r5t        |	|
|      S Nr   r0   )	r   r   r1   r6   __contains__r:   rangegetr   )r"   aloahiblobhir   r   r1   isbjunkbestibestjbestsizej2lennothingr<   j2lengetnewj2lenjks                      r   find_longest_matchz"SequenceMatcher.find_longest_match1  sI   +	r "VVTVVTXXtzz7N7NN1c7;a&C;a&C!$c1hu sC 	A yyHHWWQqT7+ =s78"*1Q3"2Q"66HQKx<-.qSUAaCE1(5E= E	( ckeck!E!G*%ajAeAgJ&%*1WeAgxz(5E ckeck!E!G*%ajAeAgJ&Hns"uX~';!E(N+,h1U8^#44MH Hns"uX~';!E(N+,h1U8^#44 ckeckaaj!ajAeAgJ&%*1WeAgxz(5E ckeckaaj!ajAeAgJ&Hns"uX~';ah'(h1U8^#44!|H Hns"uX~';ah'(h1U8^#44 UE8,,r   c                 "   	 | j                   | j                   S t        | j                        t        | j                        }}d|d|fg}g }|r|j	                         \  }}}}| j                  ||||      x\  }	}
}}|r[|j                  |       ||	k  r||
k  r|j                  ||	||
f       |	|z   |k  r#|
|z   |k  r|j                  |	|z   ||
|z   |f       |r|j                          dx}x}}g }|D ]8  \  }}}||z   |k(  r||z   |k(  r||z  }|r|j                  |||f       |||}}}: |r|j                  |||f       |j                  ||df       t        t        t        j                  |            | _         | j                   S Nr   )r(   r:   r   r   poprX   r4   sortlistmapr   _make)r"   lalbqueuer(   rJ   rK   rL   rM   r<   rV   rW   xi1j1k1non_adjacenti2j2k2s                       r   get_matching_blocksz#SequenceMatcher.get_matching_blocks  s   	$ +'''TVVc$&&kB RB !&Cc311#sCEEGAq!a &&q)7sQwLL#q#q!12Q391sLL!A#sAaC!56  	
 R") 	(JBBBw"}bB b
  ''R5RB	( R-b"a[*#C\$BC###r   c                 6   	 | j                   | j                   S dx}}g x| _         }| j                         D ]_  \  }}}d}||k  r||k  rd}n||k  rd}n||k  rd}|r|j                  |||||f       ||z   ||z   }}|sJ|j                  d||||f       a |S )Nr    replacedeleteinsertequal)r)   rk   r4   )r"   r<   rV   answeraibjsizetags           r   get_opcodeszSequenceMatcher.get_opcodes  s    	8 <<#<<	A ""v 446 	9LBD C2v!b&RRQAr24d7BtGqA QA68'	9( r   c              #   x  K   	 | j                         }|sdg}|d   d   dk(  r/|d   \  }}}}}|t        |||z
        |t        |||z
        |f|d<   |d   d   dk(  r/|d   \  }}}}}||t        |||z         |t        |||z         f|d<   ||z   }g }	|D ]  \  }}}}}|dk(  r\||z
  |kD  rT|	j                  ||t        |||z         |t        |||z         f       |	 g }	t        |||z
        t        |||z
        }}|	j                  |||||f        |	rt	        |	      dk(  r|	d   d   dk(  s|	 y y y w)N)rq   r   r0   r   r0   r   rq   r0   )rw   maxminr4   r:   )
r"   rA   codesrv   rd   rh   re   ri   nngroups
             r   get_grouped_opcodesz#SequenceMatcher.get_grouped_opcodes#  s    	0   "*+E8A;'!"'(CRRCBqDM2s2r!t}b@E!H9Q<7""')CRRRRACBqDMAE"IU#( 	0CRR g~"R%"*c2s2r!t}b#b"Q$-HIRAB1BLL#r2r2./	0 #e*a-E!HQK7,BK -C5s   D8D:c                     	 t        d | j                         D              }t        |t        | j                        t        | j
                        z         S )Nc              3   &   K   | ]	  }|d      yw)ry   Nr   ).0triples     r   	<genexpr>z(SequenceMatcher.ratio.<locals>.<genexpr>k  s     JVfRjJs   )sumrk   r   r:   r   r   )r"   r   s     r   ratiozSequenceMatcher.ratioU  sD    	* Jt/G/G/IJJTVVs466{)BCCr   c                    	 | j                   2i x| _         }| j                  D ]  }|j                  |d      dz   ||<    | j                   }i }|j                  d}}| j                  D ]5  } ||      r||   }n|j                  |d      }|dz
  ||<   |dkD  s1|dz   }7 t        |t        | j                        t        | j                        z         S rF   )r+   r   rI   rG   r   r   r:   )r"   r+   r=   availavailhasr   numbs          r   quick_ratiozSequenceMatcher.quick_ration  s    	 ??"+--DOjvv =",..a"81"<
3=__
 !..'66 	&C}Sz!~~c1-E#Jax!A+	&  TVVs466{)BCCr   c                     	 t        | j                        t        | j                        }}t        t	        ||      ||z         S r   )r:   r   r   r   r{   )r"   r`   ra   s      r   real_quick_ratioz SequenceMatcher.real_quick_ratio  s;    	 TVVc$&&kB  BR"W55r   )Nrm   rm   T)r   Nr   N)   )__name__
__module____qualname__r#   r!   r%   r&   r,   rX   rk   rw   r   r   r   r   classmethodr   __class_getitem__r   r   r   r   r   ,   s]    HT>@
34X%Nr-hE$N5n0dD2D:
6 $L1r   r   c                    	 |dkD  st        d|      d|cxk  rdk  sn t        d|      g }t               }|j                  |        |D ]p  }|j                  |       |j	                         |k\  s(|j                         |k\  s<|j                         |k\  sP|j                  |j                         |f       r t        ||      }|D cg c]  \  }}|	 c}}S c c}}w )Nr   zn must be > 0: g        r   zcutoff must be in [0.0, 1.0]: )	
ValueErrorr   r&   r%   r   r   r   r4   	_nlargest)wordpossibilitiesrA   cutoffresultsrc   scores           r   r   r     s    8 6344&CvGHHFAJJt *	

16)==?f$779MM1779a.)* q&!F$%(%A%%%s   C#c                 H    	 dj                  d t        | |      D              S )Nrm   c              3   T   K   | ]   \  }}|d k(  r|j                         r|n| " yw) N)isspace)r   ctag_cs      r   r   z$_keep_original_ws.<locals>.<genexpr>  s/      Au c\aiiku4s   &()joinzip)r   tag_ss     r   _keep_original_wsr     s)    K77 Au  r   c                   :    e Zd Z	 d	dZd Zd Zd Zd Zd Zd Z	y)
r   Nc                 "    	 || _         || _        y r   linejunkcharjunk)r"   r   r   s      r   r#   zDiffer.__init__*  s    	& ! r   c           	   #   z  K   	 t        | j                  ||      }|j                         D ]  \  }}}}}|dk(  r| j                  ||||||      }	n\|dk(  r| j	                  d|||      }	nB|dk(  r| j	                  d|||      }	n(|dk(  r| j	                  d|||      }	nt        d|      |	E d {     y 7 w)	Nrn   ro   -rp   +rq   r   unknown tag )r   r   rw   _fancy_replace_dumpr   )
r"   r   r   cruncherrv   rJ   rK   rL   rM   gs
             r   comparezDiffer.compareA  s     	2 #4==!Q7'/';';'= 	#Cc3i''3QSAJJsAsC0JJsAsC0JJsAsC0 S!:;;LL	 s   B/B;1B92B;c              #   H   K   	 t        ||      D ]  }|d||     y w)Nr   )rH   )r"   rv   rc   lohir<   s         r   r   zDiffer._dumpj  s-     Br2 	(A !A$''	(s    "c              #      K   ||z
  ||z
  k  r)| j                  d|||      }| j                  d|||      }n(| j                  d|||      }| j                  d|||      }||fD ]  }	|	E d {     y 7 w)Nr   r   )r   )
r"   r   rJ   rK   r   rL   rM   firstsecondr   s
             r   _plain_replacezDiffer._plain_replaceo  s      9sSy ZZQS1EZZQS1FZZQS1EZZQS1F 	ALL	s   A)A5+A3,A5c              #     K   	 d\  }}t        | j                        }	d\  }
}t        ||      D ]  }||   }|	j                  |       t        ||      D ]t  }||   }||k(  r|
||}}
|	j	                  |       |	j                         |kD  s9|	j                         |kD  sM|	j                         |kD  sa|	j                         ||}}}v  ||k  r(|
| j                  ||||||      E d {    y |
|d}}}nd }
| j                  ||||      E d {    ||   ||   }}|
dx}}|	j                  ||       |	j                         D ]g  \  }}}}}||z
  ||z
  }}|dk(  r|d|z  z  }|d|z  z  })|dk(  r	|d|z  z  }7|d	k(  r	|d
|z  z  }E|dk(  r|d|z  z  }|d|z  z  }[t        d|       | j                  ||||      E d {    nd|z    | j                  ||dz   |||dz   |      E d {    y 7 7 7 67 w)N)gGz?g      ?NNr   rm   rn   ^ro   r   rp   r   rq   r   r     r0   )r   r   rH   r&   r%   r   r   r   r   _fancy_helperr!   rw   r   _qformat)r"   r   rJ   rK   r   rL   rM   
best_ratior   r   eqieqjrV   rt   r<   rs   best_ibest_jaeltbeltatagsbtagsrv   ai1ai2bj1bj2r`   ra   s                                r   r   zDiffer._fancy_replace}  s    	( (
F"4==1S
 sC 	HA1Bb!3_ HqT8{#$aS!!"% ,,.;**,z9nn&3191A1aJ!H	H( {..q#sAsCHHH),c3JFF C %%afafEEE vY&	d;EEdD)+3+?+?+A @'S#sCsC#IB)#S2X%ES2X%EH_S2X%EH_S2X%EG^S2X%ES2X%E$%>??@ }}T4>>> + %%a36!8SIIIQ I 	F, ? 	Js[   B
HH!H58H-G?.'HHB7HH+H9H:HHHHc              #      K   g }||k  r1||k  r| j                  ||||||      }n.| j                  d|||      }n||k  r| j                  d|||      }|E d {    y 7 w)Nr   r   )r   r   )r"   r   rJ   rK   r   rL   rM   r   s           r   r   zDiffer._fancy_helper  si     9Sy''3QSAJJsAsC03Y

33,As   AA!AA!c              #      K   	 t        ||      j                         }t        ||      j                         }d|z    |rd| d d|z    |r	d| d y y w)N- z? 
+ )r   rstrip)r"   alinebliner   r   s        r   r   zDiffer._qformat  sr     	 "%/668!%/668UlugR. UlugR.  s   AAr   )
r   r   r   r#   r   r   r   r   r   r   r   r   r   r   r     s0    Sj!.'R(
\J|
!r   r   Nz\s*(?:#\s*)?$c                     	  ||       d uS r   r   )linepats     r   r   r     s     t9D  r   c                     	 | |v S r   r   )chwss     r   r   r   %  s     8Or   c                 v    	 | dz   }|| z
  }|dk(  rdj                  |      S |s|dz  }dj                  ||      S Nr0   z{}z{},{}formatstartstop	beginningr   s       r   _format_range_unifiedr   <  sJ    &	IE\F{{{9%%Q	>>)V,,r   c           	   #   J  K   	 t        | ||||||       d}t        d | |      j                  |      D ]  }	|sVd}|rdj                  |      nd}
|rdj                  |      nd}dj                  ||
|       dj                  |||       |	d   |	d   }}t	        |d	   |d
         }t	        |d   |d         }dj                  |||       |	D ]J  \  }}}}}|dk(  r| || D ]	  }d|z      |dv r| || D ]	  }d|z     |dv s:||| D ]	  }d|z     L  y w)NFT	{}rm   
--- {}{}{}z
+++ {}{}{}r   ry   r0      r      z@@ -{} +{} @@{}rq   r   >   ro   rn   r   >   rp   rn   r   )_check_typesr   r   r   r   )r   r   fromfiletofilefromfiledate
tofiledaterA   linetermstartedr~   fromdatetodater   lastfile1_rangefile2_rangerv   rd   rh   re   ri   r   s                         r   r
   r
   G  s    %N Axz8LG a*>>qA %G6Bv}}\2H2<V]]:."F%%h(CC%%ffh??Ahb	t+E!Hd1g>+E!Hd1g>&&{KJJ#( 
	%CRRg~bH %D*$%++bH %D*$%++bH %D*$%
	%%s   D
D#D#c                     	 | dz   }|| z
  }|s|dz  }|dk  rdj                  |      S dj                  |||z   dz
        S r   r   r   s       r   _format_range_contextr     sT    &	IE\FQ	{{{9%%>>)Y%7!%;<<r   c           	   #     K   	 t        | ||||||       t        dddd      }d}	t        d | |      j                  |      D ],  }
|	sVd}	|rdj	                  |      nd	}|rdj	                  |      nd	}d
j	                  |||       dj	                  |||       |
d   |
d   }}d|z    t        |d   |d         }dj	                  ||       t        d |
D              r'|
D ]"  \  }}}}}|dk7  s| || D ]  }||   |z     $ t        |d   |d         }dj	                  ||       t        d |
D              s|
D ]"  \  }}}}}|dk7  s||| D ]  }||   |z     $ / y w)Nr   r   z! r   )rp   ro   rn   rq   FTr   rm   z
*** {}{}{}r   r   ry   z***************r0   r   z*** {} ****{}c              3   0   K   | ]  \  }}}}}|d v   yw)>   ro   rn   Nr   r   rv   _s      r   r   zcontext_diff.<locals>.<genexpr>        IQ1as++I   rp   r   r   z--- {} ----{}c              3   0   K   | ]  \  }}}}}|d v   yw)>   rp   rn   Nr   r   s      r   r   zcontext_diff.<locals>.<genexpr>  r   r   ro   )r   dictr   r   r   r   any)r   r   r   r   r   r   rA   r   prefixr   r~   r   r   r   r   r   rv   rd   rh   r   r   r   re   ri   s                           r   r	   r	     s    (T Axz8LdDEFG a*>>qA 1G6Bv}}\2H2<V]]:."F%%h(CC%%ffh??Ahb	t(**+E!Hd1g>$$[(;;I5II%* 1!RQ(? !"R 1$SkD0011
 ,E!Hd1g>$$[(;;I5II%* 1!Q2r(? !"R 1$SkD001111s   C5E38AE3E3E3c                 N   | r>t        | d   t              s+t        dt        | d         j                  d| d   d      |r>t        |d   t              s+t        dt        |d         j                  d|d   d      |D ]   }t        |t              rt        d|       y )Nr   z"lines to compare must be str, not  ()z all arguments must be str, not: )
isinstancestr	TypeErrortyper   )r   r   argsargs       r   r   r     s     	AaD#&ad,,ad4 5 	5AaD#&ad,,ad4 5 	5 K#s#CIJJKr   c	           
   #     K   	 d }	t        t        |	|            }t        t        |	|            } |	|      } |	|      } |	|      } |	|      } |	|      } | ||||||||      }
|
D ]  }|j                  dd        y w)Nc                     	 | j                  dd      S # t        $ r-}dt        |       j                  d| d}t	        |      |d }~ww xY w)Nasciisurrogateescapez!all arguments must be bytes, not r  r  )decodeAttributeErrorr	  r   r  )r   errmsgs      r   r  zdiff_bytes.<locals>.decode  sK    	*88G%677 	*G$$a)CC.c)	*s    	A
(AA
r  r  )r]   r^   encode)dfuncr   r   r   r   r   r   rA   r   r  linesr   s               r   r   r     s     * 	S^AS^AhHF^F,'L
#JhH!Q&,
AxPE 6kk'#4556s   BBc                 <    	 t        ||      j                  | |      S r   )r   r   )r   r   r   r   s       r   r   r     s$    !D (H%--a33r   c              #     K   	 dd l } |j                  d      t        | |||      ddgffd	fdfd} |       }||E d {    y |dz  }d}	 dd g|z  }
}	d}|du r'	 t        |      \  }}}|	|z  }|||f|
|<   |	dz  }	|du r'|	|kD  rd |}n|	}d}	|r|	|z  }|	dz  }	|
|    |dz  }|r|dz
  }	 |r&t        |      \  }}}|r|dz
  }n|dz  }|||f |r&7 # t        $ r Y y w xY w# t        $ r Y y w xY ww)	Nr   z(\++|\-+|\^+)c                    	 ||xx   dz  cc<   |||   | j                  d      dd  fS |dk(  rq| j                  d      | j                  d      }}g }|fd}j                  ||       t        |      D ]"  \  }\  }	}
|d|	 dz   |z   ||	|
 z   dz   ||
d  z   }$ |dd  }n#| j                  d      dd  }|sd}d|z   |z   dz   }||   |fS )	Nr0   r   r   ?c                     |j                  | j                  d      d   | j                         g       | j                  d      S )Nr0   r   )r4   r~   span)match_objectsub_infos     r   record_sub_infoz3_mdiff.<locals>._make_line.<locals>.record_sub_info  s=    !3!3A!6q!9,:K:K:M NO#))!,,r    r   )r[   subreversed)r  
format_keyside	num_linestextmarkersr  r  keybeginend	change_res              r   
_make_linez_mdiff.<locals>._make_linef  s   	, 	$1 dOEIIaL$455!IIaL%))A,'DH6> - MM/'2 $,H#5 NKU3Ae}T)#-d5o=dB4:MN8D 99Q<#D *$t+d2D $%%r   c               3     K   	 g } d\  }}	 t        |       dk  r*| j                  t        d             t        |       dk  r*dj                  | D cg c]  }|d   	 c}      }|j	                  d      r|}n|j	                  d      r | dd       | dd	      df |j	                  d
      r|d	z  } | dd      d df |j	                  d      r | dd      d }}|d	z
  d}}n|j	                  d      r | d d       | dd	      df |j	                  d      r | dd       | d d	      df 9|j	                  d      r|d	z  } | dd      d df `|j	                  d      r|d	z  }d  | dd	      df |j	                  d      rd  | dd	      }}|d	z   d}}nT|j	                  d      r|d	z  }d  | dd	      df |j	                  d      r | d d  d d       | d d	      df  |dk  r|d	z  }d |dk  r|dkD  r|d	z  }d |dkD  r|j	                  d      ry df Bc c}w w)N)r   r   Tr   Xrm   r   z-?+?r  r0   z--++r   )z--?+z--+r   z-+?z-?+z+--r   )r   z+-r   F)Nrm   r   T)r0  NT)r:   r4   nextr   
startswith)	r  num_blanks_pendingnum_blanks_to_yieldr   r   	from_lineto_liner-  diff_lines_iterators	          r   _line_iteratorz_mdiff.<locals>._line_iterator  s    	 26// e*q.T"5s;< e*q.U3Ta34A||C  '9#f% s1-z%A/FLLf% #a'" s1-tT9934 %/uS$;T'	9KA9Ma$6#e$ tA.
5Q0GMMe$ s1-z%Q/GMMc""a'" s1-tT99e$ #a'"JuS3T99l+%):eC+B7	9KA9Ma$6#c""a'"JuS3T99c" q$q1*U42J5PP &)#q(#)) &) &)#q(#)) &) ||C ,,M  4s%   AIII F?I I4 Ic               3     K   	         } g g }}	 t        |      dk(  st        |      dk(  rX	 t        |       \  }}}||j                  ||f       ||j                  ||f       t        |      dk(  rIt        |      dk(  rX|j	                  d      \  }}|j	                  d      \  }}|||xs |f # t        $ r Y y w xY wwrZ   )r:   r1  StopIterationr4   r[   )	line_iterator	fromlinestolinesr5  r6  
found_difffromDiffto_diffr8  s	           r   _line_pair_iteratorz#_mdiff.<locals>._line_pair_iterator  s     	 '(R'	y>1$Ga59-5H2Iw
 ($$i
%;<&NNGJ#78 y>1$Ga #,--"2Ix&{{1~GWWX%899 
 % s3   *CB9 8C6C4C9	CCCCr0   F)NNN)recompiler   r1  r:  )r<  r=  contextr   r   rB  rA  line_pair_iteratorlines_to_writeindexcontextLinesr>  r5  r6  r<   r8  r-  r,  r7  s                  @@@@r   _mdiffrI  <  s    @  

+,I  	'(8D78e 6&pV-p:B -.%%% 	1 #$dVW%5<EJ%59:L5M2Iw
 GO#,gz"BQ
 % w&&!(!& GO
"1o%!#	 ! %QYN$59:L5M2Iw
!)0&!+#Wj88 %=  	& % : ! sf   ADC+D+C- :D*D<D'C< *D-	C96D8C99D<	DDDDan  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>
    <meta http-equiv="Content-Type"
          content="text/html; charset=%(charset)s" />
    <title></title>
    <style type="text/css">%(styles)s
    </style>
</head>

<body>
    %(table)s%(legend)s
</body>

</html>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  
    <table class="diff" id="difflib_chg_%(prefix)s_top"
           cellspacing="0" cellpadding="0" rules="groups" >
        <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>
        <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>
        %(header_row)s
        <tbody>
%(data_rows)s        </tbody>
    </table>a  
    <table class="diff" summary="Legends">
        <tr> <th colspan="2"> Legends </th> </tr>
        <tr> <td> <table border="" summary="Colors">
                      <tr><th> Colors </th> </tr>
                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
                      <tr><td class="diff_chg">Changed</td> </tr>
                      <tr><td class="diff_sub">Deleted</td> </tr>
                  </table></td>
             <td> <table border="" summary="Links">
                      <tr><th colspan="2"> Links </th> </tr>
                      <tr><td>(f)irst change</td> </tr>
                      <tr><td>(n)ext change</td> </tr>
                      <tr><td>(t)op</td> </tr>
                  </table></td> </tr>
    </table>c                   z    e Zd Z	 eZeZeZeZdZdddefdZ		 	 ddddZ
d Zd	 Zd
 Zd Zd Zd Zd Z	 	 ddZy)r   r      Nc                 >    	 || _         || _        || _        || _        y r   )_tabsize_wrapcolumn	_linejunk	_charjunk)r"   tabsize
wrapcolumnr   r   s        r   r#   zHtmlDiff.__init__  s&    		  %!!r   zutf-8)charsetc                    	 | j                   t        | j                  | j                  | j	                  ||||||      |      z  j                  |d      j                  |      S )N)rD  numlines)styleslegendtablerS  xmlcharrefreplace)_file_templater   _styles_legend
make_tabler  r  )r"   r<  r=  fromdesctodescrD  rU  rS  s           r   	make_filezHtmlDiff.make_file  sk    	" ##d<<<<//)Wh*1H " F'
 
 6'./w	@r   c                      	  fd}|D cg c]
  } ||       }}|D cg c]
  } ||       }}||fS c c}w c c}w )Nc                     | j                  dd      } | j                  j                        } | j                  dd      } | j                  dd      j                  d      S )Nr   r   	r   )rn   
expandtabsrM  r   )r   r"   s    r   expand_tabsz2HtmlDiff._tab_newline_replace.<locals>.expand_tabs  sS    <<D)D??4==1D <<D)D<<S)0066r   r   )r"   r<  r=  re  r   s   `    r   _tab_newline_replacezHtmlDiff._tab_newline_replace  sR    		7 4==4[&=	=189;t$99   >9s   6;c                    	 |s|j                  ||f       y t        |      }| j                  }||k  s||j                  d      dz  z
  |k  r|j                  ||f       y d}d}d}||k  rB||k  r=||   dk(  r|dz  }||   }|dz  }n||   dk(  r|dz  }d}n
|dz  }|dz  }||k  r||k  r=|d | }	||d  }
|r|	dz   }	d|z   |
z   }
|j                  ||	f       | j	                  |d|
       y )Nr   r   r   rm   r0   r!  >)r4   r:   rN  count_split_line)r"   	data_listline_numr'  ru   rz   r<   rA   markline1line2s              r   rj  zHtmlDiff._split_line  sH   	 ht_- 4yCKdTZZ%5a%78S@ht_- #g!d(Aw$QAwQaDQQQ #g!d( RaQR
 DLE4K%'E 	(5)* 	3u-r   c              #     K   	 |D ]  \  }}}||||f ||c\  }}\  }}g g }
}	| j                  |	||       | j                  |
||       |	s|
sK|	r|	j                  d      }nd}|
r|
j                  d      }nd}|||f |	r6|
r9 y w)Nr   )rm   r   )rj  r[   )r"   diffsfromdatatodataflagfromlinefromtexttolinetotextfromlisttolists              r   _line_wrapperzHtmlDiff._line_wrapper  s     C %* 	+ HVD|vd**2:6/Xh !VHXhx8VF62 f'||AH'H#ZZ]F%Fvd** f	+s   AB5BB
Bc                 B   	 g g g }}}|D ]^  \  }}}	 |j                   | j                  d|g|        |j                   | j                  d|g|        |j                  |       ` |||fS # t        $ r% |j                  d        |j                  d        Y Ew xY wrF   )r4   _format_liner  )r"   rq  ry  rz  flaglistrr  rs  rt  s           r   _collect_lineszHtmlDiff._collect_lines.  s    	 $&b$) 		" HVD$ 1 1 1!D C( CD/d//$??@
 OOD!		" x''  $%d#$s   AA00+BBc                    	 	 d|z  }d| j                   |   |d}|j                  dd      j                  dd      j                  d	d
      }|j                  dd      j                         }d|d|d|dS # t        $ r d}Y kw xY w)Nz%dz id=""rm   &z&amp;rh  z&gt;<z&lt;r   &nbsp;z<td class="diff_header"z</td><td nowrap="nowrap">z</td>)_prefixr  rn   r   )r"   r%  rt  linenumr'  ids         r   r}  zHtmlDiff._format_lineC  s    		WnG!%d!3G<B
 \\#g&..s6:BB3vN ||C)002 WT# 	#  	B	s   A; ;B	B	c                     	 dt         j                  z  }dt         j                  z  }t         xj                  dz  c_        ||g| _        y )Nzfrom%d_zto%d_r0   )r   _default_prefixr  )r"   
fromprefixtoprefixs      r   _make_prefixzHtmlDiff._make_prefixZ  sD    + !9!99
X555  A% "8,r   c                 h   	 | j                   d   }dgt        |      z  }dgt        |      z  }d\  }	}
d}t        |      D ]:  \  }}|r1|
rd}
|}t        d||z
  g      }d||	fz  ||<   |	dz  }	d||	fz  ||<   9d}
< |sdg}dg}dg}d}|rd	g}|}nd
gx}}|d   sd|z  |d<   d|z  ||<   |||||fS )Nr0   rm   )r   Fr   Tz id="difflib_chg_%s_%d"z"<a href="#difflib_chg_%s_%d">n</a>Fz2<td></td><td>&nbsp;No Differences Found&nbsp;</td>z(<td></td><td>&nbsp;Empty File&nbsp;</td>z!<a href="#difflib_chg_%s_0">f</a>z#<a href="#difflib_chg_%s_top">t</a>)r  r:   r2   rz   )r"   ry  rz  r~  rD  rU  r  next_id	next_hrefnum_chg	in_changer   r<   rt  s                 r   _convert_flagszHtmlDiff._convert_flagse  s/   ( <<? $s8}$DX&	%) 	"FAd  $ID QqzN+A!:hw=O!OGAJ qLG&J!'N+ '+IdO "	!	"$ wHdGIDPQ!%O$PP6{>IIaL?8L	$x	'99r   c           
      F   	 | j                          | j                  ||      \  }}|r|}nd }t        |||| j                  | j                        }| j
                  r| j                  |      }| j                  |      \  }	}
}| j                  |	|
|||      \  }	}
}}}g }d}t        t        |            D ]G  }||   |dkD  s|j                  d        |j                  |||   ||   |	|   ||   |
|   fz         I |s|rddd|z  dd|z  d}nd	}| j                  t        d	j                  |      || j                  d
         z  }|j!                  dd      j!                  dd      j!                  dd      j!                  dd      j!                  dd      S )Nr   zV            <tr><td class="diff_next"%s>%s</td>%s<td class="diff_next">%s</td>%s</tr>
r   z)        </tbody>        
        <tbody>
z<thead><tr>z!<th class="diff_next"><br /></th>z+<th colspan="2" class="diff_header">%s</th>z</tr></thead>rm   r0   )	data_rows
header_rowr  z +z<span class="diff_add">z -z<span class="diff_sub">z ^z<span class="diff_chg">r!  z</span>rc  r  )r  rf  rI  rO  rP  rN  r{  r  r  rH   r:   r4   _table_templater   r   r  rn   )r"   r<  r=  r^  r_  rD  rU  context_linesrq  ry  rz  r~  r  r  r   fmtr<   r  rX  s                      r   r]  zHtmlDiff.make_table  s   	$ 	 !55iH	' $M My#~~/ &&u-E $(#6#6u#=  6:5H5HVHWX6727 7s8}% 	DA{" q5HHJK#IaL!+4Q<q	!C C D	D v3=H3=F	HJ J$$tggaj!<<?($ $
 }}U#<=WU#<=WU#<=WT),WT(+		,r   )rm   rm   F   )r   r   r   rZ  r[  r  r\  r  r   r#   r`  rf  rj  r{  r  r}  r  r  r]  r   r   r   r   r     s     $NG%OGO4+"" AC*+@8?@6!.5.n+8(*#.	--:^ INK,r   r   c              #      K   	 	 dddt        |         }d|f}| D ]  }|d d |v s|dd    y # t        $ r t        d|z        d w xY ww)Nr   r   )r0   r   z)unknown delta choice (must be 1 or 2): %rr   r   )intKeyErrorr   )deltawhichrv   prefixesr   s        r   r   r     s     *.4 U, c{H 8xqr(N	  .D"# $)-	..s   A1 A
AA

Ac                  4    dd l } dd l}| j                  |      S rZ   )doctestdifflibtestmod)r  r  s     r   _testr    s    ??7##r   __main__)r   g333333?)z 	)rm   rm   rm   rm   r   r   )r   r   r   r   r      
)%__all__heapqr   r   collectionsr   _namedtupletypesr   r   r   r   r   r   r   rB  rC  matchr   r   r   r
   r   r	   r   r   r   rI  rZ  r[  r  r\  objectr   r   r  r   r   r   r   <module>r     s  8> ( 1 GZ(
k	2 k	2\.&bl! l!~	 
%2::&67== ! .	- =?.2B%R	= ,.?CJ1XK" 25?D6< (9 #4J (,d%K\(0"],v ],~
 @$ z	G r   