Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/test/__pycache__/test_functools.cpython-38.opt-2.pyc
U

>��g`j�@s\ddlZddlZddlZddlZddlZddlmZddlZddlm	Z	ddl
Z
ddlmZddl
Z
ddlZddlZddlZddlZddlmZddlZddlZejddgd�Zejddgd	�Zejd
dgd	�Zejdd
��Zdd�Zdd�ZGdd�de�ZGdd�de�Z Gdd�de!�Z"Gdd�d�Z#e�$ed�Gdd�de#ej%��Z&Gdd�de#ej%�Z'e�rxGdd �d ej(�Z)Gd!d"�d"ej(�Z*e�$ed�Gd#d$�d$e&��Z+Gd%d&�d&e'�Z,Gd'd(�d(ej%�Z-Gd)d*�d*ej%�Z.Gd+d,�d,e.�Z/Gd-d.�d.�Z0e�$ed�Gd/d0�d0e0ej%��Z1Gd1d2�d2e0ej%�Z2Gd3d4�d4�Z3e�$ed�Gd5d6�d6e3ej%��Z4Gd7d8�d8e3ej%�Z5Gd9d:�d:ej%�Z6ej7Gd;d<�d<��Z8Gd=d>�d>�Z9e�:�d?d@��Z;e�:�dAdB��Z<GdCdD�dDe9ej%�Z=GdEdF�dFe9ej%�Z>GdGdH�dHej%�Z?GdIdJ�dJ�Z@GdKdL�dL�ZAGdMdN�dN�ZBGdOdP�dP�ZCGdQdR�dRej%�ZDeEdSk�rXe�F�dS)T�N)�permutations)�choice)�support)�proxy�	functools�
_functools)Zblocked)Zfresh�decimalZ_decimalc	cs0tj|}|tj|<z
dVW5|tj|<XdS�N)�sys�modules)�nameZreplacementZoriginal_module�r
�2/opt/cppython/lib/python3.8/test/test_functools.py�replaced_modules



rcOs||fSr	r
)�args�kwr
r
r�capture#srcCs|j|j|j|jfSr	)�funcr�keywords�__dict__)�partr
r
r�	signature(src@seZdZdS)�MyTupleN��__name__�
__module__�__qualname__r
r
r
rr,src@seZdZdd�ZdS)�BadTuplecCst|�t|�Sr	)�list��self�otherr
r
r�__add__0szBadTuple.__add__N)rrrr"r
r
r
rr/src@seZdZdS)�MyDictNrr
r
r
rr#3sr#c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3S)4�TestPartialc	Cs�|jtddddd�}|�t|��|�|dddd	d
�dtddd	d�f�|�td
d��}|�t|ddddg��dddd	g�dS)N���
���a�b����(�r+�c�r%r&r,r-�r*r+r1cSs|dS)Nr'r
��xr
r
r�<lambda>>�z1TestPartial.test_basic_examples.<locals>.<lambda>)�partialr�
assertTrue�callable�assertEqual�dict�mapr�r �pr
r
r�test_basic_examples9s�zTestPartial.test_basic_examplescCsJ|jtddddd�}|�|jt�|�|jd�|�|jtddd��dS)Nr%r&r'r(r)�r%r&)r8rr;rrrr<r>r
r
r�test_attributesAszTestPartial.test_attributescCsB|�t|j�z|�d��Wntk
r2YnX|�d�dS)Nr&z%First arg not checked for callability)�assertRaises�	TypeErrorr8�fail�r r
r
r�test_argument_checkingHsz"TestPartial.test_argument_checkingcCs`ddd�}ddi}|j|dd�}|�|f|�d�|�|ddi�|d	d
�|�|ddi�dS)Nr'r(cSs|Sr	r
r)r
r
rrSszBTestPartial.test_protection_of_callers_dict_argument.<locals>.funcr*r,��r*��r+)r'r()r8r;)r r�dr?r
r
r�(test_protection_of_callers_dict_argumentQs

z4TestPartial.test_protection_of_callers_dict_argumentcCsNddi}|jtf|�}|�|�dddif�d|d<|�|�dddif�dS)Nr*r,r
rH�r8rr;)r rLr?r
r
r�test_kwargs_copy\s
zTestPartial.test_kwargs_copycCsl|�t�}|�|�dif�|�|dd�dif�|�tdd�}|�|�dif�|�|dd�dif�dS)Nr
r%r&rAr,r-r2rNr>r
r
r�test_arg_combinationses
z!TestPartial.test_arg_combinationscCs�|�t�}|�|ji�|�|�dif�|�|dd�dddif�|jtdd�}|�|jddi�|�|�dddif�|�|dd�dddd�f�|�|ddd�dddd�f�dS)	Nr
r%rIr*r&rKr)r,)r8rr;rr>r
r
r�test_kw_combinationsos
z TestPartial.test_kw_combinationscCsHdD]>}|jtf|��}|d}|d�\}}|�||ko>|ik�qdS)N)r
�r�rr%)rr%r&)rr%r&r,r4r5�r8rr9)r rr?�expected�got�emptyr
r
r�test_positional}s
zTestPartial.test_positionalcCsJdD]@}|jt|d�}|dd�}|dd�\}}|�||ko@|dk�qdS)N)r*rNg@rI�r*r5r4r
rT)r r*r?rUrWrVr
r
r�test_keyword�s

zTestPartial.test_keywordcCsd|jtddd�}|ddd�\}}|�|dko8|ddd�k�|�\}}|�|dko\|d	dik�dS)
Nrr%rIr&rKrSr)rRr*rT)r r?Zargs1Zkw1Zargs2Zkw2r
r
r�test_no_side_effects�s

z TestPartial.test_no_side_effectscCsfdd�}|�t|�|dd��|�t|�|d�d�|�t|�|�dd�|�t|j|dd�d�dS)NcSs||dSr	r
�r5�yr
r
r�f�sz-TestPartial.test_error_propagation.<locals>.fr%r)r])rC�ZeroDivisionErrorr8�r r^r
r
r�test_error_propagation�s
z"TestPartial.test_error_propagationcCs>|jtdd�}t|�}|�|j|j�d}|�tt|d�dS)N�)�baser)r8�intrr;rrC�ReferenceError�getattr�r r^r?r
r
r�test_weakref�s
zTestPartial.test_weakrefcCsPttttd���}|�tjd�}|�||�d�|�dj�}|�||�d�dS)Nr'��
0123456789)rr=�str�ranger8�joinr;)r �datarmr
r
r�#test_with_bound_and_unbound_methods�s
z/TestPartial.test_with_bound_and_unbound_methodscCsB|j}|td�}||dd�}|tddd�}|�t|�t|��dS�N�asdfT��bar)r8rr;)r r8�inner�nestedZflatr
r
r�test_nested_optimization�s

z$TestPartial.test_nested_optimizationcCs:|j}dd�}||d�}||d�}d|_|�|jd�dS)NcSs|Sr	r
rrr
r
r�foo�sz;TestPartial.test_nested_partial_with_attribute.<locals>.foo�first�secondZspam)r8Znew_attrr;)r r8rwr?Zp2r
r
r�"test_nested_partial_with_attribute�s

z.TestPartial.test_nested_partial_with_attributecst�t�f}d�dd�|D���t�t�d�}d�|�d�|�g}|jtjtjfkrZd�n|jj�|�t�}|���dt�d	�t	|��|jtf|��}|���dt�d��d	�t	|��|jtf|�}|�
t	|��fd
d�|D��|jtf|�|�}|�
t	|���fdd�|D��dS)
N�, css|]}t|�VqdSr	)�repr)�.0r*r
r
r�	<genexpr>�sz(TestPartial.test_repr.<locals>.<genexpr>r)za={a!r}, b={b!r}zb={b!r}, a={a!r}�functools.partial�(�)cs"g|]}��dt�d|�d��qS�r�r{r��r�r}Zkwargs_repr)rr
r�
<listcomp>�s�z)TestPartial.test_repr.<locals>.<listcomp>c
s(g|] }��dt�d��d|�d��qSr�r�r��Z	args_reprrr
rr��s�)�objectrm�
format_mapr8�c_functools�py_functoolsrrr;r|�assertIn)r r�kwargsZkwargs_reprsr^r
r�r�	test_repr�s2�
"

��
��zTestPartial.test_reprcCs|jtjtjfkrd}n|jj}|�t�}|�|diif�z|�t|�d|f�W5|�tdiif�X|�t�}|�t|fiif�z|�t|�d|tf�W5|�tdiif�X|�t�}|�tdd|iif�z|�t|�d|tf�W5|�tdiif�XdS)Nrr
z%s(...)z%s(%r, ...)r*z
%s(%r, a=...))r8r�r�rr�__setstate__r;r|)r rr^r
r
r�test_recursive_repr�s$


zTestPartial.test_recursive_reprc	Csl|���Z|jtdgdgd�}g|_ttjd�D]*}t�t�||��}|�	t|�t|��q2W5QRXdS)NrqTrrr%)
�AllowPickler8r�attrrl�pickle�HIGHEST_PROTOCOL�loads�dumpsr;�r r^�proto�f_copyr
r
r�test_pickle�s
zTestPartial.test_picklecCsl|jtdgdgd�}g|_t�|�}|�t|�t|��|�|j|j�|�|j|j�|�|j|j�dSrp)r8rr��copyr;�assertIsrr�r r^r�r
r
r�	test_copy�s
zTestPartial.test_copycCs�|jtdgdgd�}g|_t�|�}|�t|�t|��|�|j|j�|�|j|j�|�|jd|jd�|�|j|j�|�|jd|jd�dS)NrqTrrrrs)	r8rr�r��deepcopyr;ZassertIsNotrrr�r
r
r�
test_deepcopys
zTestPartial.test_deepcopyc	Cs�|�t�}|�tdtdd�tgd�f�|�t|�tdtdd�tgd�f�|�|ddd�dddd	�f�|�tdtdd�df�|�t|�tdtdd�if�|�|ddd�dddd	�f�|�tdddf�|�|ddd�dd
dif�|�|d�dif�|�|�dif�|�tdidf�|�t|�tdiif�|�|ddd�dd
dif�|�|d�dif�|�|�dif�dS)
N�r%r'rI�r�r&r(rKrAr)r+r
)r&)r8rr�rr<r;r`r
r
r�
test_setstates$

�zTestPartial.test_setstatec	Cs�|�t�}|�t|jtdif�|�t|jtdiidf�|�t|jtdidg�|�t|jddidf�|�t|jtdidf�|�t|jtgidf�|�t|jtdgdf�dS)Nr
)r8rrCrDr�rr`r
r
r�test_setstate_errors)s
z TestPartial.test_setstate_errorscCs(|�t�}|�ttd�tdd�df�t|�}|�|tdtdd�if�|�t	|d�t
�|�t	|d�t�|�}|�|dddif�|�t	|d�t
�|�t	|d�t�|�ttd�idf�t|�}|�|tdiif�|�t	|d�t
�|d�}|�|dif�|�t	|d�t
�dS)	Nr�r'rIr%r&r*rrA)r8rr�rrr#r;r<r��type�tupler)r r^�s�rr
r
r�test_setstate_subclasses3s"
z$TestPartial.test_setstate_subclassescCs�|�����|�t�}|�|diif�z:ttjd�D]&}|�t��t�	||�W5QRXq8W5|�tdiif�X|�t�}|�t|fiif�zVttjd�D]B}t�
t�	||��}z|�|jd|�W5|�tdiif�Xq�W5|�tdiif�X|�t�}|�tdd|iif�zXttjd�D]D}t�
t�	||��}z|�|j
d|�W5|�tdiif�X�q2W5|�tdiif�XW5QRXdS)Nr
r%rr*)r�r8rr�rlr�r�rC�RecursionErrorr�r�r�rrr�r
r
r�test_recursive_pickleGs4


