HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_functools.cpython-37.pyc
B

��gdJ�@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/e�$ed�Gd-d.�d.ej%��Z0Gd/d0�d0�Z1e�$ed�Gd1d2�d2e1ej%��Z2Gd3d4�d4e1ej%�Z3Gd5d6�d6ej%�Z4ej5Gd7d8�d8��Z6Gd9d:�d:�Z7e�8�d;d<��Z9e�8�d=d>��Z:Gd?d@�d@e7ej%�Z;GdAdB�dBe7ej%�Z<GdCdD�dDej%�Z=e>dEk�r�e�?�dS)F�N)�permutations)�choice)�support)�proxy�	functools�
_functools)Zblocked)Zfresh�decimalZ_decimalc	cs0tj|}|tj|<z
dVWd|tj|<XdS)N)�sys�modules)�nameZreplacementZoriginal_module�r�//usr/local/lib/python3.7/test/test_functools.py�replaced_modules



rcOs||fS)z,capture all positional and keyword argumentsr)�args�kwrrr
�capture#srcCs|j|j|j|jfS)z* return the signature of a partial object )�funcr�keywords�__dict__)�partrrr
�	signature(src@seZdZdS)�MyTupleN)�__name__�
__module__�__qualname__rrrr
r,src@seZdZdd�ZdS)�BadTuplecCst|�t|�S)N)�list)�self�otherrrr
�__add__0szBadTuple.__add__N)rrrrrrrr
r/src@seZdZdS)�MyDictN)rrrrrrr
r 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'r,cSs|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"r#)r0rr3rrrr4)rr6rrr
�test_attributesAszTestPartial.test_attributescCsB|�t|j�y|�d��Wntk
r2YnX|�d�dS)Nr#z%First arg not checked for callability)�assertRaises�	TypeErrorr0�fail)rrrr
�test_argument_checkingHsz"TestPartial.test_argument_checkingcCs`ddd�}ddi}|j|dd�}|�|f|�d�|�|ddi�|d	d
�|�|ddi�dS)Nr$r%cSs|S)Nr)r&r'rrr
rSszBTestPartial.test_protection_of_callers_dict_argument.<locals>.funcr&r(�)r&�)r')r$r%)r0r3)rr�dr6rrr
�(test_protection_of_callers_dict_argumentQs

z4TestPartial.test_protection_of_callers_dict_argumentcCsNddi}|jtf|�}|�|�dddif�d|d<|�|�dddif�dS)Nr&r(rr=)r0rr3)rr?r6rrr
�test_kwargs_copy\s
zTestPartial.test_kwargs_copycCsl|�t�}|�|�dif�|�|dd�dif�|�tdd�}|�|�dif�|�|dd�dif�dS)Nrr"r#)r"r#r(r))r"r#r(r))r0rr3)rr6r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")r&r&r#)r')r&r'r()r0rr3r)rr6rrr
�test_kw_combinationsos
z TestPartial.test_kw_combinationscCsLxFdD]>}|jtf|��}|d}|d�\}}|�||ko@|ik�qWdS)N)r)r)rr")rr"r#)rr"r#r()r-r-)r0rr1)rrr6�expected�got�emptyrrr
�test_positional}s

zTestPartial.test_positionalcCsNxHdD]@}|jt|d�}|dd�}|dd�\}}|�||koB|dk�qWdS)N)r&rNg@)r&)r&r-)r-r)r0rr1)rr&r6rDrFrErrr
�test_keyword�s


zTestPartial.test_keywordcCsd|jtddd�}|ddd�\}}|�|dko8|ddd�k�|�\}}|�|dko\|d	dik�dS)
Nrr")r&r#)r')rr")r&r')rr&)r0rr1)rr6Zargs1Zkw1Zargs2Zkw2r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||dS)Nr)r-�yrrr
�f�sz-TestPartial.test_error_propagation.<locals>.fr"r)rJ)r9�ZeroDivisionErrorr0)rrKrrr
�test_error_propagation�s
z"TestPartial.test_error_propagationcCs>|jtdd�}t|�}|�|j|j�d}|�tt|d�dS)N�)�baser)r0�intrr3rr9�ReferenceError�getattr)rrKr6rrr
�test_weakref�s
zTestPartial.test_weakrefcCsPttttd���}|�tjd�}|�||�d�|�dj�}|�||�d�dS)Nr$��
0123456789)rr5�str�ranger0�joinr3)r�datarXr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)r0rr3)rr0�inner�nestedZflatrrr
�test_nested_optimization�s

