o
    IAflE                    @   s<  	 g d Z ddlmZ ddlmZ ddlmZ eddZ	dd Z
G d	d
 d
Zd9ddZdd ZG dd dZddlZedjfddZd:ddZdd Z		d;ddZd d! Z		d;d"d#Zd$d% Z	&	'd<d(d)Zdefd*d+Zddefd,d-Zd.Zd/Zd0Zd1ZG d2d3 d3e Z![d4d5 Z"d6d7 Z#e$d8kre#  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                 C   s   |rd|  | S dS )Ng       @      ? )matcheslengthr   r   /usr/lib/python3.10/difflib.py_calculate_ratio'   s   r   c                   @   s|   e Zd Z	 dddZdd Zdd	 Zd
d Zdd ZdddZdd Z	dd Z
d ddZdd Zdd Zdd ZeeZdS )!r   N Tc                 C   s*   	 || _ d  | _| _|| _| || d S N)isjunkabautojunkset_seqs)selfr   r   r   r   r   r   r   __init__x   s
   :zSequenceMatcher.__init__c                 C   s   	 |  | | | d S r   )set_seq1set_seq2)r   r   r   r   r   r   r      s   
zSequenceMatcher.set_seqsc                 C   s&   	 || j u rd S || _ d  | _| _d S r   )r   matching_blocksopcodes)r   r   r   r   r   r       s
   
zSequenceMatcher.set_seq1c                 C   s4   	 || j u rd S || _ d  | _| _d | _|   d S r   )r   r"   r#   
fullbcount_SequenceMatcher__chain_b)r   r   r   r   r   r!      s   
zSequenceMatcher.set_seq2c                 C   s   | j }i  | _}t|D ]\}}||g }|| qt  | _}| j}|r?| D ]}||r6|	| q+|D ]}||= q9t  | _
}t|}	| jrr|	dkrt|	d d }
| D ]\}}t||
kri|	| qZ|D ]	}||= qld S d S d S )N   d      )r   b2j	enumerate
setdefaultappendsetbjunkr   keysaddZbpopularlenr   items)r   r   r)   ieltindicesZjunkr   ZpopularnZntestZidxsr   r   r   Z	__chain_b
  s4   


zSequenceMatcher.__chain_br   c                 C   s8  	 | j | j| j| jjf\}}}}|d u rt|}|d u r t|}||d}	}
}i }g }t||D ]@}|j}i }||| |D ].}||k rGq@||krM n"||d dd  }||< ||krn|| d || d |}	}
}q@|}q1|	|kr|
|kr|||
d  s||	d  ||
d  kr|	d |
d |d }	}
}|	|kr|
|kr|||
d  s||	d  ||
d  ks|	| |k r|
| |k r|||
|  s||	|  ||
|  kr|d7 }|	| |k r|
| |k r|||
|  s||	|  ||
|  ks|	|krJ|
|krJ|||
d  rJ||	d  ||
d  krJ|	d |
d |d }	}
}|	|krJ|
|krJ|||
d  rJ||	d  ||
d  ks|	| |k r|
| |k r|||
|  r||	|  ||
|  kr|d }|	| |k r|
| |k r|||
|  r||	|  ||
|  ksnt|	|
|S Nr   r(   )	r   r   r)   r.   __contains__r1   rangegetr   )r   aloahiblobhir   r   r)   ZisbjunkZbestiZbestjZbestsizeZj2lenZnothingr3   Zj2lengetZnewj2lenjkr   r   r   find_longest_match1  sv   9 
z"SequenceMatcher.find_longest_matchc                 C   sx  	 | j d ur	| j S t| jt| j}}d|d|fg}g }|rg| \}}}}| |||| \}	}
}}|re|| ||	k rL||
k rL|||	||
f |	| |k re|
| |k re||	| ||
| |f |s|  d } }}g }|D ](\}}}|| |kr|| |kr||7 }qu|r||||f |||}}}qu|r||||f |||df tt	t
j|| _ | j S Nr   )r"   r1   r   r   poprA   r,   sortlistmapr   _make)r   lalbqueuer"   r;   r<   r=   r>   r3   r?   r@   xi1j1Zk1Znon_adjacenti2j2Zk2r   r   r   get_matching_blocks  s<   