z!TestPartial.test_recursive_picklecCs.Gdd�d�}|�t�}|�t|j|��dS)Nc@seZdZdd�Zdd�ZdS)z7TestPartial.test_setstate_refcount.<locals>.BadSequencecSsdS)Nr-r
rFr
r
r�__len__msz?TestPartial.test_setstate_refcount.<locals>.BadSequence.__len__cSs4|dkrtS|dkr ttd��S|dkr,iSt�dS)Nrr%i@B)r&r,)�maxr�rl�
IndexError)r �keyr
r
r�__getitem__oszCTestPartial.test_setstate_refcount.<locals>.BadSequence.__getitem__N)rrrr�r�r
r
r
r�BadSequencelsr�)r8r�rCrDr�)r r�r^r
r
r�test_setstate_refcountks
z"TestPartial.test_setstate_refcountN)rrrr@rBrGrMrOrPrQrXrZr[rarhrorvrzr�r�r�r�r�r�r�r�r�r�r
r
r
rr$7s2		
	
$r$z requires the C _functools modulec@s<eZdZerejZGdd�d�Zdd�Zdd�Zdd�Zd	S)
�TestPartialCc@seZdZdd�Zdd�ZdS)zTestPartialC.AllowPicklecCs|Sr	r
rFr
r
r�	__enter__�sz"TestPartialC.AllowPickle.__enter__cCsdS�NFr
�r r��value�tbr
r
r�__exit__�sz!TestPartialC.AllowPickle.__exit__N)rrrr�r�r
r
r
rr��sr�c
Cs�|jtddddd�}|�tt|dt�|�tt|dd�|�tt|d	tddd��|�t�}z|`Wnt	k
rxYnX|�
d
�dS)Nr%r&r'r(r)rrrArz-partial object allowed __dict__ to be deleted)r8rrC�AttributeError�setattrr=r<�hexrrDrEr>r
r
r�test_attributes_unwritable�s
z'TestPartialC.test_attributes_unwritablec	CsT|�t�}d|jd<t|�}|�d|�|�d|�|�t��|�W5QRXdS)Nr�i�Z1234z'value')r8rrr|r�rCrD)r r?r�r
r
r�'test_manually_adding_non_string_keyword�s

z4TestPartialC.test_manually_adding_non_string_keywordcsP|�t��G�fdd�dt�}dg�j|�<t��}|�d|�|�d|�dS)NcseZdZ�fdd�ZdS)z@TestPartialC.test_keystr_replaces_value.<locals>.MutatesYourDictcsdg�j|<dS)NZsth2�astr)rrF�r?r
r�__str__�szHTestPartialC.test_keystr_replaces_value.<locals>.MutatesYourDict.__str__N)rrrr�r
r�r
r�MutatesYourDict�sr�Zsthr�z['sth'])r8rr�rr|r�)r r�r�r
r�r�test_keystr_replaces_value�s
z'TestPartialC.test_keystr_replaces_valueN)	rrrr�r8r�r�r�r�r
r
r
rr�{s
r�c@s eZdZejZGdd�d�ZdS)�
TestPartialPyc@s$eZdZdd�Zdd�Zdd�ZdS)zTestPartialPy.AllowPicklecCstdt�|_dS)Nr)rr��_cmrFr
r
r�__init__�sz"TestPartialPy.AllowPickle.__init__cCs
|j��Sr	)r�r�rFr
r
rr��sz#TestPartialPy.AllowPickle.__enter__cCs|j�|||�Sr	)r�r�r�r
r
rr��sz"TestPartialPy.AllowPickle.__exit__N)rrrr�r�r�r
r
r
rr��sr�N)rrrr�r8r�r
r
r
rr��sr�c@seZdZdS)�CPartialSubclassNrr
r
r
rr��sr�c@seZdZdS)�PyPartialSubclassNrr
r
r
rr��sr�c@seZdZereZdZdS)�TestPartialCSubclassN)rrrr�r�r8rvr
r
r
rr��sr�c@seZdZeZdS)�TestPartialPySubclassN)rrrr�r8r
r
r
rr��sr�c@szeZdZGdd�de�Ze�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�TestPartialMethodc@s�eZdZe�e�Ze�ed�Zejedd�Zejeddd�Z	ejeddd�Z
e�ed�Ze�ejed	d
�d�Z
e�ee�d�Zejee�d
d�ZdS)zTestPartialMethod.Ar%r&rIr,r-rK�r rrH��r1rJ��	�rLN)rrrr�
partialmethodr�nothing�
positionalr�both�
spec_keywordsrur8�over_partial�staticmethod�static�classmethod�clsr
r
r
r�A�s
r�cCsz|�|j��|jfif�|�|j�d�|jdfif�|�|jjdd�|jfddif�|�|jjddd�|jdfddif�|�|j��|jdfif�|�|j�d�|jddfif�|�|jjdd�|jdfddif�|�|jjddd�|jddfddif�|�|j��|jfddif�|�|j�d�|jdfddif�|�|jjdd�|jfddd�f�|�|jjddd�|jdfddd�f�|�|j��|jd	fd
dif�|�|j�d�|jd	dfd
dif�|�|jjdd�|jd	fddd�f�|�|jjddd�|jd	dfddd�f�|�|jj|jddd�|jd	dfddd�f�|�|j��|jfddd
�f�dS)NrHr�r�r1r%r*r&)r*r1r,r+r-r0r�)r;r*r�r�rr�r�r�rFr
r
rrP�s$"& $("$( $&*.z'TestPartialMethod.test_arg_combinationscCs�|�|j��|jddfif�|�|j�d�|jdddfif�|�|jjdd�|jddfddif�|�|jjddd�|jdddfddif�|�|jj|jddd�|jdddfddif�dS)Nr%rHr�rJr�rL)r;r*rur�rFr
r
r�test_nested�s
"&*zTestPartialMethod.test_nestedcCs�|�|j��|jdfddif�|�|j�d�|jddfddif�|�|jjdd�|jdfddd�f�|�|jjddd�|jddfddd�f�|�|jj|jddd�|jddfddd�f�dS)NrJr1r�rHr�r��r1rL)r;r*r�r�rFr
r
r�test_over_partial�s
 $&*z#TestPartialMethod.test_over_partialcCs`|j}|�|jj|�|�|jj|�|�|jj|�|�|jj|j�|�|jjj|j�dSr	)r*r�r��__self__rur�r�r��r �objr
r
r�test_bound_method_introspectionsz1TestPartialMethod.test_bound_method_introspectioncCsf|j}|�t|jd��|�t|jd��|�t|jd��|�t|jd��|�t|jjd��dS)Nr�)r��assertFalse�hasattrr�rur�r�r*r�r
r
r�test_unbound_method_retrievalsz/TestPartialMethod.test_unbound_method_retrievalc
Cs|j|jfD�]}|j|d���|�|��dif�|�|�d�dif�|�|jdd�dddif�|�|jddd�dddif�|�|��|jfddif�|�|�d�|jdfddif�|�|jdd	�|jfddd
�f�|�|jddd	�|jdfddd
�f�W5QRXqdS)N�r�)r�rH)r�rHr�r�rLr�r�r�)r�r*�subTestr;r�r�r�r
r
r�test_descriptorss "z"TestPartialMethod.test_descriptorscCsL|�|jjdd�|jfddif�|�|jj|jdd�|jfddif�dS)Nr,rIr*)r;r*rr�rFr
r
r�test_overriding_keywords$s"z*TestPartialMethod.test_overriding_keywordsc	Cs�|�t��Gdd�dt�}W5QRX|�t��Gdd�d�}W5QRX|�t��Gdd�d�}W5QRX|�}|�|jddd�|dfddd	�f�dS)
Nc@seZdZe�dd�ZdS)�.TestPartialMethod.test_invalid_args.<locals>.BNr%�rrrrr��methodr
r
r
r�B*sr�c@seZdZe��ZdS)r�Nr�r
r
r
rr�-sc@seZdZejedd�ZdS)r�r%)rr*N)rrrrr�rr�r
r
r
rr�0sr&r,r4r%rY)rCrDr�ZassertWarns�DeprecationWarningr;r�)r r�r+r
r
r�test_invalid_args(sz#TestPartialMethod.test_invalid_argscCs$|�tt|j�d�d�t��dS)Nr�z#functools.partialmethod({}, 3, b=4))r;r|�varsr��formatrrFr
r
rr�5s�zTestPartialMethod.test_reprcCslGdd�dtj�}|�|jj�|�|jj�|jj|jj|jj	|jj
|jjfD]}|�t
|dd��qPdS)Nc@s&eZdZejdd��Ze�ed�ZdS)z1TestPartialMethod.test_abstract.<locals>.AbstractcSsdSr	r
�r r5r]r
r
r�add<sz5TestPartialMethod.test_abstract.<locals>.Abstract.addrHN)	rrr�abc�abstractmethodr�rr��add5r
r
r
r�Abstract:s
r��__isabstractmethod__F)r��ABCMetar9r�r�r�r�r�r�r�rur�r�rf)r r�rr
r
r�
test_abstract9s
&zTestPartialMethod.test_abstractcCs.dd�}t�|d�}|�|d�|dd��dS)NcSs||Sr	r
r)r
r
rr^Isz1TestPartialMethod.test_positional_only.<locals>.fr%r&)rr8r;rgr
r
r�test_positional_onlyHsz&TestPartialMethod.test_positional_onlyN)rrrr�r�r*rPr�r�r�r�r�r�r�r�r�r�r
r
r
rr��s

r�c@s�eZdZejejfdd�Zdd�Zdd�Ze	�
ejj
dkd�d	d
��Zdd�Zd
d�Zdd�Zeje	�
ejj
dkd�dd���ZdS)�TestUpdateWrapperc	Cs�|D]}|�t||�t||��q|D]H}t||�}t||�}|D]*}|dkrX|dkrXqB|�||||�qBq&|�|j|�dS)Nr�__wrapped__)r�rfr�)	r �wrapper�wrapped�assigned�updatedrZwrapper_attrZwrapped_attrr�r
r
r�
check_wrapperRs