z$TestPartial.test_nested_optimizationcCs:|j}dd�}||d�}||d�}d|_|�|jd�dS)NcSs|S)Nr)r\rrr
�foo�sz;TestPartial.test_nested_partial_with_attribute.<locals>.foo�first�secondZspam)r0Znew_attrr3)rr0r`r6Zp2r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)
Nz, css|]}t|�VqdS)N)�repr)�.0r&rrr
�	<genexpr>�sz(TestPartial.test_repr.<locals>.<genexpr>)r&r'za={a!r}, b={b!r}zb={b!r}, a={a!r}zfunctools.partial�(�)cs"g|]}��dt�d|�d��qS)rgz, rh)r)re�kwargs_repr)rrr
�
<listcomp>�sz)TestPartial.test_repr.<locals>.<listcomp>c
s(g|] }��dt�d��d|�d��qS)rgz, rh)r)reri)�	args_reprrrr
rj�s)�objectrX�
format_mapr0�c_functools�py_functoolsrrr3rd�assertIn)rr�kwargsZkwargs_reprsrKr)rkrr
�	test_repr�s(
"



zTestPartial.test_reprcCs|jtjtjfkrd}n|jj}|�t�}|�|diif�z|�t|�d|f�Wd|�tdiif�X|�t�}|�t|fiif�z|�t|�d|tf�Wd|�tdiif�X|�t�}|�tdd|iif�z|�t|�d|tf�Wd|�tdiif�XdS)Nzfunctools.partialrz%s(...)z%s(%r, ...)r&z
%s(%r, a=...))r0rnrorr�__setstate__r3rd)rrrKrrr
�test_recursive_repr�s$


zTestPartial.test_recursive_reprc	Csp|���^|jtdgdgd�}g|_x<ttjd�D]*}t�t�||��}|�	t|�t|��q4WWdQRXdS)Nr[T)r\r")
�AllowPickler0r�attrrW�pickle�HIGHEST_PROTOCOL�loads�dumpsr3)rrK�proto�f_copyrrr
�test_pickle�s
zTestPartial.test_picklecCsl|jtdgdgd�}g|_t�|�}|�t|�t|��|�|j|j�|�|j|j�|�|j|j�dS)Nr[T)r\)r0rrv�copyr3�assertIsrr)rrKr|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)Nr[T)r\rr\)	r0rrvr~�deepcopyr3ZassertIsNotrr)rrKr|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$)r&)rvr#r%)r')r"r#)r&r'r'r)r#)r0rrsrr4r3)rrKr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)r0rr9r:rsr)rrKr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)	N)r"r$)r&r"r#r&r)r"r#)r0rrsrrr r3r4r�type�tupler)rrK�s�rrrr
�test_setstate_subclasses3s"
z$TestPartial.test_setstate_subclassescCs�|�����|�t�}|�|diif�z>x8ttjd�D]&}|�t��t�	||�WdQRXq:WWd|�tdiif�X|�t�}|�t|fiif�zZxTttjd�D]B}t�
t�	||��}z|�|jd|�Wd|�tdiif�Xq�WWd|�tdiif�X|�t�}|�tdd|iif�z\xVttjd�D]D}t�
t�	||��}z|�|j
d|�Wd|�tdiif�X�q<WWd|�tdiif�XWdQRXdS)Nrr"rr&)rur0rrsrWrwrxr9�RecursionErrorrzryrrr)rrKr{r|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)rr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�rW�
IndexError)r�keyrrr
�__getitem__oszCTestPartial.test_setstate_refcount.<locals>.BadSequence.__getitem__N)rrrr�r�rrrr
�BadSequencelsr�)r0rlr9r:rs)rr�rKrrr
�test_setstate_refcountks
z"TestPartial.test_setstate_refcountN)rrrr7r8r<r@rArBrCrGrHrIrMrSrZr_rcrrrtr}r�r�r�r�r�r�r�rrrr
r!7s2		
	
$r!z requires the C _functools modulec@s<eZdZerejZGdd�d�Zdd�Zdd�Zdd�Zd	S)
�TestPartialCc@seZdZdd�Zdd�ZdS)zTestPartialC.AllowPicklecCs|S)Nr)rrrr
�	__enter__�sz"TestPartialC.AllowPickle.__enter__cCsdS)NFr)rr��value�tbrrr
�__exit__�sz!TestPartialC.AllowPickle.__exit__N)rrrr�r�rrrr
ru�sruc
Cs�|jtddddd�}|�tt|dt�|�tt|dd�|�tt|d	tddd��|�t�}y|`Wnt	k
rxYnX|�
d
�dS)Nr"r#r$r%)r&r'rr)r"r#rz-partial object allowed __dict__ to be deleted)r0rr9�AttributeError�setattrr5r4�hexrr:r;)rr6rrr
�test_attributes_unwritable�s
z'TestPartialC.test_attributes_unwritablec	CsT|�t�}d|jd<t|�}|�d|�|�d|�|�t��|�WdQRXdS)Nr�i�Z1234z'value')r0rrrdrpr9r:)rr6r�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)r)r)r6rr
�__str__�szHTestPartialC.test_keystr_replaces_value.<locals>.MutatesYourDict.__str__N)rrrr�r)r6rr
�MutatesYourDict�sr�Zsthr�z['sth'])r0rrlrrdrp)rr�r�r)r6r
�test_keystr_replaces_value�s
z'TestPartialC.test_keystr_replaces_valueN)	rrrrnr0rur�r�r�rrrr
r�{s
r�c@s eZdZejZGdd�d�ZdS)�
TestPartialPyc@s$eZdZdd�Zdd�Zdd�ZdS)zTestPartialPy.AllowPicklecCstdt�|_dS)Nr)rro�_cm)rrrr
�__init__�sz"TestPartialPy.AllowPickle.__init__cCs
|j��S)N)r�r�)rrrr
r��sz#TestPartialPy.AllowPickle.__enter__cCs|j�|||�S)N)r�r�)rr�r�r�rrr
r��sz"TestPartialPy.AllowPickle.__exit__N)rrrr�r�r�rrrr
ru�sruN)rrrror0rurrrr
r��sr�c@seZdZdS)�CPartialSubclassN)rrrrrrr
r��sr�c@seZdZdS)�PyPartialSubclassN)rrrrrrr
r��sr�c@seZdZereZdZdS)�TestPartialCSubclassN)rrrrnr�r0r_rrrr
r��sr�c@seZdZeZdS)�TestPartialPySubclassN)rrrr�r0rrrr
r��sr�c@sreZdZGdd�de�Ze�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�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#)r&r(r))r')rrr=�)r,r>��	)r?N)rrrr�
partialmethodr�nothing�
positionalr�both�
spec_keywordsr^r0�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)Nr=r�)r,r,r"r&r#)r&r,r(r'r))r'r,)rr)r3r&r�r�rr�r�r�)rrrr
rB�s$"& $("$( $&*.z'TestPartialMethod.test_arg_combinationscCs�|�|j��|jddfif�|�|j�d�|jdddfif�|�|jjdd�|jddfddif�|�|jjddd�|jdddfddif�|�|jj|jddd�|jdddfddif�dS)Nr"r=r�r>)r?r?)r3r&r^r�)rrrr
�test_nested�s
"&*zTestPartialMethod.test_nestedcCs�|�|j��|jdfddif�|�|j�d�|jddfddif�|�|jjdd�|jdfddd�f�|�|jjddd�|jddfddd�f�|�|jj|jddd�|jddfddd�f�dS)Nr>r,r�r=r�)r?)r,r?)r3r&r�r�)rrrr
�test_over_partial�s
 $&*z#TestPartialMethod.test_over_partialcCs`|j}|�|jj|�|�|jj|�|�|jj|�|�|jj|j�|�|jjj|j�dS)N)r&rr��__self__r^r�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�r^r�r�r&)rr�rrr
�test_unbound_method_retrievalsz/TestPartialMethod.test_unbound_method_retrievalc
Cs�x|j|jgD�]}|j|d���|�|��dif�|�|�d�dif�|�|jdd�dddif�|�|jddd�dddif�|�|��|jfddif�|�|�d�|jdfddif�|�|jdd	�|jfddd
�f�|�|jddd	�|jdfddd
�f�WdQRXqWdS)N)r�)r�r=)r�r=r�)r?r?r�)r,)r,r?)r�r&�subTestr3r�r�)rr�rrr
�test_descriptorss "z"TestPartialMethod.test_descriptorscCsL|�|jjdd�|jfddif�|�|jj|jdd�|jfddif�dS)Nr()r&r&)r3r&rr�)rrrr
�test_overriding_keywords$s"z*TestPartialMethod.test_overriding_keywordsc	Cs�|�t��Gdd�dt�}WdQRX|�t��Gdd�d�}WdQRXGdd�d�}|�}|�|jddd�|dfddd	�f�dS)
Nc@seZdZe�dd�ZdS)z.TestPartialMethod.test_invalid_args.<locals>.BNr")rrrrr��methodrrrr
�B*sr�c@seZdZe��ZdS)z.TestPartialMethod.test_invalid_args.<locals>.BN)rrrrr�r�rrrr
r�-sc@seZdZejedd�ZdS)z.TestPartialMethod.test_invalid_args.<locals>.Br")rr&N)rrrrr�rr�rrrr
r�/sr#r()r-r")r&r-)r9r:rlr3r�)rr�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))r3rd�varsr��formatr)rrrr
rr4szTestPartialMethod.test_reprcCspGdd�dtj�}|�|jj�|�|jj�x<|jj|jj|jj	|jj
|jjgD]}|�t
|dd��qRWdS)Nc@s&eZdZejdd��Ze�ed�ZdS)z1TestPartialMethod.test_abstract.<locals>.AbstractcSsdS)Nr)rr-rJrrr
�add;sz5TestPartialMethod.test_abstract.<locals>.Abstract.addr=N)	rrr�abc�abstractmethodr�rr��add5rrrr
�Abstract9sr��__isabstractmethod__F)r��ABCMetar1r�r�r�r�r�r�r�r^r�r�rR)rr�rrrr
�
test_abstract8s
(zTestPartialMethod.test_abstractN)rrrrlr�r&rBr�r�r�r�r�r�r�rrr�rrrr
r��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�x$|D]}|�t||�t||��qWxT|D]L}t||�}t||�}x2|D]*}|dkr`|dkr`qJ|�||||�qJWq,W|�|j|�dS)Nr�__wrapped__)rrRr�)	r�wrapper�wrapped�assigned�updatedrZwrapper_attrZwrapped_attrr�rrr
�
check_wrapperJs




