Uname:Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64

403WebShell
403Webshell
Server IP : 3.111.61.48  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64
User : ubuntu ( 1000)
PHP Version : 8.2.31
Disable Function : exec,passthru,shell_exec,system
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3.10/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3.10/test/__pycache__/test_functools.cpython-310.pyc
o

�9j���@s�ddlZddlZddlZddlZddlZddlmZddlZddlm	Z	ddl
Z
ddlmZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZddlZddlmZddlmZddlmZddlZejd	d
gd�Ze�d	�Zejdd
gd�Z ej!dd��Z"dd�Z#dd�Z$Gdd�de%�Z&Gdd�de%�Z'Gdd�de(�Z)Gdd�d�Z*e�+ed�Gdd�de*ej,��Z-Gd d!�d!e*ej,�Z.er�Gd"d#�d#ej/�Z0Gd$d%�d%ej/�Z1e�+ed�Gd&d'�d'e-��Z2Gd(d)�d)e.�Z3Gd*d+�d+ej,�Z4Gd,d-�d-ej,�Z5Gd.d/�d/e5�Z6Gd0d1�d1�Z7e�+ed�Gd2d3�d3e7ej,��Z8Gd4d5�d5e7ej,�Z9Gd6d7�d7�Z:e�+ed�Gd8d9�d9e:ej,��Z;Gd:d;�d;e:ej,�Z<Gd<d=�d=ej,�Z=ej>Gd>d?�d?��Z?Gd@dA�dA�Z@GdBdC�dC�ZAe�B�dDdE��ZCe�B�dFdG��ZDGdHdI�dIeAej,�ZEGdJdK�dKeAej,�ZFGdLdM�dMej,�ZGGdNdO�dO�ZHGdPdQ�dQ�ZIGdRdS�dS�ZJGdTdU�dU�ZKGdVdW�dWej,�ZLeMdXk�r�e�N�dSdS)Y�N)�permutations)�choice)�support)�proxy)�
import_helper)�threading_helper)�assert_python_ok�	functools�
_functools)�blocked�decimal�_decimal)�freshc	cs:�tj|}|tj|<zdVW|tj|<dS|tj|<w�N)�sys�modules)�name�replacement�original_module�r�*/usr/lib/python3.10/test/test_functools.py�replaced_module"s�

rcO�||fS)z,capture all positional and keyword argumentsr)�args�kwrrr�capture+�rcCs|j|j|j|jfS)z* return the signature of a partial object )�funcr�keywords�__dict__)�partrrr�	signature0sr!c@�eZdZdS)�MyTupleN��__name__�
__module__�__qualname__rrrrr#4�r#c@�eZdZdd�ZdS)�BadTuplecCst|�t|�Sr)�list��self�otherrrr�__add__8�zBadTuple.__add__N)r%r&r'r/rrrrr*7�r*c@r")�MyDictNr$rrrrr2;r(r2c@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	Csx|jtddddd�}|�t|��|�|dddd	d
�dtddd	d�f�|�td
d��}|�t|gd���gd��dS)N���
���a�b����(�r:�c�r4r5r;r<�r9r:r@cSs|dS)Nr6r��xrrr�<lambda>F�z1TestPartial.test_basic_examples.<locals>.<lambda>)r6r7r=r>)�partialr�
assertTrue�callable�assertEqual�dict�mapr+�r-�prrr�test_basic_examplesAs� zTestPartial.test_basic_examplescCsJ|jtddddd�}|�|jt�|�|jd�|�|jtddd��dS)Nr4r5r6r7r8�r4r5)rGrrJrrrrKrMrrr�test_attributesIszTestPartial.test_attributescCsB|�t|j�z|�d��Wn
tyYdSw|�d�dS)Nr5z%First arg not checked for callability)�assertRaises�	TypeErrorrG�fail�r-rrr�test_argument_checkingPs�z"TestPartial.test_argument_checkingcCsdddd�}ddi}|j|dd�}|�|di|��d�|�|ddi�|d	d
�|�|ddi�dS)
Nr6r7cS�|Srrr8rrrr[�zBTestPartial.test_protection_of_callers_dict_argument.<locals>.funcr9r;��r9��r:)r6r7r)rGrJ)r-r�drNrrr�(test_protection_of_callers_dict_argumentYs

z4TestPartial.test_protection_of_callers_dict_argumentcCsRddi}|jtfi|��}|�|�dddif�d|d<|�|�dddif�dS)Nr9r;rrY�rGrrJ)r-r]rNrrr�test_kwargs_copyds
zTestPartial.test_kwargs_copycCsl|�t�}|�|�dif�|�|dd�dif�|�tdd�}|�|�dif�|�|dd�dif�dS)Nrr4r5rPr;r<rAr_rMrrr�test_arg_combinationsms
z!TestPartial.test_arg_combinationscCs�|�t�}|�|ji�|�|�dif�|�|dd�dddif�|jtdd�}|�|jddi�|�|�dddif�|�|dd�dddd�f�|�|ddd�dddd�f�dS)	Nrr4rZr9r5r\r8r;)rGrrJrrMrrr�test_kw_combinationsws
"z TestPartial.test_kw_combinationscCsJdD] }|jtg|�R�}|d}|d�\}}|�||ko |ik�qdS)N)r�r�rr4)rr4r5)rr4r5r;rCrD�rGrrH)r-rrN�expected�got�emptyrrr�test_positional�s�zTestPartial.test_positionalcCsJdD] }|jt|d�}|dd�}|dd�\}}|�||ko |dk�qdS)N)r9rNg@rZ)r9rDrCrre)r-r9rNrfrhrgrrr�test_keyword�s
�zTestPartial.test_keywordcCsd|jtddd�}|ddd�\}}|�|dko|ddd�k�|�\}}|�|dko.|d	dik�dS)
Nrr4rZr5r\rdr8rcr9re)r-rN�args1�kw1�args2�kw2rrr�test_no_side_effects�s

z TestPartial.test_no_side_effectscCsfdd�}|�t|�|dd��|�t|�|d�d�|�t|�|�dd�|�t|j|dd�d�dS)NcSs||dSrr�rD�yrrr�f��z-TestPartial.test_error_propagation.<locals>.fr4r)rq)rR�ZeroDivisionErrorrG�r-rrrrr�test_error_propagation�s
z"TestPartial.test_error_propagationcCsF|jtdd�}t|�}|�|j|j�d}t��|�tt	|d�dS)N�)�baser)
rG�intrrJrr�
gc_collectrR�ReferenceError�getattr�r-rrrNrrr�test_weakref�szTestPartial.test_weakrefcCsPttttd���}|�tjd�}|�||�d�|�dj�}|�||�d�dS)Nr6��
0123456789)r+rL�str�rangerG�joinrJ)r-�datar�rrr�#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)rGr!rJ)r-rG�inner�nested�flatrrr�test_nested_optimization�s

z$TestPartial.test_nested_optimizationcCs:|j}dd�}||d�}||d�}d|_|�|jd�dS)NcSrWrrr�rrr�foo�rXz;TestPartial.test_nested_partial_with_attribute.<locals>.foo�first�second�spam)rG�new_attrrJ)r-rGr�rN�p2rrr�"test_nested_partial_with_attribute�s

z.TestPartial.test_nested_partial_with_attributecs(t�t�f}d�dd�|D���t�t�d�}d�|�d�|�g}|jtjtjfvr-d�n|jj�|�t�}|���dt�d	�t	|��|jtg|�R�}|���dt�d��d	�t	|��|jtfi|��}|�
t	|��fd
d�|D��|jtg|�Ri|��}|�
t	|���fdd�|D��dS)
N�, css�|]}t|�VqdSr)�repr)�.0r9rrr�	<genexpr>�s�z(TestPartial.test_repr.<locals>.<genexpr>r8za={a!r}, b={b!r}zb={b!r}, a={a!r}�functools.partial�(�)cs"g|]
}��dt�d|�d��qS�r�r�r��r�r��kwargs_repr)rrr�
<listcomp>�s�z)TestPartial.test_repr.<locals>.<listcomp>c
s(g|]}��dt�d��d|�d��qSr�r�r���	args_reprrrrr��s �)�objectr��
format_maprG�c_functools�py_functoolsr%rrJr��assertIn)r-r�kwargs�kwargs_reprsrrrr�r�	test_repr�s2�
"

��
��zTestPartial.test_reprcCsF|jtjtjfvrd}n|jj}|�t�}|�|diif�z|�t|�d|f�W|�tdiif�n
|�tdiif�w|�t�}|�t|fiif�z|�t|�d|tf�W|�tdiif�n
|�tdiif�w|�t�}|�tdd|iif�z|�t|�d|tf�W|�tdiif�dS|�tdiif�w)Nr�rz%s(...)z%s(%r, ...)r9z
%s(%r, a=...))rGr�r�r%r�__setstate__rJr�)r-rrrrrr�test_recursive_repr�s$
(
(
*zTestPartial.test_recursive_reprcCs�|���3|jtdgdgd�}g|_ttjd�D]}t�t�||��}|�	t|�t|��qWd�dS1s:wYdS)Nr�Tr�r4)
�AllowPicklerGr!�attrr��pickle�HIGHEST_PROTOCOL�loads�dumpsrJ�r-rr�proto�f_copyrrr�test_pickle�s
�"�zTestPartial.test_picklecCsl|jtdgdgd�}g|_t�|�}|�t|�t|��|�|j|j�|�|j|j�|�|j|j�dSr�)rGr!r��copyrJ�assertIsrr�r-rrr�rrr�	test_copys
zTestPartial.test_copycCs�|jtdgdgd�}g|_t�|�}|�t|�t|��|�|j|j�|�|j|j�|�|jd|jd�|�|j|j�|�|jd|jd�dS)Nr�Tr�rr�)	rGr!r�r��deepcopyrJ�assertIsNotrrr�rrr�
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�r4r6rZ�r�r5r7r\rPr8r:r)r5)rGr!r�rrKrJrurrr�
test_setstates$

�zTestPartial.test_setstatec	Cs�|�t�}|�t|jtdif�|�t|jtdiidf�|�t|jtdidg�|�t|jddidf�|�t|jtdidf�|�t|jtgidf�|�t|jtdgdf�dS)Nr)rGr!rRrSr�rrurrr�test_setstate_errors2s
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�r6rZr4r5r9rrP)rGr!r�rr#r2rJrKr��type�tupler*)r-rr�s�rrrr�test_setstate_subclasses<s"
z$TestPartial.test_setstate_subclassescCs|����|�t�}|�|diif�z0ttjd�D]}|�t��t�	||�Wd�n1s3wYqW|�tdiif�n
|�tdiif�w|�t�}|�t|fiif�z<ttjd�D])}t�
t�	||��}z|�|jd|�W|�tdiif�qe|�tdiif�wW|�tdiif�n
|�tdiif�w|�t�}|�tdd|iif�z<ttjd�D])}t�
t�	||��}z|�|j
d|�W|�tdiif�q�|�tdiif�wW|�tdiif�n
|�tdiif�wWd�dS1�swYdS)Nrr4rr9)r�rGrr�r�r�r�rR�RecursionErrorr�r�r�rrr�rrr�test_recursive_picklePs@

