Your IP : 18.224.54.118


Current Path : /opt/alt/python35/lib64/python3.5/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/__pycache__/difflib.cpython-35.opt-2.pyc



���]�H�@s�dddddddddd	d
dgZdd
lmZddlmZedd�Zdd�ZGdd�d�Z	dddd�Z
dd�ZGdd�d�Zddl
Z
e
jd�jdd�Zddd�Zdd�Zd d d d dd!d"d�Zd#d$�Zd d d d dd!d%d�Zd&d'�Zd(d(d(d(dd)d*d	�Zded+d�Zdded,d-�Zd.Zd/Zd0Zd1ZGd2d
�d
e�Z[
d3d�Z d4d5�Z!e"d6kr�e!�dS)7�get_close_matches�ndiff�restore�SequenceMatcher�Differ�IS_CHARACTER_JUNK�IS_LINE_JUNK�context_diff�unified_diff�
diff_bytes�HtmlDiff�Match�)�nlargest)�
namedtupleza b sizecCs|rd||SdS)Ng@g�?�)�matches�lengthrr�,/opt/alt/python35/lib64/python3.5/difflib.py�_calculate_ratio&src@s�eZdZdddddd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Zdd�Z	dd�Z
ddd�Zdd�Zdd�Z
dd�ZdS)rN�TcCs6||_d|_|_||_|j||�dS)N)�isjunk�a�b�autojunk�set_seqs)�selfrrrrrrr�__init__�s;		zSequenceMatcher.__init__cCs|j|�|j|�dS)N)�set_seq1�set_seq2)rrrrrrr�s	
zSequenceMatcher.set_seqscCs0||jkrdS||_d|_|_dS)N)r�matching_blocks�opcodes)rrrrrr�s	zSequenceMatcher.set_seq1cCsC||jkrdS||_d|_|_d|_|j�dS)N)rrr �
fullbcount�_SequenceMatcher__chain_b)rrrrrr�s		zSequenceMatcher.set_seq2cCsP|j}i|_}x9t|�D]+\}}|j|g�}|j|�q#Wt�|_}|j}|r�x-|j�D]}||�r~|j	|�q~Wx|D]
}||=q�Wt�|_
}t|�}	|jrL|	dkrL|	dd}
x9|j
�D]+\}}t|�|
kr|j	|�qWx|D]
}||=q;WdS)N���d�)r�b2j�	enumerate�
setdefault�append�set�bjunkr�keys�addZbpopular�lenr�items)rrr&�i�elt�indicesZjunkrZpopular�nZntestZidxsrrrZ	__chain_b)s,	
	

zSequenceMatcher.__chain_bcCs�|j|j|j|jjf\}}}}||d}	}
}i}g}
x�t||�D]�}|j}i}x�|j|||
�D]q}||kr�q�||kr�P||dd�d}||<||kr�||d||d|}	}
}q�W|}q]Wxm|	|krw|
|krw|||
d�rw||	d||
dkrw|	d|
d|d}	}
}qWx_|	||kr�|
||kr�|||
|�r�||	|||
|kr�|d7}q{Wxl|	|krH|
|krH|||
d�rH||	d||
dkrH|	d|
d|d}	}
}q�Wx^|	||kr�|
||kr�|||
|�r�||	|||
|kr�|d}qLWt|	|
|�S)Nr
r%)rrr&r+�__contains__�range�getr)r�alo�ahi�blo�bhirrr&ZisbjunkZbestiZbestjZbestsizeZj2lenZnothingr0Zj2lengetZnewj2len�j�krrr�find_longest_matchPsB8-	(
$#	$#z"SequenceMatcher.find_longest_matchcCs|jdk	r|jSt|j�t|j�}}d|d|fg}g}x�|r|j�\}}}}|j||||�\}	}
}}|rS|j|�||	kr�||
kr�|j||	||
f�|	||krS|
||krS|j|	|||
||f�qSW|j�d}
}}g}xt|D]l\}}}|
||kr�|||kr�||7}qD|r�|j|
||f�|||}
}}qDW|r�|j|
||f�|j||df�tt	t
j|��|_|jS)Nr
)rr.rr�popr=r)�sort�list�mapr�_make)r�la�lb�queuerr7r8r9r:r0r;r<�x�i1�j1Zk1Znon_adjacent�i2�j2Zk2rrr�get_matching_blocks�s8	%
 %
 