zTestUpdateWrapper.check_wrappercCs<dd�dd�}d|_d|_dd�d	d
�}t�||�||fS)NzThis is a new annotation)r&cSsdS)zThis is a testNr)r&rrr
rK^sz,TestUpdateWrapper._default_update.<locals>.fzThis is also a testzThis is a bald faced liezThis is the prior annotation)r'cSsdS)Nr)r'rrr
r�csz2TestUpdateWrapper._default_update.<locals>.wrapper)rvr�r�update_wrapper)rrKr�rrr
�_default_update]sz!TestUpdateWrapper._default_updatecCsv|��\}}|�||�|�|j|�|�|jd�|�|j|j�|�|jd�|�|jdd�|�	d|j�dS)NrKzThis is also a testr&zThis is a new annotationr')
r�r�rr�r3rrrv�__annotations__�assertNotIn)rr�rKrrr
�test_default_updatehsz%TestUpdateWrapper.test_default_updater#z)Docstrings are omitted with -O2 and abovecCs|��\}}|�|jd�dS)NzThis is a test)r�r3�__doc__)rr�rKrrr
�test_default_update_docrsz)TestUpdateWrapper.test_default_update_doccCs�dd�}d|_dd�}t�||dd�|�||dd�|�|jd�|�|j|j�|�|jd�|�|j	i�|�
t|d��dS)	NcSsdS)zThis is a testNrrrrr
rKysz+TestUpdateWrapper.test_no_update.<locals>.fzThis is also a testcSsdS)Nrrrrr
r�}sz1TestUpdateWrapper.test_no_update.<locals>.wrapperrr�rv)rvrr�r�r3r�assertNotEqualrr�r�r�r�)rrKr�rrr
�test_no_updatexsz TestUpdateWrapper.test_no_updatecCs�dd�}d|_tdddd�|_dd	�}i|_d
}d}t�||||�|�||||�|�|jd�|�|j	|j	�|�|j
d�|�|jd�|�|j|j�dS)
NcSsdS)Nrrrrr
rK�sz2TestUpdateWrapper.test_selective_update.<locals>.fzThis is a different testr"r#r()r&r'r,cSsdS)Nrrrrr
r��sz8TestUpdateWrapper.test_selective_update.<locals>.wrapper)rv)�	dict_attrr�)rvr4r�rr�r�r3rr�rr�)rrKr��assign�updaterrr
�test_selective_update�sz'TestUpdateWrapper.test_selective_updatec	Cs�dd�}dd�}i|_d}d}t�||||�|�d|j�|�|ji�|`|�t��t�||||�WdQRXd|_|�t��t�||||�WdQRXdS)	NcSsdS)Nrrrrr
rK�sz4TestUpdateWrapper.test_missing_attributes.<locals>.fcSsdS)Nrrrrr
r��sz:TestUpdateWrapper.test_missing_attributes.<locals>.wrapper)rv)r�rvr")r�rr�r�rr3r9r�)rrKr�r�r�rrr
�test_missing_attributes�sz)TestUpdateWrapper.test_missing_attributescCsFdd�}t�|t�|�|jd�|�|j�d��|�|ji�dS)NcSsdS)Nrrrrr
r��sz6TestUpdateWrapper.test_builtin_update.<locals>.wrapperr�zmax()	rr�r�r3rr1r��
startswithr�)rr�rrr
�test_builtin_update�s
z%TestUpdateWrapper.test_builtin_updateN)rrrr�WRAPPER_ASSIGNMENTS�WRAPPER_UPDATESr�r�r��unittest�skipIfr	�flags�optimizer�r�r�r�rZrequires_docstringsr�rrrr
r�Hs
r�c@sHeZdZdd�Zdd�Ze�ejj	dkd�dd��Z
d	d
�Zdd�Zd
S)�	TestWrapscCs.dd�}d|_d|_t�|�dd��}||fS)NcSsdS)zThis is a testNrrrrr
rK�sz$TestWraps._default_update.<locals>.fzThis is also a testzThis is still a bald faced liecSsdS)Nrrrrr
r��sz*TestWraps._default_update.<locals>.wrapper)rvr�r�wraps)rrKr�rrr
r��s
zTestWraps._default_updatecCsH|��\}}|�||�|�|jd�|�|j|j�|�|jd�dS)NrKzThis is also a test)r�r�r3rrrv)rr�rKrrr
r��s
zTestWraps.test_default_updater#z)Docstrings are omitted with -O2 and abovecCs|��\}}|�|jd�dS)NzThis is a test)r�r3r�)rr��_rrr
r��sz!TestWraps.test_default_update_doccCstdd�}d|_t�|dd�dd��}|�||dd�|�|jd�|�|j|j�|�|jd�|�	t
|d��dS)	NcSsdS)zThis is a testNrrrrr
rK�sz#TestWraps.test_no_update.<locals>.fzThis is also a testrcSsdS)Nrrrrr
r��sz)TestWraps.test_no_update.<locals>.wrapperr�rv)rvrr�r�r3rr�rr�r�r�)rrKr�rrr
r��szTestWraps.test_no_updatecCs�dd�}d|_tdddd�|_dd	�}d
}d}t�|||�|dd
���}|�||||�|�|jd�|�|j	|j	�|�|j
d�|�|jd�|�|j|j�dS)NcSsdS)Nrrrrr
rK�sz*TestWraps.test_selective_update.<locals>.fzThis is a different testr"r#r()r&r'r,cSs
i|_|S)N)r�)rKrrr
�
add_dict_attr�sz6TestWraps.test_selective_update.<locals>.add_dict_attr)rv)r�cSsdS)Nrrrrr
r��sz0TestWraps.test_selective_update.<locals>.wrapperr�)rvr4r�rr�r�r3rr�rr�)rrKr�r�r�r�rrr
r��szTestWraps.test_selective_updateN)
rrrr�r�r�r�r	r�r�r�r�r�rrrr
r��sr�c@s&eZdZerejZdd�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|_dS)N)r��sofar)rr�rrr
r��sz0TestReduce.test_reduce.<locals>.Squares.__init__cSs
t|j�S)N)�lenr�)rrrr
r�sz/TestReduce.test_reduce.<locals>.Squares.__len__cSsVd|kr|jksnt�t|j�}x$||krJ|j�||�|d7}q(W|j|S)Nrr")r�r�r�r��append)r�i�nrrr
r�s

z3TestReduce.test_reduce.<locals>.Squares.__getitem__N)rrrr�r�r�rrrr
�Squares�sr�cSs||S)Nr)r-rJrrr
r�sz#TestReduce.test_reduce.<locals>.addr&r'r,rTr�r?�wcSs||S)Nr)r-rJrrr
r.r/z(TestReduce.test_reduce.<locals>.<lambda>r#r�r"i�cSs||S)Nr)r-rJrrr
r.r/�lh�r$ir�*�1)r�r�rc@seZdZdd�ZdS)z/TestReduce.test_reduce.<locals>.TestFailingItercSst�dS)N)�RuntimeError)rrrr
�__iter__'sz8TestReduce.test_reduce.<locals>.TestFailingIter.__iter__N)rrrr�rrrr
�TestFailingIter&sr�c@seZdZdd�ZdS)z&TestReduce.test_reduce.<locals>.BadSeqcSst�dS)N)�
ValueError)r�indexrrr
r�/sz2TestReduce.test_reduce.<locals>.BadSeq.__getitem__N)rrrr�rrrr
�BadSeq.sr)r3rrWr9r:rlr�r�)rr�r�r�rrrr
�test_reduce�s: 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
||_dS)N)r�)rr�rrr
r�6sz>TestReduce.test_iterator_usage.<locals>.SequenceClass.__init__cSs&d|kr|jkrnn|St�dS)Nr)r�r�)rr�rrr
r�8szATestReduce.test_iterator_usage.<locals>.SequenceClass.__getitem__N)rrrr�r�rrrr
�
SequenceClass5srr)r�r=r$r��4r"r#r()ZoneZtwoZthreerT)�operatorr�r3rr9r:rX�keys)rrr�r?rrr
�test_iterator_usage4s	zTestReduce.test_iterator_usageN)rrrrn�reducerrrrrrr
r��s8r�c@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||kS)Nr)r-rJrrr
�cmp1Msz*TestCmpToKey.test_cmp_to_key.<locals>.cmp1r(r"cSst|�t|�S)N)rP)r-rJrrr
�cmp2Tsz*TestCmpToKey.test_cmp_to_key.<locals>.cmp2g@�4r#Z35)�
cmp_to_keyr3�
assertGreaterZassertGreaterEqualZ
assertLess�assertLessEqualr�)rr	r�r
rrr
�test_cmp_to_keyLs