zTestUpdateWrapper.check_wrappercCs<dd�dd�}d|_d|_dd�d	d
�}t�||�||fS)N�This is a new annotationrIcSsdSr	r
rIr
r
rr^fsz,TestUpdateWrapper._default_update.<locals>.f�This is also a testzThis is a bald faced liezThis is the prior annotationrKcSsdSr	r
rKr
r
rr�ksz2TestUpdateWrapper._default_update.<locals>.wrapper)r�r�r�update_wrapper�r r^r�r
r
r�_default_updateesz!TestUpdateWrapper._default_updatecCsv|��\}}|�||�|�|j|�|�|jd�|�|j|j�|�|jd�|�|jdd�|�	d|j�dS)Nr^rr*rr+)
rrr�r�r;rrr��__annotations__�assertNotIn�r r�r^r
r
r�test_default_updatepsz%TestUpdateWrapper.test_default_updater&�)Docstrings are omitted with -O2 and abovecCs|��\}}|�|jd�dS�NzThis is a test�rr;�__doc__r
r
r
r�test_default_update_doczsz)TestUpdateWrapper.test_default_update_doccCs�dd�}d|_dd�}t�||dd�|�||dd�|�|jd�|�|j|j�|�|jd�|�|j	i�|�
t|d��dS)	NcSsdSr	r
r
r
r
rr^�sz+TestUpdateWrapper.test_no_update.<locals>.frcSsdSr	r
r
r
r
rr��sz1TestUpdateWrapper.test_no_update.<locals>.wrapperr
r�r�)r�rrrr;r�assertNotEqualrrrr�r�rr
r
r�test_no_update�sz TestUpdateWrapper.test_no_updatecCs�dd�}d|_tdddd�|_dd	�}i|_d
}d}t�||||�|�||||�|�|jd�|�|j	|j	�|�|j
d�|�|jd�|�|j|j�dS)
NcSsdSr	r
r
r
r
rr^�sz2TestUpdateWrapper.test_selective_update.<locals>.f�This is a different testr%r&r,r3cSsdSr	r
r
r
r
rr��sz8TestUpdateWrapper.test_selective_update.<locals>.wrapperr���	dict_attrr�)r�r<rrrrr;rrrr�r r^r��assign�updater
r
r�test_selective_update�sz'TestUpdateWrapper.test_selective_updatec	Cs�dd�}dd�}i|_d}d}t�||||�|�d|j�|�|ji�|`|�t��t�||||�W5QRXd|_|�t��t�||||�W5QRXdS)	NcSsdSr	r
r
r
r
rr^�sz4TestUpdateWrapper.test_missing_attributes.<locals>.fcSsdSr	r
r
r
r
rr��sz:TestUpdateWrapper.test_missing_attributes.<locals>.wrapperr�rr�r%)rrrr	rr;rCr�rr
r
r�test_missing_attributes�sz)TestUpdateWrapper.test_missing_attributescCsFdd�}t�|t�|�|jd�|�|j�d��|�|ji�dS)NcSsdSr	r
r
r
r
rr��sz6TestUpdateWrapper.test_builtin_update.<locals>.wrapperr�zmax()	rrr�r;rr9r�
startswithr)r r�r
r
r�test_builtin_update�s
z%TestUpdateWrapper.test_builtin_updateN)rrrr�WRAPPER_ASSIGNMENTS�WRAPPER_UPDATESrrr�unittest�skipIfr
�flags�optimizerrrrrZrequires_docstringsrr
r
r
rr�Ps"�

�
�r�c@sHeZdZdd�Zdd�Ze�ejj	dkd�dd��Z
d	d
�Zdd�Zd
S)�	TestWrapscCs.dd�}d|_d|_t�|�dd��}||fS)NcSsdSr	r
r
r
r
rr^�sz$TestWraps._default_update.<locals>.frzThis is still a bald faced liecSsdSr	r
r
r
r
rr��sz*TestWraps._default_update.<locals>.wrapper)r�r�r�wrapsrr
r
rr�s
zTestWraps._default_updatecCsH|��\}}|�||�|�|jd�|�|j|j�|�|jd�dS)Nr^r)rrr;rrr�r
r
r
rr�s
zTestWraps.test_default_updater&rcCs|��\}}|�|jd�dSr
r)r r��_r
r
rr�sz!TestWraps.test_default_update_doccCstdd�}d|_t�|dd�dd��}|�||dd�|�|jd�|�|j|j�|�|jd�|�	t
|d��dS)	NcSsdSr	r
r
r
r
rr^�sz#TestWraps.test_no_update.<locals>.frr
cSsdSr	r
r
r
r
rr��sz)TestWraps.test_no_update.<locals>.wrapperr�r�)r�rr$rr;rrrrr�r�rr
r
rr�s
zTestWraps.test_no_updatecCs�dd�}d|_tdddd�|_dd	�}d
}d}t�|||�|dd
���}|�||||�|�|jd�|�|j	|j	�|�|j
d�|�|jd�|�|j|j�dS)NcSsdSr	r
r
r
r
rr^�sz*TestWraps.test_selective_update.<locals>.frr%r&r,r3cSs
i|_|Sr	r)r^r
r
r�
add_dict_attr�sz6TestWraps.test_selective_update.<locals>.add_dict_attrr�rcSsdSr	r
r
r
r
rr��sz0TestWraps.test_selective_update.<locals>.wrapperr�)r�r<rrr$rr;rrrr)r r^r&rrr�r
r
rr�szTestWraps.test_selective_updateN)
rrrrrrr r
r!r"rrrr
r
r
rr#�s�
r#c@seZdZdd�Zdd�ZdS)�
TestReducec	CsGdd�d�}dd�}|�|�|dddgd�d	�|�|�|ddggd
dggg�ddd
dg�|�|�dd
�tdd�d�d�|�|�dd
�tdd�d�d�|�|�||d��d�|�|�||d�d�d�|�|�||d�d�d�|�t|j�|�t|jdd�|�t|jddd�|�|�dd�d�|�|�ddd�d�|�t|jdd�|�t|j|g�|�t|j|d�|�t|j|d�|�t|j|t��Gdd�d�}|�t|j||��|�|�|gd�d�|�|�|gd�d�Gdd�d�}|�t|jd|��dS) Nc@s$eZdZdd�Zdd�Zdd�ZdS)z'TestReduce.test_reduce.<locals>.SquarescSs||_g|_dSr	)r��sofar)r r�r
r
rr�sz0TestReduce.test_reduce.<locals>.Squares.__init__cSs
t|j�Sr	)�lenr(rFr
r
rr�sz/TestReduce.test_reduce.<locals>.Squares.__len__cSsRd|kr|jksnt�t|j�}||krH|j�||�|d7}q&|j|S)Nrr%)r�r�r)r(�append)r �i�nr
r
rr�
s

z3TestReduce.test_reduce.<locals>.Squares.__getitem__N)rrrr�r�r�r
r
r
r�Squaressr-cSs||Sr	r
r\r
r
rr�sz#TestReduce.test_reduce.<locals>.addr*r+r1rir�rL�wcSs||Sr	r
r\r
r
rr6r7z(TestReduce.test_reduce.<locals>.<lambda>r&r�r%i�cSs||Sr	r
r\r
r
rr6r7�lh�r'ir�*�1)r0r0r
c@seZdZdd�ZdS)z/TestReduce.test_reduce.<locals>.TestFailingItercSst�dSr	��RuntimeErrorrFr
r
r�__iter__,sz8TestReduce.test_reduce.<locals>.TestFailingIter.__iter__N)rrrr4r
r
r
r�TestFailingIter+sr5c@seZdZdd�ZdS)z&TestReduce.test_reduce.<locals>.BadSeqcSst�dSr	)�
ValueError)r �indexr
r
rr�4sz2TestReduce.test_reduce.<locals>.BadSeq.__getitem__N)rrrr�r
r
r
r�BadSeq3sr8)r;�reducerlrCrDr�r3r6)r r-r�r5r8r
r
r�test_reduces>
� �zTestReduce.test_reducecCs�Gdd�d�}ddlm}|�|�||d��d�|�|�||d�d�d�|�t|j||d��|�|�||d�d�d�|�|�||d	��d�|�|�||d	�d�d�d	d
dd�}|�|�||�d
�|����dS)Nc@seZdZdd�Zdd�ZdS)z5TestReduce.test_iterator_usage.<locals>.SequenceClasscSs
||_dSr	�r,)r r,r
r
rr�;sz>TestReduce.test_iterator_usage.<locals>.SequenceClass.__init__cSs&d|kr|jkrnn|St�dS�Nr)r,r��r r+r
r
rr�=szATestReduce.test_iterator_usage.<locals>.SequenceClass.__getitem__N)rrrr�r�r
r
r
r�
SequenceClass:sr>r)r�rHr'r0�4r%r&r,)ZoneZtwoZthreeri)�operatorr�r;r9rCrDrm�keys)r r>r�rLr
r
r�test_iterator_usage9s	zTestReduce.test_iterator_usageN)rrrr:rBr
r
r
rr's8r'c@seZdZerejZdS)�TestReduceCN)rrrr�r9r
r
r
rrCOsrCc@seZdZeej�ZdS)�TestReducePyN)rrrr�r�r9r
r
r
rrDUsrDc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�TestCmpToKeycCs�dd�}|�|�}|�|d�|d��|�|d�|d��|�|d�|d��dd�}|�|�}|�|d�|d��|�|d	�|d
��|�|d	�|d
��|�|d	�|d
��dS)NcSs||k||kSr	r
r\r
r
r�cmp1\sz*TestCmpToKey.test_cmp_to_key.<locals>.cmp1r,r%cSst|�t|�Sr	�rdr\r
r
r�cmp2csz*TestCmpToKey.test_cmp_to_key.<locals>.cmp2g@�4r&Z35)�
cmp_to_keyr;�
assertGreaterZassertGreaterEqualZ
assertLess�assertLessEqualr)r rFr�rHr
r
r�test_cmp_to_key[s

zTestCmpToKey.test_cmp_to_keyc	Csdd�}|j|d�}|�|dd�|dd��|�|dd�|dd��|�ttf��|d�dkW5QRX|�ttf��d|d�kW5QRX|�t��|��}W5QRX|�t��|�|d�}W5QRX|�|�}|�t��|�W5QRX|�t��|dd�W5QRXdS)NcSs||k||kSr	r
r\r
r
rrFlsz4TestCmpToKey.test_cmp_to_key_arguments.<locals>.cmp1��mycmpr,r�r%)rJr;rKrCrDr��r rFr�r
r
r�test_cmp_to_key_argumentsks"
z&TestCmpToKey.test_cmp_to_key_argumentsc	s|dd�}|�|�}|�t��|d�|d�kW5QRXGdd�d���fdd�}|�t��|d�|d�kW5QRXdS)NcSst�dSr	�r_r\r
r
rrF�sz'TestCmpToKey.test_bad_cmp.<locals>.cmp1r,r%c@seZdZdd�ZdS)z)TestCmpToKey.test_bad_cmp.<locals>.BadCmpcSst�dSr	rRrr
r
r�__lt__�sz0TestCmpToKey.test_bad_cmp.<locals>.BadCmp.__lt__N)rrrrSr
r
r
r�BadCmp�srTcs��Sr	r
r\�rTr
rrF�s)rJrCr_rPr
rUr�test_bad_cmps
zTestCmpToKey.test_bad_cmpcCs*dd�}|j|d�}|�|d�jd�dS)NcSs||k||kSr	r
r\r
r
rrF�sz)TestCmpToKey.test_obj_field.<locals>.cmp1rN�2)rJr;r�rPr
r
r�test_obj_field�szTestCmpToKey.test_obj_fieldcCs4dd�}|�ttd�|�|�d�ddddd	g�dS)
NcSs||Sr	r
r\r
r
rrO�sz)TestCmpToKey.test_sort_int.<locals>.mycmprH�r�r-r,r&r%r)r;�sortedrlrJ)r rOr
r
r�
test_sort_int�s�zTestCmpToKey.test_sort_intcCs\dd�}ddddddd	d
dg	}t||�|�d�}|�d
d�|D�dddddd	dddg	�dS)NcSs"t|�t|�}}||k||kSr	rGr\r
r
rrO�sz-TestCmpToKey.test_sort_int_str.<locals>.mycmprH�3rJr&�0r1r-Z10r%rYcSsg|]}t|��qSr
rG)r}r�r
r
rr��sz2TestCmpToKey.test_sort_int_str.<locals>.<listcomp>rr,r')rZrJr;)r rO�valuesr
r
r�test_sort_int_str�s�zTestCmpToKey.test_sort_int_strcCs<dd�}|�|�}|d�}|�tt|�|�|tjj�dS)NcSs||Sr	r
r\r
r
rrO�sz%TestCmpToKey.test_hash.<locals>.mycmpr')rJrCrD�hashZassertNotIsInstance�collectionsr��Hashable)r rOr��kr
r
r�	test_hash�s