���(
(�(
(�*$�z!TestPartial.test_recursive_picklecCs.Gdd�d�}|�t�}|�t|j|��dS)Nc@�eZdZdd�Zdd�ZdS)z7TestPartial.test_setstate_refcount.<locals>.BadSequencecS�dS)Nr<rrUrrr�__len__vrXz?TestPartial.test_setstate_refcount.<locals>.BadSequence.__len__cSs0|dkrtS|dkrttd��S|dvriSt�)Nrr4i@B)r5r;)�maxr�r��
IndexError)r-�keyrrr�__getitem__xszCTestPartial.test_setstate_refcount.<locals>.BadSequence.__getitem__N)r%r&r'r�r�rrrr�BadSequenceu�r�)rGr�rRrSr�)r-r�rrrrr�test_setstate_refcountts
z"TestPartial.test_setstate_refcountN)r%r&r'rOrQrVr^r`rarbrirjrorvr~r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr3?s4		
	
$r3z requires the C _functools modulec@s<eZdZer	ejZGdd�d�Zdd�Zdd�Zdd�Zd	S)
�TestPartialCc@r�)zTestPartialC.AllowPicklecCrWrrrUrrr�	__enter__�rXz"TestPartialC.AllowPickle.__enter__cCr��NFr�r-r��value�tbrrr�__exit__�rXz!TestPartialC.AllowPickle.__exit__N)r%r&r'r�r�rrrrr��r�r�c
Cs�|jtddddd�}|�tt|dt�|�tt|dd�|�tt|d	tddd��|�t�}z|`Wn
t	y<YdSw|�
d
�dS)Nr4r5r6r7r8rrrPrz-partial object allowed __dict__ to be deleted)rGrrR�AttributeError�setattrrLrK�hexrrSrTrMrrr�test_attributes_unwritable�s
�z'TestPartialC.test_attributes_unwritablecCsj|�t�}d|jd<t|�}|�d|�|�d|�|�t��|�Wd�dS1s.wYdS)Nr�i��1234z'value')rGrrr�r�rRrS)r-rNr�rrr�'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)N�sth2�astr)rrU�rNrr�__str__�szHTestPartialC.test_keystr_replaces_value.<locals>.MutatesYourDict.__str__N)r%r&r'r�rr�rr�MutatesYourDict��r��sthr�z['sth'])rGrr�rr�r�)r-r�r�rr�r�test_keystr_replaces_value�s
z'TestPartialC.test_keystr_replaces_valueN)	r%r&r'r�rGr�r�r�r�rrrrr��s
r�c@s eZdZejZGdd�d�ZdS)�
TestPartialPyc@�$eZdZdd�Zdd�Zdd�ZdS)zTestPartialPy.AllowPicklecCstdt�|_dS)Nr	)rr��_cmrUrrr�__init__�r0z"TestPartialPy.AllowPickle.__init__cCs
|j��Sr)r�r�rUrrrr���
z#TestPartialPy.AllowPickle.__enter__cCs|j�|||�Sr)r�r�r�rrrr��r0z"TestPartialPy.AllowPickle.__exit__N)r%r&r'r�r�r�rrrrr��sr�N)r%r&r'r�rGr�rrrrr��sr�c@r")�CPartialSubclassNr$rrrrr��r(r�c@r")�PyPartialSubclassNr$rrrrr��r(r�c@seZdZereZdZdS)�TestPartialCSubclassN)r%r&r'r�r�rGr�rrrrr��sr�c@seZdZeZdS)�TestPartialPySubclassN)r%r&r'r�rGrrrrr���r�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.Ar4r5rZr;r<r\�r-rrY��r@r[��	�r]N)r%r&r'r	�
partialmethodr�nothing�
positionalr�both�
spec_keywordsr�rG�over_partial�staticmethod�static�classmethod�clsrrrr�A�s
rcCsz|�|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)NrYr�r�r@r4r9r5)r9r@r;r:r<r?r�)rJr9r�r�rr�rr�rUrrrra�s$"& $("$( $&*.$z'TestPartialMethod.test_arg_combinationscCs�|�|j��|jddfif�|�|j�d�|jdddfif�|�|jjdd�|jddfddif�|�|jjddd�|jdddfddif�|�|jj|jddd�|jdddfddif�dS)Nr4rYr�r[r�r])rJr9r�rrUrrr�test_nesteds
"&*2zTestPartialMethod.test_nestedcCs�|�|j��|jdfddif�|�|j�d�|jddfddif�|�|jjdd�|jdfddd�f�|�|jjddd�|jddfddd�f�|�|jj|jddd�|jddfddd�f�dS)Nr[r@r�rYr�r��r@r])rJr9r�rrUrrr�test_over_partials
 $&*2z#TestPartialMethod.test_over_partialcCs`|j}|�|jj|�|�|jj|�|�|jj|�|�|jj|j�|�|jjj|j�dSr)r9r�r��__self__r�r�rr�r-�objrrr�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�r�r�rr9rrrr�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�Wd�n1s�wYqdS)N�r	)r�rY)r�rYr�r�r]r�r�r)rr9�subTestrJrrrrrr�test_descriptors s "(���z"TestPartialMethod.test_descriptorscCsL|�|jjdd�|jfddif�|�|jj|jdd�|jfddif�dS)Nr;rZr9)rJr9rrrUrrr�test_overriding_keywords-s"*z*TestPartialMethod.test_overriding_keywordscCs�|�t��Gdd�dt�}Wd�n1swY|�t��Gdd�d�}Wd�n1s4wY|�t��Gdd�d�}Wd�dS1sQwYdS)Nc@seZdZe�dd�ZdS)�.TestPartialMethod.test_invalid_args.<locals>.BNr4�r%r&r'r	r��methodrrrr�B3r�rc@seZdZe��ZdS)rNrrrrrr6r1c@seZdZejedd�ZdS)rr4)rr9N)r%r&r'r	r�rrrrrrr9s)rRrSr�)r-rrrr�test_invalid_args1s��"�z#TestPartialMethod.test_invalid_argscCs$|�tt|j�d�d�t��dS)Nr�z#functools.partialmethod({}, 3, b=4))rJr��varsr�formatrrUrrrr�<s�zTestPartialMethod.test_reprcCslGdd�dtj�}|�|jj�|�|jj�|jj|jj|jj	|jj
|jjfD]}|�t
|dd��q(dS)Nc@s&eZdZejdd��Ze�ed�ZdS)z1TestPartialMethod.test_abstract.<locals>.AbstractcS�dSrr�r-rDrqrrr�addC�z5TestPartialMethod.test_abstract.<locals>.Abstract.addrYN)	r%r&r'�abc�abstractmethodrr	r��add5rrrr�AbstractAs
r �__isabstractmethod__F)r�ABCMetarHrr!rrrrr�r�r�rr|)r-r rrrr�
test_abstract@s&�zTestPartialMethod.test_abstractcCs.dd�}t�|d�}|�|d�|dd��dS)NcS�||Srrr8rrrrrP�z1TestPartialMethod.test_positional_only.<locals>.fr4r5)r	rGrJr}rrr�test_positional_onlyOsz&TestPartialMethod.test_positional_onlyN)r%r&r'r�rr9rarrr
r
rrrr�r#r&rrrrr��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]$}t||�}t||�}|D]}|dkr,|dkr,q!|�||||�q!q|�|j|�dS)Nr�__wrapped__)r�r|r()	r-�wrapper�wrapped�assigned�updatedr�wrapper_attr�wrapped_attrr�rrr�
check_wrapperYs

�zTestUpdateWrapper.check_wrappercCs4ddd�}d|_d|_dd	d
�}t�||�||fS)
Nr9�This is a new annotationcSr���This is a testNrrZrrrrrmrz,TestUpdateWrapper._default_update.<locals>.f�This is also a testzThis is a bald faced lier:�This is the prior annotationcSrrrr\rrrr)rrXz2TestUpdateWrapper._default_update.<locals>.wrapper)r9r0)r:r4)r�r(r	�update_wrapper�r-rrr)rrr�_default_updatels