zTestCmpToKey.test_cmp_to_keyc	Csdd�}|j|d�}|�|dd�|dd��|�|dd�|dd��|�ttf��|d�dkWdQRX|�ttf��d|d�kWdQRX|�t��|��}WdQRX|�t��|�|d�}WdQRX|�|�}|�t��|�WdQRX|�t��|dd�WdQRXdS)NcSs||k||kS)Nr)r-rJrrr
r	]sz4TestCmpToKey.test_cmp_to_key_arguments.<locals>.cmp1)�mycmpr()r�r")rr3r
r9r:r�)rr	r�rrr
�test_cmp_to_key_arguments\s"
z&TestCmpToKey.test_cmp_to_key_argumentsc	s|dd�}|�|�}|�t��|d�|d�kWdQRXGdd�d���fdd�}|�t��|d�|d�kWdQRXdS)NcSst�dS)N)rL)r-rJrrr
r	qsz'TestCmpToKey.test_bad_cmp.<locals>.cmp1r(r"c@seZdZdd�ZdS)z)TestCmpToKey.test_bad_cmp.<locals>.BadCmpcSst�dS)N)rL)rrrrr
�__lt__xsz0TestCmpToKey.test_bad_cmp.<locals>.BadCmp.__lt__N)rrrrrrrr
�BadCmpwsrcs��S)Nr)r-rJ)rrr
r	zs)rr9rL)rr	r�r)rr
�test_bad_cmpps
zTestCmpToKey.test_bad_cmpcCs*dd�}|j|d�}|�|d�jd�dS)NcSs||k||kS)Nr)r-rJrrr
r	�sz)TestCmpToKey.test_obj_field.<locals>.cmp1)r�2)rr3r�)rr	r�rrr
�test_obj_fieldszTestCmpToKey.test_obj_fieldcCs4dd�}|�ttd�|�|�d�ddddd	g�dS)
NcSs||S)Nr)r-rJrrr
r�sz)TestCmpToKey.test_sort_int.<locals>.mycmpr=)r�r)r(r#r"r)r3�sortedrWr)rrrrr
�
test_sort_int�szTestCmpToKey.test_sort_intcCs\dd�}ddddddd	d
dg	}t||�|�d�}|�d
d�|D�dddddd	dddg	�dS)NcSs"t|�t|�}}||k||kS)N)rP)r-rJrrr
r�sz-TestCmpToKey.test_sort_int_str.<locals>.mycmpr=�3r>r#�0r�r)Z10r")r�cSsg|]}t|��qSr)rP)rer�rrr
rj�sz2TestCmpToKey.test_sort_int_str.<locals>.<listcomp>rr(r$)rrr3)rr�valuesrrr
�test_sort_int_str�s
zTestCmpToKey.test_sort_int_strcCs<dd�}|�|�}|d�}|�tt|�|�|tjj�dS)NcSs||S)Nr)r-rJrrr
r�sz%TestCmpToKey.test_hash.<locals>.mycmpr$)rr9r:�hashZassertNotIsInstance�collectionsr��Hashable)rrr��krrr
�	test_hash�s

zTestCmpToKey.test_hashN)
rrrrrrrrrr!rrrr
rJs	rc@seZdZerejZdS)�
TestCmpToKeyCN)rrrrnrrrrr
r"�sr"c@seZdZeej�ZdS)�TestCmpToKeyPyN)rrrr�rorrrrr
r#�sr#c@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
||_dS)N)r�)rr�rrr
r��sz<TestTotalOrdering.test_total_ordering_lt.<locals>.A.__init__cSs|j|jkS)N)r�)rrrrr
r�sz:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__lt__cSs|j|jkS)N)r�)rrrrr
�__eq__�sz:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__eq__N)rrrr�rr%rrrr
r��sr�r"r#)r�total_orderingr1r�)rr�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
||_dS)N)r�)rr�rrr
r��sz<TestTotalOrdering.test_total_ordering_le.<locals>.A.__init__cSs|j|jkS)N)r�)rrrrr
�__le__�sz:TestTotalOrdering.test_total_ordering_le.<locals>.A.__le__cSs|j|jkS)N)r�)rrrrr
r%�sz:TestTotalOrdering.test_total_ordering_le.<locals>.A.__eq__N)rrrr�r(r%rrrr
r��sr�r"r#)rr&r1r�)rr�r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
||_dS)N)r�)rr�rrr
r��sz<TestTotalOrdering.test_total_ordering_gt.<locals>.A.__init__cSs|j|jkS)N)r�)rrrrr
�__gt__�sz:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__gt__cSs|j|jkS)N)r�)rrrrr
r%�sz:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__eq__N)rrrr�r*r%rrrr
r��sr�r"r#)rr&r1r�)rr�r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
||_dS)N)r�)rr�rrr
r��sz<TestTotalOrdering.test_total_ordering_ge.<locals>.A.__init__cSs|j|jkS)N)r�)rrrrr
�__ge__�sz:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__ge__cSs|j|jkS)N)r�)rrrrr
r%�sz:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__eq__N)rrrr�r,r%rrrr
r��sr�r"r#)rr&r1r�)rr�r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>.AN)rrrrrrr
r��sr�r"r#)rr&rPr1)rr�rrr
� test_total_ordering_no_overwrite�sz2TestTotalOrdering.test_total_ordering_no_overwritec	Cs.|�t��tjGdd�d��}WdQRXdS)Nc@seZdZdS)z7TestTotalOrdering.test_no_operations_defined.<locals>.AN)rrrrrrr
r��sr�)r9r�rr&)rr�rrr
�test_no_operations_defined�s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
kWdQRXWdQRX|�d��,|�t���d��d�kWdQRXWdQRX|�d��,|�t���d
��d
�kWdQRXWdQRX|�d��,|�t���d��d�kWdQRXWdQRX|�d��,|�t���d��d�kWdQRXWdQRX|�d��,|�t���d��d�kWdQRXWdQRX|�d��,|�t���d��d�kWdQRXWdQRX|�d��,|�t���d��d�kWdQRXWdQRX|�d��,|�t���d��d�kWdQRXWdQRX|�d��@�d�}�d�}|�||�|�t��||kWdQRXWdQRX|�d��@�d �}�d �}|�||�|�t��||kWdQRXWdQRXdS)!Ncs,eZdZdd�Z�fdd�Z�fdd�ZdS)zRTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThancSs
||_dS)N)r�)rr�rrr
r�sz[TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__init__cst|��r|j|jkSdS)NF)�
isinstancer�)rr)�ImplementsLessThanrr
r%s
zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__eq__cst|��r|j|jkStS)N)r0r��NotImplemented)rr)r1rr
r
s
zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__lt__N)rrrr�r%rr)r1rr
r1sr1cs,eZdZdd�Z�fdd�Z�fdd�ZdS)zUTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThancSs
||_dS)N)r�)rr�rrr
r�sz^TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__init__cst|��r|j|jkSdS)NF)r0r�)rr)�ImplementsGreaterThanrr
r%s
z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__eq__cst|��r|j|jkStS)N)r0r�r2)rr)r3rr
r*s
z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__gt__N)rrrr�r%r*r)r3rr
r3sr3cs,eZdZdd�Z�fdd�Z�fdd�ZdS)zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTocSs
||_dS)N)r�)rr�rrr
r�szbTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__init__cst|��r|j|jkSdS)NF)r0r�)rr)�ImplementsLessThanEqualTorr
r% s
z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__eq__cst|��r|j|jkStS)N)r0r�r2)rr)r4rr
r($s
z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__le__N)rrrr�r%r(r)r4rr
r4sr4cs,eZdZdd�Z�fdd�Z�fdd�ZdS)z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTocSs
||_dS)N)r�)rr�rrr
r�+szeTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__init__cst|��r|j|jkSdS)NF)r0r�)rr)�ImplementsGreaterThanEqualTorr
r%-s
zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__eq__cst|��r|j|jkStS)N)r0r�r2)rr)r5rr
r,1s
zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__ge__N)rrrr�r%r,r)r5rr
r5)sr5cs(eZdZdd�Z�fdd�Zdd�ZdS)zXTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplementedcSs
||_dS)N)r�)rr�rrr
r�8szaTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__init__cst|��r|j|jkSdS)NF)r0r�)rr)�ComparatorNotImplementedrr
r%:s
z_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__eq__cSstS)N)r2)rrrrr
r>sz_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__lt__N)rrrr�r%rr)r6rr
r66sr6zLT < 1���r"zLT < LErzLT < GTzLE <= LTr#zLE <= GEr(zGT > GEr)zGT > LTr=zGE >= GTr�zGE >= LEr>z
GE when equalr�z
LE when equalr�)rr&r�r9r:r3)rr&r'r)r6r3r5r1r4r
�$test_type_error_when_not_implemented�sF



 $$$$$$$$z6TestTotalOrdering.test_type_error_when_not_implementedcCslxfttjd�D]T}xNdD]F}|j||d��.tt|�}t�t�||��}|�||�WdQRXqWqWdS)Nr")rr*r(r,)r�r{)	rWrwrxr�rR�Orderable_LTryrzr)rr{rr�Zmethod_copyrrr