z#SequenceMatcher.get_matching_blocksc                 C   s   	 | j d ur	| j S d }}g  | _ }|  D ]@\}}}d}||k r(||k r(d}n||k r/d}n||k r5d}|rA||||||f || || }}|rV|d||||f q|S )Nr   r   replacedeleteinsertequal)r#   rP   r,   )r   r3   r?   Zansweraibjsizetagr   r   r   get_opcodes  s(   

zSequenceMatcher.get_opcodes   c           
      c   sp   	 |   }|sdg}|d d dkr/|d \}}}}}|t||| |t||| |f|d< |d d dkrS|d \}}}}}||t||| |t||| f|d< || }g }	|D ]C\}}}}}|dkr|| |kr|	||t||| |t||| f |	V  g }	t||| t||| }}|	|||||f q[|	rt|	dkr|	d d dks|	V  d S d S d S )N)rT   r   r(   r   r(   r   rT   r(   )rY   maxminr,   r1   )
r   r6   ZcodesrX   rL   rN   rM   rO   nngroupr   r   r   get_grouped_opcodes#  s.   &&( 
z#SequenceMatcher.get_grouped_opcodesc                 C   s2   	 t dd |  D }t|t| jt| j S )Nc                 s   s    | ]}|d  V  qdS )r[   Nr   ).0Ztripler   r   r   	<genexpr>k  s    z(SequenceMatcher.ratio.<locals>.<genexpr>)sumrP   r   r1   r   r   )r   r   r   r   r   ratioU  s   zSequenceMatcher.ratioc                 C   s   	 | j d u ri  | _ }| jD ]}||dd ||< q| j }i }|jd}}| jD ]}||r4|| }n||d}|d ||< |dkrH|d }q)t|t| jt| j S r7   )r$   r   r:   r8   r   r   r1   )r   r$   r4   ZavailZavailhasr   Znumbr   r   r   quick_ration  s"   
	



zSequenceMatcher.quick_ratioc                 C   s,   	 t | jt | j}}tt|||| S r   )r1   r   r   r   r]   )r   rH   rI   r   r   r   real_quick_ratio  s   z SequenceMatcher.real_quick_ratio)Nr   r   T)r   Nr   N)rZ   )__name__
__module____qualname__r   r   r    r!   r%   rA   rP   rY   r`   rd   re   rf   classmethodr   __class_getitem__r   r   r   r   r   ,   s    
J@,
'tG
72r   rZ   333333?c                 C   s   	 |dkst d|f d|  krdksn t d|f g }t }||  |D ]"}|| | |krL| |krL| |krL|| |f q*t||}dd |D S )Nr   zn must be > 0: %rg        r   z cutoff must be in [0.0, 1.0]: %rc                 S   s   g | ]\}}|qS r   r   )ra   ZscorerK   r   r   r   
<listcomp>      z%get_close_matches.<locals>.<listcomp>)	
ValueErrorr   r!   r    rf   re   rd   r,   	_nlargest)ZwordZpossibilitiesr6   cutoffresultsrK   r   r   r   r     s"   


r   c                 C   s   	 d dd t| |D S )Nr   c                 s   s,    | ]\}}|d kr|  r|n|V  qdS ) N)isspace)ra   cZtag_cr   r   r   rb     s
    
z$_keep_original_ws.<locals>.<genexpr>)joinzip)rs   Ztag_sr   r   r   _keep_original_ws  s   
ry   c                   @   sH   e Zd Z	 dddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dS )r   Nc                 C   s   	 || _ || _d S r   linejunkcharjunk)r   r{   r|   r   r   r   r   *  s   
zDiffer.__init__c           
   	   c   s    	 t | j||}| D ]I\}}}}}|dkr#| ||||||}	n.|dkr0| d|||}	n!|dkr=| d|||}	n|dkrJ| d|||}	ntd|f |	E d H  qd S )	NrQ   rR   -rS   +rT   rt   unknown tag %r)r   r{   rY   _fancy_replace_dumpro   )
r   r   r   cruncherrX   r;   r<   r=   r>   gr   r   r   compareA  s   zDiffer.comparec                 c   s*    	 t ||D ]}d||| f V  qd S )Nz%s %s)r9   )r   rX   rK   lohir3   r   r   r   r   j  s
   zDiffer._dumpc           
      c   sp    || || k r|  d|||}|  d|||}n|  d|||}|  d|||}||fD ]}	|	E d H  q.d S )Nr~   r}   )r   )
r   r   r;   r<   r   r=   r>   firstsecondr   r   r   r   _plain_replaceo  s   zDiffer._plain_replacec                 c   s2   	 d\}}t | j}	d\}
}t||D ]F}|| }|	| t||D ]5}|| }||kr8|
d u r7||}
}q$|	| |	 |krY|	 |krY|	 |krY|	 ||}}}q$q||k r{|
d u rr| ||||||E d H  d S |
|d}}}nd }
| 	||||||E d H  || || }}|
d u rd }}|	
|| |	 D ]N\}}}}}|| || }}|dkr|d| 7 }|d| 7 }q|dkr|d| 7 }q|d	kr|d
| 7 }q|dkr|d| 7 }|d| 7 }qtd|f | ||||E d H  nd| V  | 	||d |||d |E d H  d S )N)gGz?g      ?NNr   r   rQ   ^rR   r}   rS   r~   rT   rt   r     r(   )r   r|   r9   r!   r    rf   re   rd   r   _fancy_helperr   rY   ro   _qformat)r   r   r;   r<   r   r=   r>   Z
best_ratiorq   r   ZeqiZeqjr?   rV   r3   rU   Zbest_iZbest_jZaeltZbeltatagsbtagsrX   Zai1Zai2Zbj1Zbj2rH   rI   r   r   r   r   }  s`   





