
    =OglE                       	 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#             dS dS ).)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 dS )Ng       @      ? )matcheslengths      /usr/lib64/python3.11/difflib.py_calculate_ratior   '   s     &W}v%%3    c                   t    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dS )r   N Tc                 l    	 || _         d x| _        | _        || _        |                     ||           d S N)isjunkabautojunkset_seqs)selfr   r   r    r!   s        r   __init__zSequenceMatcher.__init__x   s@    	t  ar   c                 \    	 |                      |           |                     |           d S r   )set_seq1set_seq2)r#   r   r    s      r   r"   zSequenceMatcher.set_seqs   s3    	 	aar   c                 H    	 || j         u rd S || _         d x| _        | _        d S r   )r   matching_blocksopcodes)r#   r   s     r   r&   zSequenceMatcher.set_seq1   s3    	( ;;F.22t|||r   c                 ~    	 || j         u rd S || _         d x| _        | _        d | _        |                                  d S r   )r    r)   r*   
fullbcount_SequenceMatcher__chain_b)r#   r    s     r   r'   zSequenceMatcher.set_seq2   sL    	( ;;F.22t|r   c                 n   | j         }i x| _        }t          |          D ]0\  }}|                    |g           }|                    |           1t                      x| _        }| j        }|r?|                                D ]"} ||          r|	                    |           #|D ]}||= t                      x| _
        }t          |          }	| j        rX|	dk    rT|	dz  dz   }
|                                D ]-\  }}t          |          |
k    r|	                    |           .|D ]	}||= d S d S d S )N   d      )r    b2j	enumerate
setdefaultappendsetbjunkr   keysaddbpopularlenr!   items)r#   r    r2   ieltindicesjunkr   popularnntestidxss               r   	__chain_bzSequenceMatcher.__chain_b
  ss    F3ll 	 	FAsnnS"--GNN1  EE!
T 	xxzz " "6#;; "HHSMMM  HH #&%%'FF= 	Q#XXHqLE YY[[ % %	Tt99u$$KK$$$  HH	 	XX
 r   r   c                    	 | j         | j        | j        | j        j        f\  }}}}|t          |          }|t          |          }||d}}
}	i }g }t          ||          D ]j}|j        }i }|                    ||         |          D ]@}||k     r	||k    r n0 ||dz
  d          dz   x}||<   ||k    r||z
  dz   ||z
  dz   |}}
}	A|}k|	|k    ry|
|k    rs |||
dz
                     s_||	dz
           ||
dz
           k    rG|	dz
  |
dz
  |dz   }}
}	|	|k    r2|
|k    r, |||
dz
                     s||	dz
           ||
dz
           k    G|	|z   |k     rx|
|z   |k     ro |||
|z                      s[||	|z            ||
|z            k    rC|dz  }|	|z   |k     r5|
|z   |k     r, |||
|z                      s||	|z            ||
|z            k    C|	|k    ry|
|k    rs |||
dz
                     r_||	dz
           ||
dz
           k    rG|	dz
  |
dz
  |dz   }}
}	|	|k    r2|
|k    r, |||
dz
                     r||	dz
           ||
dz
           k    G|	|z   |k     rx|