r}js

zTestTotalOrdering.test_pickleN)rrrr'r)r+r-r.r/r8r}rrrr
r$�skr$c@s$eZdZdd�Zdd�Zdd�ZdS)r9cCs
||_dS)N)r�)rr�rrr
r�tszOrderable_LT.__init__cCs|j|jkS)N)r�)rrrrr
rvszOrderable_LT.__lt__cCs|j|jkS)N)r�)rrrrr
r%xszOrderable_LT.__eq__N)rrrr�rr%rrrr
r9rsr9c@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
s^dd�}|jjdd�|�}|��\}}}}|�|d�|�|d�|�|d�|�|d�td�}xBtd�D]6}t|�t|�}	}
||	|
�}||	|
�}|�||�qlW|��\}}}}|�||k�|�||d�|�|d�|��|��\}}}}|�|d�|�|d�|�|d�||	|
�|��\}}}}|�|d�|�|d�|�|d�|�|j	|�|�	|	|
�|��\}}}}|�|d�|�|d�|�|d�|j�d��fd	d
��}|�|��j
d�d�x td�D]}|�|�d��q�W|��d�|��\}}}}|�|d�|�|d�|�|d�|j�d��fdd
��}|�|��j
d�d�x td�D]}|�|�d��qpW|��d�|��\}}}}|�|d�|�|d�|�|d�|j�d
��fdd
��}|�|��j
d
�d�x"dD]}	|�||	�|	d��q�W|��d�|��\}}}}|�|d�|�|d�|�|d
�dS)NcSsd||S)Nr(r)r-rJrrr
�origszTestLRU.test_lru.<locals>.origr%)�maxsizerr=i�r"cs�d7�dS)Nr"r%rr)�f_cntrr
rK�szTestLRU.test_lru.<locals>.fcs�d7�dS)Nr"r%rr)r=rr
rK�sr)r#cs�d7�|dS)Nr"r$r)r-)r=rr
rK�s)r>r�r>r�r>r�r�r�r�r�r�r�r�r�r�r>r$�)�module�	lru_cache�
cache_infor3rWrr1�cache_clearrr�r<)
rr;rK�hits�missesr<�currsize�domainr�r-rJ�actualrDr)r=r
�test_lru~s~



zTestLRU.test_lrucs�d�|jjdd���fdd���x(td�D]}|��|�d|�d��q*W|����jd�|��d�d	�|����jd�dS)
NTr$)r<cs(d|�d�}|dkr$�r$d��|�}|S)N�.r%Fr)r-�rv)rK�oncerr
rK�s
z%TestLRU.test_lru_bug_35780.<locals>.f�rIr%z.20.)r?r@rWr3rArE)rr-r)rKrKr
�test_lru_bug_35780�s
zTestLRU.test_lru_bug_35780cCs:|j��dd��}|d�|di�|�|��jd�dS)NcSsdS)Nr)r-rrr
rK�sz%TestLRU.test_lru_bug_36650.<locals>.frr")r)r?r@r3rArC)rrKr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|S)Nr(r)r-rJrrr
rKsz*TestLRU.test_lru_hash_only_once.<locals>.frL)Zreturn_valuei�rN)rr"r"r"r#)r"r"r"r"r�r%)r"r#r"r"r()r"r(r"r")
r?r@r�ZmockZMock�__mul__�__hash__r3Z
call_countrA)rrKZmock_intrrr
�test_lru_hash_only_onces 
zTestLRU.test_lru_hash_only_oncecCsPtj}z<|j�d�t�t_x$dD]}|�tdd|��|�q WWd|t_XdS)Nr))
rrr"r#r(r(r)r=r�r"r>r#r"Zabcdefghijklmn)�builtinsr�r?r@r3)rZold_lenr�rrr
�test_lru_reentrancy_with_len#s
 z$TestLRU.test_lru_reentrancy_with_lencCs6t��dd��}|�|dd�d�|�|d�d�dS)NcWs|S)Nr)rrrr
rK1sz-TestLRU.test_lru_star_arg_handling.<locals>.fr"r#)r"r#))r"r#)rr@r3)rrKrrr
�test_lru_star_arg_handling/sz"TestLRU.test_lru_star_arg_handlingc	Cshtjdd�dd��}tjdd�dd��}|�t��|g�WdQRX|�t��|g�WdQRXdS)N)r<cSsdS)Nr)�orrr
�infinite_cache=sz3TestLRU.test_lru_type_error.<locals>.infinite_cacher$cSsdS)Nr)rUrrr
�
limited_cacheAsz2TestLRU.test_lru_type_error.<locals>.limited_cache)rr@r9r:)rrVrWrrr
�test_lru_type_error8szTestLRU.test_lru_type_errorcs�|jjdd��fdd���|��fdd�td�D�dddd	d
ddd
ddddddddg�|����|jjddddd�����|����|jjddddd��dS)N)r<cs$|dkr|S�|d��|d�S)Nr#r"r)r�)�fibrr
rYLsz/TestLRU.test_lru_with_maxsize_none.<locals>.fibcsg|]}�|��qSrr)rer�)rYrr
rjQsz6TestLRU.test_lru_with_maxsize_none.<locals>.<listcomp>rNrr"r#r(r=r��
r��"�7�Y���iyib�)rCrDr<rE)r?r@r3rWrA�
_CacheInforB)rr)rYr
�test_lru_with_maxsize_noneKs&

z"TestLRU.test_lru_with_maxsize_nonec	sn|jjdd�dd���x2dD]*}|��fdd�td�D�ttd���qW|����|jjd	d
d	d	d��dS)Ni����)r<cSs|S)Nr)r�rrr
�eqZsz2TestLRU.test_lru_with_maxsize_negative.<locals>.eq)rr"csg|]}�|��qSrr)rer�)rcrr
rj^sz:TestLRU.test_lru_with_maxsize_negative.<locals>.<listcomp>�ri,)rCrDr<rE)r?r@r3rWrrAra)rr�r)rcr
�test_lru_with_maxsize_negativeYs

*
z&TestLRU.test_lru_with_maxsize_negativec
Cs�xzdD]r}|j�|�dd��}|�|d�d�|�t��}|d�WdQRX|�|jj�|�t��|d�WdQRXqWdS)N)N�cSsd|S)Nr�r)r�rrr
rgsz.TestLRU.test_lru_with_exceptions.<locals>.funcrr&rL)r?r@r3r9r�ZassertIsNone�	exception�__context__)rr<r�cmrrr
�test_lru_with_exceptionsbs
z TestLRU.test_lru_with_exceptionscCs�x�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�qWdS)N)NrfT)r<�typedcSs||S)Nr)r-rrr
�squaretsz+TestLRU.test_lru_with_types.<locals>.squarer(r�g@g"@)r-r))r?r@r3r�rArCrD)rr<rlrrr
�test_lru_with_typesrs
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�)rYrr
rY�sz/TestLRU.test_lru_with_keyword_args.<locals>.fibcsg|]}�|d��qS))r�r)re�number)rYrr
rj�sz6TestLRU.test_lru_with_keyword_args.<locals>.<listcomp>rNrr"r#r(r=r�rZr�r[r\r]r^r_iyibr`rf)rCrDr<rE)r?r@r3rWrArarB)rr)rYr
�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)N)r<cs(|dkr|S�|dd��|dd�S)Nr#r")r�r)r�)rYrr
rY�sz<TestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.fibcsg|]}�|d��qS))r�r)rern)rYrr
rj�szCTestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.<listcomp>rNrr"r#r(r=r�rZr�r[r\r]r^r_iyibr`)rCrDr<rE)r?r@r3rWrArarB)rr)rYr
�'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|���S)N)r�items)rqrrr
rK�sz$TestLRU.test_kwargs_order.<locals>.fr"r#)r&r')r&r")r'r#)r'r&r)rCrDr<rE)r?r@r3rAra)rrKrrr
�test_kwargs_order�s