z#SequenceMatcher.get_matching_blockscCs�|jdk	r|jSd}}g|_}x�|j�D]�\}}}d}||krp||krpd}n'||kr�d}n||kr�d}|r�|j|||||f�||||}}|r:|jd||||f�q:W|S)Nr
r�replace�delete�insert�equal)r rKr))rr0r;Zanswer�ai�bj�size�tagrrr�get_opcodess$

		 zSequenceMatcher.get_opcodes�c

cs�|j�}|sdg}|dddkr{|d\}}}}}|t|||�|t|||�|f|d<|dddkr�|d\}}}}}||t|||�|t|||�f|d<||}g}	x�|D]�\}}}}}|dkr�|||kr�|	j||t|||�|t|||�f�|	Vg}	t|||�t|||�}}|	j|||||f�q�W|	r�t|	�dko�|	dddkr�|	VdS)NrOr
r%)rOr
r%r
r%���rVrV)rT�max�minr)r.)
rr3ZcodesrSrGrIrHrJ�nn�grouprrr�get_grouped_opcodes<s(	33
6' -z#SequenceMatcher.get_grouped_opcodescCsBtdd�|j�D��}t|t|j�t|j��S)Ncss|]}|dVqdS)r%NrVr)�.0Ztriplerrr�	<genexpr>�sz(SequenceMatcher.ratio.<locals>.<genexpr>)�sumrKrr.rr)rrrrr�rationszSequenceMatcher.ratiocCs�|jdkrJi|_}x+|jD] }|j|d�d||<q&W|j}i}|jd}}x`|jD]U}||�r�||}n|j|d�}|d||<|dkrs|d}qsWt|t|j�t|j��S)Nr
r%)r!rr6r4rrr.)rr!r1ZavailZavailhasrZnumbrrr�quick_ratio�s

	
zSequenceMatcher.quick_ratiocCs9t|j�t|j�}}tt||�||�S)N)r.rrrrX)rrCrDrrr�real_quick_ratio�sz SequenceMatcher.real_quick_ratio)�__name__�
__module__�__qualname__rrrrr"r=rKrTr[r_r`rarrrrr+sl@,'nG72rUg333333�?cCs�|dkstd|f��d|ko6dknsNtd|f��g}t�}|j|�xj|D]b}|j|�|j�|krq|j�|krq|j�|krq|j|j�|f�qqWt||�}dd�|D�S)Nr
zn must be > 0: %rgg�?z cutoff must be in [0.0, 1.0]: %rcSsg|]\}}|�qSrr)r\ZscorerFrrr�
<listcomp>�s	z%get_close_matches.<locals>.<listcomp>)	�
ValueErrorrrrrar`r_r)�	_nlargest)ZwordZ
possibilitiesr3�cutoff�result�srFrrrr�s	


cCsDdt|�}}x*||kr?|||kr?|d7}qW|S)Nr
r%)r.)�line�chr0r3rrr�_count_leading�s
rmc@sjeZdZdddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)rNcCs||_||_dS)N)�linejunk�charjunk)rrnrorrrrMs	zDiffer.__init__c
cs�t|j||�}x�|j�D]�\}}}}}|dkrd|j||||||�}	n�|dkr�|jd|||�}	na|dkr�|jd|||�}	n:|dkr�|jd|||�}	ntd|f��|	EdHq"WdS)	NrLrM�-rN�+rO� zunknown tag %r)rrnrT�_fancy_replace�_dumprf)
rrr�cruncherrSr7r8r9r:�grrr�compareds"!zDiffer.compareccs1x*t||�D]}d|||fVqWdS)Nz%s %s)r5)rrSrF�lo�hir0rrrrt�szDiffer._dumpc
cs�||||krG|jd|||�}|jd|||�}n0|jd|||�}|jd|||�}x||fD]}	|	EdHq�WdS)Nrqrp)rt)
rrr7r8rr9r:�first�secondrvrrr�_plain_replace�szDiffer._plain_replaceccs�d\}}t|j�}	d\}
}x�t||�D]�}||}
|	j|
�x�t||�D]�}||}||
kr�|
dkrd||}
}qd|	j|�|	j�|krd|	j�|krd|	j�|krd|	j�||}}}qdWq7W||krU|
dkr>|j||||||�EdHdS|
|d}}}nd}
|j	||||||�EdH||||}}|
dkr�d}}|	j
||�x�|	j�D]�\}}}}}||||}}|dkr|d|7}|d|7}q�|dkr6|d|7}q�|d	krS|d
|7}q�|dkr~|d|7}|d|7}q�td
|f��q�W|j
||||�EdHn	d|V|j	||d|||d|�EdHdS)N�G�z��?��?g�?rrL�^rMrprNrqrOrrzunknown tag %rz  r%)r}r~)NN)rror5rrrar`r_r|�
_fancy_helperrrTrf�_qformat)rrr7r8rr9r:Z
best_ratiorhruZeqiZeqjr;rQr0rPZbest_iZbest_jZaeltZbelt�atags�btagsrSZai1Zai2Zbj1Zbj2rCrDrrrrs�sX




