B
    0*\Q                @   s4  d ddddddddd	d
dgZ ddlmZ ddlmZ eddZdd ZG dd dZ	d7dd Z
dd ZG dd dZddlZedjfddZd8ddZdd Zd9d"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 d2d
 d
eZ[d3d Z d4d5 Z!e"d6kr0e!  dS )<get_close_matchesndiffrestoreSequenceMatcherDifferIS_CHARACTER_JUNKIS_LINE_JUNKcontext_diffunified_diff
diff_bytesHtmlDiffMatch    )nlargest)
namedtupleza b sizec             C   s   |rd|  | S dS )Ng       @g      ? )matcheslengthr   r   2C:\ALexclude\prg\programme\Python37\Lib\difflib.py_calculate_ratio&   s    r   c               @   sp   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d Z
dddZdd Zdd Zdd 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__   s    ;zSequenceMatcher.__init__c             C   s   |  | | | d S )N)set_seq1set_seq2)r   r   r   r   r   r   r      s    	
zSequenceMatcher.set_seqsc             C   s$   || j krd S || _ d  | _| _d S )N)r   matching_blocksopcodes)r   r   r   r   r   r      s    
zSequenceMatcher.set_seq1c             C   s2   || j krd S || _ d  | _| _d | _|   d S )N)r   r   r    
fullbcount_SequenceMatcher__chain_b)r   r   r   r   r   r      s    
zSequenceMatcher.set_seq2c             C   s   | j }i  | _}x*t|D ]\}}||g }|| qW t  | _}| j}|rx"| D ]}||r\|	| q\W x|D ]
}||= q|W t  | _
}t|}	| jr|	dkr|	d d }
x*| D ]\}}t||
kr|	| qW x|D ]
}||= qW 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)  s,    