z!TestUpdateWrapper._default_updatecCsv|��\}}|�||�|�|j|�|�|jd�|�|j|j�|�|jd�|�|jdd�|�	d|j�dS)Nrrr3r9r0r:)
r7r/r�r(rJr%r'r��__annotations__�assertNotIn�r-r)rrrrr�test_default_updatewsz%TestUpdateWrapper.test_default_updater5�)Docstrings are omitted with -O2 and abovecC�|��\}}|�|jd�dS�Nr2�r7rJ�__doc__r:rrr�test_default_update_doc��z)TestUpdateWrapper.test_default_update_doccCs�dd�}d|_dd�}t�||dd�|�||dd�|�|jd�|�|j|j�|�|jd�|�|j	i�|�
t|d��dS)	NcSr�r1rrrrrrr�rz+TestUpdateWrapper.test_no_update.<locals>.fr3cSrrrrrrrr)�rXz1TestUpdateWrapper.test_no_update.<locals>.wrapperrr)r�)r�r	r5r/rJr%�assertNotEqualr'r@r8rrr6rrr�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)
NcSrrrrrrrrr�rXz2TestUpdateWrapper.test_selective_update.<locals>.f�This is a different testr4r5r;rBcSrrrrrrrr)�rXz8TestUpdateWrapper.test_selective_update.<locals>.wrapperr���	dict_attrr))r�rKrGr	r5r/rJr%rCr'r@�r-rrr)�assign�updaterrr�test_selective_update�sz'TestUpdateWrapper.test_selective_updatecCs�dd�}dd�}i|_d}d}t�||||�|�d|j�|�|ji�|`|�t��t�||||�Wd�n1s?wYd|_|�t��t�||||�Wd�dS1s`wYdS)	NcSrrrrrrrrr�rXz4TestUpdateWrapper.test_missing_attributes.<locals>.fcSrrrrrrrr)�rXz:TestUpdateWrapper.test_missing_attributes.<locals>.wrapperr�rFr�r4)rGr	r5r9rrJrRr�rHrrr�test_missing_attributes�s �"�z)TestUpdateWrapper.test_missing_attributescCsFdd�}t�|t�|�|jd�|�|j�d��|�|ji�dS)NcSrrrrrrrr)�rXz6TestUpdateWrapper.test_builtin_update.<locals>.wrapperr�zmax()	r	r5r�rJr%rHr@�
startswithr8)r-r)rrr�test_builtin_update�s
z%TestUpdateWrapper.test_builtin_updateN)r%r&r'r	�WRAPPER_ASSIGNMENTS�WRAPPER_UPDATESr/r7r;�unittest�skipIfr�flags�optimizerArDrKrLr�requires_docstringsrNrrrrr'Ws$
�
�
�r'c@sHeZdZdd�Zdd�Ze�ejj	dkd�dd��Z
d	d
�Zdd�Zd
S)�	TestWrapscCs.dd�}d|_d|_t�|�dd��}||fS)NcSr�r1rrrrrrr�rz$TestWraps._default_update.<locals>.fr3zThis is still a bald faced liecSrrrrrrrr)�rz*TestWraps._default_update.<locals>.wrapper)r�r(r	�wrapsr6rrrr7�s
zTestWraps._default_updatecCsH|��\}}|�||�|�|jd�|�|j|j�|�|jd�dS)Nrrr3)r7r/rJr%r'r�r:rrrr;�s
zTestWraps.test_default_updater5r<cCr=r>r?)r-r)�_rrrrA�rBz!TestWraps.test_default_update_doccCstdd�}d|_t�|dd�dd��}|�||dd�|�|jd�|�|j|j�|�|jd�|�	t
|d��dS)	NcSr�r1rrrrrrr�rz#TestWraps.test_no_update.<locals>.fr3rcSrrrrrrrr)�rz)TestWraps.test_no_update.<locals>.wrapperr)r�)r�r	rWr/rJr%rCr'r@rrr6rrrrD�s
zTestWraps.test_no_updatecCs�dd�}d|_tdddd�|_dd	�}d
}d}t�|||�|dd
���}|�||||�|�|jd�|�|j	|j	�|�|j
d�|�|jd�|�|j|j�dS)NcSrrrrrrrrr�rXz*TestWraps.test_selective_update.<locals>.frEr4r5r;rBcSs
i|_|SrrF)rrrrr�
add_dict_attr�sz6TestWraps.test_selective_update.<locals>.add_dict_attrr�rFcSrrrrrrrr)��z0TestWraps.test_selective_update.<locals>.wrapperr))r�rKrGr	rWr/rJr%rCr'r@)r-rrrYrIrJr)rrrrK�szTestWraps.test_selective_updateN)
r%r&r'r7r;rQrRrrSrTrArDrKrrrrrV�s�
rVc@r�)�
TestReducec	CsGdd�d�}dd�}|�|�|gd�d�d�|�|�|dd	ggd
dggg�gd��|�|�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@r�)z'TestReduce.test_reduce.<locals>.SquarescSs||_g|_dSr)r��sofar)r-r�rrrr�
s
z0TestReduce.test_reduce.<locals>.Squares.__init__cSs
t|j�Sr)�lenr\rUrrrr�r�z/TestReduce.test_reduce.<locals>.Squares.__len__cSsZd|kr|jkst�t�t|j�}||kr(|j�||�|d7}||ks|j|S)Nrr4)r�r�r]r\�append)r-�i�nrrrr�s
�
z3TestReduce.test_reduce.<locals>.Squares.__getitem__N)r%r&r'r�r�r�rrrr�Squares	sracSr$rrrprrrrr%z#TestReduce.test_reduce.<locals>.addrBrrr9r@r]�w)r9r@r]rbcS�||SrrrprrrrErFz(TestReduce.test_reduce.<locals>.<lambda>r5r�r4i�cSrcrrrprrrrE!rF�lh�r6ir�*�1)rererc@r))z/TestReduce.test_reduce.<locals>.TestFailingItercS�t�r��RuntimeErrorrUrrr�__iter__3rXz8TestReduce.test_reduce.<locals>.TestFailingIter.__iter__N)r%r&r'rjrrrr�TestFailingIter2r1rkc@r))z&TestReduce.test_reduce.<locals>.BadSeqcSrgr)�
ValueError)r-�indexrrrr�;rXz2TestReduce.test_reduce.<locals>.BadSeq.__getitem__N)r%r&r'r�rrrr�BadSeq:r1rn)rJ�reducer�rRrSr�rirl)r-rarrkrnrrr�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@r�)z5TestReduce.test_iterator_usage.<locals>.SequenceClasscS�
||_dSr�r`)r-r`rrrr�Br�z>TestReduce.test_iterator_usage.<locals>.SequenceClass.__init__cSs"d|kr|jkr|St�t��Nr)r`r��r-r_rrrr�Ds�zATestReduce.test_iterator_usage.<locals>.SequenceClass.__getitem__N)r%r&r'r�r�rrrr�
SequenceClassAr�rur)rrYr6re�4r4r5r;)�one�two�threer)�operatorrrJrorRrSr��keys)r-rurr]rrr�test_iterator_usage@s	"zTestReduce.test_iterator_usageN)r%r&r'rpr|rrrrr[s8r[c@seZdZerejZdSdS)�TestReduceCN)r%r&r'r�rorrrrr}Vs
�r}c@�eZdZeej�ZdS)�TestReducePyN)r%r&r'r�r�rorrrrr\�rc@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)NcS�||k||kSrrrprrr�cmp1cr0z*TestCmpToKey.test_cmp_to_key.<locals>.cmp1r;r4cSst|�t|�Sr�ryrprrr�cmp2jr0z*TestCmpToKey.test_cmp_to_key.<locals>.cmp2g@�4r5�35)�
cmp_to_keyrJ�
assertGreater�assertGreaterEqual�
assertLess�assertLessEqualrC)r-r�r�r�rrr�test_cmp_to_keybs

zTestCmpToKey.test_cmp_to_keycCs�dd�}|j|d�}|�|dd�|dd��|�|dd�|dd��|�ttf��|d�dkWd�n1s:wY|�ttf��d|d�kWd�n1sWwY|�t��|��}Wd�n1spwY|�t��|�|d�}Wd�n1s�wY|�|�}|�t��|�Wd�n1s�wY|�t��|dd�Wd�dS1s�wYdS)NcSr�rrrprrrr�sr0z4TestCmpToKey.test_cmp_to_key_arguments.<locals>.cmp1��mycmpr;rr4)r�rJr�rRrSr��r-r�r�rrr�test_cmp_to_key_argumentsrs.��
��
�"�z&TestCmpToKey.test_cmp_to_key_argumentscs�dd�}|�|�}|�t��|d�|d�kWd�n1s!wYGdd�d���fdd�}|�t��|d�|d�kWd�dS1sLwYdS)NcSrgr�rtrprrrr��rXz'TestCmpToKey.test_bad_cmp.<locals>.cmp1r;r4c@r))z)TestCmpToKey.test_bad_cmp.<locals>.BadCmpcSrgrr�r,rrr�__lt__�rXz0TestCmpToKey.test_bad_cmp.<locals>.BadCmp.__lt__N)r%r&r'r�rrrr�BadCmp�r1r�cs��Srrrp�r�rrr���)r�rRrtr�rr�r�test_bad_cmp�s
�"�zTestCmpToKey.test_bad_cmpcCs*dd�}|j|d�}|�|d�jd�dS)NcSr�rrrprrrr��r0z)TestCmpToKey.test_obj_field.<locals>.cmp1r��2)r�rJr	r�rrr�test_obj_field�szTestCmpToKey.test_obj_fieldcCs.dd�}|�ttd�|�|�d�gd��dS)NcS�||Srrrprrrr��r%z)TestCmpToKey.test_sort_int.<locals>.mycmprY�r�)r<r;r5r4r)rJ�sortedr�r�)r-r�rrr�
test_sort_int�s�zTestCmpToKey.test_sort_intcCs@dd�}gd�}t||�|�d�}|�dd�|D�gd��dS)NcSs"t|�t|�}}||k||kSrr�rprrrr��sz-TestCmpToKey.test_sort_int_str.<locals>.mycmp)	rY�3r[r5�0rfr<�10r4r�cSsg|]}t|��qSrr�)r�r�rrrr���z2TestCmpToKey.test_sort_int_str.<locals>.<listcomp>)	rr4r4r5r;r<rYr[r6)r�r�rJ)r-r��valuesrrr�test_sort_int_str�s�zTestCmpToKey.test_sort_int_strcCs<dd�}|�|�}|d�}|�tt|�|�|tjj�dS)NcSr�rrrprrrr��r%z%TestCmpToKey.test_hash.<locals>.mycmpr6)r�rRrS�hash�assertNotIsInstance�collectionsr�Hashable)r-r�r��krrr�	test_hash�s