zTestCmpToKey.test_hashN)
rrrrMrQrVrXr[r_rdr
r
r
rrEYs	rEc@seZdZerejZdS)�
TestCmpToKeyCN)rrrr�rJr
r
r
rre�srec@seZdZeej�ZdS)�TestCmpToKeyPyN)rrrr�r�rJr
r
r
rrf�srfc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�TestTotalOrderingcCs�tjGdd�d��}|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�dS)Nc@s$eZdZdd�Zdd�Zdd�ZdS)z3TestTotalOrdering.test_total_ordering_lt.<locals>.AcSs
||_dSr	�r��r r�r
r
rr��sz<TestTotalOrdering.test_total_ordering_lt.<locals>.A.__init__cSs|j|jkSr	rhrr
r
rrS�sz:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__lt__cSs|j|jkSr	rhrr
r
r�__eq__�sz:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__eq__N�rrrr�rSrjr
r
r
rr��sr�r%r&�r�total_orderingr9r��r r�r
r
r�test_total_ordering_lt�sz(TestTotalOrdering.test_total_ordering_ltcCs�tjGdd�d��}|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�dS)Nc@s$eZdZdd�Zdd�Zdd�ZdS)z3TestTotalOrdering.test_total_ordering_le.<locals>.AcSs
||_dSr	rhrir
r
rr��sz<TestTotalOrdering.test_total_ordering_le.<locals>.A.__init__cSs|j|jkSr	rhrr
r
r�__le__�sz:TestTotalOrdering.test_total_ordering_le.<locals>.A.__le__cSs|j|jkSr	rhrr
r
rrj�sz:TestTotalOrdering.test_total_ordering_le.<locals>.A.__eq__N)rrrr�rprjr
r
r
rr��sr�r%r&rlrnr
r
r�test_total_ordering_le�sz(TestTotalOrdering.test_total_ordering_lecCs�tjGdd�d��}|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�dS)Nc@s$eZdZdd�Zdd�Zdd�ZdS)z3TestTotalOrdering.test_total_ordering_gt.<locals>.AcSs
||_dSr	rhrir
r
rr��sz<TestTotalOrdering.test_total_ordering_gt.<locals>.A.__init__cSs|j|jkSr	rhrr
r
r�__gt__�sz:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__gt__cSs|j|jkSr	rhrr
r
rrj�sz:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__eq__N)rrrr�rrrjr
r
r
rr��sr�r%r&rlrnr
r
r�test_total_ordering_gt�sz(TestTotalOrdering.test_total_ordering_gtcCs�tjGdd�d��}|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�dS)Nc@s$eZdZdd�Zdd�Zdd�ZdS)z3TestTotalOrdering.test_total_ordering_ge.<locals>.AcSs
||_dSr	rhrir
r
rr��sz<TestTotalOrdering.test_total_ordering_ge.<locals>.A.__init__cSs|j|jkSr	rhrr
r
r�__ge__�sz:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__ge__cSs|j|jkSr	rhrr
r
rrj�sz:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__eq__N)rrrr�rtrjr
r
r
rr��sr�r%r&rlrnr
r
r�test_total_ordering_ge�sz(TestTotalOrdering.test_total_ordering_gecCs�tjGdd�dt��}|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�|�|d�|d�k�dS)Nc@seZdZdS)z=TestTotalOrdering.test_total_ordering_no_overwrite.<locals>.ANrr
r
r
rr��sr�r%r&)rrmrdr9rnr
r
r� test_total_ordering_no_overwrite�sz2TestTotalOrdering.test_total_ordering_no_overwritec	Cs.|�t��tjGdd�d��}W5QRXdS)Nc@seZdZdS)z7TestTotalOrdering.test_no_operations_defined.<locals>.ANrr
r
r
rr�
sr�)rCr6rrmrnr
r
r�test_no_operations_definedsz,TestTotalOrdering.test_no_operations_definedc
s4tjG�fdd�d���tjG�fdd�d���tjG�fdd�d���tjG�fdd�d���tjG�fd	d
�d
���|�d��(|�t���d�d
kW5QRXW5QRX|�d��,|�t���d��d�kW5QRXW5QRX|�d��,|�t���d
��d
�kW5QRXW5QRX|�d��,|�t���d��d�kW5QRXW5QRX|�d��,|�t���d��d�kW5QRXW5QRX|�d��,|�t���d��d�kW5QRXW5QRX|�d��,|�t���d��d�kW5QRXW5QRX|�d��,|�t���d��d�kW5QRXW5QRX|�d��,|�t���d��d�kW5QRXW5QRX|�d��@�d�}�d�}|�||�|�t��||kW5QRXW5QRX|�d��@�d �}�d �}|�||�|�t��||kW5QRXW5QRXdS)!Ncs,eZdZdd�Z�fdd�Z�fdd�ZdS)zRTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThancSs
||_dSr	rhrir
r
rr�sz[TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__init__cst|��r|j|jkSdSr���
isinstancer�r��ImplementsLessThanr
rrjs
zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__eq__cst|��r|j|jkStSr	�ryr��NotImplementedrrzr
rrSs
zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__lt__N�rrrr�rjrSr
rzr
rr{sr{cs,eZdZdd�Z�fdd�Z�fdd�ZdS)zUTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThancSs
||_dSr	rhrir
r
rr� sz^TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__init__cst|��r|j|jkSdSr�rxr��ImplementsGreaterThanr
rrj"s
z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__eq__cst|��r|j|jkStSr	r|rrr
rrr&s
z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__gt__N)rrrr�rjrrr
rr
rr�sr�cs,eZdZdd�Z�fdd�Z�fdd�ZdS)zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTocSs
||_dSr	rhrir
r
rr�-szbTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__init__cst|��r|j|jkSdSr�rxr��ImplementsLessThanEqualTor
rrj/s
z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__eq__cst|��r|j|jkStSr	r|rr�r
rrp3s
z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__le__N)rrrr�rjrpr
r�r
rr�+sr�cs,eZdZdd�Z�fdd�Z�fdd�ZdS)z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTocSs
||_dSr	rhrir
r
rr�:szeTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__init__cst|��r|j|jkSdSr�rxr��ImplementsGreaterThanEqualTor
rrj<s
zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__eq__cst|��r|j|jkStSr	r|rr�r
rrt@s
zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__ge__N)rrrr�rjrtr
r�r
rr�8sr�cs(eZdZdd�Z�fdd�Zdd�ZdS)zXTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplementedcSs
||_dSr	rhrir
r
rr�GszaTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__init__cst|��r|j|jkSdSr�rxr��ComparatorNotImplementedr
rrjIs
z_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__eq__cSstSr	)r}rr
r
rrSMsz_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__lt__Nr~r
r�r
rr�Esr�zLT < 1���r%zLT < LErzLT < GTzLE <= LTr&zLE <= GEr,zGT > GEr-zGT > LTrHzGE >= GTr�zGE >= LErJz
GE when equalr�z
LE when equalr�)rrmr�rCrDr;)r r*r+r
)r�r�r�r{r�r�$test_type_error_when_not_implementedsP
 $$$$$$$$z6TestTotalOrdering.test_type_error_when_not_implementedcCsdttjd�D]P}dD]F}|j||d��.tt|�}t�t�||��}|�||�W5QRXqqdS)Nr%)rSrrrprt)r�r�)	rlr�r�r�rf�Orderable_LTr�r�r�)r r�rr�Zmethod_copyr
r
rr�ys
zTestTotalOrdering.test_pickleN)rrrrorqrsrurvrwr�r�r
r
r
rrg�skrgc@s$eZdZdd�Zdd�Zdd�ZdS)r�cCs
||_dSr	rhrir
r
rr��szOrderable_LT.__init__cCs|j|jkSr	rhrr
r
rrS�szOrderable_LT.__lt__cCs|j|jkSr	rhrr
r
rrj�szOrderable_LT.__eq__Nrkr
r
r
rr��sr�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1S)2�TestLRUc
sNdd�}|jjdd�|�}|��\}}}}|�|d�|�|d�|�|d�|�|d�td�}td�D]6}t|�t|�}	}
||	|
�}||	|
�}|�||�qj|��\}}}}|�||k�|�||d�|�|d�|��|��\}}}}|�|d�|�|d�|�|d�||	|
�|��\}}}}|�|d�|�|d�|�|d�|�|j	|�|�	|	|
�|��\}}}}|�|d�|�|d�|�|d�|j�d��fd	d
��}|�|��j
d�d�td�D]}|�|�d��q�|��d�|��\}}}}|�|d�|�|d�|�|d�|j�d��fdd
��}|�|��j
d�d�td�D]}|�|�d��qf|��d�|��\}}}}|�|d�|�|d�|�|d�|j�d
��fdd
��}|�|��j
d
�d�dD]}	|�||	�|	d��q�|��d�|��\}}}}|�|d�|�|d�|�|d
�dS)NcSsd||S�Nr,r
r\r
r
r�orig�szTestLRU.test_lru.<locals>.origr(��maxsizerrHi�r%cs�d7�dS�Nr%r(r
r
��f_cntr
rr^�szTestLRU.test_lru.<locals>.fcs�d7�dSr�r
r
r�r
rr^�sr-r&cs�d7�|dS�Nr%r'r
r4r�r
rr^�s)rJr�rJr�rJr�r�r�r�r�r�r�r�r�r�rJr'�)�module�	lru_cache�
cache_infor;rlrr9�cache_clearr�r�r�)
r r�r^�hits�missesr��currsize�domainr+r5r]�actualrUr
r�r�test_lru�s�





zTestLRU.test_lrucCs~|jjdd��}|�tt|dddg��dddg�|�|��jd�|�|��jd�|�|��jd	�|�|��j	d�dS)
NcSs|dS�Nr&r
r4r
r
r�square�sz(TestLRU.test_lru_no_args.<locals>.squarer'r(�di�r%r&�)
r�r�r;rr=r�r�r�r�r�)r r�r
r
r�test_lru_no_args�s
�zTestLRU.test_lru_no_argscs~d�|jjdd���fdd���td�D]}|��|�d|�d��q(|����jd�|��d�d	�|����jd�dS)
NTr'r�cs(d|�d�}|dkr$�r$d��|�}|S)N�.r(Fr
)r5�rv�r^�oncer
rr^�s
z%TestLRU.test_lru_bug_35780.<locals>.f�r�r(z.20.)r�r�rlr;r�r��r r5r
r�r�test_lru_bug_35780�s	zTestLRU.test_lru_bug_35780cCs:|j��dd��}|d�|di�|�|��jd�dS)NcSsdSr	r
r4r
r
rr^sz%TestLRU.test_lru_bug_36650.<locals>.frr%)r)r�r�r;r�r�r`r
r
r�test_lru_bug_36650
s


zTestLRU.test_lru_bug_36650cCs|jjdd�dd��}tj��}tjjdd�|_tjjdd�|_|�||d�d�|�|jjd�|�|�	�d	�|�||d�d�|�|jjd
�|�|�	�d�|�|dd
�d
�|�|jjd
�|�|�	�d�|�||d�d�|�|jjd�|�|�	�d�dS)Nr%r�cSs|d|Sr�r
r\r
r
rr^!sz*TestLRU.test_lru_hash_only_once.<locals>.fr�)Zreturn_valuei�rb)rr%r%r%r&)r%r%r%r%r�r()r%r&r%r%r,)r%r,r%r%)
r�r�rZmockZMock�__mul__�__hash__r;Z
call_countr�)r r^Zmock_intr
r
r�test_lru_hash_only_onces"

zTestLRU.test_lru_hash_only_oncecCsLtj}z8|j�d�t�t_dD]}|�tdd|��|�qW5|t_XdS)Nr-)
rrr%r&r,r,r-rHr�r%rJr&r%Zabcdefghijklmn)�builtinsr)r�r�r;)r Zold_lenr+r
r
r�test_lru_reentrancy_with_len>sz$TestLRU.test_lru_reentrancy_with_lencCs6t��dd��}|�|dd�d�|�|d�d�dS)NcWs|Sr	r
�rr
r
rr^Lsz-TestLRU.test_lru_star_arg_handling.<locals>.fr%r&rA)rA)rr�r;r`r
r
r�test_lru_star_arg_handlingJs
z"TestLRU.test_lru_star_arg_handlingc	Cshtjdd�dd��}tjdd�dd��}|�t��|g�W5QRX|�t��|g�W5QRXdS)Nr�cSsdSr	r
��or
r
r�infinite_cacheXsz3TestLRU.test_lru_type_error.<locals>.infinite_cacher'cSsdSr	r
r�r
r
r�
limited_cache\sz2TestLRU.test_lru_type_error.<locals>.limited_cache)rr�rCrD)r r�r�r
r
r�test_lru_type_errorSs



zTestLRU.test_lru_type_errorcs�|jjdd��fdd���|��fdd�td�D�dddd	d
ddd
ddddddddg�|����|jjddddd�����|����|jjddddd��dS)Nr�cs$|dkr|S�|d��|d�S�Nr&r%r
r;��fibr
rr�gsz/TestLRU.test_lru_with_maxsize_none.<locals>.fibcsg|]}�|��qSr
r
�r}r,r�r
rr�lsz6TestLRU.test_lru_with_maxsize_none.<locals>.<listcomp>rbrr%r&r,rHr��
r/�"�7�Y����y�b��r�r�r�r��r�r�r;rlr��
_CacheInfor�rFr
r�r�test_lru_with_maxsize_nonefs"�
�
�z"TestLRU.test_lru_with_maxsize_nonec	sj|jjdd�dd���dD]*}|��fdd�td�D�ttd���q|����|jjd	d
d	d	d��dS)Ni����r�cSs|Sr	r
r;r
r
r�equsz2TestLRU.test_lru_with_maxsize_negative.<locals>.eqrScsg|]}�|��qSr
r
r��r�r
rr�ysz:TestLRU.test_lru_with_maxsize_negative.<locals>.<listcomp>�ri,r�)r�r�r;rlrr�r�r=r
r�r�test_lru_with_maxsize_negativets
(
�z&TestLRU.test_lru_with_maxsize_negativec
Cs|dD]r}|j�|�dd��}|�|d�d�|�t��}|d�W5QRX|�|jj�|�t��|d�W5QRXqdS)N�Nr�cSsd|S)Nr�r
�r+r
r
rr�sz.TestLRU.test_lru_with_exceptions.<locals>.funcrr*r�)r�r�r;rCr�ZassertIsNone�	exception�__context__)r r�r�cmr
r
r�test_lru_with_exceptions}s