zSequenceMatcher.__chain_bc             C   sJ  | j | j| j| jjf\}}}}||d  }	}
}i }g }xt||D ]}|j}i }xn||| |D ]Z}||k rpqb||krzP ||d dd  }||< ||krb|| d || d |  }	}
}qbW |}qBW x`|	|kr(|
|kr(|||
d  s(||	d  ||
d  kr(|	d |
d |d   }	}
}qW xV|	| |k r|
| |k r|||
|  s||	|  ||
|  kr|d7 }q,W xb|	|kr|
|kr|||
d  r||	d  ||
d  kr|	d |
d |d   }	}
}qW xV|	| |k r<|
| |k r<|||
|  r<||	|  ||
|  kr<|d }qW t|	|
|S )Nr   r%   )r   r   r&   r+   __contains__rangegetr   )r   aloahiblobhir   r   r&   ZisbjunkZbestiZbestjZbestsizeZj2lenZnothingr0   Zj2lengetZnewj2lenjkr   r   r   find_longest_matchP  sB    8$ 	"z"SequenceMatcher.find_longest_matchc             C   s  | j d k	r| j S t| jt| j }}d|d|fg}g }x|r| \}}}}| |||| \}	}
}}|r:|| ||	k r||
k r|||	||
f |	| |k r:|
| |k r:||	| ||
| |f q:W |  d } }}g }x^|D ]V\}}}|| |kr|| |kr||7 }q|r2||||f |||  }}}qW |r\||||f |||df tt	t
j|| _ | j S )Nr   )r   r.   r   r   popr=   r)   sortlistmapr   _make)r   lalbZqueuer   r7   r8   r9   r:   r0   r;   r<   xi1j1Zk1Znon_adjacenti2j2Zk2r   r   r   get_matching_blocks  s8    


z#SequenceMatcher.get_matching_blocksc             C   s   | j d k	r| j S d }}g  | _ }x|  D ]\}}}d}||k rP||k rPd}n||k r^d}n||k rjd}|r||||||f || ||  }}|r,|d||||f q,W |S )Nr   r   replacedeleteinsertequal)r    rJ   r)   )r   r0   r;   Zansweraibjsizetagr   r   r   get_opcodes  s$    

zSequenceMatcher.get_opcodes   c       
      c   sr  |   }|sdg}|d d dkrZ|d \}}}}}|t||| |t||| |f|d< |d d dkr|d \}}}}}||t||| |t||| f|d< || }g }	x|D ]\}}}}}|dkr*|| |kr*|	||t||| |t||| f |	V  g }	t||| t|||  }}|	|||||f qW |	rnt|	dkrh|	d d dksn|	V  d S )N)rN   r   r%   r   r%   r   rN   r%   )rS   maxminr)   r.   )
r   r3   ZcodesrR   rF   rH   rG   rI   nngroupr   r   r   get_grouped_opcodes<  s(    &&(&z#SequenceMatcher.get_grouped_opcodesc             C   s0   t dd |  D }t|t| jt| j S )Nc             s   s   | ]}|d  V  qdS )rU   Nr   ).0Ztripler   r   r   	<genexpr>  s    z(SequenceMatcher.ratio.<locals>.<genexpr>)sumrJ   r   r.   r   r   )r   r   r   r   r   ration  s    zSequenceMatcher.ratioc             C   s   | j d kr8i  | _ }x"| jD ]}||dd ||< qW | j }i }|jd }}xH| jD ]>}||rl|| }n||d}|d ||< |dkrV|d }qVW t|t| jt| j S )Nr   r%   )r!   r   r6   r4   r   r   r.   )r   r!   r1   ZavailZavailhasr   Znumbr   r   r   quick_ratio  s    



zSequenceMatcher.quick_ratioc             C   s*   t | jt | j }}tt|||| S )N)r.   r   r   r   rW   )r   rC   rD   r   r   r   real_quick_ratio  s    z SequenceMatcher.real_quick_ratio)Nr   r   T)rT   )__name__
__module____qualname__r   r   r   r   r"   r=   rJ   rS   rZ   r^   r_   r`   r   r   r   r   r   +   s   l
@,'nG7
2rT   333333?c             C   s   |dkst d|f d|  kr*dks:n t d|f g }t }||  xL|D ]D}|| | |krT| |krT| |krT|| |f qTW t||}dd |D S )Nr   zn must be > 0: %rg        g      ?z cutoff must be in [0.0, 1.0]: %rc             S   s   g | ]\}}|qS r   r   )r[   ZscorerE   r   r   r   
<listcomp>  s    z%get_close_matches.<locals>.<listcomp>)	
ValueErrorr   r   r   r`   r_   r^   r)   	_nlargest)ZwordZpossibilitiesr3   cutoffresultsrE   r   r   r   r     s    



c             C   s4   dt |  }}x ||k r.| | |kr.|d7 }qW |S )Nr   r%   )r.   )linechr0   r3   r   r   r   _count_leading  s    
rm   c               @   sF   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 )N)linejunkcharjunk)r   rn   ro   r   r   r   r   M  s    zDiffer.__init__c       
   	   c   s   t | j||}x| D ]\}}}}}|dkrD| ||||||}	n\|dkr^| d|||}	nB|dkrx| d|||}	n(|dkr| d|||}	ntd|f |	E d H  qW d S )	NrK   rL   -rM   +rN    zunknown tag %r)r   rn   rS   _fancy_replace_dumprf   )
r   r   r   cruncherrR   r7   r8   r9   r:   gr   r   r   compared  s    zDiffer.comparec             c   s*   x$t ||D ]}d||| f V  qW d S )Nz%s %s)r5   )r   rR   rE   lohir0   r   r   r   rt     s    zDiffer._dumpc       
      c   sr   || || k r2|  d|||}|  d|||}n |  d|||}|  d|||}x||fD ]}	|	E d H  q\W d S )Nrq   rp   )rt   )
r   r   r7   r8   r   r9   r:   firstsecondrv   r   r   r   _plain_replace  s    zDiffer._plain_replacec             c   sF  d\}}t | j}	d\}
}xt||D ]}|| }|	| xxt||D ]j}|| }||krp|
d krH|| }
}qH|	| |	 |krH|	 |krH|	 |krH|	 ||  }}}qHW q&W ||k r|
d kr| ||||||E d H  d S |
|d  }}}nd }
| 	||||||E d H  || ||  }}|
d krd }}|	
|| x|	 D ]\}}}}}|| ||  }}|dkr|d| 7 }|d| 7 }nb|dkr|d| 7 }nJ|d	kr|d
| 7 }n2|dkr|d| 7 }|d| 7 }ntd|f qRW | ||||E d H  n
d| V  | 	||d |||d |E d H  d S )N)gGz?g      ?)NNg      ?r   rK   ^rL   rp   rM   rq   rN   rr   zunknown tag %rz  r%   )r   ro   r5   r   r   r`   r_   r^   r|   _fancy_helperr   rS   rf   _qformat)r   r   r7   r8   r   r9   r:   Z
best_ratiorh   ru   ZeqiZeqjr;   rP   r0   rO   Zbest_iZbest_jZaeltZbeltatagsbtagsrR   Zai1Zai2Zbj1Zbj2rC   rD   r   r   r   rs     sX    