zTestLRU.test_kwargs_ordercCsJdd�dd�}|j��|�}x(|jjD]}|�t||�t||��q&WdS)NZzomg_annotation)�zomgcSsdS)zf doc stringr�r)rsrrr
rK�sz,TestLRU.test_lru_cache_decoration.<locals>.f)r?r@r�r3rR)rrK�grvrrr
�test_lru_cache_decoration�sz!TestLRU.test_lru_cache_decorationc		s�d\}�dd���jj|�d�������\}}}}��|d�t��������fdd�����fdd	�}t��}t�	d
�z�fdd�t
|�D�}t�|�����WdQRX���\}}}}�jt
kr��||���|�||�n ��||���|�||���||�tj|d
�g}|�fdd�t
|�D�7}���t�|�����WdQRXWdt�	|�XdS)N)r=�cSsd||S)Nr(r)r-rJrrr
r;�sz-TestLRU.test_lru_cache_threaded.<locals>.orig)r<rcs8��d�x(t��D]}���|d��|d��qWdS)Nr$r)�waitrWr3)r r�)rK�mr;r�startrr
�full�s
z-TestLRU.test_lru_cache_threaded.<locals>.fullcs,��d�xtd��D]}���qWdS)Nr$r#)rwrWrB)r�)rKrxryrr
�clear�s
z.TestLRU.test_lru_cache_threaded.<locals>.clearg���ư>csg|]}tj�|gd��qS))�targetr)�	threading�Thread)rer )rzrr
rj�sz3TestLRU.test_lru_cache_threaded.<locals>.<listcomp>)r|csg|]}tj�|gd��qS))r|r)r}r~)rer )rzrr
rj�s)r?r@rAr3r}ZEventr	�getswitchintervalr�setswitchintervalrW�
start_threads�setrorr~r{)	rr�rCrDr<rEr{Zorig_si�threadsr)rKrzrxr;rryr
�test_lru_cache_threaded�s:


zTestLRU.test_lru_cache_threadedc
s d\}�t�|d��t�|d��t�|d���jj�|d��fdd��������dd�|df������fdd���fd	d
�t|�D�}t�|��vxnt��D]b}��	d���
���	d���
���	d���
������d|d|�||df�q�WWdQRXdS)N)r=r>r")r<cs��d�d|S)Nr$r()rw)r-)�pauserr
rK�s
z+TestLRU.test_lru_cache_threaded2.<locals>.frcs>x8t��D],}��d����|�d|���d�q
WdS)Nr$r()rWrwr3)r�)rKrxrry�stoprr
�test�s
z.TestLRU.test_lru_cache_threaded2.<locals>.testcsg|]}tj�d��qS))r|)r}r~)rer )r�rr
rj�sz4TestLRU.test_lru_cache_threaded2.<locals>.<listcomp>r$)r}ZBarrierr?r@r3rArWrr�rw�reset)rr�r�r�r)rKrxr�rryr�r�r
�test_lru_cache_threaded2�s"


z TestLRU.test_lru_cache_threaded2c	s^�jjdd�dd�����fdd���fdd�td	ddd
dg�D�}t�|��WdQRXdS)Nr#)r<cSst�d�d|S)Ng{�G�z�?r()�timeZsleep)r-rrr
rK�s
z+TestLRU.test_lru_cache_threaded3.<locals>.fc	s2�j|d�����|�d||�WdQRXdS)N)Zthreadr()r�r3)r�r-)rKrrr
r�sz.TestLRU.test_lru_cache_threaded3.<locals>.testcs"g|]\}}tj�||fd��qS))r|r)r}r~)rer��v)r�rr
rjsz4TestLRU.test_lru_cache_threaded3.<locals>.<listcomp>r"r()r?r@�	enumeraterr�)rr�r)rKrr�r
�test_lru_cache_threaded3�s
z TestLRU.test_lru_cache_threaded3cs^|jjdd�dd���G��fdd�d����d����d��|���d���d��dS)	Nr$)r<cSs|S)zEUsed to demonstrate a reentrant lru_cache call within a single threadr)r-rrr
�	test_func
sz.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 threadcSs
||_dS)N)r-)rr-rrr
r�sz6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__init__cSs|jS)N)r-)rrrr
rPsz6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__hash__cs"|jdkr��d��|j|jkS)Nr#r")r-)rr)�DoubleEqr�rr
r%s
z4TestLRU.test_need_for_rlock.<locals>.DoubleEq.__eq__N)rrrr�r�rPr%r)r�r�rr
r�sr�r"r#)r?r@r3)rr)r�r�r
�test_need_for_rlock
szTestLRU.test_need_for_rlockc	Cs(|�t��tjdd��}WdQRXdS)NcSsdS)Nrrrrr
rK%sz3TestLRU.test_early_detection_of_bad_call.<locals>.f)r9r:rr@)rrKrrr
� test_early_detection_of_bad_call"sz(TestLRU.test_early_detection_of_bad_callcs�G�fdd�dt�}|d�}|d�}|d�}��|j��d�x&dD]}��|�|�|dd�qDW��|j|j|jfd���|j��d	�x&d
D]}��|�|�|dd�q�W��|j|j|jfd���|j��d�x&d
D]}��|�|�|dd�q�W��|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|S)Nr"r$)r=)rr-rrr
rK,sz$TestLRU.test_lru_method.<locals>.X.fN)rrrr=r?r@rKr)rrr
�X*sr�r=r>)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)r=)rLrLr#r#)rPr3rKrAr=)rr�r&r'r,r-r)rr
�test_lru_method)s(


zTestLRU.test_lru_methodcCsx|j}xl|jd|j|jfD]T}xNttjd�D]<}|j||d��$t�t�	||��}|�
||�WdQRXq0WqWdS)Nrr")r{r)�	__class__�cached_func�cached_meth�cached_staticmethrWrwrxr�ryrzr)rr�rKr{r|rrr
r}HszTestLRU.test_picklec
Cs~|j}dd�}|j�|d�}|jd|j|j|j�d�|�f}x:|D]2}|j|d��t�|�}|�	||�WdQRXqDWdS)NcSsd||S)Nr(r)r-rJrrr
r;RszTestLRU.test_copy.<locals>.origr#r)r)
r�r?r0r�r�r�r@r�r~r)rr�r;r�funcsrKr|rrr
r�Ps

zTestLRU.test_copyc
Cs~|j}dd�}|j�|d�}|jd|j|j|j�d�|�f}x:|D]2}|j|d��t�	|�}|�
||�WdQRXqDWdS)NcSsd||S)Nr(r)r-rJrrr
r;^sz#TestLRU.test_deepcopy.<locals>.origr#r)r)r�r?r0r�r�r�r@r�r~r�r)rr�r;rr�rKr|rrr
r�\s