z TestLRU.test_lru_with_exceptionscCs�dD]�}|jj|dd�dd��}|�|d�d�|�t|d��td��|�|d�d	�|�t|d��td	��|�|dd
�d�|�t|dd
��td��|�|dd
�d	�|�t|dd
��td	��|�|��jd�|�|��jd�qdS)Nr�T)r��typedcSs||Sr	r
r4r
r
rr��sz+TestLRU.test_lru_with_types.<locals>.squarer,r�g@g"@r4r-)r�r�r;r�r�r�r�)r r�r�r
r
r�test_lru_with_types�s
zTestLRU.test_lru_with_typescs�|j���fdd���|��fdd�td�D�ddddd	d
ddd
dddddddg�|����|jjddddd�����|����|jjddddd��dS)Ncs(|dkr|S�|dd��|dd�S�Nr&r%r;r
r;r�r
rr��sz/TestLRU.test_lru_with_keyword_args.<locals>.fibcsg|]}�|d��qS�r;r
�r}Znumberr�r
rr��sz6TestLRU.test_lru_with_keyword_args.<locals>.<listcomp>rbrr%r&r,rHr�r�r/r�r�r�r�r�r�r�r�r�r�r�rFr
r�r�test_lru_with_keyword_args�s"�
�
�z"TestLRU.test_lru_with_keyword_argscs�|jjdd��fdd���|��fdd�td�D�dddd	d
ddd
ddddddddg�|����|jjddddd�����|����|jjddddd��dS)Nr�cs(|dkr|S�|dd��|dd�Sr�r
r;r�r
rr��sz<TestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.fibcsg|]}�|d��qSr�r
r�r�r
rr��szCTestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.<listcomp>rbrr%r&r,rHr�r�r/r�r�r�r�r�r�r�r�r�r�rFr
r�r�'test_lru_with_keyword_args_maxsize_none�s"�
�
�z/TestLRU.test_lru_with_keyword_args_maxsize_nonec	Csj|jjdd�dd��}|�|ddd�dd	g�|�|ddd
�d	dg�|�|��|jjddddd��dS)
Nr'r�c[st|���Sr	)r�items)r�r
r
rr^�sz$TestLRU.test_kwargs_order.<locals>.fr%r&r))r*r%)r+r&)r+r*rr�)r�r�r;r�r�r`r
r
r�test_kwargs_order�s

�zTestLRU.test_kwargs_ordercCsFdd�dd�}|j��|�}|jjD]}|�t||�t||��q$dS)NZzomg_annotation�ZzomgcSsdS)Nr0r
r�r
r
rr^�sz,TestLRU.test_lru_cache_decoration.<locals>.f)r�r�rr;rf)r r^�gr�r
r
r�test_lru_cache_decoration�sz!TestLRU.test_lru_cache_decorationc		s�d\}�dd���jj|�d�������\}}}}��|d�t��������fdd�����fdd	�}t��}t�	d
�z�fdd�t
|�D�}t�|�����W5QRX���\}}}}�jt
kr��||���|�||�n ��||���|�||���||�tj|d
�g}|�fdd�t
|�D�7}���t�|�����W5QRXW5t�	|�XdS)N)rH�cSsd||Sr�r
r\r
r
rr��sz-TestLRU.test_lru_cache_threaded.<locals>.origr�rcs4��d�t��D]}���|d��|d��qdS)Nr'r)�waitrlr;)rcr%)r^�mr�r �startr
r�full�s
z-TestLRU.test_lru_cache_threaded.<locals>.fullcs(��d�td��D]}���qdS)Nr'r&)r�rlr�)r%)r^r�r�r
r�clear�s
z.TestLRU.test_lru_cache_threaded.<locals>.clear���ư>csg|]}tj�|gd��qS�)�targetr��	threading�Thread�r}rc�r�r
rr��s�z3TestLRU.test_lru_cache_threaded.<locals>.<listcomp>�r�csg|]}tj�|gd��qSr�r�r�r�r
rr��s�)r�r�r�r;r��Eventr
�getswitchintervalr�setswitchintervalrl�
start_threads�setr�rLr�r�)	r r,r�r�r�r�r��orig_si�threadsr
)r^r�r�r�r r�r�test_lru_cache_threaded�s>

�
�zTestLRU.test_lru_cache_threadedc
sd\}�t�|d��t�|d��t�|d���jj�|d��fdd��������dd�|df������fdd���fd	d
�t|�D�}t�|��rt��D]b}��	d���
���	d���
���	d���
������d|d|�||df�q�W5QRXdS)N)rHrJr%r�cs��d�d|S�Nr'r,)r�r4)�pauser
rr^s
z+TestLRU.test_lru_cache_threaded2.<locals>.frcs:t��D],}��d����|�d|���d�qdSr�)rlr�r;r�)r^r�r r��stopr
r�tests
z.TestLRU.test_lru_cache_threaded2.<locals>.testcsg|]}tj�d��qS)r�r�r��r�r
rr�
sz4TestLRU.test_lru_cache_threaded2.<locals>.<listcomp>r')r��Barrierr�r�r;r�rlrr�r��reset)r r,r�r+r
)r^r�r�r r�r�r�r�test_lru_cache_threaded2�s$


z TestLRU.test_lru_cache_threaded2c	s^�jjdd�dd�����fdd���fdd�td	ddd
dg�D�}t�|��W5QRXdS)Nr&r�cSst�d�d|S)Ng{�G�z�?r,)�time�sleepr4r
r
rr^s
z+TestLRU.test_lru_cache_threaded3.<locals>.fc	s2�j|d�����|�d||�W5QRXdS)N)�threadr,)r�r;)r+r5)r^r r
rr�sz.TestLRU.test_lru_cache_threaded3.<locals>.testcs"g|]\}}tj�||fd��qSr�r�)r}r+�vr�r
rr� s�z4TestLRU.test_lru_cache_threaded3.<locals>.<listcomp>r%r,)r�r��	enumeraterr�)r r�r
)r^r r�r�test_lru_cache_threaded3s

�z TestLRU.test_lru_cache_threaded3cs^|jjdd�dd���G��fdd�d����d����d��|���d���d��dS)	Nr'r�cSs|Sr	r
r4r
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
||_dSr	r4r�r
r
rr�/sz6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__init__cSs|jSr	r4rFr
r
rr�1sz6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__hash__cs"|jdkr��d��|j|jkSr�r4r��DoubleEqrr
rrj3s
z4TestLRU.test_need_for_rlock.<locals>.DoubleEq.__eq__N)rrrr�r�rjr
rr
rr-srr%r&)r�r�r;rFr
rr�test_need_for_rlock%s
�zTestLRU.test_need_for_rlockcstG�fdd�dt�}|d�}|d�}|d�}��|j��d�dD]}��|�|�|dd�qB��|j|j|jfd���|j��d	�d
D]}��|�|�|dd�q���|j|j|jfd���|j��d�d
D]}��|�|�|dd�qވ�|j|j|jfd���|j��d���|j��|j�����|j��|j�����|j��|j���dS)Ncs$eZdZdZ�j�d�dd��ZdS)z"TestLRU.test_lru_method.<locals>.Xrr&cSs|jd7_|d|Sr�r�r�r
r
rr^@sz$TestLRU.test_lru_method.<locals>.X.fN)rrrr�r�r�r^r
rFr
r�X>s
rrHrJ)rrr&r)
r%r&r&r,r%r%r%r&r,r,r')r�rr)r-r�r&r&)
r%r&r%r%r%r%r,r&r&r&)r�r-r)r'r'r&r&)
r&r%r%r%r%r&r%r,r&r%)r�r-rH)r�r�r&r&)rdr;r^r�r�)r rr*r+r1r5r
rFr�test_lru_method=s(zTestLRU.test_lru_methodcCsp|j}|jd|j|jfD]P}ttjd�D]<}|j||d��$t�t�	||��}|�
||�W5QRXq,qdS)Nrr%)r�r)�	__class__�cached_func�cached_meth�cached_staticmethrlr�r�r�r�r�r�)r r�r^r�r�r
r
rr�\szTestLRU.test_picklec
Csz|j}dd�}|j�|d�}|jd|j|j|j�d�|�f}|D]2}|j|d��t�|�}|�	||�W5QRXqBdS)NcSsd||Sr�r
r\r
r
rr�fszTestLRU.test_copy.<locals>.origr&r�r)
r	r�r8r
rrr�r�r�r��r r�r�rZfuncsr^r�r
r
rr�ds�
zTestLRU.test_copyc
Csz|j}dd�}|j�|d�}|jd|j|j|j�d�|�f}|D]2}|j|d��t�	|�}|�
||�W5QRXqBdS)NcSsd||Sr�r
r\r
r
rr�rsz#TestLRU.test_deepcopy.<locals>.origr&rr
)r	r�r8r
rrr�r�r�r�r�rr
r
rr�ps�
zTestLRU.test_deepcopyN)rrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr�r�r�r
r
r
rr��s0Y#		
0
r�cCsd||Sr�r
r\r
r
r�py_cached_func}srcCsd||Sr�r
r\r
r
r�
c_cached_func�src@s:eZdZeZefZe��dd��Ze	e��dd���Z
dS)�	TestLRUPycCsd||Sr�r
r�r
r
rr�szTestLRUPy.cached_methcCsd||Sr�r
r\r
r
rr�szTestLRUPy.cached_staticmethN)rrrr�r�rr
r�rr�rr
r
r
rr�s
rc@s:eZdZeZefZe��dd��Ze	e��dd���Z
dS)�TestLRUCcCsd||Sr�r
r�r
r
rr�szTestLRUC.cached_methcCsd||Sr�r
r\r
r
rr�szTestLRUC.cached_staticmethN)rrrr�r�rr
r�rr�rr
r
r
rr�s
rc@s�eZdZdd�Zdd�Zdd�Zdd�Ze�e	d	�e
jd
d���Zdd
�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*S)+�TestSingleDispatchcCs\tjdd��}dd�}|�t|�|�|d�d�|�|d�d�|�|dd	d
g�d�dS)NcSsdS�Nrcr
r�r
r
rr��sz3TestSingleDispatch.test_simple_overloads.<locals>.gcSsdS)N�integerr
r�r
r
r�g_int�sz7TestSingleDispatch.test_simple_overloads.<locals>.g_intrkrcr%rr&r,)r�singledispatch�registerrdr;�r r�rr
r
r�test_simple_overloads�s
z(TestSingleDispatch.test_simple_overloadscCs�tjdd��}Gdd�d�}Gdd�d|�}Gdd�d|�}Gd	d
�d
||�}dd�}d
d�}|�||�|�||�|�||��d�|�||��d�|�||��d�|�||��d�dS)NcSsdSrr
r�r
r
rr��sz&TestSingleDispatch.test_mro.<locals>.gc@seZdZdS)z&TestSingleDispatch.test_mro.<locals>.ANrr
r
r
rr��sr�c@seZdZdS)z&TestSingleDispatch.test_mro.<locals>.CNrr
r
r
r�C�src@seZdZdS)z&TestSingleDispatch.test_mro.<locals>.BNrr
r
r
rr��sr�c@seZdZdS)z&TestSingleDispatch.test_mro.<locals>.DNrr
r
r
r�D�srcSsdS)Nr�r
rIr
r
r�g_A�sz(TestSingleDispatch.test_mro.<locals>.g_AcSsdS)Nr�r
rKr
r
r�g_B�sz(TestSingleDispatch.test_mro.<locals>.g_B)rrrr;)r r�r�rr�rrrr
r
r�test_mro�s
zTestSingleDispatch.test_mrocCsntjdd��}|�t�dd��}|�|d�d�|�|d�d�|�|�t�|�|�|�t�|�t��dS)	NcSsdSrr
r�r
r
rr��sz5TestSingleDispatch.test_register_decorator.<locals>.gcSs
d|fS)Nzint %sr
r�r
r
rr�sz9TestSingleDispatch.test_register_decorator.<locals>.g_intrircr�zint 12)	rrrrdr;r��dispatchr�rkrr
r
r�test_register_decorator�s

z*TestSingleDispatch.test_register_decoratorcCs:tjdd��}|�|jd�tjjdkr6|�|jd�dS)NcSsdS)NZTestr
r�r
r
rr��sz6TestSingleDispatch.test_wrapping_attributes.<locals>.gr�r&zSimple test)rrr;rr
r!r"r)r r�r
r
r�test_wrapping_attributes�s

z+TestSingleDispatch.test_wrapping_attributeszrequires _decimalcCs�tjdd��}|�tj�dd��}t�d�}t�d�}|�||�d�|�||�d�|�tj�d	d��}|�||�d
�|�||�d�dS)NcSsdSrr
r�r
r
rr��sz,TestSingleDispatch.test_c_classes.<locals>.gcSs|jSr	r�r�r
r
rr%�sz,TestSingleDispatch.test_c_classes.<locals>._�Exponent < Emin�Number got rounded)r#)r$cSsdS)N�Too small to care.r
r�r
r
rr%�sr%)rrrrZDecimalExceptionZ	SubnormalZRoundedr;)r r�r%�subnZrndr
r
r�test_c_classes�s






z!TestSingleDispatch.test_c_classescCs�tj}tj}|j|j|j|jg}t|�D]6}|t	|�}|�
|t	|j|j|j|j|j
|jtg�q(|j|j|jtjg}t|�D]:}|tj|�}|�
|tj|j|j|j|j|j
|jtg�q||j|jtg}t|�D]6}|tj|j|jtg�}|�
|tjt	|j|jtg�q�Gdd�dtj�}|j�|�|j|jg}t|�D]J}|||�}|�
|||j|j|jtjt	|j|j|j|j|j
|jtg
��q8Gdd�dtj�}|j|j|j|jg}t|�D]>}|||�}|�
|||jtjt	|j|j|j|j
|jtg
��q�dS)Nc@seZdZdS)z.TestSingleDispatch.test_compose_mro.<locals>.DNrr
r
r
rr
src@seZdZdd�ZdS)z.TestSingleDispatch.test_compose_mro.<locals>.CcSsdSr	r
rFr
r
r�__call__sz7TestSingleDispatch.test_compose_mro.<locals>.C.__call__N�rrrr(r
r
r
rrsr)rar�r�_compose_mro�Sequence�MutableMapping�Mapping�Setrr<r;�
Collection�Sized�Iterable�	Containerr��OrderedDict�ChainMaprk�defaultdict�MutableSequencer�
Reversible�Callable)r r1�mro�basesZhaystackr�rrr
r
r�test_compose_mro�sp
���
�

�z#TestSingleDispatch.test_compose_mrocCs�tj}ddi}dddg}t�dh}t|�}d}tjdd��}|�||�d	�|�||�d	�|�||�d	�|�||�d	�|�||�d	�|�|jd
d��|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�|�|j	d
d��|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�|�tj
dd��|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�|�|jdd��|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�|�|jdd��|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�|�|j
dd��|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�|�|jdd��|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�|�|jdd��|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�|�tdd��|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�|�tdd��|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�|�tdd��|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�|�tdd��|�||�d�|�||�d�|�||�d�|�||�d �|�||�d�|�td!d��|�||�d�|�||�d�|�||�d�|�||�d �|�||�d"�dS)#Nr*r+r%r&r,�r%r&r,cSsdSrr
r�r
r
rr�,sz/TestSingleDispatch.test_register_abc.<locals>.grccSsdS�N�sizedr
r�r
r
rr64r7z6TestSingleDispatch.test_register_abc.<locals>.<lambda>r>cSsdS�N�mutablemappingr
r�r
r
rr6:r7r@cSsdS)NZchainmapr
r�r
r
rr6@r7cSsdS)N�mutablesequencer
r�r
r
rr6Fr7rAcSsdS)N�
mutablesetr
r�r
r
rr6Lr7rBcSsdS�N�mappingr
r�r
r
rr6Rr7cSsdS�N�sequencer
r�r
r
rr6Xr7rFcSsdS�Nr�r
r�r
r
rr6^r7r�cSsdS�Nr<r
r�r
r
rr6dr7r<cSsdS�Nrr
r�r
r
rr6jr7rcSsdS)N�concrete-setr
r�r
r
rr6pr7rJcSsdS)N�
frozen-setr
r�r
r
rr6vr7rKcSsdS)Nr�r
r�r
r
rr6|r7r�)rar�r��	frozensetrrr;rr0r,r4r6�
MutableSetr-r+r.r<rr�r�)r r1rL�lr�r^�tr�r
r
r�test_register_abc%s�


z$TestSingleDispatch.test_register_abcc	Cs�tj}tj}Gdd�dt�}Gdd�d|�}|jjGdd�dt��}Gdd�dt�}Gd	d
�d
|||�}||j|||j||j|tg	}t	|j|j|jg�D]}	|�
|||	d�|�q�|j|j|j|j|jg}
|�
|||
d�|�dS)Nc@seZdZdS)z)TestSingleDispatch.test_c3_abc.<locals>.ANrr
r
r
rr��sr�c@seZdZdd�ZdS)z)TestSingleDispatch.test_c3_abc.<locals>.BcSsdSr<r
rFr
r
rr��sz1TestSingleDispatch.test_c3_abc.<locals>.B.__len__N�rrrr�r
r
r
rr��sr�c@seZdZdS)z)TestSingleDispatch.test_c3_abc.<locals>.CNrr
r
r
rr�src@seZdZdS)z)TestSingleDispatch.test_c3_abc.<locals>.DNrr
r
r
rr�src@seZdZdd�ZdS)z)TestSingleDispatch.test_c3_abc.<locals>.XcSsdSr	r
rFr
r
rr(�sz2TestSingleDispatch.test_c3_abc.<locals>.X.__call__Nr)r
r
r
rr�sr)�abcs)
rar�r�_c3_mror�r2rr8r0rr;r-r1)r r1r9r�r�rrrrUrRZ	many_abcsr
r
r�test_c3_abc�szTestSingleDispatch.test_c3_abccCslGdd�dt�}Gdd�d|d�}Gdd�d|�}tjdd	��}|�|�d
d��}|�}|�||�d�dS)
Nc@seZdZdd�ZdS)z1TestSingleDispatch.test_false_meta.<locals>.MetaAcSsdSr<r
rFr
r
rr��sz9TestSingleDispatch.test_false_meta.<locals>.MetaA.__len__NrQr
r
r
r�MetaA�srUc@seZdZdS)z-TestSingleDispatch.test_false_meta.<locals>.ANrr
r
r
rr��sr���	metaclassc@seZdZdS)z.TestSingleDispatch.test_false_meta.<locals>.AANrr
r
r
r�AA�srXcSsdS)Nzbase Ar
rIr
r
r�fun�sz/TestSingleDispatch.test_false_meta.<locals>.funcSsdS)N�fun Ar
rIr
r
rr%�sz-TestSingleDispatch.test_false_meta.<locals>._rZ)r�rrrr;)r rUr�rXrYr%�aar
r
r�test_false_meta�s

z"TestSingleDispatch.test_false_metac	Cs�tj}tjdd��}Gdd�d|j�}|�}|�||�d�|�|jdd��|�|jdd��|�|jd	d��|�|j	d
d��|�||�d�|j�|�|�||�d�|j�|�|�||�d�|j	�|�|�||�d�Gd
d�d�}|�}|�||�d�|j�|�|�||�d�|j�|�|�
t��}||�W5QRX|�t
|j�d�Gdd�d|j�}|�}	|�||	�d�|j�|�|�||	�d�|j	�|�|�||	�d�tjdd��}
|
�|j�dd��}|
�|j�dd��}|�
t��}|
t�dd���W5QRX|�t
|j�d�Gdd�dtj�}
|j�|
�tjdd��}|�|j�dd��}|�|j�dd��}|
�}|�||�d �Gd!d"�d"�}Gd#d$�d$||j�}|�}|�|
|�d�|j�|�|�|
|�d�Gd%d&�d&�}|�}|�|
|�d�|j�|�|�
t��}|
|�W5QRX|�t
|j�d�Gd'd(�d(|j|�}tjd)d*��}|�|�d+d��}|�|j�d,d��}|�}|�||�d-�|j�|�|�||�d.�dS)/NcSsdSrr
��argr
r
rr��sz0TestSingleDispatch.test_mro_conflicts.<locals>.gc@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.OcSsdSr<r
rFr
r
rr��sz8TestSingleDispatch.test_mro_conflicts.<locals>.O.__len__NrQr
r
r
r�O�sr_rccSsdS)N�iterabler
r]r
r
rr6�r7z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>cSsdS�N�	containerr
r]r
r
rr6�r7cSsdSr=r
r]r
r
rr6�r7cSsdSrGr
r]r
r
rr6�r7r>r�c@seZdZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.PNrr
r
r
r�P�srcr`)z]Ambiguous dispatch: <class 'collections.abc.Container'> or <class 'collections.abc.Iterable'>z]Ambiguous dispatch: <class 'collections.abc.Iterable'> or <class 'collections.abc.Container'>c@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.QcSsdSr<r
rFr
r
rr��sz8TestSingleDispatch.test_mro_conflicts.<locals>.Q.__len__NrQr
r
r
r�Q�srdcSsdSrr
r]r
r
r�h�sz0TestSingleDispatch.test_mro_conflicts.<locals>.hcSsdSr=r
r]r
r
rr%�sz0TestSingleDispatch.test_mro_conflicts.<locals>._cSsdSrar
r]r
r
rr%�scSsdSr<r
r
r
r
rr6�r7)zZAmbiguous dispatch: <class 'collections.abc.Container'> or <class 'collections.abc.Sized'>zZAmbiguous dispatch: <class 'collections.abc.Sized'> or <class 'collections.abc.Container'>c@seZdZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.RNrr
r
r
r�R�srfcSsdSrr
r]r
r
rr+�sz0TestSingleDispatch.test_mro_conflicts.<locals>.icSsdSrCr
r]r
r
rr%�scSsdSrEr
r]r
r
rr%�srFc@seZdZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.SNrr
r
r
r�Ssrgc@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.TcSsdSr<r
rFr
r
rr�sz8TestSingleDispatch.test_mro_conflicts.<locals>.T.__len__NrQr
r
r
r�Tsrhc@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.UcSsdSr<r
rFr
r
rr�
sz8TestSingleDispatch.test_mro_conflicts.<locals>.U.__len__NrQr
r
r
r�U	sric@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.VcSsdSr<r
rFr
r
rr�sz8TestSingleDispatch.test_mro_conflicts.<locals>.V.__len__NrQr
r
r
r�VsrjcSsdSrr
r]r
r
r�jsz0TestSingleDispatch.test_mro_conflicts.<locals>.jcSsdS)Nr�r
r]r
r
rr% scSsdSrar
r]r
r
rr%#sr�rb)rar�rrr0r;rr1r2r.rCr3r�rkr�r5r6r,)r r1r�r_r�rcr?Zre_onerd�qrer%Zre_tworfr+r�rgrhrOri�uZre_threerjrkrr
r
r�test_mro_conflicts�s�
�




�




�



z%TestSingleDispatch.test_mro_conflictscsHddlm}ddl}G�fdd�d|�����t�|d�fdd�����tj}tjdd	��}i}g}|�t	��d�|�||�d
�|�t	��d�|��j
g�|��jtg�|��j
t|jt�|�||�d
�|�t	��d�|��j
g�|��jttg�|��j
t|jt�|��j
t|jt�|��j
t�j
t�|�||�d
�|�||�d
�|��j
ttg�|��jttg�|�td
d��|��j
ttg�|�t	��d�|�||�d
�|�t	��d�|��j
ttg�|��jtttg�|��j
tt�t|j��|�||�d�|�t	��d�|��j
ttg�|��jttttg�|��j
tt�t|j��Gdd�d�}|j�|�|�||�d
�|�||�d�|��j
ttttg�|��jttttg�|�|jdd��|�t	��d�|�||�d�|�t	��d�|��j
ttttg�|��jtttttg�|�||�d�|�t	��d�|��j
ttttg�|��jttttttg�|�||�d�|�||�d�|��j
ttttttg�|��jttttttg�|�t�|�t�|��j
ttttttttg�|��jttttttg�|j�|�|�t	��d�|�||�d�|�t	��d�|�|jdd��|�t	��d�|�||�d�|�t	��d�|�||�d�|�t	��d�|�tdd��|�||�d�|�||�d�|��|�t	��d�W5QRXdS)Nr)�UserDictcs6eZdZ��fdd�Zdd�Zdd�Zdd�Z�ZS)	z?TestSingleDispatch.test_cache_invalidation.<locals>.TracingDictcs"t�|�j||�g|_g|_dSr	)�superr��set_ops�get_ops)r rr�)�TracingDictr	r
rr�1szHTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__init__cSs|j|}|j�|�|Sr	)rnrrr*)r r��resultr
r
rr�5s
zKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__getitem__cSs|j�|�||j|<dSr	)rqr*rn)r r�r�r
r
r�__setitem__9szKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__setitem__cSs|j��dSr	)rnr�rFr
r
rr�<szETestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.clear)rrrr�r�rur��
__classcell__r
)rs)r	rrs0srs�WeakKeyDictionarycs�Sr	r
r
)�tdr
rr6@r7z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>cSsdSrr
r]r
r
rr�Bsz5TestSingleDispatch.test_cache_invalidation.<locals>.grcr%r&cSsdSrIr
r]r
r
rr6Xr7rc@seZdZdS)z5TestSingleDispatch.test_cache_invalidation.<locals>.XNrr
r
r
rrgsrcSsdSr=r
r]r
r
rr6or7r>cSsdSr?r
r]r
r
rr6�r7r@cSsdSrHr
r]r
r
rr6�r7r<)raro�weakrefrZ	swap_attrr�rrr;r)rrrqr<rn�registryr�rr�
_find_implr,r0r rM�_clear_cache)r roryr1r�rLrNrr
)rsrxr�test_cache_invalidation,s�
��

�z*TestSingleDispatch.test_cache_invalidationcCs�tjdd��}|jtjjd�dd��}|jdd�dd��}|�|d�d�|�|d	d
i�d�|�|d
dd
g�d�|�|d�d�|�|d�d�|�t�Gdd�d��}|�|d�d�dS)NcSsdSrr
r]r
r
rr+�sz.TestSingleDispatch.test_annotations.<locals>.ir]cSsdSrCr
r]r
r
rr%�s�.TestSingleDispatch.test_annotations.<locals>._zcollections.abc.SequencecSsdSrEr
r]r
r
rr%�srcr*r%rDr&r,rFr<rkc@seZdZdd�Zdd�ZdS)r~cSs
||_dSr	r]�r r^r
r
rr��sz7TestSingleDispatch.test_annotations.<locals>._.__init__cSs
|j|kSr	r]rr
r
rrj�sz5TestSingleDispatch.test_annotations.<locals>._.__eq__N)rrrr�rjr
r
r
rr%�sr%)rrrrar�r-r;rk)r r+r%r
r
r�test_annotations�s
z#TestSingleDispatch.test_annotationscCs�Gdd�d�}|�}|�d�|�|jd�|�}|�t|d��|�d�|�|jd�|�}|�t|d��|�d�|�|jd	�|�}|�t|d��dS)
Nc@s>eZdZejdd��Ze�e�dd��Ze�e	�dd��ZdS)z2TestSingleDispatch.test_method_register.<locals>.AcSs
d|_dSrr]rr
r
rrO�sz4TestSingleDispatch.test_method_register.<locals>.A.tcSs
d|_dS�Nrdr]rr
r
rr%�sz4TestSingleDispatch.test_method_register.<locals>.A._cSs
d|_dS�Nrkr]rr
r
rr%�sN�
rrrr�singledispatchmethodrOrrdr%rkr
r
r
rr��s

r�rrdr^rirk�rc)rOr;r^r�r�)r r�r*r[r
r
r�test_method_register�s



z'TestSingleDispatch.test_method_registercCsJGdd�d�}|�}|�|�d��|�|�d��|�|�d�d�dS)Nc@sJeZdZejedd���Ze�e�edd���Z	e�e
�edd���Z	dS)z8TestSingleDispatch.test_staticmethod_register.<locals>.AcSs|Sr	r
r]r
r
rrO�sz:TestSingleDispatch.test_staticmethod_register.<locals>.A.tcSs
t|t�Sr	)ryrdr]r
r
rr%�sz:TestSingleDispatch.test_staticmethod_register.<locals>.A._cSs
t|t�Sr	)ryrkr]r
r
rr%�sN)rrrrr�r�rOrrdr%rkr
r
r
rr��sr�rrir�)r9rOr;�r r�r*r
r
r�test_staticmethod_register�s

