Your IP : 216.73.216.85


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



���]�)�@s�ddlZddlZddlZddlZddlmZddlZddlmZddl	Z	ddl
mZddlZddl
Z
ddlmZyddlZWnek
r�dZYnXddlZejdddg�Zejdd	dg�Zejd
d	dg�Zdd
�Zdd�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�d�Ze
jed�Gdd�dee
j ��Z!Gdd�dee
j �Z"er�Gdd�dej#�Z$e
jed�Gdd �d e!��Z%Gd!d"�d"e
j �Z&Gd#d$�d$e
j �Z'Gd%d&�d&e'�Z(Gd'd(�d(e
j �Z)Gd)d*�d*�Z*e
jed�Gd+d,�d,e*e
j ��Z+Gd-d.�d.e*e
j �Z,Gd/d0�d0e
j �Z-ej.Gd1d2�d2��Z/Gd3d4�d4�Z0ej1�d5d6��Z2ej1�d7d8��Z3Gd9d:�d:e0e
j �Z4Gd;d<�d<e0e
j �Z5Gd=d>�d>e
j �Z6e7d?kr�e
j8�dS)@�N)�permutations)�choice)�support)�proxy�	functoolsZblocked�
_functoolsZfresh�decimalZ_decimalcOs
||fS)N�)�args�kwr	r	�3/opt/alt/python35/lib64/python3.5/test_functools.py�capturesr
cCs|j|j|j|jfS)N)�funcr
�keywords�__dict__)�partr	r	r�	signaturesrc@seZdZdS)�MyTupleN)�__name__�
__module__�__qualname__r	r	r	rr#src@seZdZdd�ZdS)�BadTuplecCst|�t|�S)N)�list)�self�otherr	r	r�__add__'szBadTuple.__add__N)rrrrr	r	r	rr&src@seZdZdS)�MyDictN)rrrr	r	r	rr*src@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�ZdS) �TestPartialc
Cs�|jtdddddd�}|jt|��|j|dddd	d
d�dtdddd	d
d�f�|jtdd
��}|jt|ddddg��ddd	dg�dS)N���a�
�b�����c�(cSs|dS)Nr!r	)�xr	r	r�<lambda>5sz1TestPartial.test_basic_examples.<locals>.<lambda>)rrr$r%)�partialr
�
assertTrue�callable�assertEqual�dict�mapr)r�pr	r	r�test_basic_examples0s!"zTestPartial.test_basic_examplescCsm|jtdddddd�}|j|jt�|j|jd�|j|jtdddd��dS)Nrrr r!r"r#)rr)r+r
r.rr
rr/)rr1r	r	r�test_attributes8s!zTestPartial.test_attributescCsM|jt|j�y|jd��Wntk
r;YnX|jd�dS)Nrz%First arg not checked for callability)�assertRaises�	TypeErrorr+�fail)rr	r	r�test_argument_checking?s
z"TestPartial.test_argument_checkingcCs�dddd�}ddi}|j|dd�}|j||�d�|j|ddi�|dd	�|j|ddi�dS)
Nr!r#cSs|S)Nr	)r r"r	r	rrJszBTestPartial.test_protection_of_callers_dict_argument.<locals>.funcr r$�r"�)r+r.)rr�dr1r	r	r�(test_protection_of_callers_dict_argumentHs
z4TestPartial.test_protection_of_callers_dict_argumentcCsjddi}|jt|�}|j|�fddif�d|d<|j|�fddif�dS)Nr r$r8)r+r
r.)rr:r1r	r	r�test_kwargs_copySs

zTestPartial.test_kwargs_copycCs�|jt�}|j|�fif�|j|dd�dif�|jtdd�}|j|�dif�|j|dd�dif�dS)Nrrr$r%)rr)rr)rrr$r%)r+r
r.)rr1r	r	r�test_arg_combinations\sz!TestPartial.test_arg_combinationscCs
|jt�}|j|ji�|j|�fif�|j|dd�fddif�|jtdd�}|j|jddi�|j|�fddif�|j|dd�fddddif�|j|dddd�fddddif�dS)Nr rr"rr$)r+r
r.r)rr1r	r	r�test_kw_combinationsfs%+z TestPartial.test_kw_combinationscCsqxjfdddd	gD]S}|jt|�}|d
}|d�\}}|j||koe|ik�qWdS)Nrrrr$r))r)rr)rrr)rrrr$)r))r+r
r,)rr
r1�expected�got�emptyr	r	r�test_positionalts