zTestCmpToKey.test_hashN)
r%r&r'r�r�r�r�r�r�r�rrrrr�`s	r�c@s$eZdZer	ejZejdd��ZdS)�
TestCmpToKeyCcCst�|tt�d���dSr)r�check_disallow_instantiationr�r�r�rUrrr�test_disallow_instantiation�s�z)TestCmpToKeyC.test_disallow_instantiationN)r%r&r'r�r�r�cpython_onlyr�rrrrr��s
r�c@r~)�TestCmpToKeyPyN)r%r&r'r�r�r�rrrrr��r�r�c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�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@r�)z3TestTotalOrdering.test_total_ordering_lt.<locals>.AcSrqr�r��r-r�rrrr��r�z<TestTotalOrdering.test_total_ordering_lt.<locals>.A.__init__cS�|j|jkSrr�r,rrrr��rsz:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__lt__cS�|j|jkSrr�r,rrr�__eq__�rsz:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__eq__N�r%r&r'r�r�r�rrrrr��rr4r5�r	�total_orderingrHr�r-rrrr�test_total_ordering_lt��z(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@r�)z3TestTotalOrdering.test_total_ordering_le.<locals>.AcSrqrr�r�rrrr��r�z<TestTotalOrdering.test_total_ordering_le.<locals>.A.__init__cSs|j|jkSrr�r,rrr�__le__�rsz:TestTotalOrdering.test_total_ordering_le.<locals>.A.__le__cSr�rr�r,rrrr��rsz:TestTotalOrdering.test_total_ordering_le.<locals>.A.__eq__N)r%r&r'r�r�r�rrrrr�r�rr4r5r�r�rrr�test_total_ordering_le�r�z(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@r�)z3TestTotalOrdering.test_total_ordering_gt.<locals>.AcSrqrr�r�rrrr��r�z<TestTotalOrdering.test_total_ordering_gt.<locals>.A.__init__cSs|j|jkSrr�r,rrr�__gt__�rsz:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__gt__cSr�rr�r,rrrr��rsz:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__eq__N)r%r&r'r�r�r�rrrrr�r�rr4r5r�r�rrr�test_total_ordering_gt�r�z(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@r�)z3TestTotalOrdering.test_total_ordering_ge.<locals>.AcSrqrr�r�rrrr��r�z<TestTotalOrdering.test_total_ordering_ge.<locals>.A.__init__cSs|j|jkSrr�r,rrr�__ge__�rsz:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__ge__cSr�rr�r,rrrr�rsz:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__eq__N)r%r&r'r�r�r�rrrrr�r�rr4r5r�r�rrr�test_total_ordering_ge�r�z(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@r")z=TestTotalOrdering.test_total_ordering_no_overwrite.<locals>.ANr$rrrrr�rr4r5)r	r�ryrHr�rrr� test_total_ordering_no_overwrite
sz2TestTotalOrdering.test_total_ordering_no_overwritecCsD|�t��tjGdd�d��}Wd�dS1swYdS)Nc@r")z7TestTotalOrdering.test_no_operations_defined.<locals>.ANr$rrrrrr�r)rRrlr	r�r�rrr�test_no_operations_defineds"�z,TestTotalOrdering.test_no_operations_definedc	stjG�fdd�d���tjG�fdd�d���tjG�fdd�d���tjG�fdd�d���tjG�fd	d
�d
���|�d��#|�t���d�d
kWd�n1sXwYWd�n1sgwY|�d��%|�t���d��d�kWd�n1s�wYWd�n1s�wY|�d��%|�t���d
��d
�kWd�n1s�wYWd�n1s�wY|�d��%|�t���d��d�kWd�n1s�wYWd�n1s�wY|�d��&|�t���d��d�kWd�n	1�s!wYWd�n	1�s1wY|�d��&|�t���d��d�kWd�n	1�sUwYWd�n	1�sewY|�d��&|�t���d��d�kWd�n	1�s�wYWd�n	1�s�wY|�d��&|�t���d��d�kWd�n	1�s�wYWd�n	1�s�wY|�d��&|�t���d��d�kWd�n	1�s�wYWd�n	1�swY|�d��0�d�}�d�}|�||�|�t��||kWd�n	1�s/wYWd�n	1�s?wY|�d��9�d �}�d �}|�||�|�t��||kWd�n1�smwYWd�dSWd�dS1�s�wYdS)!Nc�,eZdZdd�Z�fdd�Z�fdd�ZdS)zRTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThancSrqrr�r�rrrr�!r�z[TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__init__c�t|��r|j|jkSdSr���
isinstancer�r,��ImplementsLessThanrrr�#�
zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__eq__cst|��r|j|jkStSr�r�r��NotImplementedr,r�rrr�'r�zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__lt__N�r%r&r'r�r�r�rr�rrr��r�cr�)zUTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThancSrqrr�r�rrrr�.r�z^TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__init__cr�r�r�r,��ImplementsGreaterThanrrr�0r�z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__eq__cst|��r|j|jkStSrr�r,r�rrr�4r�z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__gt__N)r%r&r'r�r�r�rr�rrr�,r�r�cr�)zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTocSrqrr�r�rrrr�;r�zbTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__init__cr�r�r�r,��ImplementsLessThanEqualTorrr�=r�z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__eq__cst|��r|j|jkStSrr�r,r�rrr�Ar�z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__le__N)r%r&r'r�r�r�rr�rrr�9r�r�cr�)z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTocSrqrr�r�rrrr�Hr�zeTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__init__cr�r�r�r,��ImplementsGreaterThanEqualTorrr�Jr�zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__eq__cst|��r|j|jkStSrr�r,r�rrr�Nr�zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__ge__N)r%r&r'r�r�r�rr�rrr�Fr�r�cs(eZdZdd�Z�fdd�Zdd�ZdS)zXTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplementedcSrqrr�r�rrrr�Ur�zaTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__init__cr�r�r�r,��ComparatorNotImplementedrrr�Wr�z_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__eq__cSstSr)r�r,rrrr�[rXz_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__lt__Nr�rr�rrr�Ssr�zLT < 1���r4zLT < LErzLT < GTzLE <= LTr5zLE <= GEr;zGT > GEr<zGT > LTrYzGE >= GTr�zGE >= LEr[z
GE when equalr�z
LE when equalr�)r	r�rrRrSrJ)r-r9r:r)r�r�r�r�r�r�$test_type_error_when_not_implementeds�
������������������
���
 ��$�z6TestTotalOrdering.test_type_error_when_not_implementedc