|z   |k     ro |||
|z                      r[||	|z            ||
|z            k    rC|dz   }|	|z   |k     r5|
|z   |k     r, |||
|z                      r||	|z            ||
|z            k    Ct          |	|
|          S Nr   r1   )	r   r    r2   r7   __contains__r;   rangegetr   )r#   aloahiblobhir   r    r2   isbjunkbestibestjbestsizej2lennothingr=   j2lengetnewj2lenjks                      r   find_longest_matchz"SequenceMatcher.find_longest_match1  s   +	r "VTVTXtz7NN1c7;a&&C;a&&C!$c1hu sC 	 	A yHHWWQqT7++ = =s7788E"*(1Q3"2"2Q"66HQKx<<-.qSUAaCE1(5EEE ckkeckk'!E!G*%% *ajAeAgJ&&%*1WeAgxz(5E ckkeckk'!E!G*%% *ajAeAgJ&&Hns""uX~';';'!E(N+,, (<h1U8^#444MH Hns""uX~';';'!E(N+,, (<h1U8^#444 ckkeckkgaaj!! *ajAeAgJ&&%*1WeAgxz(5E ckkeckkgaaj!! *ajAeAgJ&&Hns""uX~';';gah'(( (<h1U8^#444!|H Hns""uX~';';gah'(( (<h1U8^#444 UE8,,,r   c                 V   	 | j         | j         S t          | j                  t          | j                  }}d|d|fg}g }|r|                                \  }}}}|                     ||||          x\  }	}
}}|rk|                    |           ||	k     r||
k     r|                    ||	||
f           |	|z   |k     r(|
|z   |k     r|                    |	|z   ||
|z   |f           ||                                 dx}x}}g }|D ]>\  }}}||z   |k    r||z   |k    r||z  }|r|                    |||f           |||}}}?|r|                    |||f           |                    ||df           t          t          t          j        |                    | _         | j         S Nr   )r)   r;   r   r    poprY   r5   sortlistmapr   _make)r#   lalbqueuer)   rK   rL   rM   rN   r=   rW   rX   xi1j1k1non_adjacenti2j2k2s                       r   get_matching_blocksz#SequenceMatcher.get_matching_blocks  s   	$ +''TVc$&kkB RB  	7!&Cc311#sCEEEGAq!a  7&&q)))77sQwwLL#q#q!1222Q3991sLL!A#sAaC!5666  	7 	
 R") 	( 	(JBBBw"}}bB b
  6 ''R555RB 	.R---b"a[***#C\$B$BCC##r   c                 <   	 | j         | j         S dx}}g x| _         }|                                 D ]j\  }}}d}||k     r	||k     rd}n||k     rd}n||k     rd}|r|                    |||||f           ||z   ||z   }}|r|                    d||||f           k|S )Nr   r   replacedeleteinsertequal)r*   rl   r5   )r#   r=   rW   answeraibjsizetags           r   get_opcodeszSequenceMatcher.get_opcodes  s    	8 <#<	A ""v 4466 	9 	9LBD C2vv!b&&RR 5QAr2444d7BtGqA  9QA6888r      c              #     K   	 |                                  }|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    rq||z
  |k    rh|	                    ||t          |||z             |t          |||z             f           |	V  g }	t          |||z
            t          |||z
            }}|	                    |||||f           |	r+t	          |	          dk    r|	d         d         dk    s|	V  d S d S d S )N)rq   r   r1   r   r1   r   rq   r1   )rw   maxminr5   r;   )
r#   rB   codesrv   re   ri   rf   rj   nngroups
             r   get_grouped_opcodesz#SequenceMatcher.get_grouped_opcodes#  s     	0   "" 	,*+E8A;'!!"'(CRRCBqDMM2s2r!t}}b@E!H9Q<7"""')CRRRRACBqDMMAE"IU#( 	0 	0CRR g~~"R%"**c2s2r!t}}b#b"Q$--HIIIRAB1BLL#r2r2.//// 	#e**a--E!HQK7,B,BKKKKK	 	,B,Br   c                     	 t          d |                                 D                       }t          |t          | j                  t          | j                  z             S )Nc              3   &   K   | ]}|d          V  dS )rz   Nr   ).0triples     r   	<genexpr>z(SequenceMatcher.ratio.<locals>.<genexpr>k  s&      JJVfRjJJJJJJr   )sumrl   r   r;   r   r    )r#   r   s     r   ratiozSequenceMatcher.ratioU  sV    	* JJt/G/G/I/IJJJJJTVs46{{)BCCCr   c                    	 | j         /i x| _         }| j        D ]}|                    |d          dz   ||<   | j         }i }|j        d}}| j        D ]?} ||          r	||         }n|                    |d          }|dz
  ||<   |dk    r|dz   }@t          |t          | j                  t          | j                  z             S rG   )r,   r    rJ   rH   r   r   r;   )r#   r,   r>   availavailhasr   numbs          r   quick_ratiozSequenceMatcher.quick_ration  s    	 ?"+--DOjv = =",..a"8"81"<