zTestPartial.test_positionalcCs|xuddddgD]a}|jtd|�}d|ddi}|dd�\}}|j||kop|fk�qWdS)Nr rg@r))r+r
r,)rr r1r?rAr@r	r	r�test_keyword|s
zTestPartial.test_keywordcCs�|jtddd�}|ddd�\}}|j|dkoW|ddddik�|�\}}|j|dko�|ddik�dS)Nrr rr"r)rr)r)r+r
r,)rr1Zargs1Zkw1Zargs2Zkw2r	r	r�test_no_side_effects�s
+z TestPartial.test_no_side_effectscCs�dd�}|jt|j|dd��|jt|j|d�d�|jt|j|�dd�|jt|j|dd�d�dS)NcSs||dS)Nr	)r)�yr	r	r�f�sz-TestPartial.test_error_propagation.<locals>.frrrE)r4�ZeroDivisionErrorr+)rrFr	r	r�test_error_propagation�s
z"TestPartial.test_error_propagationcCsW|jtdd�}t|�}|j|j|j�d}|jtt|d�dS)N�base�r)r+�intrr.rr4�ReferenceError�getattr)rrFr1r	r	r�test_weakref�s
zTestPartial.test_weakrefcCsrttttd���}|jtjd�}|j||�d�|jdj�}|j||�d�dS)Nr!��
0123456789)rr0�str�ranger+�joinr.)r�datarSr	r	r�#test_with_bound_and_unbound_methods�s
z/TestPartial.test_with_bound_and_unbound_methodscCs_|j}|td�}||dd�}|tddd�}|jt|�t|��dS)N�asdf�barT)r+rr.)rr+�inner�nestedZflatr	r	r�test_nested_optimization�s
	z$TestPartial.test_nested_optimizationcCsS|j}dd�}||d�}||d�}d|_|j|jd�dS)NcSs|S)Nr	)rWr	r	r�foo�sz;TestPartial.test_nested_partial_with_attribute.<locals>.foo�first�secondZspam)r+Znew_attrr.)rr+r[r1Zp2r	r	r�"test_nested_partial_with_attribute�s		z.TestPartial.test_nested_partial_with_attributeN)rrrr2r3r7r;r<r=r>rBrCrDrHrNrUrZr^r	r	r	rr.s		
rz requires the C _functools modulec@s�eZdZerejZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�ZdS)�TestPartialCcCs�|jtdddddd�}|jtt|dt�|jtt|dd�|jtt|d	tdddd��|jt�}y
|`Wnt	k
r�YnX|j
d
�dS)Nrrr r!r"r#rr
rz-partial object allowed __dict__ to be deleted)rr)r+r
r4�AttributeError�setattrr0r/�hexrr5r6)rr1r	r	r�test_attributes_unwritable�s!(

z'TestPartialC.test_attributes_unwritablecsst�t�f}djdd�|D���dt�dt�i}dj|�dj|�g}|jtjkrd�n|jj�|jt�}|jd	j�t�t	|��|jt|�}|jd
j�t��t	|��|jt|�}|j
t	|��fdd�|D��|jt||�}|j
t	|���fd
d�|D��dS)Nz, css|]}t|�VqdS)N)�repr)�.0r r	r	r�	<genexpr>�sz)TestPartialC.test_repr.<locals>.<genexpr>r r"za={a!r}, b={b!r}zb={b!r}, a={a!r}zfunctools.partialz{}({!r})z{}({!r}, {})cs%g|]}dj�t|��qS)z{}({!r}, {}))�formatr
)re�kwargs_repr)�namer	r�
<listcomp>�s	z*TestPartialC.test_repr.<locals>.<listcomp>cs(g|]}dj�t�|��qS)z{}({!r}, {}, {}))rgr
)rerh)�	args_reprrir	rrj�s	)�objectrS�
format_mapr+�c_functoolsrr
r.rgrd�assertIn)rr
�kwargsZkwargs_reprsrFr	)rkrir�	test_repr�s,	

zTestPartialC.test_reprcCsu|jtjkrd}n|jj}|jt�}|j|fiif�z$|jt|�d||f�Wd|jtfiif�X|jt�}|jt|fiif�z'|jt|�d|t|f�Wd|jtfiif�X|jt�}|jtfd|iif�z'|jt|�d|t|f�Wd|jtfiif�XdS)Nzfunctools.partialz%s(%s(...))z%s(%r, %s(...))r z%s(%r, a=%s(...)))r+rnrr
�__setstate__r.rd)rrirFr	r	r�test_recursive_repr�s$	$''z TestPartialC.test_recursive_reprcCs�|jtdgddg�}g|_xRttjd�D]=}tjtj||��}|jt|�t|��q;WdS)NrVrWTr)	r+r�attrrR�pickle�HIGHEST_PROTOCOL�loads�dumpsr.)rrF�proto�f_copyr	r	r�test_pickles
	zTestPartialC.test_picklecCs�|jtdgddg�}g|_tj|�}|jt|�t|��|j|j|j�|j|j|j�|j|j|j�dS)NrVrWT)r+rrt�copyr.�assertIsr
r)rrFrzr	r	r�	test_copy	s	zTestPartialC.test_copycCs�|jtdgddg�}g|_tj|�}|jt|�t|��|j|j|j�|j|j|j�|j|jd|jd�|j|j|j�|j|jd|jd�dS)NrVrWTr)	r+rrtr|�deepcopyr.ZassertIsNotr
r)rrFrzr	r	r�
test_deepcopys	zTestPartialC.test_deepcopycCs)|jt�}|jtdtdd�tdg�f�|jt|�td	tdd�tdg�f�|j|ddd�d
ddddif�|jtdtdd�df�|jt|�tdtdd�if�|j|ddd�d
ddddif�|jtdddf�|j|ddd�dddif�|j|d�dif�|j|�dif�|jtfidf�|jt|�tfiif�|j|ddd�dddif�|j|d�dif�|j|�fif�dS)Nrr r!rtrr"r#)r)r)rr)r)r)rr)r)rr)rr)r)r)r)r+rrrr
r/r.)rrFr	r	r�
test_setstates"+%."+.("(zTestPartialC.test_setstatecCs|jt�}|jt|jtfif�|jt|jtfiidf�|jt|jtfidg�|jt|jdfidf�|jt|jtdidf�|jt|jtgidf�|jt|jtfgdf�dS)N)r+rr4r5rrr
)rrFr	r	r�test_setstate_errors4s%""""z!TestPartialC.test_setstate_errorscCs�|jt�}|jttd�tdd�df�t|�}|j|tdtdd�if�|jt	|d�t
�|jt	|d�t�|�}|j|dddif�|jt	|d�t
�|jt	|d�t�|jttd	�idf�t|�}|j|td
iif�|jt	|d�t
�|d�}|j|dif�|jt	|d�t
�dS)Nrr r!rr)r)r)r)r)r)rr)r+rrrr
rrr.r/r}�type�tupler)rrF�s�rr	r	r�test_setstate_subclasses>s"(%	z%TestPartialC.test_setstate_subclassesc%Cs|jt�}|j|fiif�zIxBttjd�D]-}|jt��tj||�WdQRXq?WWd|jtfiif�X|jt�}|jt|fiif�zuxnttjd�D]Y}tj	tj||��}z|j
|jd|�Wd|jtfiif�Xq�WWd|jtfiif�X|jt�}|jtfd|iif�zuxnttjd�D]Y}tj	tj||��}z|j
|jd|�Wd|jtfiif�Xq�WWd|jtfiif�XdS)Nrrr )
r+r
rrrRrurvr4�RecursionErrorrxrwr}r
r)rrFryrzr	r	r�test_recursive_pickleRs2""z"TestPartialC.test_recursive_picklecCs?Gdd�d�}|jt�}|jt|j|��dS)Nc@s(eZdZdd�Zdd�ZdS)z8TestPartialC.test_setstate_refcount.<locals>.BadSequencecSsdS)Nr%r	)rr	r	r�__len__wsz@TestPartialC.test_setstate_refcount.<locals>.BadSequence.__len__cSsF|dkrtS|dkr,ttd��S|dkr<iSt�dS)Nrri@Brr$)rr$)�maxr�rR�
IndexError)r�keyr	r	r�__getitem__yszDTestPartialC.test_setstate_refcount.<locals>.BadSequence.__getitem__N)rrrr�r�r	r	r	r�BadSequencevsr�)r+rlr4r5rr)rr�rFr	r	r�test_setstate_refcountusz#TestPartialC.test_setstate_refcountc	Csj|jt�}d|jd<t|�}|jd|�|jd|�|jt��|�WdQRXdS)N�valuei�Z1234z'value')r+r
rrdror4r5)rr1r�r	r	r�'test_manually_adding_non_string_keyword�s
z4TestPartialC.test_manually_adding_non_string_keywordcsn|jt��G�fdd�dt�}dg�j|�<t��}|jd|�|jd|�dS)Ncs"eZdZ�fdd�ZdS)z@TestPartialC.test_keystr_replaces_value.<locals>.MutatesYourDictcsdg�j|<dS)NZsth2�astr)r)r)r1r	r�__str__�szHTestPartialC.test_keystr_replaces_value.<locals>.MutatesYourDict.__str__N)rrrr�r	)r1r	r�MutatesYourDict�sr�Zsthr�z['sth'])r+r
rlrrdro)rr�r�r	)r1r�test_keystr_replaces_value�sz'TestPartialC.test_keystr_replaces_valueN)rrrrnr+rcrqrsr{r~r�r�r�r�r�r�r�r�r	r	r	rr_�s		
#
r_c@seZdZeej�ZdS)�
TestPartialPyN)rrr�staticmethod�py_functoolsr+r	r	r	rr��sr�c@seZdZdS)�PartialSubclassN)rrrr	r	r	rr��sr�c@s"eZdZereZdZdS)�TestPartialCSubclassN)rrrrnr�r+rZr	r	r	rr��sr�c@s�eZdZGdd�de�Ze�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�ZdS)�TestPartialMethodc@s�eZdZeje�Zejed�Zejedd�Zejeddd�Z	ejed�Z
ejejedd	�d
�Zeje
e�d�Zejee�dd
�ZdS)zTestPartialMethod.Arr rr$r"r%r8r'�r9�r:�	N)rrrr�
partialmethodr
�nothing�
positionalr�bothrYr+�over_partialr��static�classmethod�clsr	r	r	r�A�s!r�cCsr|j|jj�|jfif�|j|jjd�|jdfif�|j|jjdd�|jfddif�|j|jjddd�|jdfddif�|j|jj�|jdfif�|j|jjd�|jddfif�|j|jjdd�|jdfddif�|j|jjddd�|jddfddif�|j|jj�|jfddif�|j|jjd�|jdfddif�|j|jjdd�|jfddddif�|j|jjddd�|jdfddddif�|j|jj�|jdfdd	if�|j|jjd�|jddfdd	if�|j|jjdd�|jdfdd	ddif�|j|jjddd�|jddfdd	ddif�|j|jj|jddd�|jddfdd	ddif�dS)
Nr8r'r�rr rr$r"r%)r.r r�r�rr�r�)rr	r	rr=�s"%+17(.4:+17=.4:@z'TestPartialMethod.test_arg_combinationscCs|j|jj�|jddfif�|j|jjd�|jdddfif�|j|jjdd�|jddfddif�|j|jjddd�|jdddfddif�|j|jj|jddd�|jdddfddif�dS)Nrr8r�r:r9)r.r rYr�)rr	r	r�test_nested�s
+17=zTestPartialMethod.test_nestedcCs&|j|jj�|jdfddif�|j|jjd�|jddfddif�|j|jjdd�|jdfddddif�|j|jjddd�|jddfddddif�|j|jj|jddd�|jddfddddif�dS)Nr9r'r�r8r:r�)r.r r�r�)rr	r	r�test_over_partial�s
.4:@z#TestPartialMethod.test_over_partialcCs�|j}|j|jj|�|j|jj|�|j|jj|�|j|jj|j�|j|jjj|j�dS)N)r r}r��__self__rYr�r�r�)r�objr	r	r�test_bound_method_introspection�s	z1TestPartialMethod.test_bound_method_introspectioncCs�|j}|jt|jd��|jt|jd��|jt|jd��|jt|jd��|jt|jjd��dS)Nr�)r��assertFalse�hasattrr�rYr�r�r )rr�r	r	r�test_unbound_method_retrieval�s	z/TestPartialMethod.test_unbound_method_retrievalcCs�x�|j|jgD]r}|jd|��W|j|j�dif�|j|jd�dif�|j|jdd�d	ddif�|j|jddd�d
ddif�|j|j�|jfddif�|j|jd�|jdfddif�|j|jdd�|jfddddif�|j|jddd�|jdfddddif�WdQRXqWdS)Nr�r�r8r:r�r')r�)r�r8)r�)r�r8)r�r �subTestr.r�r�)rr�r	r	r�test_descriptors�s(+(.4z"TestPartialMethod.test_descriptorscCsl|j|jjdd�|jfddif�|j|jj|jdd�|jfddif�dS)Nr r$)r.r rr�)rr	r	r�test_overriding_keywordss1z*TestPartialMethod.test_overriding_keywordscCs1|jt��Gdd�dt�}WdQRXdS)Nc@s"eZdZejdd�ZdS)z.TestPartialMethod.test_invalid_args.<locals>.BNr)rrrrr��methodr	r	r	r�B
sr�)r4r5rl)rr�r	r	r�test_invalid_argssz#TestPartialMethod.test_invalid_argscCs0|jtt|j�d�djt��dS)Nr�z#functools.partialmethod({}, 3, b=4))r.rd�varsr�rgr
)rr	r	rrqszTestPartialMethod.test_reprcCs�Gdd�dtj�}|j|jj�|j|jj�xT|jj|jj|jj	|jj
|jjgD]}|jt
|dd��qsWdS)Nc@s7eZdZejdd��Zejed�ZdS)z1TestPartialMethod.test_abstract.<locals>.AbstractcSsdS)Nr	)rr)rEr	r	r�addsz5TestPartialMethod.test_abstract.<locals>.Abstract.addr8N)	rrr�abc�abstractmethodr�rr��add5r	r	r	r�Abstractsr��__isabstractmethod__F)r��ABCMetar,r�r�r�r�r�r�r�rYr�r�rM)rr�rr	r	r�
test_abstracts
:zTestPartialMethod.test_abstractN)rrrrlr�r r=r�r�r�r�r�r�r�rqr�r	r	r	rr��s
	
r�c@s�eZdZejejdd�Zdd�Zdd�Ze	j
ejj
dkd�d	d
��Zdd�Zd
d�Zdd�Zeje	j
ejj
dkd�dd���ZdS)�TestUpdateWrapperc	Cs�x0|D](}|jt||�t||��qWxp|D]h}t||�}t||�}xA|D]9}|dkr�|dkr�qe|j||||�qeWq:W|j|j|�dS)Nr�__wrapped__)r}rMr�)	r�wrapper�wrapped�assigned�updatedriZwrapper_attrZwrapped_attrr�r	r	r�
check_wrapper&s
&

 zTestUpdateWrapper.check_wrappercCsVdddd��}d|_d|_ddd	d
��}tj||�||fS)NzThis is a new annotation)r cSsdS)Nr	)r r	r	rrF:sz,TestUpdateWrapper._default_update.<locals>.fzThis is also a testzThis is a bald faced liezThis is the prior annotation)r"cSsdS)Nr	)r"r	r	rr�?sz2TestUpdateWrapper._default_update.<locals>.wrapper)rtr�r�update_wrapper)rrFr�r	r	r�_default_update9s		z!TestUpdateWrapper._default_updatecCs�|j�\}}|j||�|j|j|�|j|jd�|j|j|j�|j|jd�|j|jdd�|j	d|j�dS)NrFzThis is also a testr zThis is a new annotationr")
r�r�r}r�r.rrrt�__annotations__�assertNotIn)rr�rFr	r	r�test_default_updateDsz%TestUpdateWrapper.test_default_updaterz)Docstrings are omitted with -O2 and abovecCs)|j�\}}|j|jd�dS)NzThis is a test)r�r.�__doc__)rr�rFr	r	r�test_default_update_docNsz)TestUpdateWrapper.test_default_update_doccCs�dd�}d|_dd�}tj||ff�|j||ff�|j|jd�|j|j|j�|j|jd�|j|j	i�|j
t|d��dS)NcSsdS)Nr	r	r	r	rrFUsz+TestUpdateWrapper.test_no_update.<locals>.fzThis is also a testcSsdS)Nr	r	r	r	rr�Ysz1TestUpdateWrapper.test_no_update.<locals>.wrapperr�rt)rtrr�r�r.r�assertNotEqualrr�r�r�r�)rrFr�r	r	r�test_no_updateTs	z TestUpdateWrapper.test_no_updatecCs�dd�}d|_tdddddd	�|_d
d�}i|_d}d}tj||||�|j||||�|j|jd�|j|j	|j	�|j|j
d�|j|jd�|j|j|j�dS)NcSsdS)Nr	r	r	r	rrFdsz2TestUpdateWrapper.test_selective_update.<locals>.fzThis is a different testr rr"rr'r$cSsdS)Nr	r	r	r	rr�hsz8TestUpdateWrapper.test_selective_update.<locals>.wrapperrt�	dict_attrr�)rt)r�)rtr/r�rr�r�r.rr�rr�)rrFr��assign�updater	r	r�test_selective_updatecs		z'TestUpdateWrapper.test_selective_updatecCs�dd�}dd�}i|_d}d	}tj||||�|jd|j�|j|ji�|`|jt��tj||||�WdQRXd|_|jt��tj||||�WdQRXdS)
NcSsdS)Nr	r	r	r	rrFvsz4TestUpdateWrapper.test_missing_attributes.<locals>.fcSsdS)Nr	r	r	r	rr�xsz:TestUpdateWrapper.test_missing_attributes.<locals>.wrapperrtr�r)rt)r�)r�rr�r�rr.r4r`)rrFr�r�r�r	r	r�test_missing_attributesus		z)TestUpdateWrapper.test_missing_attributescCs_dd�}tj|t�|j|jd�|j|jjd��|j|ji�dS)NcSsdS)Nr	r	r	r	rr��sz6TestUpdateWrapper.test_builtin_update.<locals>.wrapperr�zmax()	rr�r�r.rr,r��
startswithr�)rr�r	r	r�test_builtin_update�s
z%TestUpdateWrapper.test_builtin_updateN)rrrr�WRAPPER_ASSIGNMENTS�WRAPPER_UPDATESr�r�r��unittest�skipIf�sys�flags�optimizer�r�r�r�rZrequires_docstringsr�r	r	r	rr�$s
r�c@sjeZdZdd�Zdd�Zejejj	dkd�dd��Z
d	d
�Zdd�Zd
S)�	TestWrapscCsCdd�}d|_d|_tj|�dd��}||fS)NcSsdS)Nr	r	r	r	rrF�sz$TestWraps._default_update.<locals>.fzThis is also a testzThis is still a bald faced liecSsdS)Nr	r	r	r	rr��sz*TestWraps._default_update.<locals>.wrapper)rtr�r�wraps)rrFr�r	r	rr��s
		zTestWraps._default_updatecCsb|j�\}}|j||�|j|jd�|j|j|j�|j|jd�dS)NrFzThis is also a test)r�r�r.rrrt)rr�rFr	r	rr��s
zTestWraps.test_default_updaterz)Docstrings are omitted with -O2 and abovecCs)|j�\}}|j|jd�dS)NzThis is a test)r�r.r�)rr��_r	r	rr��sz!TestWraps.test_default_update_doccCs�dd�}d|_tj|ff�dd��}|j||ff�|j|jd�|j|j|j�|j|jd�|j	t
|d��dS)NcSsdS)Nr	r	r	r	rrF�sz#TestWraps.test_no_update.<locals>.fzThis is also a testcSsdS)Nr	r	r	r	rr��sz)TestWraps.test_no_update.<locals>.wrapperr�rt)rtrr�r�r.rr�rr�r�r�)rrFr�r	r	rr��s	!zTestWraps.test_no_updatecCs�dd�}d|_tdddddd	�|_d
d�}d}d}tj|||�|dd���}|j||||�|j|jd�|j|j	|j	�|j|j
d�|j|jd�|j|j|j�dS)NcSsdS)Nr	r	r	r	rrF�sz*TestWraps.test_selective_update.<locals>.fzThis is a different testr rr"rr'r$cSs
i|_|S)N)r�)rFr	r	r�
add_dict_attr�s	z6TestWraps.test_selective_update.<locals>.add_dict_attrrtr�cSsdS)Nr	r	r	r	rr��sz0TestWraps.test_selective_update.<locals>.wrapperr�)rt)r�)rtr/r�rr�r�r.rr�rr�)rrFr�r�r�r�r	r	rr��s	zTestWraps.test_selective_updateN)
rrrr�r�r�r�r�r�r�r�r�r�r	r	r	rr��sr�c@s1eZdZejZdd�Zdd�ZdS)�
TestReducecCs�Gdd�d�}dd�}|j|j|dddgd�d	�|j|j|ddggd
dggg�ddd
dg�|j|jdd
�tdd�d�d�|j|jdd
�tdd�d�d�|j|j||d��d�|j|j||d�d�d�|j|j||d�d�d�|jt|j�|jt|jdd�|jt|jddd�|j|jdd�d�|j|jddd�d�|jt|jdd�|jt|j|g�|jt|j|d�|jt|j|f�|jt|j|t��Gdd�d�}|jt|j||��|j|j|gd�d�|j|j|gd�d�Gdd�d�}|jt|jd|��dS)Nc@s4eZdZdd�Zdd�Zdd�ZdS)z'TestReduce.test_reduce.<locals>.SquarescSs||_g|_dS)N)r��sofar)rr�r	r	r�__init__�s	z0TestReduce.test_reduce.<locals>.Squares.__init__cSs
t|j�S)N)�lenr�)rr	r	rr��sz/TestReduce.test_reduce.<locals>.Squares.__len__cSspd|ko|jkns%t�t|j�}x.||krd|jj||�|d7}q7W|j|S)Nrr)r�r�r�r��append)r�i�nr	r	rr��sz3TestReduce.test_reduce.<locals>.Squares.__getitem__N)rrrr�r�r�r	r	r	r�Squares�sr�cSs||S)Nr	)r)rEr	r	rr��sz#TestReduce.test_reduce.<locals>.addr r"r'rOr�r:�wcSs||S)Nr	)r)rEr	r	rr*�sz(TestReduce.test_reduce.<locals>.<lambda>rr�ri�cSs||S)Nr	)r)rEr	r	rr*�s�lh�r!ir�*�1c@seZdZdd�ZdS)z/TestReduce.test_reduce.<locals>.TestFailingItercSs
t�dS)N)�RuntimeError)rr	r	r�__iter__sz8TestReduce.test_reduce.<locals>.TestFailingIter.__iter__N)rrrr�r	r	r	r�TestFailingItersr�c@seZdZdd�ZdS)z&TestReduce.test_reduce.<locals>.BadSeqcSs
t�dS)N)�
ValueError)r�indexr	r	rr�
sz2TestReduce.test_reduce.<locals>.BadSeq.__getitem__N)rrrr�r	r	r	r�BadSeq	sr�)r�r�)r.rrRr4r5rlr�r�)rr�r�r�r�r	r	r�test_reduce�s:('.!"%%zTestReduce.test_reducecCs<Gdd�d�}ddlm}|j|j||d��d�|j|j||d�d�d�|jt|j||d��|j|j||d�d�d�|j|j||d	��d�|j|j||d	�d�d�d
d	ddd
di}|j|j||�dj|j���dS)Nc@s(eZdZdd�Zdd�ZdS)z5TestReduce.test_iterator_usage.<locals>.SequenceClasscSs
||_dS)N)r�)rr�r	r	rr�sz>TestReduce.test_iterator_usage.<locals>.SequenceClass.__init__cSs-d|ko|jknr#|St�dS)Nr)r�r�)rr�r	r	rr�szATestReduce.test_iterator_usage.<locals>.SequenceClass.__getitem__N)rrrr�r�r	r	r	r�
SequenceClasssr�r)r�r8r!r��4rZoneZtworZthreer$rO)�operatorr�r.rr4r5rS�keys)rr�r�r:r	r	r�test_iterator_usages	"%%"%zTestReduce.test_iterator_usageN)rrrr�reducerr�r�r	r	r	rr��s	8r�c@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�TestCmpToKeycCs�dd�}|j|�}|j|d�|d��|j|d�|d��|j|d�|d��dd�}|j|�}|j|d�|d��|j|d	�|d
��|j|d	�|d
��|j|d	�|d
��dS)NcSs||k||kS)Nr	)r)rEr	r	r�cmp1(sz*TestCmpToKey.test_cmp_to_key.<locals>.cmp1r$rcSst|�t|�S)N)rK)r)rEr	r	r�cmp2/sz*TestCmpToKey.test_cmp_to_key.<locals>.cmp2g@�4rZ35)�
cmp_to_keyr.�
assertGreaterZassertGreaterEqualZ
assertLess�assertLessEqualr�)rr�r�r�r	r	r�test_cmp_to_key'szTestCmpToKey.test_cmp_to_keyc-Cs]dd�}|jd|�}|j|dd�|dd��|j|dd�|dd��|jttf��|d�dkWdQRX|jttf��d|d�kWdQRX|jt��|j�}WdQRX|jt��|j|d�}WdQRX|j|�}|jt��|�WdQRX|jt��|dd�WdQRXdS)NcSs||k||kS)Nr	)r)rEr	r	rr�8sz4TestCmpToKey.test_cmp_to_key_arguments.<locals>.cmp1�mycmpr�r$r)r�r.rr4r5r`)rr�r�r	r	r�test_cmp_to_key_arguments7s"""z&TestCmpToKey.test_cmp_to_key_argumentscs�dd�}|j|�}|jt��|d�|d�kWdQRXGdd�d���fdd�}|jt��|d�|d�kWdQRXdS)NcSs
t�dS)N)rG)r)rEr	r	rr�Lsz'TestCmpToKey.test_bad_cmp.<locals>.cmp1r$rc@seZdZdd�ZdS)z)TestCmpToKey.test_bad_cmp.<locals>.BadCmpcSs
t�dS)N)rG)rrr	r	r�__lt__Ssz0TestCmpToKey.test_bad_cmp.<locals>.BadCmp.__lt__N)rrrrr	r	r	r�BadCmpRsrcs��S)Nr	)r)rE)rr	rr�Us)r�r4rG)rr�r�r	)rr�test_bad_cmpKszTestCmpToKey.test_bad_cmpcCs;dd�}|jd|�}|j|d�jd�dS)NcSs||k||kS)Nr	)r)rEr	r	rr�[sz)TestCmpToKey.test_obj_field.<locals>.cmp1r�2)r�r.r�)rr�r�r	r	r�test_obj_fieldZszTestCmpToKey.test_obj_fieldcCsJdd�}|jttd�d|j|��ddddd	g�dS)
NcSs||S)Nr	)r)rEr	r	rrasz)TestCmpToKey.test_sort_int.<locals>.mycmpr8r�r%r$rrr)r.�sortedrRr�)rrr	r	r�
test_sort_int`s$zTestCmpToKey.test_sort_intcCs�dd�}ddddddd	d
dg	}t|d|j|��}|jd
d�|D�dddddd	dddg	�dS)NcSs-t|�t|�}}||k||kS)N)rK)r)rEr	r	rrgsz-TestCmpToKey.test_sort_int_str.<locals>.mycmpr8�3r9r�0r�r%Z10rr�cSsg|]}t|��qSr	)rK)rer�r	r	rrjls	z2TestCmpToKey.test_sort_int_str.<locals>.<listcomp>rr$r!)r
r�r.)rr�valuesr	r	r�test_sort_int_strfs
!zTestCmpToKey.test_sort_int_strcCsQdd�}|j|�}|d�}|jtt|�|j|tj�dS)NcSs||S)Nr	)r)rEr	r	rrpsz%TestCmpToKey.test_hash.<locals>.mycmpr!)r�r4r5�hashZassertNotIsInstance�collections�Hashable)rrr��kr	r	r�	test_hashos
zTestCmpToKey.test_hashN)
rrrrrrr	rrrr	r	r	rr�%s	r�c@seZdZerejZdS)�
TestCmpToKeyCN)rrrrnr�r	r	r	rrxsrc@seZdZeej�ZdS)�TestCmpToKeyPyN)rrrr�r�r�r	r	r	rr~src@speZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�TestTotalOrderingcCs�tjGdd�d��}|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�dS)Nc@s4eZdZdd�Zdd�Zdd�ZdS)z3TestTotalOrdering.test_total_ordering_lt.<locals>.AcSs
||_dS)N)r�)rr�r	r	rr��sz<TestTotalOrdering.test_total_ordering_lt.<locals>.A.__init__cSs|j|jkS)N)r�)rrr	r	rr�sz:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__lt__cSs|j|jkS)N)r�)rrr	r	r�__eq__�sz:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__eq__N)rrrr�rrr	r	r	rr��sr�rr)r�total_orderingr,r�)rr�r	r	r�test_total_ordering_lt�sz(TestTotalOrdering.test_total_ordering_ltcCs�tjGdd�d��}|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�dS)Nc@s4eZdZdd�Zdd�Zdd�ZdS)z3TestTotalOrdering.test_total_ordering_le.<locals>.AcSs
||_dS)N)r�)rr�r	r	rr��sz<TestTotalOrdering.test_total_ordering_le.<locals>.A.__init__cSs|j|jkS)N)r�)rrr	r	r�__le__�sz:TestTotalOrdering.test_total_ordering_le.<locals>.A.__le__cSs|j|jkS)N)r�)rrr	r	rr�sz:TestTotalOrdering.test_total_ordering_le.<locals>.A.__eq__N)rrrr�rrr	r	r	rr��sr�rr)rrr,r�)rr�r	r	r�test_total_ordering_le�sz(TestTotalOrdering.test_total_ordering_lecCs�tjGdd�d��}|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�dS)Nc@s4eZdZdd�Zdd�Zdd�ZdS)z3TestTotalOrdering.test_total_ordering_gt.<locals>.AcSs
||_dS)N)r�)rr�r	r	rr��sz<TestTotalOrdering.test_total_ordering_gt.<locals>.A.__init__cSs|j|jkS)N)r�)rrr	r	r�__gt__�sz:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__gt__cSs|j|jkS)N)r�)rrr	r	rr�sz:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__eq__N)rrrr�rrr	r	r	rr��sr�rr)rrr,r�)rr�r	r	r�test_total_ordering_gt�sz(TestTotalOrdering.test_total_ordering_gtcCs�tjGdd�d��}|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�dS)Nc@s4eZdZdd�Zdd�Zdd�ZdS)z3TestTotalOrdering.test_total_ordering_ge.<locals>.AcSs
||_dS)N)r�)rr�r	r	rr��sz<TestTotalOrdering.test_total_ordering_ge.<locals>.A.__init__cSs|j|jkS)N)r�)rrr	r	r�__ge__�sz:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__ge__cSs|j|jkS)N)r�)rrr	r	rr�sz:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__eq__N)rrrr�rrr	r	r	rr��sr�rr)rrr,r�)rr�r	r	r�test_total_ordering_ge�sz(TestTotalOrdering.test_total_ordering_gecCs�tjGdd�dt��}|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�|j|d�|d�k�dS)Nc@seZdZdS)z=TestTotalOrdering.test_total_ordering_no_overwrite.<locals>.AN)rrrr	r	r	rr��sr�rr)rrrKr,)rr�r	r	r� test_total_ordering_no_overwrite�sz2TestTotalOrdering.test_total_ordering_no_overwritecCs7|jt��!tjGdd�d��}WdQRXdS)Nc@seZdZdS)z7TestTotalOrdering.test_no_operations_defined.<locals>.AN)rrrr	r	r	rr��sr�)r4r�rr)rr�r	r	r�test_no_operations_defined�sz,TestTotalOrdering.test_no_operations_definedc�s�tjG�fdd�d���tjG�fdd�d���tjG�fdd�d���tjG�fdd�d���tjG�fd	d
�d
���|jd��,|jt���d �dkWdQRXWdQRX|jd
��2|jt���d��d�kWdQRXWdQRX|jd��2|jt���d��d�kWdQRXWdQRX|jd��2|jt���d��d�kWdQRXWdQRX|jd��2|jt���d��d�kWdQRXWdQRX|jd��2|jt���d��d�kWdQRXWdQRX|jd��2|jt���d��d�kWdQRXWdQRX|jd��2|jt���d��d�kWdQRXWdQRX|jd��2|jt���d��d�kWdQRXWdQRX|jd��N�d�}�d�}|j||�|jt��||kWdQRXWdQRX|jd��N�d�}�d�}|j||�|jt��||kWdQRXWdQRXdS)!Ncs@eZdZdd�Z�fdd�Z�fdd�ZdS)zRTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThancSs
||_dS)N)r�)rr�r	r	rr��sz[TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__init__cs#t|��r|j|jkSdS)NF)�
isinstancer�)rr)�ImplementsLessThanr	rr�szYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__eq__cs#t|��r|j|jkStS)N)r#r��NotImplemented)rr)r$r	rr�szYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__lt__N)rrrr�rrr	)r$r	rr$�sr$cs@eZdZdd�Z�fdd�Z�fdd�ZdS)zUTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThancSs
||_dS)N)r�)rr�r	r	rr��sz^TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__init__cs#t|��r|j|jkSdS)NF)r#r�)rr)�ImplementsGreaterThanr	rr�sz\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__eq__cs#t|��r|j|jkStS)N)r#r�r%)rr)r&r	rr�sz\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__gt__N)rrrr�rrr	)r&r	rr&�sr&cs@eZdZdd�Z�fdd�Z�fdd�ZdS)zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTocSs
||_dS)N)r�)rr�r	r	rr��szbTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__init__cs#t|��r|j|jkSdS)NF)r#r�)rr)�ImplementsLessThanEqualTor	rr�sz`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__eq__cs#t|��r|j|jkStS)N)r#r�r%)rr)r'r	rr�sz`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__le__N)rrrr�rrr	)r'r	rr'�sr'cs@eZdZdd�Z�fdd�Z�fdd�ZdS)z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTocSs
||_dS)N)r�)rr�r	r	rr�szeTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__init__cs#t|��r|j|jkSdS)NF)r#r�)rr)�ImplementsGreaterThanEqualTor	rrszcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__eq__cs#t|��r|j|jkStS)N)r#r�r%)rr)r(r	rrszcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__ge__N)rrrr�rrr	)r(r	rr(sr(cs:eZdZdd�Z�fdd�Zdd�ZdS)zXTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplementedcSs
||_dS)N)r�)rr�r	r	rr�szaTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__init__cs#t|��r|j|jkSdS)NF)r#r�)rr)�ComparatorNotImplementedr	rrsz_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__eq__cSstS)N)r%)rrr	r	rrsz_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__lt__N)rrrr�rrr	)r)r	rr)sr)zLT < 1rzLT < LErzLT < GTzLE <= LTrzLE <= GEr$zGT > GEr%zGT > LTr8zGE >= GTr�zGE >= LEr9z
GE when equalr�z
LE when equalr����)rrr�r4r5r.)rr r"r	)r)r&r(r$r'r�$test_type_error_when_not_implemented�sF"
"
"
"
"  $ $ $ $ $ $ $ $z6TestTotalOrdering.test_type_error_when_not_implementedc
Cs�x�ttjd�D]q}xhdD]`}|jd|d|��?tt|�}tjtj||��}|j||�WdQRXq!WqWdS)	Nrrrrrr�ry)rrrr)	rRrurvr�rM�Orderable_LTrwrxr})rryrir�Zmethod_copyr	r	rr{Es
zTestTotalOrdering.test_pickleN)rrrrrrr r!r"r+r{r	r	r	rr�skrc@s4eZdZdd�Zdd�Zdd�ZdS)r,cCs
||_dS)N)r�)rr�r	r	rr�OszOrderable_LT.__init__cCs|j|jkS)N)r�)rrr	r	rrQszOrderable_LT.__lt__cCs|j|jkS)N)r�)rrr	r	rrSszOrderable_LT.__eq__N)rrrr�rrr	r	r	rr,Msr,c@s*eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Ze
jed�dd��Ze
jed�dd��Ze
jed�dd��Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(S))�TestLRUc
s�dd�}|jjdd�|�}|j�\}}}}|j|d�|j|d�|j|d�|j|d�td�}x[td�D]M}t|�t|�}	}
||	|
�}||	|
�}|j||�q�W|j�\}}}}|j||k�|j||d�|j|d�|j�|j�\}}}}|j|d�|j|d�|j|d�||	|
�|j�\}}}}|j|d�|j|d�|j|d�|j|j	|�|j	|	|
�|j�\}}}}|j|d�|j|d�|j|d�|jjd��fd	d
��}|j|j�j
d�d�x'td�D]}|j|�d�q�W|j�d�|j�\}}}}|j|d�|j|d�|j|d�|jjd��fdd
��}|j|j�j
d�d�x'td�D]}|j|�d�q_W|j�d�|j�\}}}}|j|d�|j|d�|j|d�|jjd
��fdd
��}|j|j�j
d
�d�x(dD] }	|j||	�|	d�qW|j�d�|j�\}}}}|j|d�|j|d�|j|d
�dS)NcSsd||S)Nr$r	)r)rEr	r	r�origZszTestLRU.test_lru.<locals>.orig�maxsizer#rr8i�rcs�d7�dS)Nrr#r	r	)�f_cntr	rrF�s
zTestLRU.test_lru.<locals>.fcs�d7�dS)Nrr#r	r	)r0r	rrF�s
r%rcs�d7�|dS)Nrr!r	)r))r0r	rrF�s
r9r�r�r!�)r9r�r9r�r9r�r�r�r�r�r�r�r�r�r�r9)�module�	lru_cache�
cache_infor.rRrr,�cache_clearr}r�r/)
rr.rF�hits�missesr/�currsize�domainr�r)rE�actualr?r	)r0r�test_lruYs~

$$$
zTestLRU.test_lrucCs�tj}zw|jjd�t�t_xUdddddddddddddg
D]&}|jtd	d|��|�qUWWd|t_XdS)
Nr%rrrr$r8r�r9Zabcdefghijklmn)�builtinsr�r2r3r.)rZold_lenr�r	r	r�test_lru_reentrancy_with_len�s	4(z$TestLRU.test_lru_reentrancy_with_lencCs�tjdd�dd��}tjdd�dd��}|jt��|g�WdQRX|jt��|g�WdQRXdS)Nr/cSsdS)Nr	)�or	r	r�infinite_cache�sz3TestLRU.test_lru_type_error.<locals>.infinite_cacher!cSsdS)Nr	)r>r	r	r�
limited_cache�sz2TestLRU.test_lru_type_error.<locals>.limited_cache)rr3r4r5)rr?r@r	r	r�test_lru_type_error�szTestLRU.test_lru_type_errorcs�|jjdd��fdd���|j�fdd�td�D�dddd	d
ddd
ddddddddg�|j�j�|jjdddddddd���j�|j�j�|jjdddddddd��dS)Nr/cs,|dkr|S�|d��|d�S)Nrrr	)r�)�fibr	rrB�sz/TestLRU.test_lru_with_maxsize_none.<locals>.fibcsg|]}�|��qSr	r	)rer�)rBr	rrj�s	z6TestLRU.test_lru_with_maxsize_none.<locals>.<listcomp>rJrrrr$r8r��
r��"�7�Y���iyibr6�r7r8)r2r3r.rRr4�
_CacheInfor5)rr	)rBr�test_lru_with_maxsize_none�s'"7(
z"TestLRU.test_lru_with_maxsize_nonecs�|jjdd�dd���xCdD];}|j�fdd�td	�D�ttd	���q(W|j�j�|jjd
dddddd
d��dS)Nr/r!cSs|S)Nr	)r�r	r	r�eq�sz2TestLRU.test_lru_with_maxsize_negative.<locals>.eqrrcsg|]}�|��qSr	r	)rer�)rLr	rrj�s	z:TestLRU.test_lru_with_maxsize_negative.<locals>.<listcomp>�r6r7i,r8i����)rri����)r2r3r.rRrr4rJ)rr�r	)rLr�test_lru_with_maxsize_negative�s
!
9z&TestLRU.test_lru_with_maxsize_negativecCs�x�dD]�}|jj|�dd��}|j|d�d�|jt��}|d�WdQRX|j|jj�|jt��|d�WdQRXqWdS)N�cSsd|S)Nr�r	)r�r	r	rr�sz.TestLRU.test_lru_with_exceptions.<locals>.funcrr �)NrO)r2r3r.r4r�ZassertIsNone�	exception�__context__)rr/r�cmr	r	r�test_lru_with_exceptions�s
z TestLRU.test_lru_with_exceptionscCsZxSd
D]K}|jjd|dd�dd��}|j|d�d�|jt|d��td��|j|d	�d
�|jt|d	��td
��|j|dd�d�|jt|dd��td��|j|dd	�d
�|jt|dd	��td
��|j|j�jd�|j|j�jd�qWdS)NrOr/�typedTcSs||S)Nr	)r)r	r	r�square�sz+TestLRU.test_lru_with_types.<locals>.squarer$r�g@g"@r)r%)NrO)r2r3r.r�r4r6r7)rr/rVr	r	r�test_lru_with_types�s
'""%%zTestLRU.test_lru_with_typescs�|jj��fdd���|j�fdd�td�D�ddddd	d
ddd
dddddddg�|j�j�|jjdddddddd���j�|j�j�|jjdddddddd��dS)Ncs2|dkr|S�d|d��d|d�S)Nrr�rr	)r�)rBr	rrB	sz/TestLRU.test_lru_with_keyword_args.<locals>.fibcsg|]}�d|��qS)r�r	)re�number)rBr	rrjs	z6TestLRU.test_lru_with_keyword_args.<locals>.<listcomp>rJrrrr$r8r�rCr�rDrErFrGrHiyibr6rIr7r/rOr8)r2r3r.rRr4rJr5)rr	)rBr�test_lru_with_keyword_argss!7(
z"TestLRU.test_lru_with_keyword_argscs�|jjdd��fdd���|j�fdd�td�D�dddd	d
ddd
ddddddddg�|j�j�|jjdddddddd���j�|j�j�|jjdddddddd��dS)Nr/cs2|dkr|S�d|d��d|d�S)Nrr�rr	)r�)rBr	rrBsz<TestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.fibcsg|]}�d|��qS)r�r	)rerX)rBr	rrjs	zCTestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.<listcomp>rJrrrr$r8r�rCr�rDrErFrGrHiyibr6rIr7r8)r2r3r.rRr4rJr5)rr	)rBr�'test_lru_with_keyword_args_maxsize_nones'"7(
z/TestLRU.test_lru_with_keyword_args_maxsize_nonecCsgdddd��}|jj�|�}x6|jjD](}|jt||�t||��q7WdS)NZzomg_annotation)�zomgcSsdS)Nr�r	)r[r	r	rrF'sz,TestLRU.test_lru_cache_decoration.<locals>.f)r2r3r�r.rM)rrF�grtr	r	r�test_lru_cache_decoration&sz!TestLRU.test_lru_cache_decorationzThis test requires threading.c	sd\}�dd���jjd|������j�\}}}}�j|d�tj�������fdd�����fd	d
�}tj�}tjd�z1�fdd
�t	|�D�}t
j|���j�WdQRX�j�\}}}}�jt
krO�j||��j|�||�n(�j||��j|�||��j||�tjd|�g}|�fdd
�t	|�D�7}�j�t
j|���j�WdQRXWdtj|�XdS)Nr8�cSsd||S)Nr$r	)r)rEr	r	rr.1sz-TestLRU.test_lru_cache_threaded.<locals>.origr/rcsJ�jd�x6t��D](}�j�|d��|d��qWdS)Nr!r)�waitrRr.)rr�)rF�mr.r�startr	r�full8s
z-TestLRU.test_lru_cache_threaded.<locals>.fullcs6�jd�x"td��D]}�j�qWdS)Nr!r)r_rRr5)r�)rFr`rar	r�clear=s
z.TestLRU.test_lru_cache_threaded.<locals>.clearg���ư>cs+g|]!}tjd�d|g��qS)�targetr
)�	threading�Thread)rer)rbr	rrjFs	z3TestLRU.test_lru_cache_threaded.<locals>.<listcomp>rdcs+g|]!}tjd�d|g��qS)rdr
)rerf)rer)rbr	rrjWs	)r8r^)r2r3r4r.re�Eventr��getswitchinterval�setswitchintervalrRr�
start_threads�setr�rrfrc)	rr�r6r7r/r8rcZorig_si�threadsr	)rFrbr`r.rrar�test_lru_cache_threaded.s:

zTestLRU.test_lru_cache_threadedcs|d
\}�tj|d��tj|d��tj|d���jjd�|��fdd����j�j�dd�|df������fdd	���fd
d�t|�D�}tj|���x�t��D]}}�j	d��j
��j	d��j
��j	d��j
��j�j�d|d|�||df�q�WWdQRXdS)Nr8r9rr/cs�jd�d|S)Nr!r$)r_)r))�pauser	rrFfs
z+TestLRU.test_lru_cache_threaded2.<locals>.frcsOxHt��D]:}�jd��j�|�d|��jd�q
WdS)Nr!r$)rRr_r.)r�)rFr`rra�stopr	r�testks
z.TestLRU.test_lru_cache_threaded2.<locals>.testcs"g|]}tjd���qS)rd)rerf)rer)rpr	rrjps	z4TestLRU.test_lru_cache_threaded2.<locals>.<listcomp>r!)r8r9)re�Barrierr2r3r.r4rRrrjr_�reset)rr�rlr�r	)rFr`rnrrarorpr�test_lru_cache_threaded2_s"+&





z TestLRU.test_lru_cache_threaded2c	s�jjdd�dd�����fdd���fdd�td	ddd
dg�D�}tj|��WdQRXdS)Nr/rcSstjd�d|S)Ng{�G�z�?r$)�time�sleep)r)r	r	rrF}s
z+TestLRU.test_lru_cache_threaded3.<locals>.fcs;�jd|��"�j�|�d||�WdQRXdS)N�threadr$)r�r.)r�r))rFrr	rrp�sz.TestLRU.test_lru_cache_threaded3.<locals>.testcs4g|]*\}}tjd�d||f��qS)rdr
)rerf)rer��v)rpr	rrj�s	z4TestLRU.test_lru_cache_threaded3.<locals>.<listcomp>rr$)r2r3�	enumeraterrj)rrlr	)rFrrpr�test_lru_cache_threaded3{s!z TestLRU.test_lru_cache_threaded3cs�|jjdd�dd���G��fdd�d����d����d��|j��d���d��dS)	Nr/r!cSs|S)Nr	)r)r	r	r�	test_func�sz.TestLRU.test_need_for_rlock.<locals>.test_funccs=eZdZdd�Zdd�Z��fdd�ZdS)z-TestLRU.test_need_for_rlock.<locals>.DoubleEqcSs
||_dS)N)r))rr)r	r	rr��sz6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__init__cSs|jS)N)r))rr	r	r�__hash__�sz6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__hash__cs/|jdkr��d��|j|jkS)Nrr)r))rr)�DoubleEqrzr	rr�sz4TestLRU.test_need_for_rlock.<locals>.DoubleEq.__eq__N)rrrr�r{rr	)r|rzr	rr|�sr|rr)r2r3r.)rr	)r|rzr�test_need_for_rlock�s!zTestLRU.test_need_for_rlockc
Cs0|jt��tjdd��}WdQRXdS)NcSsdS)Nr	r	r	r	rrF�sz3TestLRU.test_early_detection_of_bad_call.<locals>.f)r4r5rr3)rrFr	r	r� test_early_detection_of_bad_call�sz(TestLRU.test_early_detection_of_bad_callc
s
G�fdd�dt�}|d�}|d�}|d�}�j|jj�d
�x/dD]'}�j|j|�|d	d�q`W�j|j|j|jfd��j|jj�d�x/dD]'}�j|j|�|d	d�q�W�j|j|j|jfd��j|jj�d�x/dD]'}�j|j|�|d	d�q:W�j|j|j|jfd��j|jj�d��j|jj�|jj���j|jj�|jj���j|jj�|jj��dS)Ncs4eZdZdZ�jjd�dd��ZdS)z"TestLRU.test_lru_method.<locals>.XrrcSs|jd7_|d|S)Nrr!)r0)rr)r	r	rrF�sz$TestLRU.test_lru_method.<locals>.X.fN)rrrr0r2r3rFr	)rr	r�X�srr8r9rrrr$r!r�r%rP)rrrr)
rrrr$rrrrr$r$)r�rr)r%r�rr)
rrrrrrr$rrr)r�r%r)r!r!rr)
rrrrrrrr$rr)r�r%r8)rPrPrr)rKr.rFr4r0)rrr r"r'r)r	)rr�test_lru_method�s(
%"
%"
%"""zTestLRU.test_lru_methodc
Cs�|j}x�|jd|j|jfD]o}xfttjd�D]Q}|jd|d|��0tjtj	||��}|j
||�WdQRXq@Wq&WdS)Nrrryr)�	__class__�cached_func�cached_meth�cached_staticmethrRrurvr�rwrxr})rr�rFryrzr	r	rr{�s	#zTestLRU.test_picklecCs�|j}dd�}|jj|d�}|jd|j|j|jjd�|�f}xG|D]?}|jd|��$tj|�}|j	||�WdQRXqbWdS)NcSsd||S)Nr$r	)r)rEr	r	rr.�szTestLRU.test_copy.<locals>.origrrr)
r�r2r+r�r�r�r3r�r|r})rr�r.r�funcsrFrzr	r	rr~�s	
zTestLRU.test_copycCs�|j}dd�}|jj|d�}|jd|j|j|jjd�|�f}xG|D]?}|jd|��$tj	|�}|j
||�WdQRXqbWdS)NcSsd||S)Nr$r	)r)rEr	r	rr.�sz#TestLRU.test_deepcopy.<locals>.origrrr)r�r2r+r�r�r�r3r�r|rr})rr�r.rr�rFrzr	r	rr��s	
zTestLRU.test_deepcopyN)rrrr;r=rArKrNrTrWrYrZr]r��
skipUnlessrermrsryr}r~r�r{r~r�r	r	r	rr-Ws&Y	1r-cCsd||S)Nr$r	)r)rEr	r	r�py_cached_func�sr�cCsd||S)Nr$r	)r)rEr	r	r�
c_cached_func�sr�c@sUeZdZeZefZej�dd��Ze	ej�dd���Z
dS)�	TestLRUPycCsd||S)Nr$r	)rr)rEr	r	rr��szTestLRUPy.cached_methcCsd||S)Nr$r	)r)rEr	r	rr��szTestLRUPy.cached_staticmethN)rrrr�r2r�r�r3r�r�r�r	r	r	rr��s
	r�c@sUeZdZeZefZej�dd��Ze	ej�dd���Z