Csxttjd�D]2}dD]-}|j||d��tt|�}t�t�||��}|�||�Wd�n1s3wYqqdS)Nr4)r�r�r�r�)rr�)	r�r�r�rr|�Orderable_LTr�r�r�)r-r�rr�method_copyrrrr��s
����zTestTotalOrdering.test_picklecs^tjG�fdd�dt���Gdd�d�d�}Gdd�d�d�}|�||k�|�||k�dS)Ncs4eZdZ�fdd�Z�fdd�Z�fdd�Z�ZS)zWTestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMetacst��||||�Sr)�super�__new__)rr�bases�ns��	__class__rrr��sz_TestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMeta.__new__cst|��s	|j|jkSr�r�r%r,��SortableMetarrr���
z^TestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMeta.__lt__cst|��s	|j|jkSrr�r,r�rrr��r�z^TestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMeta.__eq__)r%r&r'r�r�r��
__classcell__rr�r�rr��sr�c@r")zLTestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.BNr$rrrrr�r(r��	metaclassc@r")zLTestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.ANr$rrrrr�r(r)r	r�r�rHr)r-rrrr�r�/test_total_ordering_for_metaclasses_issue_44605�szATestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605N)r%r&r'r�r�r�r�r�r�r�r�r�rrrrr��sk	r�c@r�)r�cCrqrr�r�rrrr��r�zOrderable_LT.__init__cCr�rr�r,rrrr��rszOrderable_LT.__lt__cCr�rr�r,rrrr��rszOrderable_LT.__eq__Nr�rrrrr��r�r�c@r))�	TestCachec	s�|jj�fdd���|��fdd�td�D�gd��|����|jjddddd�����|����|jjd	d	dd	d��dS)
Nc�$|dkr|S�|d��|d�S�Nr5r4rrr��fibrrr���z!TestCache.test_cache.<locals>.fibc�g|]}�|��qSrr�r�r`r�rrr��r�z(TestCache.test_cache.<locals>.<listcomp>rw�rr4r4r5r;rYr��
rd�"�7�Y���iyib���hits�misses�maxsize�currsizer)�module�cacherJr��
cache_info�
_CacheInfo�cache_clearrUrr�r�
test_cache�s�
�
�zTestCache.test_cacheN)r%r&r'rrrrrr��sr�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�Zd3d4�Zd5S)6�TestLRUc
sLdd�}|jjdd�|�}|��\}}}}|�|d�|�|d�|�|d�|�|d�td�}td�D]}t|�t|�}	}
||	|
�}||	|
�}|�||�q5|��\}}}}|�||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��q2|��d�|��\}}}}|�|d�|�|d�|�|d�|j�d
��fdd
��}|�|��j
d
�d�dD]
}	|�||	�|	d��qv|��d�|��\}}}}|�|d�|�|d�|�|d
�dS)NcS�d||S�Nr;rrprrr�orig�rszTestLRU.test_lru.<locals>.origr7�r�rrY��r4c��d7�dS�Nr4r7rr��f_cntrrrr��zTestLRU.test_lru.<locals>.fcrrrrr
rrrrrr<r5cs�d7�|dS�Nr4r6rrCr
rrrrs)r[r�r[r�r[r�r�r�r�r�r�r�r�r�r�r[r6�)r��	lru_cacherrJr�rrHrr�r(r�)
r-rrrr�r�r�r��domainr_rDrq�actualrfrr
r�test_lru�s�





zTestLRU.test_lrucCsz|jjdd��}|�tt|gd���gd��|�|��jd�|�|��jd�|�|��jd�|�|��j	d�dS)NcSs|dS�Nr5rrCrrr�square$rz(TestLRU.test_lru_no_args.<locals>.square)r6r7r6)�di�rr4r5�)
r�rrJr+rLrr�r�r�r�)r-rrrr�test_lru_no_args#s
�zTestLRU.test_lru_no_argscs~d�|jjdd���fdd���td�D]}|��|�d|�d��q|����jd�|��d�d	�|����jd�dS)
NTr6r	cs(d|�d�}|dkr�rd��|�}|S)N�.r7Fr)rD�rv�rr�oncerrrr8s
z%TestLRU.test_lru_bug_35780.<locals>.f�rr7z.20.)r�rr�rJrr��r-rDrrr�test_lru_bug_35780/s	zTestLRU.test_lru_bug_35780cCs>|j��dd��}|d�|dii��|�|��jd�dS)NcSrrrrCrrrrrPrz%TestLRU.test_lru_bug_36650.<locals>.frr4rc)r�rrJrr�rurrr�test_lru_bug_36650Js

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)Nr4r	cSs|d|Srrrprrrrr^�z*TestLRU.test_lru_hash_only_once.<locals>.fr)�return_valuei�rw)rr4r4r4r5)r4r4r4r4r�r7)r4r5r4r4r;)r4r;r4r4)
r�rrQ�mock�Mock�__mul__�__hash__rJ�
call_countr)r-rr�mock_intrrr�test_lru_hash_only_onceXs"

zTestLRU.test_lru_hash_only_oncecCsPtj}z |j�d�t�t_dD]}|�tdd|��|�qW|t_dS|t_w)Nr<)
rrr4r5r;r;r<rYr�r4r[r5r4�abcdefghijklmn)�builtinsr]r�rrJ)r-�old_lenr_rrr�test_lru_reentrancy_with_len{s�z$TestLRU.test_lru_reentrancy_with_lencCs6t��dd��}|�|dd�d�|�|d�d�dS)NcWrWrr�rrrrrr�rz-TestLRU.test_lru_star_arg_handling.<locals>.fr4r5rP)rP)r	rrJrurrr�test_lru_star_arg_handling�s
z"TestLRU.test_lru_star_arg_handlingcCs�tjdd�dd��}tjdd�dd��}|�t��|g�Wd�n1s(wY|�t��
|g�Wd�dS1sBwYdS)Nr	cSrrr��orrr�infinite_cache�rz3TestLRU.test_lru_type_error.<locals>.infinite_cacher6cSrrrr2rrr�
limited_cache�rz2TestLRU.test_lru_type_error.<locals>.limited_cache)r	rrRrS)r-r4r5rrr�test_lru_type_error�s




�
"�zTestLRU.test_lru_type_errorc	�|jjdd��fdd���|��fdd�td�D�gd��|����|jjddddd	�����|����|jjd
d
dd
d	��dS)Nr	cr�r�rrrr�rrr��r�z/TestLRU.test_lru_with_maxsize_none.<locals>.fibcr�rrr�r�rrr��r�z6TestLRU.test_lru_with_maxsize_none.<locals>.<listcomp>rwr�r�r�r�r�rrJr�rrrrUrr�r�test_lru_with_maxsize_none���
�
�z"TestLRU.test_lru_with_maxsize_nonec	sj|jjdd�dd���dD]}|��fdd�td�D�ttd���q
|����|jjd	d
d	d	d��dS)Ni����r	cSrWrrrrrrr�eq�rz2TestLRU.test_lru_with_maxsize_negative.<locals>.eqrdcr�rrr��r;rrr��r�z:TestLRU.test_lru_with_maxsize_negative.<locals>.<listcomp>�ri,r�)r�rrJr�r+rrrtrr<r�test_lru_with_maxsize_negative�s
(
�z&TestLRU.test_lru_with_maxsize_negativec	Cs�dD]M}|j�|�dd��}|�|d�d�|�t��}|d�Wd�n1s*wY|�|jj�|�t��|d�Wd�n1sJwYqdS)N�NrcSsd|S)Nrr�r_rrrr�rz.TestLRU.test_lru_with_exceptions.<locals>.funcrr9r)r�rrJrRr��assertIsNone�	exception�__context__)r-r�r�cmrrr�test_lru_with_exceptions�s


�
���z TestLRU.test_lru_with_exceptionscCs�dD]t}|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||SrrrCrrrr�rz+TestLRU.test_lru_with_types.<locals>.squarer;r�g@g"@rCr<)r�rrJr�rr�r�)r-r�rrrr�test_lru_with_types�s
�zTestLRU.test_lru_with_typesc	s�|j���fdd���|��fdd�td�D�gd��|����|jjddddd	�����|����|jjd
d
dd
d	��dS)Nc�(|dkr|S�|dd��|dd�S�Nr5r4rrrrrr�rrr���z/TestLRU.test_lru_with_keyword_args.<locals>.fibc�g|]}�|d��qS�rrr�r��numberr�rrr���z6TestLRU.test_lru_with_keyword_args.<locals>.<listcomp>rwr�r�rr�rr8rUrr�r�test_lru_with_keyword_args�s�
�
�z"TestLRU.test_lru_with_keyword_argsc	r7)Nr	crIrJrrrr�rrr��rKz<TestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.fibcrLrMrrNr�rrr��rPzCTestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.<listcomp>rwr�r�r�rr8rUrr�r�'test_lru_with_keyword_args_maxsize_none�r:z/TestLRU.test_lru_with_keyword_args_maxsize_nonec	Csj|jjdd�dd��}|�|ddd�dd	g�|�|ddd
�d	dg�|�|��|jjddddd��dS)
Nr6r	c[st|���Sr)r+�items)r�rrrrr�r#z$TestLRU.test_kwargs_order.<locals>.fr4r5r8)r9r4)r:r5)r:r9rr�)r�rrJrrrurrr�test_kwargs_order�s

�zTestLRU.test_kwargs_ordercCsBddd�}|j��|�}|jjD]}|�t||�t||��qdS)N�zomg�zomg_annotationcSr�)zf doc stringrer)rUrrrrrrz,TestLRU.test_lru_cache_decoration.<locals>.f)rUrV)r�rrOrJr|)r-rr�gr�rrr�test_lru_cache_decorations

�z!TestLRU.test_lru_cache_decorationc		s�d\}�dd���jj|�d�������\}}}}��|d�t��������fdd�����fdd	�}t��}t�	d
�z��fdd�t
|�D�}t�|����
�Wd�n1s`wY���\}}}}�jtur���||���|�||�n��||���|�||���||�tj|d
�g}|�fdd�t
|�D�7}���t�|����
�Wd�n1s�wYWt�	|�dSWt�	|�dSt�	|�w)N)rY�cSrrrrprrrrrsz-TestLRU.test_lru_cache_threaded.<locals>.origr	rcs4��d�t��D]}���|d��|d��q	dS)Nr6r)�waitr�rJ)r�rX)rr�mrr-�startrr�fulls
�z-TestLRU.test_lru_cache_threaded.<locals>.fullcs(��d�td��D]}���qdS)Nr6r5)rZr�r)rX)rrr[r\rr�clears

�z.TestLRU.test_lru_cache_threaded.<locals>.clear���ư>c�g|]
}tj�|gd��qS�)�targetr��	threading�Thread�r�r��r]rrr�!��z3TestLRU.test_lru_cache_threaded.<locals>.<listcomp>�rbcr`rarcrfrgrrr�2rh)r�rrrJrd�Eventr�getswitchintervalr�setswitchintervalr�r�
start_threads�setr�r�rer^)	r-r`r�r�r�r�r^�orig_si�threadsr)rrr]r[rr-r\r�test_lru_cache_threaded
sF

�
�
�
��zTestLRU.test_lru_cache_threadedc
s2d\}�t�|d��t�|d��t�|d���jj�|d��fdd��������dd�|df������fdd���fd	d
�t|�D�}t�|��?t��D]1}��	d���
���	d���
���	d���
������d|d|�||df�qUWd�dS1s�wYdS)N)rYr[r4r	cs��d�d|S�Nr6r;)rZrC)�pauserrrr@�
z+TestLRU.test_lru_cache_threaded2.<locals>.frcs:t��D]}��d����|�d|���d�qdSrr)r�rZrJr@)rrr[r-r\�stoprr�testEs

�z.TestLRU.test_lru_cache_threaded2.<locals>.testcsg|]}tj�d��qS)rircrf�rvrrr�Jsz4TestLRU.test_lru_cache_threaded2.<locals>.<listcomp>r6)rd�Barrierr�rrJrr�rrmrZ�reset)r-r`rpr_r)rrr[rsr-r\rurvr�test_lru_cache_threaded2:s(


*�"�z TestLRU.test_lru_cache_threaded2csn�jjdd�dd�����fdd���fdd�tgd	��D�}t�|��	Wd�dS1s0wYdS)
Nr5r	cSst�d�d|S)Ng{�G�z�?r;)�time�sleeprCrrrrrVrtz+TestLRU.test_lru_cache_threaded3.<locals>.fcsH�j|d�����|�d||�Wd�dS1swYdS)N)�threadr;)rrJ)r_rD)rrr-rrrvZs"�z.TestLRU.test_lru_cache_threaded3.<locals>.testcs"g|]
\}}tj�||fd��qSrarc)r�r_�vrwrrr�]s�z4TestLRU.test_lru_cache_threaded3.<locals>.<listcomp>)r4r5r5r;r5)r�r�	enumeraterrm)r-rpr)rrr-rvr�test_lru_cache_threaded3Us


�"�z TestLRU.test_lru_cache_threaded3cs^|jjdd�dd���G��fdd�d����d����d��|���d���d��dS)	Nr6r	cSrW)zEUsed to demonstrate a reentrant lru_cache call within a single threadrrCrrr�	test_funcerZz.TestLRU.test_need_for_rlock.<locals>.test_funccs.eZdZdZdd�Zdd�Z��fdd�ZdS)	z-TestLRU.test_need_for_rlock.<locals>.DoubleEqz=Demonstrate a reentrant lru_cache call within a single threadcSrqrrCr rrrr�lr�z6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__init__cS�|jSrrCrUrrrr(nr�z6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__hash__cs"|jdkr��d��|j|jkSr�rCr,��DoubleEqr�rrr�ps
z4TestLRU.test_need_for_rlock.<locals>.DoubleEq.__eq__N)r%r&r'r@r�r(r�rr�rrr�js
r�r4r5)r�rrJrUrr�r�test_need_for_rlockbs
�zTestLRU.test_need_for_rlockcstG�fdd�dt�}|d�}|d�}|d�}��|j��d�dD]}��|�|�|dd�q!��|j|j|jfd���|j��d	�d
D]}��|�|�|dd�qH��|j|j|jfd���|j��d�d
D]}��|�|�|dd�qo��|j|j|jfd���|j��d���|j��|j�����|j��|j�����|j��|j���dS)Ncs$eZdZdZ�j�d�dd��ZdS)z"TestLRU.test_lru_method.<locals>.Xrr5cSs|jd7_|d|Srr
r rrrrr}sz$TestLRU.test_lru_method.<locals>.X.fN)r%r&r'rr�rrrrrUrr�X{s
r�rYr[)rrr5r)
r4r5r5r;r4r4r4r5r;r;r6)r�rr)r<r�r5r5)
r4r5r4r4r4r4r;r5r5r5)r�r<r)r6r6r5r5)
r5r4r4r4r4r5r4r;r5r4)r�r<rY)rrr5r5)ryrJrrrr)r-r�r9r:r@rDrrUr�test_lru_methodzs(zTestLRU.test_lru_methodc
Cs�|j}|jd|j|jfD]2}ttjd�D](}|j||d��t�t�	||��}|�
||�Wd�n1s9wYqq
dS)Nrr4)r�r)r��cached_func�cached_meth�cached_staticmethr�r�r�rr�r�r�)r-rrrr�r�rrrr��s����zTestLRU.test_picklec	Cs�|j}dd�}|j�|d�}|jd|j|j|j�d�|�f}|D]#}|j|d��t�|�}|�	||�Wd�n1s?wYq!dS)NcSrrrrprrrr�rszTestLRU.test_copy.<locals>.origr5r�r)
r�r�rGr�r�r�rrr�r��r-rrr �funcsrrr�rrrr����
���zTestLRU.test_copyc	Cs�|j}dd�}|j�|d�}|jd|j|j|j�d�|�f}|D]#}|j|d��t�	|�}|�
||�Wd�n1s?wYq!dS)NcSrrrrprrrr�rsz#TestLRU.test_deepcopy.<locals>.origr5rr�)r�r�rGr�r�r�rrr�r�r�r�rrrr��r�zTestLRU.test_deepcopycCs^|jjdd�dd��}|�|��ddd��|jjddd�d	d��}|�|��ddd��dS)
Nr5r	cSr��Nr4rrrrrrr�rz,TestLRU.test_lru_cache_parameters.<locals>.fFrFr
TcSr�r�rrrrrrr�r)r�rrJ�cache_parametersrurrr�test_lru_cache_parameters�s

z!TestLRU.test_lru_cache_parameterscs~�jjdd��}G�fdd�d�}t�|�t�|j�t�|j�g}|D]}��|��q#~~t��|D]}��	|��q4dS)NcSrWrrrCrrr�
test_function�rz9TestLRU.test_lru_cache_weakrefable.<locals>.test_functioncs4eZdZ�jjdd��Ze�jj�fdd���ZdS)z-TestLRU.test_lru_cache_weakrefable.<locals>.AcSrrrr rrr�test_method�rz9TestLRU.test_lru_cache_weakrefable.<locals>.A.test_methodcs�|fSrrrCrUrr�test_staticmethod��z?TestLRU.test_lru_cache_weakrefable.<locals>.A.test_staticmethodN)r%r&r'r�rr�r�r�rrUrrr�s
r)
r�r�weakref�refr�r��assertIsNotNone�gc�collectrA)r-r�r�refsr�rrUr�test_lru_cache_weakrefable�s



��z"TestLRU.test_lru_cache_weakrefableN)r%r&r'rrr!r"r+r/r1r6r9r>rErHrQrRrTrXrqrzr�r�r�r�r�r�r�r�rrrrr�s6Y#		
0
rcCrrrrprrr�py_cached_func�r#r�cCrrrrprrr�
c_cached_func�r#r�c@�:eZdZeZefZe��dd��Ze	e��dd���Z
dS)�	TestLRUPycC�d||Srrrrrrr��r#zTestLRUPy.cached_methcCrrrrprrrr���zTestLRUPy.cached_staticmethN)r%r&r'r�r�r�r�rr�r�r�rrrrr���
r�c@r�)�TestLRUCcCr�rrrrrrr��r#zTestLRUC.cached_methcCrrrrprrrr�r�zTestLRUC.cached_staticmethN)r%r&r'r�r�r�r�rr�r�r�rrrrr��r�r�c@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*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Z d4d5�Z!d6d7�Z"d8S)9�TestSingleDispatchcCsZtjdd��}dd�}|�t|�|�|d�d�|�|d�d�|�|gd	��d�dS)
NcSr��NrxrrrrrrW	rz3TestSingleDispatch.test_simple_overloads.<locals>.gcSr�)N�integerrr@rrr�g_intrXz7TestSingleDispatch.test_simple_overloads.<locals>.g_intr�rxr4r��r4r5r;)r	�singledispatch�registerryrJ�r-rWr�rrr�test_simple_overloadss
z(TestSingleDispatch.test_simple_overloadscCs�tjdd��}Gdd�d�}Gdd�d|�}Gdd�d|�}Gd	d
�d
||�}dd�}d
d�}|�||�|�||�|�||��d�|�||��d�|�||��d�|�||��d�dS)NcSr�r�rrrrrrWrz&TestSingleDispatch.test_mro.<locals>.gc@r")z&TestSingleDispatch.test_mro.<locals>.ANr$rrrrrr(rc@r")z&TestSingleDispatch.test_mro.<locals>.CNr$rrrr�Cr(r�c@r")z&TestSingleDispatch.test_mro.<locals>.BNr$rrrrrr(rc@r")z&TestSingleDispatch.test_mro.<locals>.DNr$rrrr�Dr(r�cSr�)NrrrZrrr�g_ArXz(TestSingleDispatch.test_mro.<locals>.g_AcSr�)Nrrr\rrr�g_B!rXz(TestSingleDispatch.test_mro.<locals>.g_B)r	r�r�rJ)r-rWrr�rr�r�r�rrr�test_mros
zTestSingleDispatch.test_mrocCsntjdd��}|�t�dd��}|�|d�d�|�|d�d�|�|�t�|�|�|�t�|�t��dS)	NcSr�r�rrrrrrW+rz5TestSingleDispatch.test_register_decorator.<locals>.gcSs
d|fS)Nzint %srr@rrrr�.�
z9TestSingleDispatch.test_register_decorator.<locals>.g_intrrxrzint 12)	r	r�r�ryrJr��dispatchr�r�r�rrr�test_register_decorator*s

z*TestSingleDispatch.test_register_decoratorcCs>tjdd��}|�|jd�tjjdkr|�|jd�dSdS)NcSr�)�Simple test�TestrrrrrrW9rZz6TestSingleDispatch.test_wrapping_attributes.<locals>.grWr5r�)r	r�rJr%rrSrTr@)r-rWrrr�test_wrapping_attributes8s
�z+TestSingleDispatch.test_wrapping_attributeszrequires _decimalcCs�tjdd��}|�tj�dd��}t�d�}t�d�}|�||�d�|�||�d�|�tj�d	d��}|�||�d
�|�||�d�dS)NcSr�r�rrrrrrWDrz,TestSingleDispatch.test_c_classes.<locals>.gcSr�rr0rrrrrXGsz,TestSingleDispatch.test_c_classes.<locals>._�Exponent < Emin�Number got rounded)r�)r�cSr�)N�Too small to care.rrrrrrXNrr�)r	r�r�r�DecimalException�	Subnormal�RoundedrJ)r-rWrX�subn�rndrrr�test_c_classesAs






z!TestSingleDispatch.test_c_classescCs�tj}tj}|j|j|j|jg}t|�D]}|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]}|tj|j|jtg�}|�
|tjt	|j|jtg�qgGdd�dtj�}|j�|�|j|jg}t|�D]$}|||�}|�
|||j|j|jtjt	|j|j|j|j|j
|jtg
�q�Gdd�dtj�}|j|j|j|jg}t|�D]}|||�}|�
|||jtjt	|j|j|j|j
|jtg
�q�dS)Nc@r")z.TestSingleDispatch.test_compose_mro.<locals>.DNr$rrrrr�rr(r�c@r))z.TestSingleDispatch.test_compose_mro.<locals>.CcSrrrrUrrr�__call__�rXz7TestSingleDispatch.test_compose_mro.<locals>.C.__call__N�r%r&r'r�rrrrr��r1r�)r�rr	�_compose_mro�Sequence�MutableMapping�Mapping�SetrrKrJ�
Collection�Sized�Iterable�	Containerr��OrderedDict�ChainMapr��defaultdict�MutableSequencer��
Reversible�Callable)r-r@�mror��haystackr[r�r�rrr�test_compose_mroTsR
���
�
��z#TestSingleDispatch.test_compose_mrocCs~tj}ddi}gd�}t�dh}t|�}d}tjdd��}|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�|�|jdd��|�||�d	�|�||�d	�|�||�d	�|�||�d	�|�||�d	�|�|j	d
d��|�||�d�|�||�d	�|�||�d	�|�||�d	�|�||�d	�|�tj
dd��|�||�d�|�||�d	�|�||�d	�|�||�d	�|�||�d	�|�|jd
d��|�||�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�|�tdd��|�||�d�|�||�d�|�||�d�|�||�d�|�||�d�dS) Nr9r:r�cSr�r�rrrrrrW�rz/TestSingleDispatch.test_register_abc.<locals>.grxcSr��N�sizedrrrrrrE��z6TestSingleDispatch.test_register_abc.<locals>.<lambda>r�cSr��N�mutablemappingrrrrrrE�r�r�cSr�)N�chainmaprrrrrrE�r�cSr�)N�mutablesequencerrrrrrE�r�r�cSr�)N�
mutablesetrrrrrrE�r�r�cSr��N�mappingrrrrrrE�r�cSr��N�sequencerrrrrrE�r�r�cSr��NrnrrrrrrE�r�rncSr��NrKrrrrrrE�r�rKcSr��Nr+rrrrrrE�r�r+cSr�)N�concrete-setrrrrrrE�r�r�cSr�)N�
frozen-setrrrrrrE�r�r�cSr�)Nr�rrrrrrE�r�r�)r�rr��	frozensetr	r�rJr�r�r�r�r��
MutableSetr�r�r�rKr+rnr�)r-r@r]�lr�rr�trWrrr�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�|�qL|j|j|j|j|jg}
|�
|||
d�|�dS)Nc@r")z)TestSingleDispatch.test_c3_abc.<locals>.ANr$rrrrr�r(rc@r))z)TestSingleDispatch.test_c3_abc.<locals>.BcSr�rsrrUrrrr��rXz1TestSingleDispatch.test_c3_abc.<locals>.B.__len__N�r%r&r'r�rrrrr�r1rc@r")z)TestSingleDispatch.test_c3_abc.<locals>.CNr$rrrrr��r�r�c@r")z)TestSingleDispatch.test_c3_abc.<locals>.DNr$rrrrr��r(r�c@r))z)TestSingleDispatch.test_c3_abc.<locals>.XcSrrrrUrrrr��rXz2TestSingleDispatch.test_c3_abc.<locals>.X.__call__Nr�rrrrr��r1r�)�abcs)
r�rr	�_c3_mror�r�r�r�r�rrJr�r�)r-r@r�rrr�r�r�rfr��	many_abcsrrr�test_c3_abc�szTestSingleDispatch.test_c3_abccCslGdd�dt�}Gdd�d|d�}Gdd�d|�}tjdd	��}|�|�d
d��}|�}|�||�d�dS)
Nc@r))z1TestSingleDispatch.test_false_meta.<locals>.MetaAcSr�rsrrUrrrr�rXz9TestSingleDispatch.test_false_meta.<locals>.MetaA.__len__Nr�rrrr�MetaAr1r�c@r")z-TestSingleDispatch.test_false_meta.<locals>.ANr$rrrrrr(rr�c@r")z.TestSingleDispatch.test_false_meta.<locals>.AANr$rrrr�AAr(r�cSr�)Nzbase ArrZrrr�funrz/TestSingleDispatch.test_false_meta.<locals>.funcSr�)N�fun ArrZrrrrXrz-TestSingleDispatch.test_false_meta.<locals>._r�)r�r	r�r�rJ)r-r�rr�r�rX�aarrr�test_false_meta�s

z"TestSingleDispatch.test_false_metacCstj}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��}||�Wd�n1s�wY|�t
|j�d�Gdd�d|j�}|�}	|�||	�d�|j�|�|�||	�d�|j	�|�|�||	�d�tjdd��}
|
�|j�dd��}|
�|j�dd��}|�
t��}|
t�dd���Wd�n	1�s!wY|�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��}|
|�Wd�n	1�s�wY|�t
|j�d�Gd'd(�d(|j|�}tjd)d*��}|�|�d+d��}|�|j�d,d��}|�}|�||�d-�|j�|�|�||�d.�dS)/NcSr�r�r��argrrrrWrz0TestSingleDispatch.test_mro_conflicts.<locals>.gc@r))z0TestSingleDispatch.test_mro_conflicts.<locals>.OcSr�rsrrUrrrr�rXz8TestSingleDispatch.test_mro_conflicts.<locals>.O.__len__Nr�rrrr�Or1r�rxcSr�)N�iterablerr�rrrrEr�z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>cSr��N�	containerrr�rrrrEr�cSr�r�rr�rrrrEr�cSr�r�rr�rrrrEr�r�rnc@r")z0TestSingleDispatch.test_mro_conflicts.<locals>.PNr$rrrr�P'r(r�r�)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@r))z0TestSingleDispatch.test_mro_conflicts.<locals>.QcSr�rsrrUrrrr�8rXz8TestSingleDispatch.test_mro_conflicts.<locals>.Q.__len__Nr�rrrr�Q7r1r�cSr�r�rr�rrr�hArz0TestSingleDispatch.test_mro_conflicts.<locals>.hcSr�r�rr�rrrrXDrz0TestSingleDispatch.test_mro_conflicts.<locals>._cSr�r�rr�rrrrXGrcSr�rsrrrrrrEOr�)zZAmbiguous dispatch: <class 'collections.abc.Container'> or <class 'collections.abc.Sized'>zZAmbiguous dispatch: <class 'collections.abc.Sized'> or <class 'collections.abc.Container'>c@r")z0TestSingleDispatch.test_mro_conflicts.<locals>.RNr$rrrr�RWr(rcSr�r�rr�rrrr_Zrz0TestSingleDispatch.test_mro_conflicts.<locals>.icSr�r�rr�rrrrX]rcSr�r�rr�rrrrX`rr�c@r")z0TestSingleDispatch.test_mro_conflicts.<locals>.SNr$rrrr�Ser(rc@r))z0TestSingleDispatch.test_mro_conflicts.<locals>.TcSr�rsrrUrrrr�hrXz8TestSingleDispatch.test_mro_conflicts.<locals>.T.__len__Nr�rrrr�Tgr1rc@r))z0TestSingleDispatch.test_mro_conflicts.<locals>.UcSr�rsrrUrrrr�orXz8TestSingleDispatch.test_mro_conflicts.<locals>.U.__len__Nr�rrrr�Unr1rc@r))z0TestSingleDispatch.test_mro_conflicts.<locals>.VcSr�rsrrUrrrr��rXz8TestSingleDispatch.test_mro_conflicts.<locals>.V.__len__Nr�rrrr�Vr1rcSr�r�rr�rrr�j�rz0TestSingleDispatch.test_mro_conflicts.<locals>.jcSr�)Nr�rr�rrrrX�rcSr�r�rr�rrrrX�rr�r�)r�rr	r�r�rJr�r�r�r�rRrir�r�rBr�r�r�)r-r@rWr�r3r�rN�re_oner��qr�rX�re_tworr_r�rrr�r�u�re_threerrr~rrr�test_mro_conflictss�

��




��





��



z%TestSingleDispatch.test_mro_conflictscs`ddlm}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�Wd�dS1�s�wYdS)Nr)�UserDictcs6eZdZ��fdd�Zdd�Zdd�Zdd�Z�ZS)	z?TestSingleDispatch.test_cache_invalidation.<locals>.TracingDictcs&t�|�j|i|��g|_g|_dSr)r�r��set_ops�get_ops)r-rr�)�TracingDictr�rrr��s
zHTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__init__cSs|j|}|j�|�|Sr)r�rr^)r-r��resultrrrr��r�zKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__getitem__cSs|j�|�||j|<dSr)r
r^r�)r-r�r�rrr�__setitem__�szKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__setitem__cSs|j��dSr)r�r^rUrrrr^��zETestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.clear)r%r&r'r�r�rr^r�r)rr�rr�s
r�WeakKeyDictionarycs�Srrr)�tdrrrE�r�z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>cSr�r�rr�rrrrW�rz5TestSingleDispatch.test_cache_invalidation.<locals>.grxr4r5cSr�r�rr�rrrrE�r�r+c@r")z5TestSingleDispatch.test_cache_invalidation.<locals>.XNr$rrrrr��r(r�cSr�r�rr�rrrrE�r�r�cSr�r�rr�rrrrE�r�r�cSr�r�rr�rrrrE�r�rK)r�rr�r�	swap_attrrr	r�rJr]rr
rKr��registryr�r+r��
_find_implr�r�r�r��_clear_cache)r-rr�r@rWr]r�r�r)rrr�test_cache_invalidation�s�
��

�$�z*TestSingleDispatch.test_cache_invalidationcCs�tjdd��}|jdtjjfdd��}|jddd��}|�|d�d�|�|d	d
i�d�|�|gd��d
�|�|d�d
�|�|d�d
�|�t�Gdd�d��}|�|d�d�dS)NcSr�r�rr�rrrr_�rz.TestSingleDispatch.test_annotations.<locals>.ir�cSr�r�rr�rrrrX�r�.TestSingleDispatch.test_annotations.<locals>._�collections.abc.SequencecSr�r�rr�rrrrX�rrxr9r4r�r�r�r�c@r�)rcSrqrr��r-r�rrrr�	r�z7TestSingleDispatch.test_annotations.<locals>._.__init__cSs
|j|kSrr�r,rrrr�	r�z5TestSingleDispatch.test_annotations.<locals>._.__eq__N)r%r&r'r�r�rrrrrX		srX)r�r)r	r�r�r�rr�rJr�)r-r_rXrrr�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>.AcS�
d|_dSr�r�rrrrr�	r�z4TestSingleDispatch.test_method_register.<locals>.A.tcSr�Nryr�rrrrrX	r�z4TestSingleDispatch.test_method_register.<locals>.A._cSr�Nr�r�rrrrrX	r�N�
r%r&r'r	�singledispatchmethodr�r�ryrXr�rrrrr	s

rrryr�rr��rx)r�rJr�rr)r-rr9r�rrr�test_method_register	s



z'TestSingleDispatch.test_method_registercC�JGdd�d�}|�}|�|�d��|�|�d��|�|�d�d�dS)Nc@sJeZdZejedd���Ze�e�edd���Z	e�e
�edd���Z	dS)z8TestSingleDispatch.test_staticmethod_register.<locals>.AcSrWrrr�rrrr�.	rZz:TestSingleDispatch.test_staticmethod_register.<locals>.A.tcS�
t|t�Sr�r�ryr�rrrrX2	�
z:TestSingleDispatch.test_staticmethod_register.<locals>.A._cSr&r�r�r�r�rrrrX6	r(N�r%r&r'r	r"r�r�r�ryrXr�rrrrr-	srrrr#�rHr�rJ�r-rr9rrr�test_staticmethod_register,	�

z-TestSingleDispatch.test_staticmethod_registercC�NGdd�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>.AcSrqrr�rrrrr�B	r�z@TestSingleDispatch.test_classmethod_register.<locals>.A.__init__cS�|d�Sr�r�rr�rrrr�E	r�z9TestSingleDispatch.test_classmethod_register.<locals>.A.tcSr0rrr1rrrrXI	r�z9TestSingleDispatch.test_classmethod_register.<locals>.A._cSr0r rr1rrrrXM	r�N�r%r&r'r�r	r"rr�r�ryrXr�rrrrrA	srrryrr�r#rx�rJr�r�r�rrr�test_classmethod_register@	�z,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>.AcSrqrr�rrrrr�X	r�z=TestSingleDispatch.test_callable_register.<locals>.A.__init__cSr0r�rr1rrrr�[	r�z6TestSingleDispatch.test_callable_register.<locals>.A.tN)r%r&r'r�r	r"rr�rrrrrW	s
rcSr0rrr1rrrrX`	r�z4TestSingleDispatch.test_callable_register.<locals>._cSr0r rr1rrrrXd	r�rryrr�r#rx)r�r�ryrr�rJr�)r-rrXrrr�test_callable_registerV	s
	