3_
 !.'6 	& 	&Cx}} .Sz!~~c1--E#Jaxx!A+TVs46{{)BCCCr   c                     	 t          | j                  t          | j                  }}t          t	          ||          ||z             S r   )r;   r   r    r   r|   )r#   ra   rb   s      r   real_quick_ratioz SequenceMatcher.real_quick_ratio  s@    	 TVc$&kkB  BR"W555r   )Nr   r   T)r   Nr   N)rx   )__name__
__module____qualname__r$   r"   r&   r'   r-   rY   rl   rw   r   r   r   r   classmethodr   __class_getitem__r   r   r   r   r   ,   s        HT> > > >@
 
 
3 3 34  X% % %Nr- r- r- r-hE$ E$ E$N5 5 5n0 0 0 0dD D D2D D D:
6 
6 
6 $L11r   r   rx   333333?c                    	 |dk    st          d|          d|cxk    rdk    sn t          d|          g }t                      }|                    |            |D ]}|                    |           |                                |k    rY|                                |k    rA|                                |k    r)|                    |                                |f           t          ||          }d |D             S )Nr   zn must be > 0: g        r   zcutoff must be in [0.0, 1.0]: c                     g | ]\  }}|S r   r   )r   scorerd   s      r   
<listcomp>z%get_close_matches.<locals>.<listcomp>  s    %%%(%A%%%r   )	
ValueErrorr   r'   r&   r   r   r   r5   	_nlargest)wordpossibilitiesrB   cutoffresultsrd   s          r   r   r     s   8 66j3444&CjvvGHHHFAJJt * *	

16))==??f$$7799MM17799a.))) q&!!F%%f%%%%r   c                 ^    	 d                     d t          | |          D                       S )Nr   c              3   X   K   | ]%\  }}|d k    r|                                 r|n|V  &dS ) N)isspace)r   ctag_cs      r   r   z$_keep_original_ws.<locals>.<genexpr>  sR        Au c\\aiikk\u     r   )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	dS )
r   Nc                 $    	 || _         || _        d S r   linejunkcharjunk)r#   r   r   s      r   r$   zDiffer.__init__*  s    	& ! r   c           	   #     K   	 t          | j        ||          }|                                D ]\  }}}}}|dk    r|                     ||||||          }	no|dk    r|                     d|||          }	nP|dk    r|                     d|||          }	n1|dk    r|                     d|||          }	nt          d|          |	E d {V  d S )	Nrn   ro   -rp   +rq   r   unknown tag )r   r   rw   _fancy_replace_dumpr   )
r#   r   r    cruncherrv   rK   rL   rM   rN   gs
             r   comparezDiffer.compareA  s     	2 #4=!Q77'/';';'='= 	 	#Cc3i''3QSAAJJsAsC00JJsAsC00JJsAsC00 jSS!:;;;LLLLLLLL	 	r   c              #   P   K   	 t          ||          D ]}|d||         V  d S )Nr   )rI   )r#   rv   rd   lohir=   s         r   r   zDiffer._dumpj  sH      Br2 	( 	(A SS!A$$'''''	( 	(r   c              #     K   ||z
  ||z
  k     r1|                      d|||          }|                      d|||          }n0|                      d|||          }|                      d|||          }||fD ]
}	|	E d {V  d S )Nr   r   )r   )
r#   r   rK   rL   r    rM   rN   firstsecondr   s
             r   _plain_replacezDiffer._plain_replaceo  s       9sSy  ZZQS11EZZQS11FFZZQS11EZZQS11F 	 	ALLLLLLLL	 	r   c              #     K   	 d\  }}t          | j                  }	d\  }
}t          ||          D ]}||         }|	                    |           t          ||          D ]}||         }||k    r|
||}}
|	                    |           |	                                |k    rH|	                                |k    r0|	                                |k    r|	                                ||}}}||k     r+|
"|                     ||||||          E d {V  d S |
|d}}}nd }
| 	                    ||||||          E d {V  ||         ||         }}|
dx}}|	
                    ||           |	                                D ]o\  }}}}}||z
  ||z
  }}|dk    r|d|z  z  }|d|z  z  })|dk    r	|d|z  z  }8|d	k    r	|d