zTestLRU.test_deepcopyN)rrrrHrMrNrQrSrTrXrbrerjrmrorprrrur�r�r�r�r�r�r}r�r�rrrr
r:|s0Y#		
0
r:cCsd||S)Nr(r)r-rJrrr
�py_cached_funcisr�cCsd||S)Nr(r)r-rJrrr
�
c_cached_funcmsr�c@s:eZdZeZefZe��dd��Ze	e��dd���Z
dS)�	TestLRUPycCsd||S)Nr(r)rr-rJrrr
r�vszTestLRUPy.cached_methcCsd||S)Nr(r)r-rJrrr
r�zszTestLRUPy.cached_staticmethN)rrrror?r�r�r@r�r�r�rrrr
r�rs
r�c@s:eZdZeZefZe��dd��Ze	e��dd���Z
dS)�TestLRUCcCsd||S)Nr(r)rr-rJrrr
r��szTestLRUC.cached_methcCsd||S)Nr(r)r-rJrrr
r��szTestLRUC.cached_staticmethN)rrrrnr?r�r�r@r�r�r�rrrr
r��s
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�ZdS)�TestSingleDispatchcCs\tjdd��}dd�}|�t|�|�|d�d�|�|d�d�|�|dd	d
g�d�dS)NcSsdS)NrOr)r�rrr
rt�sz3TestSingleDispatch.test_simple_overloads.<locals>.gcSsdS)N�integerr)r�rrr
�g_int�sz7TestSingleDispatch.test_simple_overloads.<locals>.g_intrVrOr"r�r#r()r�singledispatch�registerrPr3)rrtr�r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)NcSsdS)NrOr)r�rrr
rt�sz&TestSingleDispatch.test_mro.<locals>.gc@seZdZdS)z&TestSingleDispatch.test_mro.<locals>.AN)rrrrrrr
r��sr�c@seZdZdS)z&TestSingleDispatch.test_mro.<locals>.CN)rrrrrrr
�C�sr�c@seZdZdS)z&TestSingleDispatch.test_mro.<locals>.BN)rrrrrrr
r��sr�c@seZdZdS)z&TestSingleDispatch.test_mro.<locals>.DN)rrrrrrr
�D�sr�cSsdS)Nr�r)r&rrr
�g_A�sz(TestSingleDispatch.test_mro.<locals>.g_AcSsdS)Nr�r)r'rrr
�g_B�sz(TestSingleDispatch.test_mro.<locals>.g_B)rr�r�r3)rrtr�r�r�r�r�r�rrr
�test_mro�szTestSingleDispatch.test_mrocCsntjdd��}|�t�dd��}|�|d�d�|�|d�d�|�|�t�|�|�|�t�|�t��dS)	NcSsdS)NrOr)r�rrr
rt�sz5TestSingleDispatch.test_register_decorator.<locals>.gcSs
d|fS)Nzint %sr)r�rrr
r��sz9TestSingleDispatch.test_register_decorator.<locals>.g_intrTrOr>zint 12)	rr�r�rPr3r�dispatchrlrV)rrtr�rrr
�test_register_decorator�sz*TestSingleDispatch.test_register_decoratorcCs:tjdd��}|�|jd�tjjdkr6|�|jd�dS)NcSsdS)zSimple testZTestr)r�rrr
rt�sz6TestSingleDispatch.test_wrapping_attributes.<locals>.grtr#zSimple test)rr�r3rr	r�r�r�)rrtr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)NcSsdS)NrOr)r�rrr
rt�sz,TestSingleDispatch.test_c_classes.<locals>.gcSs|jS)N)r)r�rrr
r��sz,TestSingleDispatch.test_c_classes.<locals>._zExponent < EminzNumber got rounded)zExponent < Emin)zNumber got roundedcSsdS)NzToo small to care.r)r�rrr
r��szToo small to care.)rr�r�rZDecimalExceptionZ	SubnormalZRoundedr3)rrtr��subnZrndrrr
�test_c_classes�s

z!TestSingleDispatch.test_c_classescCs
tj}tj}|j|j|j|jg}xBt|�D]6}|t	|�}|�
|t	|j|j|j|j|j
|jtg�q*W|j|j|jtjg}xFt|�D]:}|tj|�}|�
|tj|j|j|j|j|j
|jtg�q�W|j|jtg}xBt|�D]6}|tj|j|jtg�}|�
|tjt	|j|jtg�q�WGdd�dtj�}|j�|�|j|jg}xVt|�D]J}|||�}|�
|||j|j|jtjt	|j|j|j|j|j
|jtg
��qFWGdd�dtj�}|j|j|j|jg}xJt|�D]>}|||�}|�
|||jtjt	|j|j|j|j
|jtg
��q�WdS)Nc@seZdZdS)z.TestSingleDispatch.test_compose_mro.<locals>.DN)rrrrrrr
r��sr�c@seZdZdd�ZdS)z.TestSingleDispatch.test_compose_mro.<locals>.CcSsdS)Nr)rrrr
�__call__sz7TestSingleDispatch.test_compose_mro.<locals>.C.__call__N)rrrr�rrrr
r�sr�)rr�r�_compose_mro�Sequence�MutableMapping�Mapping�Setrr4r3�
Collection�Sized�Iterable�	Containerrl�OrderedDict�ChainMaprV�defaultdict�MutableSequencer��
Reversible�Callable)rr,�mro�basesZhaystackrxr�r�rrr
�test_compose_mro�sF


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(cSsdS)NrOr)r�rrr
rtsz/TestSingleDispatch.test_register_abc.<locals>.grOcSsdS)N�sizedr)r�rrr
r. r/z6TestSingleDispatch.test_register_abc.<locals>.<lambda>r�cSsdS)N�mutablemappingr)r�rrr
r.&r/r�cSsdS)NZchainmapr)r�rrr
r.,r/cSsdS)N�mutablesequencer)r�rrr
r.2r/r�cSsdS)N�
mutablesetr)r�rrr
r.8r/r�cSsdS)N�mappingr)r�rrr
r.>r/cSsdS)N�sequencer)r�rrr
r.Dr/r�cSsdS)Nr�r)r�rrr
r.Jr/r�cSsdS)Nr4r)r�rrr
r.Pr/r4cSsdS)Nrr)r�rrr
r.Vr/rcSsdS)Nzconcrete-setr)r�rrr
r.\r/zconcrete-setcSsdS)Nz
frozen-setr)r�rrr
r.br/z
frozen-setcSsdS)Nr�r)r�rrr
r.hr/r�)rr�rl�	frozensetrr�r3r�r�r�r�r��
MutableSetr�r�r�r4rr�r�)rr,r?�lr�rK�trtrrr
�test_register_abcs�

z$TestSingleDispatch.test_register_abcc	Cs�tj}tj}Gdd�dt�}Gdd�d|�}|jjGdd�dt��}Gdd�dt�}Gd	d
�d
|||�}||j|||j||j|tg	}x0t	|j|j|jg�D]}	|�
|||	d�|�q�W|j|j|j|j|jg}
|�
|||
d�|�dS)Nc@seZdZdS)z)TestSingleDispatch.test_c3_abc.<locals>.AN)rrrrrrr
r�rsr�c@seZdZdd�ZdS)z)TestSingleDispatch.test_c3_abc.<locals>.BcSsdS)Nrr)rrrr
r�usz1TestSingleDispatch.test_c3_abc.<locals>.B.__len__N)rrrr�rrrr
r�tsr�c@seZdZdS)z)TestSingleDispatch.test_c3_abc.<locals>.CN)rrrrrrr
r�wsr�c@seZdZdS)z)TestSingleDispatch.test_c3_abc.<locals>.DN)rrrrrrr
r�zsr�c@seZdZdd�ZdS)z)TestSingleDispatch.test_c3_abc.<locals>.XcSsdS)Nr)rrrr
r�}sz2TestSingleDispatch.test_c3_abc.<locals>.X.__call__N)rrrr�rrrr
r�|sr�)�abcs)
rr�r�_c3_mrorlr�r�r�r�rr3r�r�)rr,r�r�r�r�r�r�rDr�Z	many_abcsrrr
�test_c3_abcoszTestSingleDispatch.test_c3_abccCslGdd�dt�}Gdd�d|d�}Gdd�d|�}tjdd	��}|�|�d
d��}|�}|�||�d�dS)
Nc@seZdZdd�ZdS)z1TestSingleDispatch.test_false_meta.<locals>.MetaAcSsdS)Nrr)rrrr
r��sz9TestSingleDispatch.test_false_meta.<locals>.MetaA.__len__N)rrrr�rrrr
�MetaA�sr�c@seZdZdS)z-TestSingleDispatch.test_false_meta.<locals>.AN)rrrrrrr
r��sr�)�	metaclassc@seZdZdS)z.TestSingleDispatch.test_false_meta.<locals>.AAN)rrrrrrr
�AA�sr�cSsdS)Nzbase Ar)r&rrr
�fun�sz/TestSingleDispatch.test_false_meta.<locals>.funcSsdS)Nzfun Ar)r&rrr
r��sz-TestSingleDispatch.test_false_meta.<locals>._zfun A)r�rr�r�r3)rr�r�r�r�r�Zaarrr
�test_false_meta�sz"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��}||�WdQRX|�t
|j�d�Gdd�d|j�}|�}	|�||	�d�|j�|�|�||	�d�|j	�|�|�||	�d�tjdd��}
|
�|j�dd��}|
�|j�dd��}|�
t��}|
t�dd���WdQRX|�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��}|
|�WdQRX|�t
|j�d�Gd'd(�d(|j|�}tjd)d*��}|�|�d+d��}|�|j�d,d��}|�}|�||�d-�|j�|�|�||�d.�dS)/NcSsdS)NrOr)�argrrr
rt�sz0TestSingleDispatch.test_mro_conflicts.<locals>.gc@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.OcSsdS)Nrr)rrrr
r��sz8TestSingleDispatch.test_mro_conflicts.<locals>.O.__len__N)rrrr�rrrr
�O�sr�rOcSsdS)N�iterabler)r�rrr
r.�r/z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>cSsdS)N�	containerr)r�rrr
r.�r/cSsdS)Nr�r)r�rrr
r.�r/cSsdS)Nr�r)r�rrr
r.�r/r�r�c@seZdZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.PN)rrrrrrr
�P�sr�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@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.QcSsdS)Nrr)rrrr
r��sz8TestSingleDispatch.test_mro_conflicts.<locals>.Q.__len__N)rrrr�rrrr
�Q�sr�cSsdS)NrOr)r�rrr
�h�sz0TestSingleDispatch.test_mro_conflicts.<locals>.hcSsdS)Nr�r)r�rrr
r��sz0TestSingleDispatch.test_mro_conflicts.<locals>._cSsdS)Nr�r)r�rrr
r��scSsdS)Nrrrrrr
r.�r/)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>.RN)rrrrrrr
�R�sr�cSsdS)NrOr)r�rrr
r��sz0TestSingleDispatch.test_mro_conflicts.<locals>.icSsdS)Nr�r)r�rrr
r��scSsdS)Nr�r)r�rrr
r��sr�c@seZdZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.SN)rrrrrrr
�S�sr�c@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.TcSsdS)Nrr)rrrr
r��sz8TestSingleDispatch.test_mro_conflicts.<locals>.T.__len__N)rrrr�rrrr
�T�sr�c@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.UcSsdS)Nrr)rrrr
r��sz8TestSingleDispatch.test_mro_conflicts.<locals>.U.__len__N)rrrr�rrrr
�U�sr�c@seZdZdd�ZdS)z0TestSingleDispatch.test_mro_conflicts.<locals>.VcSsdS)Nrr)rrrr
r�sz8TestSingleDispatch.test_mro_conflicts.<locals>.V.__len__N)rrrr�rrrr
�Vsr�cSsdS)NrOr)r�rrr
�j	sz0TestSingleDispatch.test_mro_conflicts.<locals>.jcSsdS)Nr�r)r�rrr
r�scSsdS)Nr�r)r�rrr
r�sr�r�)rr�rr�r�r3r�r�r�r�r9r�rprVrgr�r�r�)rr,rtr�rUr�r6Zre_oner��qr�r�Zre_twor�r�r�r�r�r�r��uZre_threer�r�r�r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�WdQRXdS)Nr)�UserDictcs6eZdZ��fdd�Zdd�Zdd�Zdd�Z�ZS)	z?TestSingleDispatch.test_cache_invalidation.<locals>.TracingDictcs"t�|�j||�g|_g|_dS)N)�superr��set_ops�get_ops)rrrq)�TracingDictr�rr
r�szHTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__init__cSs|j|}|j�|�|S)N)rYr�r�)rr��resultrrr
r�!s
zKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__getitem__cSs|j�|�||j|<dS)N)r�r�rY)rr�r�rrr
�__setitem__%szKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__setitem__cSs|j��dS)N)rYr{)rrrr
r{(szETestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.clear)rrrr�r�r�r{�
__classcell__r)r�)r�r
r�sr��WeakKeyDictionarycs�S)Nrr)�tdrr
r.,r/z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>cSsdS)NrOr)r�rrr
rt.sz5TestSingleDispatch.test_cache_invalidation.<locals>.grOr"r#cSsdS)Nrr)r�rrr
r.Dr/rc@seZdZdS)z5TestSingleDispatch.test_cache_invalidation.<locals>.XN)rrrrrrr
r�Ssr�cSsdS)Nr�r)r�rrr
r.[r/r�cSsdS)Nr�r)r�rrr
r.rr/r�cSsdS)Nr4r)r�rrr
r.xr/r4)rr��weakrefrZ	swap_attrr�rr�r3r�r�r�r4rY�registryrlrr��
_find_implr�r�r�r��_clear_cache)rr�r�r,rtr?r�r�r)r�r�r
�test_cache_invalidations�


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)NcSsdS)NrOr)r�rrr
r�sz.TestSingleDispatch.test_annotations.<locals>.i)r�cSsdS)Nr�r)r�rrr
r��sz.TestSingleDispatch.test_annotations.<locals>._zcollections.abc.SequencecSsdS)Nr�r)r�rrr
r��srOr&r"r�r#r(r�)r"r#r(rVc@seZdZdd�Zdd�ZdS)z.TestSingleDispatch.test_annotations.<locals>._cSs
||_dS)N)r�)rr�rrr
r��sz7TestSingleDispatch.test_annotations.<locals>._.__init__cSs
|j|kS)N)r�)rrrrr
r%�sz5TestSingleDispatch.test_annotations.<locals>._.__eq__N)rrrr�r%rrrr
r��sr�)rr�r�rr�r�r3rV)rr�r�rrr
�test_annotations~sz#TestSingleDispatch.test_annotationsc	Csd}d}tjdd��}|�t��}|�d�dd��}WdQRX|�t|j��|d��|�t|j��	|��|�t��}|jd	d��}WdQRX|�t|j��|d
��|�t|j��	|��dSQRX|�t|j��|d
��|�t|j��	|��dS)
Nz(Invalid first argument to `register()`: zS. Use either `@register(some_class)` or plain `@register` on an annotated function.cSsdS)NrOr)r�rrr
r��sz8TestSingleDispatch.test_invalid_registrations.<locals>.ir�cSsdS)NzI annotated with a non-typer)r�rrr
r��sz8TestSingleDispatch.test_invalid_registrations.<locals>._Z42cSsdS)NzI forgot to annotater)r�rrr
r��szB<function TestSingleDispatch.test_invalid_registrations.<locals>._)r�cSsdS)Nz%I annotated with a generic collectionr)r�rrr
r��s)rr�r9r:r�r1rVrgr��endswith�typingr�)rZ
msg_prefixZ
msg_suffixr��excr�rrr
�test_invalid_registrations�s&

z-TestSingleDispatch.test_invalid_registrationsc	Cs4tjdd��}d}|�t|��|�WdQRXdS)NcWsdS)Nr)rrrr
rK�sz>TestSingleDispatch.test_invalid_positional_argument.<locals>.fz)f requires at least 1 positional argument)rr�ZassertRaisesRegexr:)rrK�msgrrr
� test_invalid_positional_argument�sz3TestSingleDispatch.test_invalid_positional_argumentN)rrrr�r�r�r�r��
skipUnlessrrZcpython_onlyr�r�r�r�r�r�r�r�r�r�rrrr
r��s 	
6^f(r��__main__)@r�rRrZcollections.abcr~�	itertoolsrrwZrandomrr	r�rr}r�r�r�Z
unittest.mockr�r�
contextlibrZimport_fresh_modulerornr�contextmanagerrrrr�rrr4r r!r�ZTestCaser�r�r0r�r�r�r�r�r�r�r�rr"r#r$r&r9r:r@r�r�r�r�r�r�mainrrrr
�<module>s�	F3|r=
RSL
p?