zDiffer._fancy_replacec             c   sb   g }||k r<||k r*|  ||||||}qT| d|||}n||k rT| d|||}|E d H  d S )Nrp   rq   )rs   rt   )r   r   r7   r8   r   r9   r:   rv   r   r   r   r~     s    zDiffer._fancy_helperc             c   s   t t|dt|d}t |t|d | d}t |t|d | d}||d   }||d   }d| V  |rdd| |f V  d| V  |rdd| |f V  d S )N	rr   z- z? %s%s
z+ )rW   rm   rstrip)r   ZalineZbliner   r   commonr   r   r   r   
  s    


zDiffer._qformat)NN)
ra   rb   rc   r   rw   rt   r|   rs   r~   r   r   r   r   r   r     s   ^
)^Nz\s*(?:#\s*)?$c             C   s   || d k	S )Nr   )rk   Zpatr   r   r   r   >  s     	c             C   s   | |kS )Nr   )rl   Zwsr   r   r   r   N  s    c             C   s:   | d }||  }|dkr"d |S |s.|d8 }d ||S )Nr%   z{}z{},{})format)startstop	beginningr   r   r   r   _format_range_unifiede  s    
r   r   
c             c   sh  t | |||||| d}xHtd | ||D ]0}	|sd}|rJd|nd}
|r\d|nd}d||
|V  d|||V  |	d |	d  }}t|d	 |d
 }t|d |d }d|||V  x|	D ]\}}}}}|dkrx| || D ]}d| V  qW q|dkr2x | || D ]}d| V  qW |dkrx ||| D ]}d| V  qHW qW q.W d S )NFTz	{}r   z
--- {}{}{}z
+++ {}{}{}r   rU   r%      rT      z@@ -{} +{} @@{}rN   rr   >   rL   rK   rp   >   rK   rM   rq   )_check_typesr   rZ   r   r   )r   r   fromfiletofilefromfiledate
tofiledater3   linetermstartedrY   fromdatetodaterz   lastfile1_rangefile2_rangerR   rF   rH   rG   rI   rk   r   r   r   r	   p  s0    )

c             C   sB   | d }||  }|s|d8 }|dkr.d |S d ||| d S )Nr%   z{}z{},{})r   )r   r   r   r   r   r   r   _format_range_context  s    
r   c             c   s  t | |||||| tddddd}d}	xztd | ||D ]b}
|	sd}	|rZd|nd	}|rld|nd	}d
|||V  d|||V  |
d |
d  }}d| V  t|d |d }d||V  tdd |
D r&xD|
D ]<\}}}}}|dkrx$| || D ]}|| | V  q
W qW t|d |d }d||V  tdd |
D r>xH|
D ]@\}}}}}|dkr^x$||| D ]}|| | V  qW q^W q>W d S )Nz+ z- z! z  )rM   rL   rK   rN   FTz	{}r   z
*** {}{}{}z
--- {}{}{}r   rU   z***************r%   r   z*** {} ****{}c             s   s    | ]\}}}}}|d kV  qdS )>   rL   rK   Nr   )r[   rR   _r   r   r   r\     s    zcontext_diff.<locals>.<genexpr>rM   rT   r   z--- {} ----{}c             s   s    | ]\}}}}}|d kV  qdS )>   rK   rM   Nr   )r[   rR   r   r   r   r   r\     s    rL   )r   dictr   rZ   r   r   any)r   r   r   r   r   r   r3   r   prefixr   rY   r   r   rz   r   r   rR   rF   rH   r   rk   r   rG   rI   r   r   r   r     s4    ,

c             G   s   | r0t | d ts0tdt| d j| d f |r`t |d ts`tdt|d j|d f x$|D ]}t |tsftd|f qfW d S )Nr   z)lines to compare must be str, not %s (%r)z"all arguments must be str, not: %r)
isinstancestr	TypeErrortypera   )r   r   argsargr   r   r   r     s    