|z  z  }G|dk    r|d|z  z  }|d|z  z  }^t          d|          |                     ||||          E d {V  nd|z   V  | 	                    ||dz   |||dz   |          E d {V  d S )N)gGz?g      ?NNr   r   rn   ^ro   r   rp   r   rq   r   r     r1   )r   r   rI   r'   r&   r   r   r   r   _fancy_helperr"   rw   r   _qformat)r#   r   rK   rL   r    rM   rN   
best_ratior   r   eqieqjrW   rt   r=   rs   best_ibest_jaeltbeltatagsbtagsrv   ai1ai2bj1bj2ra   rb   s                                r   r   zDiffer._fancy_replace}  s0     	( (
F"4=11S
 sC 	H 	HA1Bb!!!3__ H HqT88{#$aS!!"%%% ,,..;;**,,z99nn&&33191A1A1aJ!H" {..q#sAsCHHHHHHHHH),c3JFFF C %%afafEEEEEEEEE vY&	d;EEdD)))+3+?+?+A+A @ @'S#sCsC#IB)##S2X%ES2X%EEH__S2X%EEH__S2X%EEG^^S2X%ES2X%EE$*%>???}}T4>>>>>>>>>> + %%a36!8SIIIIIIIIIIIr   c              #      K   g }||k     r:||k     r|                      ||||||          }n7|                     d|||          }n||k     r|                     d|||          }|E d {V  d S )Nr   r   )r   r   )r#   r   rK   rL   r    rM   rN   r   s           r   r   zDiffer._fancy_helper  s      99Syy''3QSAAJJsAsC003YY

33,,Ar   c              #      K   	 t          ||                                          }t          ||                                          }d|z   V  |rd| dV  d|z   V  |r
d| dV  d S d S )N- z? 
+ )r   rstrip)r#   alinebliner   r   s        r   r   zDiffer._qformat  s      	 "%//6688!%//6688Ul 	! u...   Ul 	! u...     	! 	!r   r   )
r   r   r   r$   r   r   r   r   r   r   r   r   r   r   r     s        Sj! ! ! !.' ' 'R( ( (
  \J \J \J|
 
 
! ! ! ! !r   r   Nz\s*(?:#\s*)?$c                     	  ||           d uS r   r   )linepats     r   r   r     s     3t99D  r    	c                     	 | |v S r   r   )chwss     r   r   r   %  s     8Or   c                     	 | dz   }|| z
  }|dk    rd                     |          S |s|dz  }d                     ||          S Nr1   z{}z{},{}formatstartstop	beginningr   s       r   _format_range_unifiedr   <  sW    &	IE\F{{{{9%%% Q	>>)V,,,r   r   r   c           	   #     K   	 t          | ||||||           d}t          d | |                              |          D ]"}	|sfd}|rd                    |          nd}
|rd                    |          nd}d                    ||
|          V  d                    |||          V  |	d         |	d         }}t	          |d	         |d
                   }t	          |d         |d                   }d                    |||          V  |	D ]S\  }}}}}|dk    r| ||         D ]	}d|z   V  
#|dv r| ||         D ]	}d|z   V  
|dv r|||         D ]	}d|z   V  
T$d S )NFT	{}r   
--- {}{}{}z
+++ {}{}{}r   rz   r1      rx      z@@ -{} +{} @@{}rq   r   >   ro   rn   r   >   rp   rn   r   )_check_typesr   r   r   r   )r   r    fromfiletofilefromfiledate
tofiledaterB   linetermstartedr   fromdatetodater   lastfile1_rangefile2_rangerv   re   ri   rf   rj   r   s                         r   r
   r
   G  s     %N Axz8LLLG a**>>qAA % % 	@G6BJv}}\222H2<DV]]:..."F%%h(CCCCC%%ffh?????Ahb	t+E!Hd1g>>+E!Hd1g>>&&{KJJJJJ#( 
	% 
	%CRRg~~beH % %D*$$$$+++beH % %D*$$$$+++beH % %D*$$$$
	%% %r   c                     	 | dz   }|| z
  }|s|dz  }|dk    rd                     |          S d                     |||z   dz
            S r   r   r   s       r   _format_range_contextr     sa    &	IE\F Q	{{{{9%%%>>)Y%7!%;<<<r   c           	   #     K   	 t          | ||||||           t          dddd          }d}	t          d | |                              |          D ]r}
|	sfd}	|rd                    |          nd	}|rd                    |          nd	}d
                    |||          V  d                    |||          V  |