"!!
"	zDiffer._fancy_replaceccs�g}||krZ||kr?|j||||||�}q~|jd|||�}n$||kr~|jd|||�}|EdHdS)Nrprq)rsrt)rrr7r8rr9r:rvrrrr��s!zDiffer._fancy_helperccs�tt|d�t|d��}t|t|d|�d��}t|t|d|�d��}||d�j�}||d�j�}d|V|r�dd||fVd|V|r�dd||fVdS)N�	rrz- z? %s%s
z+ )rXrm�rstrip)rZalineZbliner�r��commonrrrr�
s""		zDiffer._qformat)
rbrcrdrrwrtr|rsr�r�rrrrr�s^)^Nz
\s*(?:#\s*)?$cCs||�dk	S)Nr)rk�patrrrr>sz 	cCs
||kS)Nr)rlZwsrrrrNscCsM|d}||}|dkr-dj|�S|s=|d8}dj||�S)Nr%z{}z{},{})�format)�start�stop�	beginningrrrr�_format_range_unifiedes



r�r�
ccs�t|||||||�d}x�td||�j|�D]z}	|s�d}|redj|�nd}
|r�dj|�nd}dj||
|�Vdj|||�V|	d|	d}}
t|d|
d	�}t|d
|
d�}dj|||�Vx�|	D]�\}}}}}|d
krTx!|||�D]}d|Vq>Wq|dkr�x!|||�D]}d|VqqW|dkrx!|||�D]}d|Vq�WqWq>WdS)NFTz	{}rz
--- {}{}{}z
+++ {}{}{}r
r%�rU�z@@ -{} +{} @@{}rOrrrLrMrprNrqrV>rLrM>rLrN)�_check_typesrr[r�r�)rr�fromfile�tofile�fromfiledate�
tofiledater3�lineterm�startedrZ�fromdate�todaterz�last�file1_range�file2_rangerSrGrIrHrJrkrrrr	ps0)"

cCsU|d}||}|s$|d8}|dkr=dj|�Sdj|||d�S)Nr%z{}z{},{})r�)r�r�r�rrrr�_format_range_context�s