r          
c	          	   c   s   dd }	t t|	|}t t|	|}|	|}|	|}|	|}|	|}|	|}| ||||||||}
x|
D ]}|ddV  qhW d S )Nc          
   S   sP   y|  ddS  tk
rJ } z dt| j| f }t||W d d }~X Y nX d S )Nasciisurrogateescapez(all arguments must be bytes, not %s (%r))decodeAttributeErrorr   ra   r   )rj   errmsgr   r   r   r   -  s    zdiff_bytes.<locals>.decoder   r   )r@   rA   encode)Zdfuncr   r   r   r   r   r   r3   r   r   linesrk   r   r   r   r
   "  s    
c             C   s   t ||| |S )N)r   rw   )r   r   rn   ro   r   r   r   r   @  s    #c             #   s  dd l }|dt| |||ddgffdd	fdd  fdd}| }|d krj|E d H  n,|d	7 }d}xdd g|  }	}
d
}xR|d
kryt|\}}}W n tk
r   d S X |	| }|||f|
|< |	d	7 }	qW |	|krdV  |}n|	}d}	x.|r,|	| }|	d	7 }	|
| V  |d	8 }q W |d	 }yDx>|rvt|\}}}|r^|d	 }n|d	8 }|||fV  q:W W qz tk
r   d S X qzW d S )Nr   z(\++|\-+|\^+)c                s   ||  d7  < |d kr2|| |  ddd  fS |dkr|  d|  d }}g }|fdd} || xHt|D ]<\}\}	}
|d|	 d | ||	|
  d ||
d   }qvW |dd  }n*|  ddd  }|sd	}d| | d }|| |fS )
Nr%   r   r   ?c             S   s&   | | dd |  g | dS )Nr%   r   )r)   rY   span)Zmatch_objectsub_infor   r   r   record_sub_info  s    z3_mdiff.<locals>._make_line.<locals>.record_sub_info rr   )r>   subreversed)r   Z
format_keysideZ	num_linestextZmarkersr   r   keyZbeginend)	change_rer   r   
_make_line  s     4z_mdiff.<locals>._make_linec              3   s  g } d\}}xlx t | dk r0| td qW ddd | D }|drX|}n|dr | dd	 | dd
dfV  qn|dr|d
8 } | dd	d dfV  qnl|drވ | dd	d  }}|d
 d	 }}n>|dr | d d	 | dd
dfV  qn|dr8 | dd	 | d d
dfV  qn|drd|d
8 } | dd	d dfV  qn|dr|d
7 }d  | dd
dfV  qn|drd  | dd
 }}|d
 d	 }}n^|dr|d
7 }d  | dd
dfV  qn2|dr | d d  d d	 | d d
dfV  qx|d	k r:|d
7 }dV  qW x|d	krZ|d
8 }dV  q>W |drld S ||dfV  qW d S )N)r   r   r   Xr   c             S   s   g | ]}|d  qS )r   r   )r[   rk   r   r   r   re     s    z2_mdiff.<locals>._line_iterator.<locals>.<listcomp>z-?+?r   r   r%   Tz--++rp   )z--?+z--+z- z-+?z-?+z+--rq   )z+ z+-rr   F)N)r   r   T))r   r   NT)r.   r)   nextjoin
startswith)r   Znum_blanks_pendingZnum_blanks_to_yieldrj   	from_lineto_line)r   diff_lines_iteratorr   r   _line_iterator  sf    



$z_mdiff.<locals>._line_iteratorc              3   s     } g g  }}xxpt |dks,t |dkryt| \}}}W n tk
rR   d S X |d k	rj|||f |d k	r|||f qW |d\}}|d\}}|||p|fV  qW d S )Nr   )r.   r   StopIterationr)   r>   )Zline_iterator	fromlinestolinesr   r   
found_diffZfromDiffZto_diff)r   r   r   _line_pair_iterator  s    
z#_mdiff.<locals>._line_pair_iteratorr%   F)NNN)recompiler   r   r   )r   r   contextrn   ro   r   r   Zline_pair_iteratorZlines_to_writeindexZcontextLinesr   r   r   r0   r   )r   r   r   r   r   _mdiffe  sT    "
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 )N)_tabsize_wrapcolumn	_linejunk	_charjunk)r   tabsizeZ
wrapcolumnrn   ro   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                s8   fdd  fdd|D } fdd|D }||fS )Nc                s6   |  dd} |  j} |  dd} |  dddS )Nrr   r   r   r   )rK   
expandtabsr   r   )rk   )r   r   r   expand_tabs  s    z2HtmlDiff._tab_newline_replace.<locals>.expand_tabsc                s   g | ]} |qS r   r   )r[   rk   )r   r   r   re      s    z1HtmlDiff._tab_newline_replace.<locals>.<listcomp>c                s   g | ]} |qS r   r   )r[   rk   )r   r   r   re     s    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sB||dd  |krT| ||f d S d}d}d}xd||k r||k r|| dkr|d7 }|| }|d7 }qb|| dkr|d7 }d}qb|d7 }|d7 }qbW |d | }	||d  }
|r|	d }	d| |
 }