d         |
d         }}d|z   V  t          |d         |d                   }d                    ||          V  t          d |
D                       r+|
D ](\  }}}}}|dk    r| ||         D ]}||         |z   V  )t          |d         |d                   }d                    ||          V  t          d |
D                       r+|
D ](\  }}}}}|dk    r|||         D ]}||         |z   V  )td S )Nr   r   z! r   )rp   ro   rn   rq   FTr   r   z
*** {}{}{}r   r   rz   z***************r1   r   z*** {} ****{}c              3   *   K   | ]\  }}}}}|d v V  dS )>   ro   rn   Nr   r   rv   _s      r   r   zcontext_diff.<locals>.<genexpr>  2      IIQ1as++IIIIIIr   rp   rx   r   z--- {} ----{}c              3   *   K   | ]\  }}}}}|d v V  dS )>   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   rB   r   prefixr   r   r   r   r   r   r   rv   re   ri   r   r   r   rf   rj   s                           r   r	   r	     sc     (T Axz8LLLdDEEEFG a**>>qAA 1 1 	@G6BJv}}\222H2<DV]]:..."F%%h(CCCCC%%ffh?????Ahb	t(****+E!Hd1g>>$$[(;;;;;II5IIIII 	1%* 1 1!RQ(?? !"R% 1 1$SkD00000+E!Hd1g>>$$[(;;;;;II5IIIII 	1%* 1 1!Q2r(?? !"R% 1 1$SkD0000071 1r   c                    | rOt          | d         t                    s4t          dt          | d                   j        d| d         d          |rOt          |d         t                    s4t          dt          |d                   j        d|d         d          |D ])}t          |t                    st          d|          *d S )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     	 5AaD#&& 5iad,,,addd4 5 5 	5 5AaD#&& 5iad,,,addd4 5 5 	5 K K#s## 	K)CCIJJJ	KK Kr   r      
c	           
   #   R  K   	 d }	t          t          |	|                    }t          t          |	|                    } |	|          } |	|          } |	|          } |	|          } |	|          } | ||||||||          }
|
D ]}|                    dd          V  d S )Nc                     	 |                      dd          S # t          $ r0}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  sm    	*88G%6777 	* 	* 	* 	*GG$$$aaa)CC..c)	*s    
A+AAr  r  )r^   r_   encode)dfuncr   r    r   r   r   r   rB   r   r  linesr   s               r   r   r     s      * * * 	S^^AS^^AvhHVF^^F6,''L
##JvhHE!Q&,
AxPPE 6 6kk'#45555556 6r   c                 L    	 t          ||                              | |          S r   )r   r   )r   r    r   r   s       r   r   r     s*    !D (H%%--a333r   c              #   8  K   	 dd l } |j        d          t          | |||          ddgffd	fdfd} |            }|
|E d {V  d S |dz  }d}	 dd g|z  }
}	d}|du r<	 t          |          \  }}}n# t          $ r Y d S w xY w|	|z  }|||f|
|<   |	dz  }	|du <|	|k    rd	V  |}n|	}d}	|r|	|z  }|	dz  }	|
|         V  |dz  }||dz
  }	 |r)t          |          \  }}}|r|dz
  }n|dz  }|||fV  |)n# t          $ r Y d S w xY w)
Nr   z(\++|\-+|\^+)c                    	 ||xx         dz  cc<   |%||         |                      d          dd          fS |dk    r|                      d          |                      d          }}g }|fd}                    ||           t          |          D ]1\  }\  }	}
|d|	         dz   |z   ||	|
         z   dz   ||
d          z   }2|dd          }n,|                      d          dd          }|sd}d|z   |z   dz   }||         |fS )	Nr1   r   r   ?c                     |                     |                     d          d         |                                 g           |                     d          S )Nr1   r   )r5   r   span)match_objectsub_infos     r   record_sub_infoz3_mdiff.<locals>._make_line.<locals>.record_sub_info  sL    !3!3A!6!6q!9,:K:K:M:M NOO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 dOEIIaLL$455!IIaLL%))A,,'DH6> - - - - MM/'222 $,H#5#5 N NKU3AeG}T)#-d59o=dB4:M8DD 99Q<<#D  *$t+d2D $%%r   c               3   ~  K   	 g } d\  }}	 t          |           dk     r6|                     t          d                     t          |           dk     6d                    d | D                       }|                    d          r|}n|                    d          r | dd	           | dd
          dfV  |                    d          r|d