dS)�TestLRUCcCsd||S)Nr$r	)rr)rEr	r	rr�szTestLRUC.cached_methcCsd||S)Nr$r	)r)rEr	r	rr�szTestLRUC.cached_staticmethN)rrrrnr2r�r�r3r�r�r�r	r	r	rr��s
	r�c@s�eZdZdd�Zdd�Zdd�Zdd�Zeje	d	�e
jd
d���Zdd
�Z
dd�Zdd�Zdd�Zdd�Zdd�ZdS)�TestSingleDispatchcCs�tjdd��}dd�}|jt|�|j|d�d�|j|d�d�|j|dd	d
g�d�dS)NcSsdS)NrIr	)r�r	r	rr\sz3TestSingleDispatch.test_simple_overloads.<locals>.gcSsdS)N�integerr	)r�r	r	r�g_intsz7TestSingleDispatch.test_simple_overloads.<locals>.g_intrQrIrr�rr$)r�singledispatch�registerrKr.)rr\r�r	r	r�test_simple_overloadssz(TestSingleDispatch.test_simple_overloadscCs
tjdd��}Gdd�d�}Gdd�d|�}Gdd�d|�}Gd	d
�d
||�}dd�}d
d�}|j||�|j||�|j||��d�|j||��d�|j||��d�|j||��d�dS)NcSsdS)NrIr	)r�r	r	rr\sz&TestSingleDispatch.test_mro.<locals>.gc@seZdZdS)z&TestSingleDispatch.test_mro.<locals>.AN)rrrr	r	r	rr�sr�c@seZdZdS)z&TestSingleDispatch.test_mro.<locals>.CN)rrrr	r	r	r�Csr�c@seZdZdS)z&TestSingleDispatch.test_mro.<locals>.BN)rrrr	r	r	rr�!sr�c@seZdZdS)z&TestSingleDispatch.test_mro.<locals>.DN)rrrr	r	r	r�D#sr�cSsdS)Nr�r	)r r	r	r�g_A%sz(TestSingleDispatch.test_mro.<locals>.g_AcSsdS)Nr�r	)r"r	r	r�g_B'sz(TestSingleDispatch.test_mro.<locals>.g_B)rr�r�r.)rr\r�r�r�r�r�r�r	r	r�test_mroszTestSingleDispatch.test_mrocCs�tjdd��}|jt�dd��}|j|d�d�|j|d�d�|j|jt�|�|j|jt�|jt��dS)	NcSsdS)NrIr	)r�r	r	rr\1sz5TestSingleDispatch.test_register_decorator.<locals>.gcSsd|fS)Nzint %sr	)r�r	r	rr�4sz9TestSingleDispatch.test_register_decorator.<locals>.g_intrOrIr1zint 12)	rr�r�rKr.r}�dispatchrlrQ)rr\r�r	r	r�test_register_decorator0sz*TestSingleDispatch.test_register_decoratorcCsQtjdd��}|j|jd�tjjdkrM|j|jd�dS)NcSsdS)NZTestr	)r�r	r	rr\?sz6TestSingleDispatch.test_wrapping_attributes.<locals>.gr\rzSimple test)rr�r.rr�r�r�r�)rr\r	r	r�test_wrapping_attributes>sz+TestSingleDispatch.test_wrapping_attributeszrequires _decimalcCs�tjdd��}|jtj�dd��}tjd�}tjd�}|j||�d	�|j||�d
�|jtj�dd��}|j||�d�|j||�d�dS)NcSsdS)NrIr	)r�r	r	rr\Jsz,TestSingleDispatch.test_c_classes.<locals>.gcSs|jS)N)r
)r�r	r	rr�Msz,TestSingleDispatch.test_c_classes.<locals>._�Exponent < Emin�Number got roundedcSsdS)NzToo small to care.r	)r�r	r	rr�TszToo small to care.)r�)r�)r�)rr�r�rZDecimalExceptionZ	SubnormalZRoundedr.)rr\r��subnZrndr	r	r�test_c_classesGsz!TestSingleDispatch.test_c_classescCs�t}tj}|j|j|j|jg}xWt|�D]I}|t|�}|j	|t|j|j|j
|j|jt
g�q:W|j|j|j|jg}x]t|�D]O}||j|�}|j	||j|j|j|j
|j|jt
g�q�W|j|j
tg}x]t|�D]O}||j|j
|jtg�}|j	||jt|j
|jt
g�q'WGdd�d|j�}|jj|�|j|jg}xlt|�D]^}|||�}|j	|||j|j|jt|j|j|j
|j|jt
g�q�WGdd�d|j�}|j
|j|j|jg}x`t|�D]R}|||�}|j	|||j|jt|j|j
|j|jt
g	�qhWdS)Nc@seZdZdS)z.TestSingleDispatch.test_compose_mro.<locals>.DN)rrrr	r	r	rr�vsr�c@seZdZdd�ZdS)z.TestSingleDispatch.test_compose_mro.<locals>.CcSsdS)Nr	)rr	r	r�__call__�sz7TestSingleDispatch.test_compose_mro.<locals>.C.__call__N)rrrr�r	r	r	rr��sr�)rr�_compose_mro�Sequence�MutableMapping�Mapping�Setrr/r.�Sized�Iterable�	Containerrl�OrderedDict�ChainMaprQ�defaultdict�MutableSequencer��Callable)rr'�mro�basesZhaystackr`r�r�r	r	r�test_compose_mroZs@	 !!z#TestSingleDispatch.test_compose_mrocCs�t}ddi}dddg}t�dh}t|�}d"}tjdd��}|j||�d�|j||�d�|j||�d�|j||�d�|j||�d�|j|jd	d
��|j||�d�|j||�d�|j||�d�|j||�d�|j||�d�|j|jdd
��|j||�d
�|j||�d�|j||�d�|j||�d�|j||�d�|j|j	dd
��|j||�d
�|j||�d�|j||�d�|j||�d�|j||�d�|j|j
dd
��|j||�d
�|j||�d�|j||�d�|j||�d�|j||�d�|j|jdd
��|j||�d
�|j||�d�|j||�d�|j||�d�|j||�d�|j|jdd
��|j||�d
�|j||�d�|j||�d�|j||�d�|j||�d�|j|j
dd
��|j||�d
�|j||�d�|j||�d�|j||�d�|j||�d�|j|jdd
��|j||�d
�|j||�d�|j||�d�|j||�d�|j||�d�|jtdd
��|j||�d�|j||�d�|j||�d�|j||�d�|j||�d�|jtdd
��|j||�d�|j||�d�|j||�d�|j||�d�|j||�d�|jtdd
��|j||�d�|j||�d�|j||�d�|j||�d�|j||�d�|jtdd
��|j||�d�|j||�d�|j||�d�|j||�d�|j||�d�|jtd d
��|j||�d�|j||�d�|j||�d�|j||�d�|j||�d!�dS)#Nr r"rrr$cSsdS)NrIr	)r�r	r	rr\�sz/TestSingleDispatch.test_register_abc.<locals>.grIcSsdS)N�sizedr	)r�r	r	rr*�sz6TestSingleDispatch.test_register_abc.<locals>.<lambda>r�cSsdS)N�mutablemappingr	)r�r	r	rr*�sr�cSsdS)NZchainmapr	)r�r	r	rr*�scSsdS)N�mutablesequencer	)r�r	r	rr*�sr�cSsdS)N�
mutablesetr	)r�r	r	rr*�sr�cSsdS)N�mappingr	)r�r	r	rr*�scSsdS)N�sequencer	)r�r	r	rr*�sr�cSsdS)Nrkr	)r�r	r	rr*�srkcSsdS)Nr/r	)r�r	r	rr*�sr/cSsdS)Nrr	)r�r	r	rr*�srcSsdS)Nzconcrete-setr	)r�r	r	rr*�szconcrete-setcSsdS)Nz
frozen-setr	)r�r	r	rr*�sz
frozen-setcSsdS)Nr�r	)r�r	r	rr*�sr�)rrr$)rrl�	frozensetrr�r.r�r�r�r�r��
MutableSetr�r�r�r/rrkr�)rr'r:�lr�rF�tr\r	r	r�test_register_abc�s�z$TestSingleDispatch.test_register_abcc	CsBt}tj}Gdd�dt�}Gdd�d|�}|jjGdd�dt��}Gdd�dt�}Gd	d
�d
|||�}||j|||j||j|tg	}xBt|j|j|jg�D]"}	|j	||d|	�|�q�W|j
|j|j|j|jg}
|j	||d|
�|�dS)Nc@seZdZdS)z)TestSingleDispatch.test_c3_abc.<locals>.AN)rrrr	r	r	rr��sr�c@seZdZdd�ZdS)z)TestSingleDispatch.test_c3_abc.<locals>.BcSsdS)Nrr	)rr	r	rr��sz1TestSingleDispatch.test_c3_abc.<locals>.B.__len__N)rrrr�r	r	r	rr��sr�c@seZdZdS)z)TestSingleDispatch.test_c3_abc.<locals>.CN)rrrr	r	r	rr��sr�c@seZdZdS)z)TestSingleDispatch.test_c3_abc.<locals>.DN)rrrr	r	r	rr��sr�c@seZdZdd�ZdS)z)TestSingleDispatch.test_c3_abc.<locals>.XcSsdS)Nr	)rr	r	rr��sz2TestSingleDispatch.test_c3_abc.<locals>.X.__call__N)rrrr�r	r	r	rr�sr�abcs)rr�_c3_mrorlr�r�r�r�rr.r�r�)rr'r�r�r�r�r�rr?r�Z	many_abcsr	r	r�test_c3_abc�s	*% $zTestSingleDispatch.test_c3_abccCs�Gdd�dt�}Gdd�dd|�}Gdd�d|�}tjdd	��}|j|�d
d��}|�}|j||�d�dS)
Nc@seZdZdd�ZdS)z1TestSingleDispatch.test_false_meta.<locals>.MetaAcSsdS)Nrr	)rr	r	rr�sz9TestSingleDispatch.test_false_meta.<locals>.MetaA.__len__N)rrrr�r	r	r	r�MetaAsr�c@seZdZdS)z-TestSingleDispatch.test_false_meta.<locals>.AN)rrrr	r	r	rr�sr��	metaclassc@seZdZdS)z.TestSingleDispatch.test_false_meta.<locals>.AAN)rrrr	r	r	r�AA	sr�cSsdS)Nzbase Ar	)r r	r	r�funsz/TestSingleDispatch.test_false_meta.<locals>.funcSsdS)Nzfun Ar	)r r	r	rr�sz-TestSingleDispatch.test_false_meta.<locals>._zfun A)r�rr�r�r.)rr�r�r�r�r�Zaar	r	r�test_false_metas	z"TestSingleDispatch.test_false_metacCsAt}tjdd��}Gdd�d|j�}|�}|j||�d�|j|jdd��|j|jdd��|j|jd	d��|j|jd
d��|j||�d�|jj|�|j||�d�|jj|�|j||�d�|jj|�|j||�d�Gd
d�d�}|�}|j||�d�|jj|�|j||�d�|jj|�|j	t
��}||�WdQRX|jt|j
�d1�Gdd�d|j�}|�}	|j||	�d�|jj|�|j||	�d�|jj|�|j||	�d�tjdd��}
|
j|j�dd��}|
j|j�dd��}|j	t
�� }|
|jdd���WdQRX|jt|j
�d2�Gdd�d|j�}
|jj|
�tjdd��}|j|j�d d��}|j|j�d!d��}|
�}|j||�d"�Gd#d$�d$�}Gd%d&�d&||j�}|�}|j|
|�d�|jj|�|j|
|�d�Gd'd(�d(�}|�}|j|
|�d�|jj|�|j	t
��}|
|�WdQRX|jt|j
�d3�Gd)d*�d*|j|�}tjd+d,��}|j|�d-d��}|j|j�d.d��}|�}|j||�d/�|jj|�|j||�d0�dS)4NcSsdS)NrIr	)�argr	r	rr\sz0TestSingleDispatch.test_mro_conflicts.<locals>.gc@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.OcSsdS)Nrr	)rr	r	rr�sz8TestSingleDispatch.test_mro_conflicts.<locals>.O.__len__N)rrrr�r	r	r	r�Osr�rIcSsdS)N�iterabler	)r�r	r	rr*sz7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>cSsdS)N�	containerr	)r�r	r	rr*scSsdS)Nr�r	)r�r	r	rr* scSsdS)Nrkr	)r�r	r	rr*!sr�rkc@seZdZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.PN)rrrr	r	r	r�P*sr�r��]Ambiguous dispatch: <class 'collections.abc.Container'> or <class 'collections.abc.Iterable'>�]Ambiguous dispatch: <class 'collections.abc.Iterable'> or <class 'collections.abc.Container'>c@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.QcSsdS)Nrr	)rr	r	rr�;sz8TestSingleDispatch.test_mro_conflicts.<locals>.Q.__len__N)rrrr�r	r	r	r�Q:sr�cSsdS)NrIr	)r�r	r	r�hDsz0TestSingleDispatch.test_mro_conflicts.<locals>.hcSsdS)Nr�r	)r�r	r	rr�Gsz0TestSingleDispatch.test_mro_conflicts.<locals>._cSsdS)Nr�r	)r�r	r	rr�JscSsdS)Nrr	r	r	r	rr*Rs�ZAmbiguous dispatch: <class 'collections.abc.Container'> or <class 'collections.abc.Sized'>�ZAmbiguous dispatch: <class 'collections.abc.Sized'> or <class 'collections.abc.Container'>c@seZdZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.RN)rrrr	r	r	r�RZsr�cSsdS)NrIr	)r�r	r	rr�]sz0TestSingleDispatch.test_mro_conflicts.<locals>.icSsdS)Nr�r	)r�r	r	rr�`scSsdS)Nr�r	)r�r	r	rr�csr�c@seZdZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.SN)rrrr	r	r	r�Shsr�c@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.TcSsdS)Nrr	)rr	r	rr�ksz8TestSingleDispatch.test_mro_conflicts.<locals>.T.__len__N)rrrr�r	r	r	r�Tjsr�c@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.UcSsdS)Nrr	)rr	r	rr�rsz8TestSingleDispatch.test_mro_conflicts.<locals>.U.__len__N)rrrr�r	r	r	r�Uqsr�c@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.VcSsdS)Nrr	)rr	r	rr��sz8TestSingleDispatch.test_mro_conflicts.<locals>.V.__len__N)rrrr�r	r	r	r�V�sr�cSsdS)NrIr	)r�r	r	r�j�sz0TestSingleDispatch.test_mro_conflicts.<locals>.jcSsdS)Nr�r	)r�r	r	rr��scSsdS)Nr�r	)r�r	r	rr��sr�r�)r�r�)r�r�)r�r�)rrr�r�r.r�r�r�r�r4r�rorQrQr�r�r�)rr'r\r�r>r�r1Zre_oner��qr�r�Zre_twor�r�r�r�r�r�r��uZre_threer�r�rwr	r	r�test_mro_conflictss�			 				z%TestSingleDispatch.test_mro_conflictsc
s*ddlm}G�fdd�d|��tj}����fdd�t_t}tjdd��}i}g}|jt��d�|j||�d	�|jt��d
�|j�jg�|j�jt	g�|j�j
t	|jt�|j||�d	�|jt��d�|j�jg�|j�jt	t
g�|j�j
t	|jt�|j�j
t
|jt�|j�j
t	�j
t
�|j||�d	�|j||�d	�|j�jt
t	g�|j�jt	t
g�|jt
dd��|j�jt
t	g�|jt��d�|j||�d	�|jt��d
�|j�jt
t	g�|j�jt	t
t	g�|j�j
t	tjt	|j��|j||�d
�|jt��d�|j�jt
t	g�|j�jt	t
t	t
g�|j�j
t
tjt
|j��Gdd�d�}|jj|�|j||�d	�|j||�d
�|j�jt
t	t	t
g�|j�jt	t
t	t
g�|j|jdd��|jt��d�|j||�d�|jt��d
�|j�jt
t	t	t
g�|j�jt	t
t	t
t	g�|j||�d
�|jt��d�|j�jt
t	t	t
g�|j�jt	t
t	t
t	t
g�|j||�d
�|j||�d�|j�jt
t	t	t
t
t	g�|j�jt	t
t	t
t	t
g�|jt
�|jt	�|j�jt
t	t	t
t
t	t
t	g�|j�jt	t
t	t
t	t
g�|jj|�|jt��d�|j||�d
�|jt��d
�|j|jdd��|jt��d�|j||�d�|jt��d
�|j||�d
�|jt��d�|jt	dd��|j||�d�|j||�d
�|j�|jt��d�|t_dS)Nr)�UserDictcsIeZdZ��fdd�Zdd�Zdd�Zdd�Z�S)	z?TestSingleDispatch.test_cache_invalidation.<locals>.TracingDictcs/t�|�j||�g|_g|_dS)N)�superr��set_ops�get_ops)rr
rp)�TracingDictr�r	rr��s	zHTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__init__cSs!|j|}|jj|�|S)N)rTr�r�)rr��resultr	r	rr��s
zKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__getitem__cSs!|jj|�||j|<dS)N)r�r�rT)rr�r�r	r	r�__setitem__�szKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__setitem__cSs|jj�dS)N)rTrc)rr	r	rrc�szETestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.clear)rrrr�r�r�rcr	)r�)r�rr��sr�cs�S)Nr	r	)�tdr	rr*�sz<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>cSsdS)NrIr	)r�r	r	rr\�sz5TestSingleDispatch.test_cache_invalidation.<locals>.grIrrcSsdS)Nrr	)r�r	r	rr*�src@seZdZdS)z5TestSingleDispatch.test_cache_invalidation.<locals>.XN)rrrr	r	r	rr�srcSsdS)Nr�r	)r�r	r	rr*�sr�cSsdS)Nr�r	)r�r	r	rr*�sr�cSsdS)Nr/r	)r�r	r	rr*�sr/)rr�r�WeakKeyDictionaryr�r.r�r�r�r/rT�registryrlrr��
_find_implr�r�r�r��_clear_cache)rr�Z	_orig_wkdr'r\r:r�rr	)r�r�r�test_cache_invalidation�s�		"%%%


%
z*TestSingleDispatch.test_cache_invalidationN)rrrr�r�r�r�r�r�rrZcpython_onlyr�r�r�r�r�r�r�r	r	r	rr�
s	3^�r��__main__)9r�r<rr|�	itertoolsrru�randomrr�rprrtr��weakrefrre�ImportErrorrZimport_fresh_moduler�rnrr
rr�rrr/rrr�ZTestCaser_r�r+r�r�r�r�r�r�r�rrrrr,r-r3r�r�r�r�r�r�mainr	r	r	r�<module>sh
��rr>QS�
����