&zDiffer._fancy_replacec                 c   sd    g }||k r||k r|  ||||||}n| d|||}n||k r+| d|||}|E d H  d S )Nr}   r~   )r   r   )r   r   r;   r<   r   r=   r>   r   r   r   r   r     s   zDiffer._fancy_helperc                 c   s`    	 t || }t || }d| V  |rd| dV  d| V  |r.d| dV  d S d S )N- z? 
+ )ry   rstrip)r   ZalineZbliner   r   r   r   r   r     s   

zDiffer._qformatr   )
rg   rh   ri   r   r   r   r   r   r   r   r   r   r   r   r     s    
U)^r   Nz\s*(?:#\s*)?$c                 C   s   	 || d uS r   r   )linepatr   r   r   r     s   r    	c                 C   s
   	 | |v S r   r   )Zchwsr   r   r   r   %  s   r   c                 C   s<   	 | d }||  }|dkrd |S |s|d8 }d ||S Nr(   z{}z{},{}formatstartstopZ	beginningr   r   r   r   _format_range_unified<  s   
r   r   r   c                 c   sL   	 t | |||||| d}td | ||D ]}	|s?d}|r$d|nd}
|r-d|nd}d||
|V  d|||V  |	d |	d }}t|d	 |d
 }t|d |d }d|||V  |	D ]>\}}}}}|dkr~| || D ]}d| V  quqd|dv r| || D ]}d| V  q|dv r||| D ]}d| V  qqdqd S )NFT	{}r   
--- {}{}{}z
+++ {}{}{}r   r[   r(      rZ      z@@ -{} +{} @@{}rT   rt   >   rQ   rR   r}   >   rS   rQ   r~   )_check_typesr   r`   r   r   )r   r   fromfiletofilefromfiledate
tofiledater6   linetermstartedr_   fromdatetodater   lastfile1_rangefile2_rangerX   rL   rN   rM   rO   r   r   r   r   r	   G  s:   'r	   c                 C   sD   	 | d }||  }|s|d8 }|dkrd |S d ||| d S r   r   r   r   r   r   _format_range_context  s   
r   c                 c   s   	 t | |||||| tddddd}d}	td | ||D ]}
|	sGd}	|r,d|nd	}|r5d|nd	}d
|||V  d|||V  |
d |
d }}d| V  t|d |d }d||V  tdd |
D r|
D ]\}}}}}|dkr| || D ]	}|| | V  qqpt|d |d }d||V  tdd |
D r|
D ]\}}}}}|dkr||| D ]	}|| | V  qqqd S )Nr   r   z! r   )rS   rR   rQ   rT   FTr   r   z
*** {}{}{}r   r   r[   z***************r(   r   z*** {} ****{}c                 s   "    | ]\}}}}}|d v V  qdS )>   rQ   rR   Nr   ra   rX   _r   r   r   rb          zcontext_diff.<locals>.<genexpr>rS   rZ   r   z--- {} ----{}c                 s   r   )>   rS   rQ   Nr   r   r   r   r   rb     r   rR   )r   dictr   r`   r   r   any)r   r   r   r   r   r   r6   r   prefixr   r_   r   r   r   r   r   rX   rL   rN   r   r   r   rM   rO   r   r   r   r     s>   *
r   c                 G   s   | rt | d tstdt| d j| d f |r0t |d ts0tdt|d j|d f |D ]}t |ts@td|f q2d S )Nr   z)lines to compare must be str, not %s (%r)z"all arguments must be str, not: %r)
isinstancestr	TypeErrortyperg   )r   r   argsargr   r   r   r     s   
r          
c	              	   c   s    	 dd }	t t|	|}t t|	|}|	|}|	|}|	|}|	|}|	|}| ||||||||}
|
D ]	}|ddV  q5d S )Nc              
   S   sD   z|  ddW S  ty! } zdt| j| f }t||d }~ww )Nasciisurrogateescapez(all arguments must be bytes, not %s (%r))decodeAttributeErrorr   rg   r   )rs   errmsgr   r   r   r     s   