z  } | dd	          d dfV  |                    d          r | dd	          d }}|d
z
  d	}}nZ|                    d          r | d d	           | dd
          dfV  C|                    d          r | dd	           | d d
          dfV  w|                    d          r|d
z  } | dd	          d dfV  |                    d          r|d
z  }d  | dd
          dfV  |                    d          rd  | dd
          }}|d
z   d	}}nj|                    d          r|d
z  }d  | dd
          dfV  -|                    d          r' | d d          d d	           | d d
          dfV  i|d	k     r|d
z  }dV  |d	k     |d	k    r|d
z  }dV  |d	k    |                    d          rd S ||dfV  )N)r   r   Tr   Xr   c                     g | ]
}|d          S )r   r   )r   r   s     r   r   z2_mdiff.<locals>._line_iterator.<locals>.<listcomp>  s    333Ta333r   z-?+?r  r   r1   z--++r   )z--?+z--+r   z-+?z-?+z+--r   )r   z+-r   F)Nr   r   T)r5  NT)r;   r5   nextr   
startswith)r  num_blanks_pendingnum_blanks_to_yieldr   	from_lineto_liner1  diff_lines_iterators         r   _line_iteratorz_mdiff.<locals>._line_iterator  s     	 26//F	- e**q..T"5s;;<<< e**q..33U33344A||C   3 '9##f%% . js1--zz%A/F/FLLLLf%% * #a'" js1--tT9999344 $ %/JuS$;$;T'	9KA9Ma$6##e$$  jtA..

5Q0G0GMMMMe$$  js1--zz%Q/G/GMMMMc"" "a'" js1--tT9999e$$  #a'"JJuS33T9999l++ %)::eC+B+B7	9KA9Ma$6##c"" "a'"JJuS33T9999c""  jqqq$q11**U42J2J5PPPP &))#q(#)))) &)) &))#q(#)))) &)) ||C   -,,,,MF	-r   c               3     K   	              } g g }}	 t          |          dk    st          |          dk    r~	 t          |           \  }}}n# t          $ r Y d S w xY w||                    ||f           ||                    ||f           t          |          dk    kt          |          dk    ~|                    d          \  }}|                    d          \  }}|||p|fV  )NTr   )r;   r6  StopIterationr5   r\   )	line_iterator	fromlinestolinesr:  r;  
found_difffromDiffto_diffr=  s	           r   _line_pair_iteratorz#_mdiff.<locals>._line_pair_iterator  s+     	 '((R'		:y>>1$$Ga59-5H5H2Iw

$   FF($$i
%;<<<&NNGJ#7888 y>>1$$Ga #,--"2"2Ix&{{1~~GWWX%89999	:s   A 
AAr1   TF)NNN)recompiler   r6  r?  )rA  rB  contextr   r   rG  rF  line_pair_iteratorlines_to_writeindexcontextLinesrC  r:  r;  r=   r=  r1  r0  r<  s                  @@@@r   _mdiffrN  <  sz     @ III 
+,,I  	'(8DD78e 6& 6& 6& 6& 6& 6&pV- V- V- V- V- V-p: : : : :B -,..%%%%%%%%%% 	1(	 #$dVW%5<EJ%%59:L5M5M2Iw