r�c	cst|||||||�tdddddddd�}d	}	x�td||�j|�D]�}
|	s�d
}	|r�dj|�nd}|r�dj|�nd}d
j|||�Vdj|||�V|
d|
d}
}d|Vt|
d|d�}dj||�Vtdd�|
D��r�xQ|
D]I\}}}}}|dkr5x%|||�D]}|||VqgWq5Wt|
d|d�}dj||�Vtdd�|
D��r_xQ|
D]I\}}}}}|dkr�x%|||�D]}|||Vq�Wq�Wq_WdS)NrNz+ rMz- rLz! rOz  FTz	{}rz
*** {}{}{}z
--- {}{}{}r
r%z***************r�z
*** {} ****{}css*|] \}}}}}|dkVqdS)rLrMN>rLrMr)r\rS�_rrrr]szcontext_diff.<locals>.<genexpr>rUr�z
--- {} ----{}css*|] \}}}}}|dkVqdS)rLrNN>rLrNr)r\rSr�rrrr]srV)r��dictrr[r�r��any)rrr�r�r�r�r3r��prefixr�rZr�r�rzr�r�rSrGrIr�rkr�rHrJrrrr�s4,!"	cGs�|rAt|dt�rAtdt|d�j|df��|r�t|dt�r�tdt|d�j|df��x0|D](}t|t�s�td|f��q�WdS)Nr
z)lines to compare must be str, not %s (%r)z"all arguments must be str, not: %r)�
isinstance�str�	TypeError�typerb)rr�args�argrrrr�s!!
r��s
c		cs�dd�}	tt|	|��}tt|	|��}|	|�}|	|�}|	|�}|	|�}|	|�}|||||||||�}
x|
D]}|jdd�Vq�WdS)NcSshy|jdd�SWnMtk
rc}z-dt|�j|f}t|�|�WYdd}~XnXdS)N�ascii�surrogateescapez(all arguments must be bytes, not %s (%r))�decode�AttributeErrorr�rbr�)rj�err�msgrrrr�-szdiff_bytes.<locals>.decoder�r�)r@rA�encode)Zdfuncrrr�r�r�r�r3r�r��linesrkrrrr
"s!
cCst||�j||�S)N)rrw)rrrnrorrrr@s#c#s�ddl}|jd��t||||��ddg�fdd����fdd���fdd�}|�}|dkr�|EdHnN|d	7}d}x;ddg|}	}
d
}xi|d
kr+yt|�\}}
}Wntk
rdSYnX|	|}||
|f|
|<|	d	7}	q�W|	|krFdV|}n|	}d}	x1|r�|	|}|	d	7}	|
|V|d	8}qUW|d	}xJ|r�t|�\}}
}|r�|d	}n
|d	8}||
|fVq�Wq�WdS)Nr
z
(\++|\-+|\^+)cs>||d7<|dkr;|||jd�dd�fS|dkr�|jd�|jd�}}g}|dd�}�j||�xXt|�D]J\}\}	}
|d|	�d|||	|
�d||
d�}q�W|dd�}n7|jd�dd�}|sd	}d||d}|||fS)
Nr%r
r��?cSs3|j|jd�d|j�g�|jd�S)Nr%r
)r)rZ�span)Zmatch_object�sub_inforrr�record_sub_info�s&z3_mdiff.<locals>._make_line.<locals>.record_sub_info��rr)r>�sub�reversed)r�Z
format_key�sideZ	num_lines�textZmarkersr�r��keyZbegin�end)�	change_rerr�
_make_line�s !<z_mdiff.<locals>._make_linec3s4g}d\}}xx,t|�dkrC|jt�d��qWdjdd�|D��}|jd�rx|}nO|jd�r��|dd��|dd	�d
fVqn|jd�r�|d	8}�|dd�dd
fVqn�|jd�r(�|dd�d}}|d	d}}n�|jd�rc�|dd��|dd	�d
fVqnd|jd�r��|dd��|dd	�d
fVqn)|jd�r�|d	8}�|dd�dd
fVqn�|jd�r|d	7}d�|dd	�d
fVqn�|jd�rLd�|dd	�}}|d	d}}n{|jd�r�|d	7}d�|dd	�d
fVqnB|jd�r��|dd�dd��|dd	�dfVqx|dkr�|d	7}dVq�Wx|dkr
|d	8}dVq�W|jd�rdS||d
fVqWdS) Nr
r��XrcSsg|]}|d�qS)r
r)r\rkrrrre�s	z2_mdiff.<locals>._line_iterator.<locals>.<listcomp>z-?+?r�r%Tz--++rp�--?+�--+�- z-+?z-?+z+--rq�+ �+-rrFr�)r
r
)r�r�r�)r�r��rr�)Nr�T�rr�)r�NT)r.r)�next�join�
startswith)r�Znum_blanks_pendingZnum_blanks_to_yieldrj�	from_line�to_line)r��diff_lines_iteratorrr�_line_iterator�sf	&
&&