zdiff_bytes.<locals>.decoder   r   )rE   rF   encode)Zdfuncr   r   r   r   r   r   r6   r   r   linesr   r   r   r   r
     s   	r
   c                 C   s   	 t ||| |S r   )r   r   )r   r   r{   r|   r   r   r   r     s   "r   c                 #   s   	 dd l }|dt| |||ddgffdd	fdd  fdd}| }|d u r7|E d H  d S |d	7 }d}	 dd g| }	}
d}|du rsz	t|\}}}W n
 ty_   Y d S w |	| }|||f|
|< |	d	7 }	|du sL|	|kr}dV  |}n|	}d}	|r|	| }|	d	7 }	|
| V  |d	8 }|s|d	 }z|rt|\}}}|r|d	 }n|d	8 }|||fV  |sW n
 ty   Y d S w q>)Nr   z(\++|\-+|\^+)c                    s   	 ||  d7  < |d u r|| |  ddd  fS |dkra|  d|  d}}g }|fdd} || t|D ]\}\}	}
|d|	 d | ||	|
  d ||
d   }q;|dd  }n|  ddd  }|snd	}d| | d }|| |fS )
Nr(   r   r   ?c                 S   s&   | | dd |  g | dS )Nr(   r   )r,   r_   span)Zmatch_objectsub_infor   r   r   record_sub_info  s   
z3_mdiff.<locals>._make_line.<locals>.record_sub_info rt   )rC   subreversed)r   Z
format_keysideZ	num_linestextZmarkersr   r   keyZbeginend)	change_rer   r   
_make_linef  s"   2z_mdiff.<locals>._make_linec                  3   s`   	 g } d\}}	 t | dk r| td t | dk sddd | D }|dr/|}n|drC | d	d
 | d	ddfV  q|drW|d8 } | dd