$   FFGO#,gz"BQ
 %% w&&&&!(!&  $GO
"1o%%%!#	 ! $ %QYN$ 959:L5M5M2Iw
! ,)0&!+#Wj8888 % 9 !   M(	s$   /B 
BB+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                   |    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dS )r   r      Nc                 @    	 || _         || _        || _        || _        d S r   )_tabsize_wrapcolumn	_linejunk	_charjunk)r#   tabsize
wrapcolumnr   r   s        r   r$   zHtmlDiff.__init__  s*    		  %!!r   r   F   zutf-8)charsetc                    	 | j         t          | j        | j        |                     ||||||          |          z                      |d                              |          S )N)rI  numlines)styleslegendtablerY  xmlcharrefreplace)_file_templater  _styles_legend
make_tabler  r  )r#   rA  rB  fromdesctodescrI  r[  rY  s           r   	make_filezHtmlDiff.make_file  sy    	" #d<<//)Wh*1H " F F'
 '
 '
 
 6'.//w	@r   c                 R     	  fdfd|D             }fd|D             }||fS )Nc                     |                      dd          } |                     j                  } |                      dd          } |                      dd                              d          S )Nr   r$  	r   )rn   
expandtabsrR  r   )r   r#   s    r   expand_tabsz2HtmlDiff._tab_newline_replace.<locals>.expand_tabs  s`    <<D))D??4=11D <<D))D<<S))00666r   c                 &    g | ]} |          S r   r   r   r   rk  s     r   r   z1HtmlDiff._tab_newline_replace.<locals>.<listcomp>  s#    ===4[[&&===r   c                 &    g | ]} |          S r   r   rm  s     r   r   z1HtmlDiff._tab_newline_replace.<locals>.<listcomp>  s#    999;;t$$999r   r   )r#   rA  rB  rk  s   `  @r   _tab_newline_replacezHtmlDiff._tab_newline_replace  sa    		7 	7 	7 	7 	7 >===9===	9999999  r   c                 >   	 |s|                     ||f           d S t          |          }| j        }||k    s||                    d          dz  z
  |k    r|                     ||f           d S d}d}d}||k     rO||k     rI||         dk    r|dz  }||         }|dz  }n||         dk    r|dz  }d}n
|dz  }|dz  }||k     r||k     I|d |         }	||d          }
|r|	dz   }	d|z   |
z   }
|                     ||	f           |                     |d|
           d S )Nr$  rx   r   r   r1   r%  >)r5   r;   rS  count_split_line)r#   	data_listline_numr+  ru   r{   r=   rB   markline1line2s              r   rs  zHtmlDiff._split_line  s   	  	ht_---F 4yyCKKdTZZ%5%5a%78S@@ht_---F #gg!d((Aw$QAwQaDQQQ #gg!d(( RaRQRR
  	(DLE4K%'E 	(5)*** 	3u-----r   c              #   2  K   	 |D ]\  }}}||||fV  ||c\  }}\  }}g g }
}	|                      |	||           |                      |
||           |	s|
r?|	r|	                    d          }nd}|
r|
                    d          }nd}|||fV  |	=|
?d S )Nr   )r   r   )rs  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88VF6222  	+f 	+ ('||AHH'H &#ZZ]]FF%Fvd****  	+f 	+	+ 	+r   c                 V   	 g g g }}}|D ]\  }}}	 |                      | j        d|g|R             |                      | j        d|g|R             n:# t          $ r- |                     d            |                     d            Y nw xY w|                     |           |||fS rG   )r5   _format_liner  )r#   rz  r  r  flaglistr{  r|  r}  s           r   _collect_lineszHtmlDiff._collect_lines.  s    	 $&b$) 		" 		" HVD$ 1 1!D C( C C CDDD/d/$????@@@@ $ $ $%%%d#####$ OOD!!!!x''s   AA4BBc                 @   	 	 d|z  }d| j         |         |d}n# t          $ r d}Y nw xY w|                    dd                              dd                              d	d
          }|                    dd                                          }d|d|d|dS )Nz%dz id=""r   &z&amp;rq  z&gt;<z&lt;r   &nbsp;z<td class="diff_header"z</td><td nowrap="nowrap">z</td>)_prefixr  rn   r   )r#   r)  r}  linenumr+  ids         r   r  zHtmlDiff._format_lineC  s    		WnGG!%d!3!3GGG<BB 	 	 	BBB	 \\#g&&..s6::BB3vNN ||C))0022 ""WWWTTT# 	#s    ++c                     	 dt           j        z  }dt           j        z  }t           xj        dz  c_        ||g| _        d S )Nzfrom%d_zto%d_r1   )r   _default_prefixr  )r#   