0
	
	z_mdiff.<locals>._line_iteratorc3s���}gg}}x�x�t|�dks@t|�dkr�yt|�\}}}Wntk
rqdSYnX|dk	r�|j||f�|dk	r|j||f�qW|jd�\}}|jd�\}}|||p�|fVqWdS)Nr
)r.r��
StopIterationr)r>)Z
line_iterator�	fromlines�tolinesr�r��
found_diffZfromDiffZto_diff)r�rr�_line_pair_iterators
	
'
	z#_mdiff.<locals>._line_pair_iteratorr%F)NNN)�re�compilerr�r�)r�r��contextrnror�r�Zline_pair_iteratorZlines_to_write�indexZcontextLinesr�r�r�r0r)r�r�r�r�r�_mdiffesN"8X!	

	
		

	
	

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�eZdZeZeZeZeZdZdddedd�Z	ddddd	d
dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdddddd�ZdS)rr
�NcCs(||_||_||_||_dS)N)�_tabsize�_wrapcolumn�	_linejunk�	_charjunk)r�tabsizeZ
wrapcolumnrnrorrrr�s			zHtmlDiff.__init__rF��charsetzutf-8cCs_|jtd|jd|jd|j||||d|d|�d|�j|d�j|�S)NZstylesZlegend�tabler��numlinesr��xmlcharrefreplace)�_file_templater��_styles�_legend�
make_tabler�r�)rr�r��fromdesc�todescr�r�r�rrr�	make_file�s		
zHtmlDiff.make_filecsN�fdd���fdd�|D�}�fdd�|D�}||fS)NcsO|jdd�}|j�j�}|jdd�}|jdd�jd�S)Nrrr�r�r�)rL�
expandtabsr�r�)rk)rrr�expand_tabs�sz2HtmlDiff._tab_newline_replace.<locals>.expand_tabscsg|]}�|��qSrr)r\rk)r�rrre�s	z1HtmlDiff._tab_newline_replace.<locals>.<listcomp>csg|]}�|��qSrr)r\rk)r�rrre�s	r)rr�r�r)r�rr�_tab_newline_replace�s
	zHtmlDiff._tab_newline_replacecCss|s|j||f�dSt|�}|j}||ks[||jd�d|krr|j||f�dSd}d}d}x�||kr
||kr
||dkr�|d7}||}|d7}q�||dkr�|d7}d}q�|d7}|d7}q�W|d|�}	||d�}
|rI|	d}	d||
}
|j||	f�|j|d|
�dS)Nr�rUr
rr%r��>)r)r.r��count�_split_line)rZ	data_listZline_numr�rRrWr0r3�markZline1Zline2rrrr�s8
	)



	