d dfV  q|drm | dd
d }}|d d
}}n|dr | d d
 | d	ddfV  q|dr | d	d
 | d ddfV  q|dr|d8 } | dd
d dfV  q|dr|d7 }d  | dddfV  q|drd  | dd}}|d d
}}n,|dr|d7 }d  | dddfV  q|dr | d d  d d
 | d ddfV  q|d
k r|d7 }dV  |d
k s|d
kr!|d8 }dV  |d
ks|dr)d S ||dfV  q	)N)r   r   Tr   Xr   c                 S   s   g | ]}|d  qS )r   r   ra   r   r   r   r   rm     rn   z2_mdiff.<locals>._line_iterator.<locals>.<listcomp>z-?+?r   r   r(   z--++r}   )z--?+z--+r   z-+?z-?+z+--r~   )r   z+-rt   F)Nr   r   T)r   NT)r1   r,   nextrw   
startswith)r   Znum_blanks_pendingZnum_blanks_to_yieldrs   	from_lineto_line)r   diff_lines_iteratorr   r   _line_iterator  sr   










$



z_mdiff.<locals>._line_iteratorc                  3   s    	   } g g }}	 t |dkst |dkrMz	t| \}}}W n
 ty*   Y d S w |d ur6|||f |d urA|||f t |dkst |dks|d\}}|d\}}|||p`|fV  q)NTr   )r1   r   StopIterationr,   rC   )Zline_iterator	fromlinestolinesr   r   
found_diffZfromDiffZto_diff)r   r   r   _line_pair_iterator  s(   

z#_mdiff.<locals>._line_pair_iteratorr(   TF)NNN)recompiler   r   r   )r   r   contextr{   r|   r   r   Zline_pair_iteratorZlines_to_writeindexZcontextLinesr   r   r   r3   r   )r   r   r   r   r   _mdiff<  sf    
8X!


r   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                   @   s   e Zd Z	 eZeZeZeZdZdddefddZ			dd	d
ddZ
dd Zdd Zdd Zdd Zdd Zdd Zdd Z		dddZdS )r   r      Nc                 C   s   	 || _ || _|| _|| _d S r   )_tabsize_wrapcolumn	_linejunk	_charjunk)r   tabsizeZ
wrapcolumnr{   r|   r   r   r   r     s
   

zHtmlDiff.__init__r   F   zutf-8)charsetc                C   s<   	 | j t| j| j| j||||||d|d |d|S )N)r   numlines)ZstylesZlegendtabler   xmlcharrefreplace)_file_templater   _styles_legend
make_tabler   r   )r   r   r   fromdesctodescr   r   r   r   r   r   	make_file  s   zHtmlDiff.make_filec                    s:   	 fdd  fdd|D } fdd|D }||fS )Nc                    s6   |  dd} |  j} |  dd} |  dddS )Nrt   r   	r   )rQ   
expandtabsr   r   )r   )r   r   r   expand_tabs  s   z2HtmlDiff._tab_newline_replace.<locals>.expand_tabsc                       g | ]} |qS r   r   r   r   r   r   rm     rn   z1HtmlDiff._tab_newline_replace.<locals>.<listcomp>c                    r   r   r   r   r   r   r   rm     rn   r   )r   r   r   r   )r   r   r   _tab_newline_replace  s
   		zHtmlDiff._tab_newline_replacec                 C   s"  	 |s| ||f d S t|}| j}||ks"||dd  |kr+| ||f d S d}d}d}||k ri||k ri|| dkrL|d7 }|| }|d7 }n|| dkrY|d7 }d}n|d7 }|d7 }||k ri||k s9|d | }	||d  }
|r|	d }	d| |
 }
| ||	f | |d|
 d S )Nr   rZ   r   r   r(   r   >)r,   r1   r   count_split_line)r   Z	data_listZline_numr   rW   r\   r3   r6   ZmarkZline1Zline2r   r   r   r    s<   	
zHtmlDiff._split_linec                 c   s    	 |D ]N\}}}|d u r|||fV  q||\}}\}}g g }	}
|  |	|| |  |
|| |	s4|
rR|	r<|	d}nd}|
rF|
d}nd}|||fV  |	s4|
s4qd S )Nr   )r   rt   )r  rC   )r   diffsfromdatatodataflagZfromlineZfromtextZtolineZtotextfromlisttolistr   r   r   _line_wrapper  s*   
zHtmlDiff._line_wrapperc              	   C   s   	 g g g }}}|D ]:\}}}z| | jd|g|R   | | jd|g|R   W n ty?   | d  | d  Y nw | | q|||fS r7   )r,   _format_liner   )r   r  r  r	  flaglistr  r  r  r   r   r   _collect_lines.  s   

zHtmlDiff._collect_linesc                 C   sr   	 zd| }d| j | |f }W n ty   d}Y nw |dddddd	}|d
d }d|||f S )Nz%dz
 id="%s%s"r   &z&amp;r  z&gt;<z&lt;rt   &nbsp;z<<td class="diff_header"%s>%s</td><td nowrap="nowrap">%s</td>)_prefixr   rQ   r   )r   r   r  Zlinenumr   idr   r   r   r  C  s   zHtmlDiff._format_linec                 C   s2   	 dt j }dt j }t  jd7  _||g| _d S )Nzfrom%d_zto%d_r(   )r   _default_prefixr  )r   Z
fromprefixtoprefixr   r   r   _make_prefixZ  s
   

zHtmlDiff._make_prefixc                 C   s   	 | j d }dgt| }dgt| }d\}	}
d}t|D ]+\}}|rG|
sFd}
|}td|| g}d||	f ||< |	d7 }	d||	f ||< qd}
q|sddg}dg}dg}d}|r_d	g}|}nd
g }}|d snd| |d< d| ||< |||||fS )Nr(   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  r1   r*   r\   )r   r  r	  r  r   r   r  next_id	next_hrefZnum_chgZ	in_changer   r3   r  r   r   r   _convert_flagse  s@   


zHtmlDiff._convert_flagsc              
   C   sR  	 |    | ||\}}|r|}nd }t|||| j| jd}| jr'| |}| |\}	}
}| |	|
|||\}	}
}}}g }d}t	t
|D ](}|| d u rY|dkrX|d qG|||| || |	| || |
| f  qG|st|rddd| dd| f }nd}| jtd||| jd	 d
 }|ddddddddddS )Nrz   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>%s%s%s%s</tr></thead>z!<th class="diff_next"><br /></th>z+<th colspan="2" class="diff_header">%s</th>r   r(   )Z	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>r   r  )r  r   r   r   r   r   r
  r  r  r9   r1   r,   _table_templater   rw   r  rQ   )r   r   r   r   r   r   r   Zcontext_linesr  r  r	  r  r  r  rs   fmtr3   r  r   r   r   r   r     sX   




zHtmlDiff.make_table)r   r   Fr   )rg   rh   ri   r   r   r  r   r  r   r   r   r   r  r
  r  r  r  r  r   r   r   r   r   r     s2    
7/r   c                 c   sl    	 zdddt | }W n ty   td| d w d|f}| D ]}|d d |v r3|dd  V  q"d S )Nr   r   )r(   r   z)unknown delta choice (must be 1 or 2): %rr   r   )intKeyErrorro   )ZdeltawhichrX   prefixesr   r   r   r   r     s"   r   c                  C   s   dd l } dd l}| |S rB   )doctestdifflibtestmod)r   r!  r   r   r   _test  s   
r#  __main__)rZ   rl   )r   )r   r   r   r   rZ   r   )r   r   r   r   rZ   r   )%__all__heapqr   rp   collectionsr   Z_namedtupletypesr   r   r   r   r   ry   r   r   r   matchr   r   r   r	   r   r   r   r
   r   r   r   r   r  r   objectr   r   r#  rg   r   r   r   r   <module>   sf    
    
r1	  A

I
L
%
  	
  a 