z-TestSingleDispatch.test_staticmethod_registercCsNGdd�d�}|�|�d�jd�|�|�d�jd�|�|�d�jd�dS)	Nc@sReZdZdd�Zejedd���Ze�e	�edd���Z
e�e�edd���Z
dS)	z7TestSingleDispatch.test_classmethod_register.<locals>.AcSs
||_dSr	r]rr
r
rr��sz@TestSingleDispatch.test_classmethod_register.<locals>.A.__init__cSs|d�Srr
�r�r^r
r
rrO�sz9TestSingleDispatch.test_classmethod_register.<locals>.A.tcSs|d�Sr�r
r�r
r
rr%�sz9TestSingleDispatch.test_classmethod_register.<locals>.A._cSs|d�Sr�r
r�r
r
rr%�sN)rrrr�rr�r�rOrrdr%rkr
r
r
rr��sr�rrdrirkr�rc)r;rOr^rnr
r
r�test_classmethod_register�sz,TestSingleDispatch.test_classmethod_registercCs~Gdd�d�}|j�t�tdd���}|j�t�tdd���}|�|�d�jd�|�|�d�jd	�|�|�d
�jd�dS)Nc@s&eZdZdd�Zejedd���ZdS)z4TestSingleDispatch.test_callable_register.<locals>.AcSs
||_dSr	r]rr
r
rr��sz=TestSingleDispatch.test_callable_register.<locals>.A.__init__cSs|d�Srr
r�r
r
rrO�sz6TestSingleDispatch.test_callable_register.<locals>.A.tN)rrrr�rr�r�rOr
r
r
rr��sr�cSs|d�Sr�r
r�r
r
rr%�sz4TestSingleDispatch.test_callable_register.<locals>._cSs|d�Sr�r
r�r
r
rr%�srrdrirkr�rc)rOrrdr�rkr;r^)r r�r%r
r
r�test_callable_register�s	

z)TestSingleDispatch.test_callable_registercCs$Gdd�dtj�}|�|jj�dS)Nc@s eZdZejejdd���ZdS)zATestSingleDispatch.test_abstractmethod_register.<locals>.AbstractcSsdSr	r
r�r
r
rr�	szETestSingleDispatch.test_abstractmethod_register.<locals>.Abstract.addN)rrrrr�r�r�r�r
r
r
rr�		sr�)r�r�r9r�r�)r r�r
r
r�test_abstractmethod_register	sz/TestSingleDispatch.test_abstractmethod_registercCsNGdd�d�}|�}|�|�d�d�|�|�d�d�|�|�d�d�dS)	Nc@sBeZdZejdd��Zejed�dd��Zeje	d�dd��ZdS)z4TestSingleDispatch.test_type_ann_register.<locals>.AcSsdSrr
rr
r
rrO	sz6TestSingleDispatch.test_type_ann_register.<locals>.A.tr]cSsdSr�r
rr
r
rr%	sz6TestSingleDispatch.test_type_ann_register.<locals>.A._cSsdSr�r
rr
r
rr%	sNr�r
r
r
rr�	s
r�rrdrirkr�rc)r;rOr�r
r
r�test_type_ann_register	s

z)TestSingleDispatch.test_type_ann_registerc	Cs"d}d}tjdd��}|�t��}|�d�dd��}W5QRX|�t|j��|d��|�t|j��	|��|�t��}|jd	d��}W5QRX|�t|j��|d
��|�t|j��	|��|�t�� }|jt
jtd�dd��}W5QRX|�t|j��d
��|�t|j��	d��dS)Nz(Invalid first argument to `register()`: zS. Use either `@register(some_class)` or plain `@register` on an annotated function.cSsdSrr
r]r
r
rr+)	sz8TestSingleDispatch.test_invalid_registrations.<locals>.ir0cSsdS)NzI annotated with a non-typer
r]r
r
rr%-	sz8TestSingleDispatch.test_invalid_registrations.<locals>._Z42cSsdS)NzI forgot to annotater
r]r
r
rr%3	szB<function TestSingleDispatch.test_invalid_registrations.<locals>._r]cSsdS)Nz%I annotated with a generic collectionr
r]r
r
rr%<	szInvalid annotation for 'arg'.z$typing.Iterable[str] is not a class.)rrrCrDrr9rkr�r�endswith�typingr1)r Z
msg_prefixZ
msg_suffixr+�excr%r
r
r�test_invalid_registrations#	s4�
� ��z-TestSingleDispatch.test_invalid_registrationsc	Cs4tjdd��}d}|�t|��|�W5QRXdS)NcWsdSr	r
r�r
r
rr^K	sz>TestSingleDispatch.test_invalid_positional_argument.<locals>.fz)f requires at least 1 positional argument)rr�assertRaisesRegexrD)r r^�msgr
r
r� test_invalid_positional_argumentJ	s

z3TestSingleDispatch.test_invalid_positional_argumentN)rrrrrr!r"r�
skipUnlessrrZcpython_onlyr'r;rPrTr\rnr}r�r�r�r�r�r�r�r�r�r
r
r
rr�s.	
6^f
'rc@s&eZdZdZdd�Zejdd��ZdS)�CachedCostItemr%cCst��|_dSr	)r��RLock�lockrFr
r
rr�V	szCachedCostItem.__init__c	Cs&|j�|jd7_W5QRX|jS�Nr%)r��_costrFr
r
r�costY	szCachedCostItem.costN)rrrr�r�r��cached_propertyr�r
r
r
rr�S	sr�c@s"eZdZdZdd�Ze�e�ZdS)�OptionallyCachedCostItemr%cCs|jd7_|jSr��r�rFr
r
r�get_costd	sz!OptionallyCachedCostItem.get_costN)rrrr�r�r�r��cached_costr
r
r
rr�a	sr�c@s"eZdZdd�Zejdd��ZdS)�CachedCostItemWaitcCsd|_t��|_||_dSr�)r�r�r�r��event)r r�r
r
rr�n	s
zCachedCostItemWait.__init__c	Cs2|j�d�|j�|jd7_W5QRX|jSr�)r�r�r�r�rFr
r
rr�s	szCachedCostItemWait.costN)rrrr�r�r�r�r
r
r
rr�l	sr�c@s&eZdZdZdd�Zejdd��ZdS)�CachedCostItemWithSlotsr�cCs
d|_dSr�r�rFr
r
rr�~	sz CachedCostItemWithSlots.__init__cCstd��dS)Nz!never called, slots not supportedr2rFr
r
rr��	szCachedCostItemWithSlots.costN)rrr�	__slots__r�r�r�r�r
r
r
rr�{	sr�c@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�TestCachedPropertycCs&t�}|�|jd�|�|jd�dSr�)r�r;r��r �itemr
r
r�test_cached�	szTestCachedProperty.test_cachedcCsFt�}|�|��d�|�|jd�|�|��d�|�|jd�dS)Nr&r,r-)r�r;r�r�r�r
r
r�1test_cached_attribute_name_differs_from_func_name�	s
zDTestCachedProperty.test_cached_attribute_name_differs_from_func_namec	s~t��}t|��d}t��}t�d�z8�fdd�t|�D�}t�|��|�	�W5QRXW5t�|�X|�
�jd�dS)Nr,r�cs g|]}tj�fdd�d��qS)cs�jSr	)r�r
�r�r
rr6�	r7z=TestCachedProperty.test_threaded.<locals>.<listcomp>.<lambda>r�r�r�r�r
rr��	s�z4TestCachedProperty.test_threaded.<locals>.<listcomp>r&)r�r�r�r
r�r�rlrr�r�r;r�)r ZgoZnum_threadsr�r�r
r�r�
test_threaded�	s

�z TestCachedProperty.test_threadedc	Cs(t�}|�td��|jW5QRXdS)NzWNo '__dict__' attribute on 'CachedCostItemWithSlots' instance to cache 'cost' property.)r�r�rDr�r�r
r
r�test_object_with_slots�	s�z)TestCachedProperty.test_object_with_slotsc	CsDGdd�dt�}Gdd�d|d�}|�td��|jW5QRXdS)Nc@seZdZejdd��ZdS)z6TestCachedProperty.test_immutable_dict.<locals>.MyMetacSsdS)NTr
rFr
r
r�prop�	sz;TestCachedProperty.test_immutable_dict.<locals>.MyMeta.propN)rrrr�r�r�r
r
r
r�MyMeta�	sr�c@seZdZdS)z7TestCachedProperty.test_immutable_dict.<locals>.MyClassNrr
r
r
r�MyClass�	sr�rVzkThe '__dict__' attribute on 'MyMeta' instance does not support item assignment for caching 'prop' property.)r�r�rDr�)r r�r�r
r
r�test_immutable_dict�	s�z&TestCachedProperty.test_immutable_dictc	CsD|�t��}Gdd�d�}W5QRX|�t|jj�ttd���dS)Nc@seZdZejdd��ZeZdS)zKTestCachedProperty.test_reuse_different_names.<locals>.ReusedCachedPropertycSsdSr	r
rFr
r
rr*�	szMTestCachedProperty.test_reuse_different_names.<locals>.ReusedCachedProperty.aN)rrrr�r�r*r+r
r
r
r�ReusedCachedProperty�	s
r�zLCannot assign the same cached_property to two different names ('a' and 'b').)rCr3r;rkr�r�rD)r �ctxr�r
r
r�test_reuse_different_names�	s

�z-TestCachedProperty.test_reuse_different_namescstd�tj�fdd���G�fdd�d�}G�fdd�d�}|�}|�}|�|jd�|�|jd	�|�|jd�dS)
Nrcs�d7��Sr�r
)Z_self)�counterr
r�_cp�	sz4TestCachedProperty.test_reuse_same_name.<locals>._cpcseZdZ�ZdS)z2TestCachedProperty.test_reuse_same_name.<locals>.AN�rrr�cpr
�r�r
rr��	sr�cseZdZ�ZdS)z2TestCachedProperty.test_reuse_same_name.<locals>.BNr�r
r�r
rr��	sr�r%r&)r�r�r;r�)r r�r�r*r+r
)r�r�r�test_reuse_same_name�	sz'TestCachedProperty.test_reuse_same_namec	CsFt�dd��}Gdd�d�}||_|�td��|�jW5QRXdS)NcSsdSr	r
)r�r
r
rr6�	r7z=TestCachedProperty.test_set_name_not_called.<locals>.<lambda>c@seZdZdS)z8TestCachedProperty.test_set_name_not_called.<locals>.FooNrr
r
r
r�Foo�	sr�zGCannot use cached_property instance without calling __set_name__ on it.)r�r�r�r�rD)r r�r�r
r
r�test_set_name_not_called�	s�z+TestCachedProperty.test_set_name_not_calledcCs|�tjtj�dSr	)ZassertIsInstancer�r�r�r�rFr
r
r�test_access_from_class�	sz)TestCachedProperty.test_access_from_classcCs|�tjjd�dS)NzThe cost of the item.)r;r�r�rrFr
r
r�test_doc�	szTestCachedProperty.test_docN)
rrrr�r�r�r�r�r�r�r�r�r�r
r
r
rr��	s
r��__main__)Gr�r�ra�collections.abcr��	itertoolsrr��randomrr
r�rr�r�r�rZ
unittest.mockryr�
contextlibrZimport_fresh_moduler�r�r�contextmanagerrrrr�rrr<r#r$r�ZTestCaser�r�r8r�r�r�r�r�r�r#r'rCrDrErerfrgrmr�r�r�rrrrrr�r�r�r�r�r�mainr
r
r
r�<module>s�
F
3
r>O
S
L	u

6r


F1le Man4ger