zHtmlDiff._split_lineccs�x�|D]�\}}}|dkr3|||fVq||\}}\}}gg}	}
|j|	||�|j|
||�xZ|	s�|
r�|	r�|	jd�}nd}|
r�|
jd�}nd}|||fVq�WqWdS)Nr
rrr)rrr)rrr)r�r>)r�diffs�fromdata�todata�flagZfromlineZfromtextZtolineZtotext�fromlist�tolistrrr�
_line_wrapper7s 
zHtmlDiff._line_wrappercCs�ggg}}}x�|D]�\}}}y<|j|jd||��|j|jd||��Wn,tk
r�|jd�|jd�YnX|j|�qW|||fS)Nr
r%)r)�_format_liner�)rr�r�r��flaglistr�r�r�rrr�_collect_linesSs 

zHtmlDiff._collect_linescCs�y%d|}d|j||f}Wntk
r?d}YnX|jdd�jdd�jdd	�}|jd
d�j�}d|||fS)
Nz%dz
 id="%s%s"r�&z&amp;r�z&gt;�<z&lt;rrz&nbsp;z<<td class="diff_header"%s>%s</td><td nowrap="nowrap">%s</td>)�_prefixr�rLr�)rr�r�Zlinenumr��idrrrr�hs

*zHtmlDiff._format_linecCs<dtj}dtj}tjd7_||g|_dS)Nzfrom%d_zto%d_r%)r�_default_prefixr�)rZ
fromprefix�toprefixrrr�_make_prefixs

zHtmlDiff._make_prefixcCsP|jd}dgt|�}dgt|�}d\}	}
d}x�t|�D]u\}}
|
r�|
s�d}
|}td||g�}d||	f||<|	d7}	d||	f||<qRd}
qRW|sdg}dg}dg}d}|r
dg}|}n
d	g}}|ds/d
||d<d|||<|||||fS)
Nr%rr
FTz id="difflib_chg_%s_%d"z"<a href="#difflib_chg_%s_%d">n</a>z2<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
F)r�r.r'rW)rr�r�r�r�r�r��next_id�	next_hrefZnum_chgZ	in_changer�r0r�rrr�_convert_flags�s:


					

zHtmlDiff._convert_flagsc	Cs�|j�|j||�\}}|r1|}nd}t|||d|jd|j�}|jrs|j|�}|j|�\}	}
}|j|	|
|||�\}	}
}}}
g}dd}xzt	t
|��D]f}||dkr
|dkr>|jd�q�|j||
||||	||||
|f�q�W|sN|roddd	|dd	|f}nd
}|jt
dd
j|�d|d
|jd�}|jdd�jdd�jdd�jdd�jdd�S)Nrnroz1            <tr><td class="diff_next"%s>%s</td>%sz%<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>rZ	data_rows�
header_rowr�r%z+z<span class="diff_add">z-z<span class="diff_sub">z^z<span class="diff_chg">r�z</span>r�z&nbsp;)rr�r�r�r�r�r�r�rr5r.r)�_table_templater�r�r�rL)rr�r�r�r�r�r�Z
context_linesr�r�r�r�rrrj�fmtr0rr�rrrr��sJ
		$zHtmlDiff.make_table)rbrcrdr�r�rr�r�rrr�r�r�r�r�r�rrr�rrrrr�s$	7/	ccs�y ddddit|�}Wn"tk
rDtd|��YnXd|f}x3|D]+}|dd�|krX|dd�VqXWdS)Nr%z- r�z+ z)unknown delta choice (must be 1 or 2): %rz  )�int�KeyErrorrf)Zdelta�whichrS�prefixesrkrrrrs 

cCs%ddl}ddl}|j|�S)Nr
)�doctest�difflib�testmod)rrrrr�_test(sr�__main__)#�__all__�heapqrrg�collectionsrZ_namedtuplerrrrrmrr�r��matchrrr�r	r�rr�r
rr�r�r�rr��objectrrrrbrrrr�<module>sP���0�N	HK%�	
�` 

?>