fromprefixtoprefixs      r   _make_prefixzHtmlDiff._make_prefixZ  sE    + !99
X55  A%  "8,r   c                    	 | j         d         }dgt          |          z  }dgt          |          z  }d\  }	}
d}t          |          D ]=\  }}|r4|
s1d}
|}t          d||z
  g          }d||	fz  ||<   |	dz  }	d||	fz  ||<   ;d}
>|sdg}dg}dg}d}|rd	g}|}nd
gx}}|d         sd|z  |d<   d|z  ||<   |||||fS )Nr1   r   )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;   r3   r{   )r#   r  r  r  rI  r[  r  next_id	next_hrefnum_chg	in_changer   r=   r}  s                 r   _convert_flagszHtmlDiff._convert_flagse  sV   ( <? $s8}}$DX&	%)) 	" 	"FAd "  + $ID QqzN++A!:hw=O!OGAJ qLG&J!'N+ '+IdO "		 		QwHdGID QPQ!%O$PP6{ 	J>IIaL?8L	$x	'99r   c           
         	 |                                   |                     ||          \  }}|r|}nd }t          |||| j        | j                  }| j        r|                     |          }|                     |          \  }	}
}|                     |	|
|||          \  }	}
}}}g }d}t          t          |                    D ]a}||         |dk    r|                    d           &|                    |||         ||         |	|         ||         |
|         fz             b|s|rddd|z  dd|z  d}nd	}| j        t          d	                    |          || j        d
                   z  }|                    dd                              dd                              dd                              dd                              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>r   r1   )	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>ri  r  )r  ro  rN  rT  rU  rS  r  r  r  rI   r;   r5   _table_templater  r   r  rn   )r#   rA  rB  rd  re  rI  r[  context_linesrz  r  r  r  r  r  r   fmtr=   r  r^  s                      r   rc  zHtmlDiff.make_table  sO   	$ 	 !55iHH	'  	!$MM My#~/ / /  	.&&u--E $(#6#6u#=#=  6:5H5HVHWX67 6727 7s8}}%% 	D 	DA{" q55HHJKKK#IaL!+4Q<q	!C C D D D D 	v 	33=HH33=FFF	HJJ J$tggajj!<?($ ($ ($ $
 }}U#<==WU#<==WU#<==WT),,WT(++		,r   )r   r   FrX  )r   r   r   r`  ra  r  rb  r  r   r$   rf  ro  rs  r  r  r  r  r  rc  r   r   r   r   r     s        $NG%OGO4+" " " "" AC*+@8?@ @ @ @ @6! ! !.5. 5. 5.n+ + +8( ( (*# # #.	- 	- 	--: -: -:^ INK, K, K, K, K, K,r   r   c              #      K   	 	 dddt          |                   }n!# t          $ r t          d|z            d w xY wd|f}| D ]}|d d         |v r|dd          V  d S )Nr   r   )r1   r   z)unknown delta choice (must be 1 or 2): %rr   r   )intKeyErrorr   )deltawhichrv   prefixesr   s        r   r   r     s      *.4  U, . . .D"# $ $)-	.. c{H  8xqrr(NNN s    <c                  <    dd l } dd l}|                     |          S r[   )doctestdifflibtestmod)r  r  s     r   _testr    s,    ??7###r   __main__)rx   r   )r   )r   r   r   r   rx   r   )r   r   r   r   rx   r  )%__all__heapqr   r   collectionsr   _namedtupletypesr   r   r   r   r   r   r   rG  rH  matchr   r   r   r
   r   r	   r   r   r   rN  r`  ra  r  rb  objectr   r   r  r   r   r   r   <module>r     s  8> > > ( ' ' ' ' ' 1 1 1 1 1 1      GZ((  
k	2 k	2 k	2 k	2 k	2 k	2 k	2 k	2\.& .& .& .&b  l! l! l! l! l! l! l! l!~	 
			%2:&677= ! ! ! !    .	- 	- 	- =?.2B% B% B% B%R	= 	= 	= ,.?CJ1 J1 J1 J1XK K K" 25?D6 6 6 6< (9 #4 #4 #4 #4J (,d%K K K K\(0"], ], ], ], ],v ], ], ],~
   @$ $ $ z	EGGGGG r   