z)TestSingleDispatch.test_callable_registercCsjGdd�dtjd�}|�|jj�|�|jdj�|�t��|�Wd�dS1s.wYdS)Nc@s eZdZejejdd���ZdS)zATestSingleDispatch.test_abstractmethod_register.<locals>.AbstractcSrrrrrrrrp	rZzETestSingleDispatch.test_abstractmethod_register.<locals>.Abstract.addN)r%r&r'r	r"rrrrrrrr n	sr r�r)rr"rHrr!rrRrS)r-r rrr�test_abstractmethod_registerm	s"�z/TestSingleDispatch.test_abstractmethod_registercCsNGdd�d�}|�}|�|�d�d�|�|�d�d�|�|�d�d�dS)	Nc@sBeZdZejdd��Zejdefdd��Zejde	fdd��ZdS)z4TestSingleDispatch.test_type_ann_register.<locals>.AcSr�r�rrrrrr�}	rz6TestSingleDispatch.test_type_ann_register.<locals>.A.tr�cSr�rrrrrrrX�	rz6TestSingleDispatch.test_type_ann_register.<locals>.A._cSr�r rrrrrrX�	rNr!rrrrr|	s
rrryrr�r#rx)rJr�r,rrr�test_type_ann_register{	s

z)TestSingleDispatch.test_type_ann_registercCr%)Nc@sNeZdZejedd���Zejedefdd���Z	ejede
fdd���Z	dS)zATestSingleDispatch.test_staticmethod_type_ann_register.<locals>.AcSrWrrr�rrrr��	rZzCTestSingleDispatch.test_staticmethod_type_ann_register.<locals>.A.tr�cSr&rr'r�rrrrX�	r(zCTestSingleDispatch.test_staticmethod_type_ann_register.<locals>.A._cSr&rr)r�rrrrX�	r(Nr*rrrrr�	srrrr#r+r,rrr�#test_staticmethod_type_ann_register�	r.z6TestSingleDispatch.test_staticmethod_type_ann_registercCr/)	Nc@sVeZdZdd�Zejedd���Zejede	fdd���Z
ejedefdd���Z
d	S)
z@TestSingleDispatch.test_classmethod_type_ann_register.<locals>.AcSrqrr�rrrrr��	r�zITestSingleDispatch.test_classmethod_type_ann_register.<locals>.A.__init__cSr0r�rr1rrrr��	r�zBTestSingleDispatch.test_classmethod_type_ann_register.<locals>.A.tr�cSr0rrr1rrrrX�	r�zBTestSingleDispatch.test_classmethod_type_ann_register.<locals>.A._cSr0r rr1rrrrX�	r�Nr2rrrrr�	srrryrr�r#rxr3r�rrr�"test_classmethod_type_ann_register�	r5z5TestSingleDispatch.test_classmethod_type_ann_registerc	Cs�Gdd�d�}|j|�j|j|�j|j|�jfD](}|j|d��|�|jd�|�|jdt�Wd�n1s;wYq|�|jjd�|�|�jjd�|�|jjd�|�|�jjd�|�|jjd�|�|�jjd�dS)	Nc@s\eZdZejdedefdd��Zejededefdd���Z	eje
dedefdd���Zd	S)
z=TestSingleDispatch.test_method_wrapping_attributes.<locals>.Ar��returncS�t|�S��My function docstring�r�rrrrr�	r�zBTestSingleDispatch.test_method_wrapping_attributes.<locals>.A.funccSr<r=r?r1rrr�cls_func�	�zFTestSingleDispatch.test_method_wrapping_attributes.<locals>.A.cls_funccSst|�Sr=r?r�rrr�static_func�	rAzITestSingleDispatch.test_method_wrapping_attributes.<locals>.A.static_funcN)r%r&r'r	r"ryr�rrr@r�rBrrrrr�	sr��methr>r�rr@rB)	rr@rBrrJr@r8ryr%)r-rrDrrr�test_method_wrapping_attributes�	s&���z2TestSingleDispatch.test_method_wrapping_attributesc	s�dd��G�fdd�d�}G�fdd�d�}|�d��
}|}Wd�n1s(wY|�d��
}|}Wd�n1s?wY|�||�|�|d�|�|�d�|�d��|�|�d�d�d	D]6}|j|d
��&|�t||�jt||�j�|�t|�|�jt|�|�j�Wd�n1s�wYqg|j|�j|j|�jfD](}|j|d��|�|jd�|�|jd
t�Wd�n1s�wYq�|�|jjd�|�|�jjd�|�|jjd�|�|�jjd�dS)Ncs$|j�tt����fdd���}|S)Ncs�|i|��Srr)rr��r*rrr)�	szgTestSingleDispatch.test_double_wrapped_methods.<locals>.classmethod_friendly_decorator.<locals>.wrapper)�__func__rr	rW)rr)rrFr�classmethod_friendly_decorator�	s
zVTestSingleDispatch.test_double_wrapped_methods.<locals>.classmethod_friendly_decoratorcsBeZdZeejdedefdd���Z�ededefdd���Z	dS)zMTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatchr�r;cs� �zt|�VWdSYdS)N�Doner?r1rrr�cls_context_manager�	s�zaTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatch.cls_context_managercSr<rr?r1rrr�decorated_classmethod�	r�zcTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatch.decorated_classmethodN)
r%r&r'r�
contextlib�contextmanagerryr�rKrLr�rHrr�WithoutSingleDispatch�	srPcsNeZdZejeejdede	fdd����Z
ej�edede	fdd����ZdS)zJTestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatchr�r;csrI)r>rJr?r1rrrrK�	s�z^TestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatch.cls_context_managercSr<r=r?r1rrrrL�	sz`TestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatch.decorated_classmethodN)r%r&r'r	r"rrMrNryr�rKrLrrOrr�WithSingleDispatch�	srQrY�5)rKrL)rrCr>r�rKrL)	rKrJrLrr|r%r@r8ry)r-rPrQr��without_single_dispatch_foo�single_dispatch_foo�method_namerDrrOr�test_double_wrapped_methods�	sl���

�����������z.TestSingleDispatch.test_double_wrapped_methodscCs^d}d}tjdd��}|�t��}|�d�dd��}Wd�n1s$wY|�t|j��|d��|�t|j��	|��|�t��}|jd	d��}Wd�n1sXwY|�t|j��|d
��|�t|j��	|��|�t��}|jdt
jtfdd��}Wd�n1s�wY|�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.cSr�r�rr�rrrr_C
rz8TestSingleDispatch.test_invalid_registrations.<locals>.irecSr�)NzI annotated with a non-typerr�rrrrXG
rz8TestSingleDispatch.test_invalid_registrations.<locals>._�42cSr�)NzI forgot to annotaterr�rrrrXM
rzB<function TestSingleDispatch.test_invalid_registrations.<locals>._r�cSr�)Nz%I annotated with a generic collectionrr�rrrrXV
szInvalid annotation for 'arg'.z$typing.Iterable[str] is not a class.)r	r�rRrSr�rHr�rBrM�endswith�typingr�)r-�
msg_prefix�
msg_suffixr_�excrXrrr�test_invalid_registrations=
s:�
�����
�z-TestSingleDispatch.test_invalid_registrationscCsJtjdd��}d}|�t|��|�Wd�dS1swYdS)NcWrrrr0rrrrre
rz>TestSingleDispatch.test_invalid_positional_argument.<locals>.fz)f requires at least 1 positional argument)r	r��assertRaisesRegexrS)r-rr�msgrrr� test_invalid_positional_argumentd
s
"�z3TestSingleDispatch.test_invalid_positional_argumentcCs�tjdd��}|�td��|�ttdd��Wd�n1s"wY|�td��|�tjtdd��Wd�n1sCwY|�td��|�ttt	Bdd��Wd�n1sewY|�td��|�tjt
tBdd��Wd�n1s�wY|�td��|�tjd	d��Wd�n1s�wY|�
|d
g�d�|�
|dg�d�|�
|d
�d�|�
|d�d�dS)NcSr��N�defaultrr�rrrrrm
rz8TestSingleDispatch.test_register_genericalias.<locals>.f�Invalid first argument to cSr��Nztypes.GenericAliasrr�rrrrEr
r�z?TestSingleDispatch.test_register_genericalias.<locals>.<lambda>cSr��Nztyping.GenericAliasrr�rrrrEt
r�cSr�)Nz$types.UnionTypes(types.GenericAlias)rr�rrrrEv
r�cSr��Nz!typing.Union[typing.GenericAlias]rr�rrrrEx
r�cSr��Nz
typing.Anyrr�rrrrEz
r�r4rb��?r�)r	r�r^rSr�r+ryrY�Listr��float�bytes�AnyrJrurrr�test_register_genericaliasl
s*
�����z-TestSingleDispatch.test_register_genericaliascCs@tjdd��}|�td��|�tt�Wd�n1swY|�td��|�tjt�Wd�n1s=wY|�td��|�ttt	B�Wd�n1s\wY|�td��|�tjtt	B�Wd�n1s|wY|�td��|�tj
�Wd�dS1s�wYdS)NcSr�rarr�rrrrr�
rzBTestSingleDispatch.test_register_genericalias_decorator.<locals>.frc)r	r�r^rSr�r+ryrYrjr�rmrurrr�$test_register_genericalias_decorator�
s"
����"�z7TestSingleDispatch.test_register_genericalias_decoratorcCs�tjdd��}|�td��|jdttfdd��}Wd�n1s$wY|�td��|jdtjt	fdd��}Wd�n1sGwY|�td��|jdttt
Bfdd��}Wd�n1skwY|�td��|jdtjt	tBfd	d��}Wd�n1s�wY|�td��|jdtjfd
d��}Wd�n1s�wY|�
|dg�d�|�
|d
g�d�|�
|d�d�|�
|d�d�dS)NcSr�rarr�rrrrr�
rzCTestSingleDispatch.test_register_genericalias_annotation.<locals>.fzInvalid annotation for 'arg'r�cSr�rdrr�rrrrX�
rzCTestSingleDispatch.test_register_genericalias_annotation.<locals>._cSr�rerr�rrrrX�
rcSr�)Nz#types.UnionType(types.GenericAlias)rr�rrrrX�
rcSr�rfrr�rrrrX�
rcSr�rgrr�rrrrX�
rr4rbrhrri)r	r�r^rSr�r+ryrYrjrkr�rlrmrJ)r-rrrXrrr�%test_register_genericalias_annotation�
s4
�����z8TestSingleDispatch.test_register_genericalias_annotationN)#r%r&r'r�r�r�r�rQ�
skipUnlessrrr�r�r�r�r�r�rrrr$r-r4r6r7r8r9r:rErVr]r`rnrorprrrrr�s>
	6^f$c'r�c@�&eZdZdZdd�Zejdd��ZdS)�CachedCostItemr4cCst��|_dSr)r��RLock�lockrUrrrr��
rzCachedCostItem.__init__cCs>|j�|jd7_Wd�|jS1swY|jS)�The cost of the item.r4N)ru�_costrUrrr�cost�
s
��zCachedCostItem.costN)r%r&r'rwr�r��cached_propertyrxrrrrrs�
�
rsc@s"eZdZdZdd�Ze�e�ZdS)�OptionallyCachedCostItemr4cCs|jd7_|jS)rvr4�rwrUrrr�get_cost�
sz!OptionallyCachedCostItem.get_costN)r%r&r'rwr}r�ry�cached_costrrrrr{�
sr{c@s"eZdZdd�Zejdd��ZdS)�CachedCostItemWaitcCsd|_t��|_||_dSr�)rwr�rtru�event)r-r�rrrr��
s

zCachedCostItemWait.__init__cCsJ|j�d�|j�|jd7_Wd�|jS1swY|jSr�)r�rZrurwrUrrrrx�
s
��zCachedCostItemWait.costN)r%r&r'r�r�ryrxrrrrr�
src@rr)�CachedCostItemWithSlotsrwcCrr�r|rUrrrr��
r�z CachedCostItemWithSlots.__init__cCstd��)Nz!never called, slots not supportedrhrUrrrrx�
rzCachedCostItemWithSlots.costN)r%r&r'�	__slots__r�r�ryrxrrrrr��
rzr�c@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�TestCachedPropertycCs&t�}|�|jd�|�|jd�dSr)rsrJrx�r-�itemrrr�test_cached�
szTestCachedProperty.test_cachedcCsFt�}|�|��d�|�|jd�|�|��d�|�|jd�dS)Nr5r;r<)r{rJr}r~r�rrr�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�z+�fdd�t|�D�}t�|��|�	�Wd�n1s3wYWt�|�nt�|�w|�
�jd�dS)Nr;r_cs g|]}tj�fdd�d��qS)cs�jSr)rxr�r�rrrE�
sz=TestCachedProperty.test_threaded.<locals>.<listcomp>.<lambda>rircrfr�rrr��
s��z4TestCachedProperty.test_threaded.<locals>.<listcomp>r5)rdrjrrrkrlr�rrmrnrJrx)r-�go�num_threadsrorprr�r�
test_threaded�
s

�
��z TestCachedProperty.test_threadedcCs>t�}|�td��|jWd�dS1swYdS)NzWNo '__dict__' attribute on 'CachedCostItemWithSlots' instance to cache 'cost' property.)r�r^rSrxr�rrr�test_object_with_slotss�"�z)TestCachedProperty.test_object_with_slotscCsZGdd�dt�}Gdd�d|d�}|�td��|jWd�dS1s&wYdS)Nc@seZdZejdd��ZdS)z6TestCachedProperty.test_immutable_dict.<locals>.MyMetacSr�)NTrrUrrr�proprz;TestCachedProperty.test_immutable_dict.<locals>.MyMeta.propN)r%r&r'r�ryr�rrrr�MyMetasr�c@r")z7TestCachedProperty.test_immutable_dict.<locals>.MyClassNr$rrrr�MyClassr(r�r�zkThe '__dict__' attribute on 'MyMeta' instance does not support item assignment for caching 'prop' property.)r�r^rSr�)r-r�r�rrr�test_immutable_dict
s�"�z&TestCachedProperty.test_immutable_dictcCsX|�t��}Gdd�d�}Wd�n1swY|�t|jj�ttd���dS)zDDisallow this case because decorated function a would not be cached.c@seZdZejdd��ZeZdS)zKTestCachedProperty.test_reuse_different_names.<locals>.ReusedCachedPropertycSrrrrUrrrr9 rzMTestCachedProperty.test_reuse_different_names.<locals>.ReusedCachedProperty.aN)r%r&r'r�ryr9r:rrrr�ReusedCachedPropertys
r�NzLCannot assign the same cached_property to two different names ('a' and 'b').)rRrirJr�rBrCrS)r-�ctxr�rrr�test_reuse_different_namess�

�z-TestCachedProperty.test_reuse_different_namescstd�tj�fdd���G�fdd�d�}G�fdd�d�}|�}|�}|�|jd�|�|jd	�|�|jd�d
S)zIReusing a cached_property on different classes under the same name is OK.rcs�d7��Sr�r)�_self)�counterrr�_cp/rz4TestCachedProperty.test_reuse_same_name.<locals>._cpc�eZdZ�ZdS)z2TestCachedProperty.test_reuse_same_name.<locals>.AN�r%r&r'�cpr�r�rrr5r�rcr�)z2TestCachedProperty.test_reuse_same_name.<locals>.BNr�rr�rrr8r�rr4r5N)r�ryrJr�)r-rrr9r:r)r�r�r�test_reuse_same_name+sz'TestCachedProperty.test_reuse_same_namecCs\t�dd��}Gdd�d�}||_|�td��
|�jWd�dS1s'wYdS)NcSrrr)r�rrrrECr�z=TestCachedProperty.test_set_name_not_called.<locals>.<lambda>c@r")z8TestCachedProperty.test_set_name_not_called.<locals>.FooNr$rrrr�FooDr(r�zGCannot use cached_property instance without calling __set_name__ on it.)r�ryr�r^rS)r-r�r�rrr�test_set_name_not_calledBs�
"�z+TestCachedProperty.test_set_name_not_calledcCs|�tjtj�dSr)�assertIsInstancersrxr�ryrUrrr�test_access_from_classO�z)TestCachedProperty.test_access_from_classcCs|�tjjd�dS)Nrv)rJrsrxr@rUrrr�test_docRr�zTestCachedProperty.test_docN)
r%r&r'r�r�r�r�r�r�r�r�r�r�rrrrr��
s
r��__main__)Orr-r��collections.abcr��	itertoolsrr��randomrrrvrrdr{rYrQ�
unittest.mock�osr�r�rrM�test.supportrr�test.support.script_helperrr	�import_fresh_moduler�r�rrNrrr!r�r#r*rKr2r3rq�TestCaser�r�rGr�r�r�r�r�r'rVr[r}rr�r�r�r�r�r�r�rrr�r�r�r�r�rsr{rr�r�r%�mainrrrr�<module>s��


G3
r>
O
Sh	

1
r�

Youez - 2016 - github.com/yon3zu
LinuXploit