| ||	f | |d|
 d S )Nr   rT   r   r   r%   r   >)r)   r.   r   count_split_line)r   Z	data_listZline_numr   rQ   rV   r0   r3   ZmarkZline1Zline2r   r   r   r     s8    

zHtmlDiff._split_linec             c   s   x|D ]\}}}|d kr&|||fV  q|| \}}\}}g g  }	}
|  |	|| |  |
|| x@|	sh|
r|	rx|	d}nd}|
r|
d}nd}|||fV  q`W qW d S )Nr   )r   rr   )r   r>   )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   }}}xz|D ]r\}}}y4| | jd|f|  | | jd|f|  W n( tk
r|   | d  | d  Y nX | | qW |||fS )Nr   r%   )r)   _format_liner   )r   r   r   r   flaglistr   r   r   r   r   r   _collect_linesW  s    
zHtmlDiff._collect_linesc             C   sr   yd| }d| j | |f }W n tk
r6   d}Y nX |dddddd	}|d
d }d|||f S )Nz%dz
 id="%s%s"r   &z&amp;r   z&gt;<z&lt;rr   z&nbsp;z<<td class="diff_header"%s>%s</td><td nowrap="nowrap">%s</td>)_prefixr   rK   r   )r   r   r   Zlinenumr   idr   r   r   r   l  s    
zHtmlDiff._format_linec             C   s0   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_prefix  s    

zHtmlDiff._make_prefixc             C   s   | j d }dgt| }dgt| }d\}	}
d}xbt|D ]V\}}|r|
sd}
|}td|| g}d||	f ||< |	d7 }	d||	f ||< q<d}
q<W |sdg}dg}dg}d}|rd	g}|}n
d
g }}|d sd| |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   r.   r'   rV   )r   r   r   r   r   r   r   next_id	next_hrefZnum_chgZ	in_changer   r0   r   r   r   r   _convert_flags  s:    

zHtmlDiff._convert_flagsc          
   C   sV  |    | ||\}}|r"|}nd }t|||| j| jd}| jrL| |}| |\}	}
}| |	|
|||\}	}
}}}g }d}x`t	t
|D ]P}|| d kr|dkr|d q|||| || |	| || |
| f  qW |s|rddd| dd| f }nd}| jtd||| jd	 d
 }|ddddddddddS )N)rn   ro   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   z&nbsp;)r   r   r   r   r   r   r   r   r   r5   r.   r)   _table_templater   r   r   rK   )r   r   r   r   r   r   r   Zcontext_linesr   r   r   r   r   r   rj   Zfmtr0   r   r   r   r   r   r     sH    


zHtmlDiff.make_table)r   r   Fr   )r   r   Fr   )ra   rb   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s$    7/ c             c   sr   ydddt | }W n" tk
r8   td| d Y nX d|f}x*| D ]"}|d d |krH|dd  V  qHW d S )Nz- z+ )r%   r   z)unknown delta choice (must be 1 or 2): %rz  r   )intKeyErrorrf   )ZdeltaZwhichrR   prefixesrk   r   r   r   r     s    
c              C   s   dd l } dd l}| |S )Nr   )doctestdifflibZtestmod)r   r  r   r   r   _test,  s    r  __main__)rT   rd   )r   )r   r   r   r   rT   r   )r   r   r   r   rT   r   )r   r   r   r   rT   r   )#__all__heapqr   rg   collectionsr   Z_namedtupler   r   r   r   rm   r   r   r   matchr   r   r   r	   r   r   r   r
   r   r   r   r   r   r   objectr   r   r  ra   r   r   r   r   <module>   s\   
     

0  O
 
H 
K 
%  !	
  a 
