o
    HXh                    @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlZd dlm	Z	 d dl
Z
d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dlmZ d dlmZ d dlmZ d dlZejd	d
gdZed	ZejddgdZ ej!dd Z"dd Z#dd Z$G dd de%Z&G dd de%Z'G dd de(Z)G dd dZ*e+edG dd de*ej,Z-G d d! d!e*ej,Z.erG d"d# d#ej/Z0G d$d% d%ej/Z1e+edG d&d' d'e-Z2G d(d) d)e.Z3G d*d+ d+ej,Z4G d,d- d-ej,Z5G d.d/ d/e5Z6G d0d1 d1Z7e+edG d2d3 d3e7ej,Z8G d4d5 d5e7ej,Z9G d6d7 d7Z:e+edG d8d9 d9e:ej,Z;G d:d; d;e:ej,Z<G d<d= d=ej,Z=ej>G d>d? d?Z?G d@dA dAZ@G dBdC dCZAeB dDdE ZCeB dFdG ZDG dHdI dIeAej,ZEG dJdK dKeAej,ZFG dLdM dMej,ZGG dNdO dOZHG dPdQ dQZIG dRdS dSZJG dTdU dUZKG dVdW dWej,ZLeMdXkreN  dS dS )Y    N)permutations)choice)support)proxy)import_helper)threading_helper)assert_python_ok	functools
_functools)ZblockeddecimalZ_decimal)Zfreshc              	   c   s:    t j|  }|t j| < zd V  W |t j| < d S |t j| < w N)sysmodules)nameZreplacementZoriginal_module r   =/opt/python-3.10.19/usr/lib/python3.10/test/test_functools.pyreplaced_module"   s   

r   c                  O      | |fS )z,capture all positional and keyword argumentsr   )argskwr   r   r   capture+      r   c                 C   s   | j | j| j| jfS )z* return the signature of a partial object )funcr   keywords__dict__)partr   r   r   	signature0   s   r   c                   @      e Zd ZdS )MyTupleN__name__
__module____qualname__r   r   r   r   r   4       r   c                   @      e Zd Zdd ZdS )BadTuplec                 C   s   t | t | S r   )listselfotherr   r   r   __add__8      zBadTuple.__add__N)r    r!   r"   r*   r   r   r   r   r%   7       r%   c                   @   r   )MyDictNr   r   r   r   r   r-   ;   r#   r-   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3S )4TestPartialc              	   C   sx   | j tddddd}| t| | |dddd	d
dtddd	df |  tdd }| t|g dg d d S )N      
      ab         (   r5   cr/   r0   r6   r7   r4   r5   r;   c                 S   s   | d S )Nr1   r   xr   r   r   <lambda>F       z1TestPartial.test_basic_examples.<locals>.<lambda>)r1   r2   r8   r9   )partialr   
assertTruecallableassertEqualdictmapr&   r(   pr   r   r   test_basic_examplesA   s    zTestPartial.test_basic_examplesc                 C   sJ   | j tddddd}| |jt | |jd | |jtddd d S )Nr/   r0   r1   r2   r3   r/   r0   )rB   r   rE   r   r   r   rF   rH   r   r   r   test_attributesI   s   zTestPartial.test_attributesc                 C   sB   |  t| j z| d  W n
 ty   Y d S w | d d S )Nr0   z%First arg not checked for callability)assertRaises	TypeErrorrB   failr(   r   r   r   test_argument_checkingP   s   z"TestPartial.test_argument_checkingc                 C   sd   ddd}ddi}| j |dd}| |di |d | |ddi |d	d
 | |ddi d S )Nr1   r2   c                 S      | S r   r   r3   r   r   r   r   [      zBTestPartial.test_protection_of_callers_dict_argument.<locals>.funcr4   r6      r4      r5   )r1   r2   r   )rB   rE   )r(   r   drI   r   r   r   (test_protection_of_callers_dict_argumentY   s   

z4TestPartial.test_protection_of_callers_dict_argumentc                 C   sR   ddi}| j tfi |}| | dddif d|d< | | dddif d S )Nr4   r6   r   rT   rB   r   rE   )r(   rX   rI   r   r   r   test_kwargs_copyd   s
   zTestPartial.test_kwargs_copyc                 C   sl   |  t}| | di f | |dddi f |  tdd}| | di f | |dddi f d S )Nr   r/   r0   rK   r6   r7   r<   rZ   rH   r   r   r   test_arg_combinationsm   s   
z!TestPartial.test_arg_combinationsc                 C   s   |  t}| |ji  | | di f | |dddddif | j tdd}| |jddi | | dddif | |ddddddf | |dddddddf d S )	Nr   r/   rU   r4   r0   rW   r3   r6   )rB   r   rE   r   rH   r   r   r   test_kw_combinationsw   s   
"z TestPartial.test_kw_combinationsc                 C   sJ   dD ] }| j tg|R  }|d }|d\}}| ||ko |i k qd S )N)r   r   r   r/   )r   r/   r0   )r   r/   r0   r6   r>   r?   rB   r   rC   )r(   r   rI   expectedgotemptyr   r   r   test_positional   s   zTestPartial.test_positionalc                 C   sJ   dD ] }| j t|d}|d d}|d d\}}| ||ko |dk qd S )N)r4   r   Ng      @rU   )r4   r?   r>   r   r`   )r(   r4   rI   ra   rc   rb   r   r   r   test_keyword   s   
zTestPartial.test_keywordc                 C   sd   | j tddd}|ddd\}}| |dko|dddk | \}}| |dko.|d	dik d S )
Nr   r/   rU   r0   rW   r_   r3   r^   r4   r`   )r(   rI   Zargs1Zkw1Zargs2Zkw2r   r   r   test_no_side_effects   s
   
z TestPartial.test_no_side_effectsc                 C   sf   dd }|  t| |dd |  t| |dd |  t| |dd |  t| j|ddd d S )Nc                 S   s   | |  d S r   r   r?   yr   r   r   f      z-TestPartial.test_error_propagation.<locals>.fr/   r   )rh   )rM   ZeroDivisionErrorrB   r(   ri   r   r   r   test_error_propagation   s
   z"TestPartial.test_error_propagationc                 C   sF   | j tdd}t|}| |j|j d }t  | tt	|d d S )N   )baser   )
rB   intr   rE   r   r   
gc_collectrM   ReferenceErrorgetattrr(   ri   rI   r   r   r   test_weakref   s   zTestPartial.test_weakrefc                 C   sP   t tttd}| tjd}| ||d | dj}| ||d d S )Nr1    
0123456789)r&   rG   strrangerB   joinrE   )r(   datarz   r   r   r   #test_with_bound_and_unbound_methods   s
   z/TestPartial.test_with_bound_and_unbound_methodsc                 C   sB   | j }|td}||dd}|tddd}| t|t| d S NasdfTbar)rB   r   rE   )r(   rB   innernestedZflatr   r   r   test_nested_optimization   s
   
z$TestPartial.test_nested_optimizationc                 C   s:   | j }dd }||d}||d}d|_| |jd d S )Nc                 S   rR   r   r   r   r   r   r   foo   rS   z;TestPartial.test_nested_partial_with_attribute.<locals>.foofirstsecondZspam)rB   Znew_attrrE   )r(   rB   r   rI   Zp2r   r   r   "test_nested_partial_with_attribute   s   

z.TestPartial.test_nested_partial_with_attributec                    s(  t  t  f}ddd |D  t  t  d}d|d|g}| jtjtjfv r-dn| jj| t}|  dtd	t	| | jtg|R  }|  dtd  d	t	| | jtfi |}| 
t	|fd
d|D  | jtg|R i |}| 
t	| fdd|D  d S )N, c                 s   s    | ]}t |V  qd S r   )repr).0r4   r   r   r   	<genexpr>   s    z(TestPartial.test_repr.<locals>.<genexpr>r3   za={a!r}, b={b!r}zb={b!r}, a={a!r}functools.partial()c                    s"   g | ]}  d t d| dqS r   r   r   r   r   Zkwargs_repr)r   r   r   
<listcomp>   s    z)TestPartial.test_repr.<locals>.<listcomp>c              
      s(   g | ]} d t d  d| dqS r   r   r   Z	args_reprr   r   r   r      s     )objectrz   
format_maprB   c_functoolspy_functoolsr    r   rE   r   assertIn)r(   r   kwargsZkwargs_reprsri   r   r   r   	test_repr   s2   
"


zTestPartial.test_reprc                 C   sF  | j tj tj fv rd}n| j j}|  t}||di i f z| t|d|f  W |tdi i f n
|tdi i f w |  t}|t|fi i f z| t|d|tf  W |tdi i f n
|tdi i f w |  t}|tdd|ii f z| t|d|tf  W |tdi i f d S |tdi i f w )Nr   r   z%s(...)z%s(%r, ...)r4   z%s(%r, a=...))rB   r   r   r    r   __setstate__rE   r   )r(   r   ri   r   r   r   test_recursive_repr   s$   
(
(
*zTestPartial.test_recursive_reprc                 C   s   |   3 | jtdgdgd}g |_ttjd D ]}tt||}| 	t|t| qW d    d S 1 s:w   Y  d S )Nr~   Tr   r/   )
AllowPicklerB   r   attrry   pickleHIGHEST_PROTOCOLloadsdumpsrE   r(   ri   protof_copyr   r   r   test_pickle   s   
"zTestPartial.test_picklec                 C   sl   | j tdgdgd}g |_t|}| t|t| | |j|j | |j|j | |j|j d S r}   )rB   r   r   copyrE   assertIsr   r   r(   ri   r   r   r   r   	test_copy  s   
zTestPartial.test_copyc                 C   s   | j tdgdgd}g |_t|}| t|t| | |j|j | |j|j | |jd |jd  | |j|j | |jd |jd  d S )Nr~   Tr   r   r   )	rB   r   r   r   deepcopyrE   ZassertIsNotr   r   r   r   r   r   test_deepcopy  s   
zTestPartial.test_deepcopyc              	   C   s  |  t}|tdtddtg df | t|tdtddtg df | |ddddddd	f |tdtddd f | t|tdtddi f | |ddddddd	f |tdd d f | |ddddd
dif | |ddi f | | di f |tdi d f | t|tdi i f | |ddddd
dif | |ddi f | | di f d S )Nr/   r1   rU   r   r0   r2   rW   rK   r3   r5   r   )r0   )rB   r   r   r   rF   rE   rl   r   r   r   test_setstate  s$   

zTestPartial.test_setstatec              	   C   s   |  t}| t|jtdi f | t|jtdi i d f | t|jtdi d g | t|jd di d f | t|jtd i d f | t|jtg i d f | t|jtdg d f d S )Nr   )rB   r   rM   rN   r   r   rl   r   r   r   test_setstate_errors2  s   
z TestPartial.test_setstate_errorsc                 C   s(  |  t}|ttdtddd f t|}| |tdtddi f | t	|d t
 | t	|d t | }| |dddif | t	|d t
 | t	|d t |ttdi d f t|}| |tdi i f | t	|d t
 |d}| |di f | t	|d t
 d S )	Nr   r1   rU   r/   r0   r4   r   rK   )rB   r   r   r   r   r-   rE   rF   r   typetupler%   )r(   ri   srr   r   r   test_setstate_subclasses<  s"   
z$TestPartial.test_setstate_subclassesc                 C   s  |    | t}||di i f z0ttjd D ]}| t t	|| W d    n1 s3w   Y  qW |tdi i f n
|tdi i f w | t}|t|fi i f z<ttjd D ])}t
t	||}z| |jd | W |tdi i f qe|tdi i f w W |tdi i f n
|tdi i f w | t}|tdd|ii f z<ttjd D ])}t
t	||}z| |jd | W |tdi i f q|tdi i f w W |tdi i f n
|tdi i f w W d    d S 1 sw   Y  d S )Nr   r/   r   r4   )r   rB   r   r   ry   r   r   rM   RecursionErrorr   r   r   r   r   r   r   r   r   test_recursive_pickleP  s@   

(
((
(*$z!TestPartial.test_recursive_picklec                 C   s.   G dd d}|  t}| t|j|  d S )Nc                   @      e Zd Zdd Zdd ZdS )z7TestPartial.test_setstate_refcount.<locals>.BadSequencec                 S      dS )Nr7   r   rP   r   r   r   __len__v  rS   z?TestPartial.test_setstate_refcount.<locals>.BadSequence.__len__c                 S   s0   |dkrt S |dkrttdS |dv ri S t)Nr   r/   i@B )r0   r6   )maxr   ry   
IndexError)r(   keyr   r   r   __getitem__x  s   zCTestPartial.test_setstate_refcount.<locals>.BadSequence.__getitem__N)r    r!   r"   r   r   r   r   r   r   BadSequenceu      r   )rB   r   rM   rN   r   )r(   r   ri   r   r   r   test_setstate_refcountt  s   
z"TestPartial.test_setstate_refcountN)r    r!   r"   rJ   rL   rQ   rY   r[   r\   r]   rd   re   rf   rm   ru   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   ?   s4    		
	
$r.   z requires the C _functools modulec                   @   s<   e Zd Zer	ejZG dd dZdd Zdd Zdd Zd	S )
TestPartialCc                   @   r   )zTestPartialC.AllowPicklec                 C   rR   r   r   rP   r   r   r   	__enter__  rS   z"TestPartialC.AllowPickle.__enter__c                 C   r   NFr   r(   r   valuetbr   r   r   __exit__  rS   z!TestPartialC.AllowPickle.__exit__N)r    r!   r"   r   r   r   r   r   r   r     r   r   c              
   C   s   | j tddddd}| tt|dt | tt|dd | tt|d	tddd |  t}z|`W n
 t	y<   Y d S w | 
d
 d S )Nr/   r0   r1   r2   r3   r   r   rK   r   z-partial object allowed __dict__ to be deleted)rB   r   rM   AttributeErrorsetattrrG   rF   hexr   rN   rO   rH   r   r   r   test_attributes_unwritable  s   
z'TestPartialC.test_attributes_unwritablec                 C   sj   |  t}d|jd< t|}| d| | d| | t |  W d    d S 1 s.w   Y  d S )Nr   i  Z1234z'value')rB   r   r   r   r   rM   rN   )r(   rI   r   r   r   r   'test_manually_adding_non_string_keyword  s   

"z4TestPartialC.test_manually_adding_non_string_keywordc                    sP   |  t G  fdddt}dg j| < t }| d| | d| d S )Nc                       s   e Zd Z fddZdS )z@TestPartialC.test_keystr_replaces_value.<locals>.MutatesYourDictc                    s   dg j | < dS )NZsth2astr)r   rP   rI   r   r   __str__  s   zHTestPartialC.test_keystr_replaces_value.<locals>.MutatesYourDict.__str__N)r    r!   r"   r   r   r   r   r   MutatesYourDict      r   Zsthr   z['sth'])rB   r   r   r   r   r   )r(   r   r   r   r   r   test_keystr_replaces_value  s   
z'TestPartialC.test_keystr_replaces_valueN)	r    r!   r"   r   rB   r   r   r   r   r   r   r   r   r     s    
r   c                   @   s    e Zd ZejZG dd dZdS )TestPartialPyc                   @   $   e Zd Zdd Zdd Zdd ZdS )zTestPartialPy.AllowPicklec                 C   s   t dt| _d S )Nr	   )r   r   _cmrP   r   r   r   __init__  r+   z"TestPartialPy.AllowPickle.__init__c                 C   s
   | j  S r   )r   r   rP   r   r   r   r        
z#TestPartialPy.AllowPickle.__enter__c                 C   s   | j |||S r   )r   r   r   r   r   r   r     r+   z"TestPartialPy.AllowPickle.__exit__N)r    r!   r"   r   r   r   r   r   r   r   r     s    r   N)r    r!   r"   r   rB   r   r   r   r   r   r     s    r   c                   @   r   )CPartialSubclassNr   r   r   r   r   r     r#   r   c                   @   r   )PyPartialSubclassNr   r   r   r   r   r     r#   r   c                   @   s   e Zd ZereZdZdS )TestPartialCSubclassN)r    r!   r"   r   r   rB   r   r   r   r   r   r     s    r   c                   @   s   e Zd ZeZdS )TestPartialPySubclassN)r    r!   r"   r   rB   r   r   r   r   r         r   c                   @   sz   e Zd ZG dd deZe Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )TestPartialMethodc                   @   s   e Zd ZeeZeedZejeddZejedddZ	ejedddZ
eedZeejed	d
dZeeedZejeeddZdS )zTestPartialMethod.Ar/   r0   rU   r6   r7   rW   r(   r   rT      r;   rV      	   rX   N)r    r!   r"   r	   partialmethodr   nothing
positionalr   bothspec_keywordsr   rB   over_partialstaticmethodstaticclassmethodclsr   r   r   r   A  s    
r   c                 C   sz  |  | j | jfi f |  | jd| jdfi f |  | jjdd| jfddif |  | jjddd| jdfddif |  | j | jdfi f |  | jd| jddfi f |  | jjdd| jdfddif |  | jjddd| jddfddif |  | j | jfddif |  | jd| jdfddif |  | jjdd| jfdddf |  | jjddd| jdfdddf |  | j | jd	fd
dif |  | jd| jd	dfd
dif |  | jjdd| jd	fdddf |  | jjddd| jd	dfdddf |  | jj| jddd| jd	dfdddf |  | j | jfdddf d S )NrT   r   r   r;   r/   r4   r0   )r4   r;   r6   r5   r7   r:   r   )rE   r4   r   r   r   r   r   r   rP   r   r   r   r\     s$   "& $("$( $&*.$z'TestPartialMethod.test_arg_combinationsc                 C   s   |  | j | jddfi f |  | jd| jdddfi f |  | jjdd| jddfddif |  | jjddd| jdddfddif |  | jj| jddd| jdddfddif d S )Nr/   rT   r   rV   r   rX   )rE   r4   r   r   rP   r   r   r   test_nested   s
   "&*2zTestPartialMethod.test_nestedc                 C   s   |  | j | jdfddif |  | jd| jddfddif |  | jjdd| jdfdddf |  | jjddd| jddfdddf |  | jj| jddd| jddfdddf d S )NrV   r;   r   rT   r   r   r;   rX   )rE   r4   r   r   rP   r   r   r   test_over_partial  s
    $&*2z#TestPartialMethod.test_over_partialc                 C   s`   | j }| |jj| | |jj| | |jj| | |jj| j | | jjj| j d S r   )r4   r   r   __self__r   r   r   r   r(   objr   r   r   test_bound_method_introspection  s   z1TestPartialMethod.test_bound_method_introspectionc                 C   sf   | j }| t|jd | t|jd | t|jd | t|jd | t| jjd d S )Nr   )r   assertFalsehasattrr   r   r   r   r4   r   r   r   r   test_unbound_method_retrieval  s   z/TestPartialMethod.test_unbound_method_retrievalc              	   C   s*  | j | jfD ]}| j|d| | | di f | |ddi f | |jdddddif | |jddddddif | | | j fddif | |d| j dfddif | |jdd	| j fddd
f | |jddd	| j dfddd
f W d    n1 sw   Y  qd S )Nr   )r   rT   )r   rT   r   r   rX   r   r   r   )r   r4   subTestrE   r   r   r   r   r   r   test_descriptors   s    "(z"TestPartialMethod.test_descriptorsc                 C   sL   |  | jjdd| jfddif |  | jj| jdd| jfddif d S )Nr6   rU   r4   )rE   r4   r   r   rP   r   r   r   test_overriding_keywords-  s   "*z*TestPartialMethod.test_overriding_keywordsc                 C   s   |  t G dd dt}W d    n1 sw   Y  |  t G dd d}W d    n1 s4w   Y  |  t G dd d}W d    d S 1 sQw   Y  d S )Nc                   @   s   e Zd ZeddZdS ).TestPartialMethod.test_invalid_args.<locals>.BNr/   r    r!   r"   r	   r   methodr   r   r   r   B3  r   r  c                   @   s   e Zd Ze ZdS )r   Nr   r   r   r   r   r  6  r,   c                   @   s   e Zd ZejeddZdS )r   r/   )r   r4   N)r    r!   r"   r	   r   r   r   r   r   r   r   r  9  s    )rM   rN   r   )r(   r  r   r   r   test_invalid_args1  s   "z#TestPartialMethod.test_invalid_argsc                 C   s$   |  tt| jd dt d S )Nr   z#functools.partialmethod({}, 3, b=4))rE   r   varsr   formatr   rP   r   r   r   r   <  s   zTestPartialMethod.test_reprc                 C   sl   G dd dt j}| |jj | |jj | jj| jj| jj	| jj
| jjfD ]}| t|dd q(d S )Nc                   @   s&   e Zd Zejdd ZeedZdS )z1TestPartialMethod.test_abstract.<locals>.Abstractc                 S      d S r   r   r(   r?   rh   r   r   r   addC     z5TestPartialMethod.test_abstract.<locals>.Abstract.addrT   N)	r    r!   r"   abcabstractmethodr  r	   r   add5r   r   r   r   AbstractA  s    
r  __isabstractmethod__F)r	  ABCMetarC   r  r  r  r   r   r   r   r   r   r   rs   )r(   r  r   r   r   r   test_abstract@  s   &zTestPartialMethod.test_abstractc                 C   s.   dd }t |d}| |d|dd d S )Nc                S      | | S r   r   r3   r   r   r   ri   P     z1TestPartialMethod.test_positional_only.<locals>.fr/   r0   )r	   rB   rE   rt   r   r   r   test_positional_onlyO  s   z&TestPartialMethod.test_positional_onlyN)r    r!   r"   r   r   r4   r\   r   r   r   r   r   r   r  r   r  r  r   r   r   r   r     s    r   c                   @   s   e Zd ZejejfddZdd Zdd Ze	
ejjdkdd	d
 Zdd Zdd Zdd Zeje	
ejjdkddd ZdS )TestUpdateWrapperc           	      C   s   |D ]}|  t||t|| q|D ]$}t||}t||}|D ]}|dkr,|dkr,q!|  || ||  q!q|  |j| d S )Nr   __wrapped__)r   rs   r  )	r(   wrapperwrappedassignedupdatedr   Zwrapper_attrZwrapped_attrr   r   r   r   check_wrapperY  s   

zTestUpdateWrapper.check_wrapperc                 C   s4   ddd}d|_ d|_dd	d
}t|| ||fS )Nr4   This is a new annotationc                 S   r   This is a testNr   rU   r   r   r   ri   m  r  z,TestUpdateWrapper._default_update.<locals>.fThis is also a testzThis is a bald faced lier5   This is the prior annotationc                 S   r  r   r   rW   r   r   r   r  r  rS   z2TestUpdateWrapper._default_update.<locals>.wrapper)r4   r  )r5   r  )r   r  r	   update_wrapperr(   ri   r  r   r   r   _default_updatel  s   

z!TestUpdateWrapper._default_updatec                 C   sv   |   \}}| || | |j| | |jd | |j|j | |jd | |jd d | 	d|j d S )Nri   r  r4   r  r5   )
r!  r  r   r  rE   r    r"   r   __annotations__assertNotInr(   r  ri   r   r   r   test_default_updatew  s   z%TestUpdateWrapper.test_default_updater0   )Docstrings are omitted with -O2 and abovec                 C      |   \}}| |jd d S Nr  r!  rE   __doc__r$  r   r   r   test_default_update_doc     z)TestUpdateWrapper.test_default_update_docc                 C   s   dd }d|_ dd }t||dd | ||dd | |jd | |j|j | |jd  | |j	i  | 
t|d d S )	Nc                   S   r   r  r   r   r   r   r   ri     r  z+TestUpdateWrapper.test_no_update.<locals>.fr  c                   S   r  r   r   r   r   r   r   r    rS   z1TestUpdateWrapper.test_no_update.<locals>.wrapperr   r  r   )r   r	   r  r  rE   r    assertNotEqualr"   r*  r"  r   r   r   r   r   r   test_no_update  s   z TestUpdateWrapper.test_no_updatec                 C   s   dd }d|_ tdddd|_dd	 }i |_d
}d}t|||| | |||| | |jd | |j	|j	 | |j
d  | |j d | |j|j d S )Nc                   S   r  r   r   r   r   r   r   ri     rS   z2TestUpdateWrapper.test_selective_update.<locals>.fThis is a different testr/   r0   r6   r=   c                   S   r  r   r   r   r   r   r   r    rS   z8TestUpdateWrapper.test_selective_update.<locals>.wrapperr   	dict_attrr  )r   rF   r1  r	   r  r  rE   r    r-  r"   r*  r(   ri   r  assignupdater   r   r   test_selective_update  s   z'TestUpdateWrapper.test_selective_updatec                 C   s   dd }dd }i |_ d}d}t|||| | d|j | |j i  |` | t t|||| W d    n1 s?w   Y  d|_ | t t|||| W d    d S 1 s`w   Y  d S )	Nc                   S   r  r   r   r   r   r   r   ri     rS   z4TestUpdateWrapper.test_missing_attributes.<locals>.fc                   S   r  r   r   r   r   r   r   r    rS   z:TestUpdateWrapper.test_missing_attributes.<locals>.wrapperr   r0  r   r/   )r1  r	   r  r#  r   rE   rM   r   r2  r   r   r   test_missing_attributes  s    "z)TestUpdateWrapper.test_missing_attributesc                 C   sF   dd }t |t | |jd | |jd | |ji  d S )Nc                   S   r  r   r   r   r   r   r   r    rS   z6TestUpdateWrapper.test_builtin_update.<locals>.wrapperr   zmax()	r	   r  r   rE   r    rC   r*  
startswithr"  )r(   r  r   r   r   test_builtin_update  s
   z%TestUpdateWrapper.test_builtin_updateN)r    r!   r"   r	   WRAPPER_ASSIGNMENTSWRAPPER_UPDATESr  r!  r%  unittestskipIfr   flagsoptimizer+  r.  r5  r6  r   Zrequires_docstringsr8  r   r   r   r   r  W  s$    


r  c                   @   sH   e Zd Zdd Zdd Zeejj	dkddd Z
d	d
 Zdd ZdS )	TestWrapsc                 C   s.   dd }d|_ d|_t|dd }||fS )Nc                   S   r   r  r   r   r   r   r   ri     r  z$TestWraps._default_update.<locals>.fr  zThis is still a bald faced liec                   S   r  r   r   r   r   r   r   r    r  z*TestWraps._default_update.<locals>.wrapper)r   r  r	   wrapsr   r   r   r   r!    s   
zTestWraps._default_updatec                 C   sH   |   \}}| || | |jd | |j|j | |jd d S )Nri   r  )r!  r  rE   r    r"   r   r$  r   r   r   r%    s
   zTestWraps.test_default_updater0   r&  c                 C   r'  r(  r)  )r(   r  _r   r   r   r+    r,  z!TestWraps.test_default_update_docc                 C   st   dd }d|_ t|dddd }| ||dd | |jd | |j|j | |jd  | 	t
|d d S )	Nc                   S   r   r  r   r   r   r   r   ri     r  z#TestWraps.test_no_update.<locals>.fr  r   c                   S   r  r   r   r   r   r   r   r    r  z)TestWraps.test_no_update.<locals>.wrapperr  r   )r   r	   r@  r  rE   r    r-  r"   r*  r   r   r   r   r   r   r.    s   
zTestWraps.test_no_updatec                 C   s   dd }d|_ tdddd|_dd	 }d
}d}t||||dd }| |||| | |jd | |j	|j	 | |j
d  | |j d | |j|j d S )Nc                   S   r  r   r   r   r   r   r   ri     rS   z*TestWraps.test_selective_update.<locals>.fr/  r/   r0   r6   r=   c                 S   s
   i | _ | S r   r0  )ri   r   r   r   add_dict_attr  s   z6TestWraps.test_selective_update.<locals>.add_dict_attrr   r0  c                   S   r  r   r   r   r   r   r   r       z0TestWraps.test_selective_update.<locals>.wrapperr  )r   rF   r1  r	   r@  r  rE   r    r-  r"   r*  )r(   ri   rB  r3  r4  r  r   r   r   r5    s   zTestWraps.test_selective_updateN)r    r!   r"   r!  r%  r;  r<  r   r=  r>  r+  r.  r5  r   r   r   r   r?    s    
r?  c                   @   r   )
TestReducec              	   C   s  G dd d}dd }|  | |g ddd |  | |dd	gg d
dggg g d |  | dd tdddd |  | dd tdddd |  | ||dd |  | ||ddd |  | ||ddd | t| j | t| jdd | t| jddd |  | ddd |  | dddd | t| jdd | t| j|g  | t| j|d | t| j|d | t| j|t  G dd d}| t| j||  |  | |g d d  |  | |g dd G dd  d }| t| jd|  d S )!Nc                   @   r   )z'TestReduce.test_reduce.<locals>.Squaresc                 S   s   || _ g | _d S r   )r   sofar)r(   r   r   r   r   r   
  s   
z0TestReduce.test_reduce.<locals>.Squares.__init__c                 S   s
   t | jS r   )lenrE  rP   r   r   r   r     r   z/TestReduce.test_reduce.<locals>.Squares.__len__c                 S   sZ   d|  kr| j k st tt| j}||kr(| j||  |d7 }||ks| j| S )Nr   r/   )r   r   rF  rE  append)r(   inr   r   r   r     s   

z3TestReduce.test_reduce.<locals>.Squares.__getitem__N)r    r!   r"   r   r   r   r   r   r   r   Squares	  s    rJ  c                 S   r  r   r   rg   r   r   r   r    r  z#TestReduce.test_reduce.<locals>.addr=   rv   r	  r4   r;   rX   w)r4   r;   rX   rK  c                 S      | | S r   r   rg   r   r   r   r@     rA   z(TestReduce.test_reduce.<locals>.<lambda>r0   r   r/   i  c                 S   rL  r   r   rg   r   r   r   r@   !  rA      l     h r1   i  r   *   1)rN  rN  r   c                   @   r$   )z/TestReduce.test_reduce.<locals>.TestFailingIterc                 S      t r   RuntimeErrorrP   r   r   r   __iter__3  rS   z8TestReduce.test_reduce.<locals>.TestFailingIter.__iter__N)r    r!   r"   rS  r   r   r   r   TestFailingIter2  r,   rT  c                   @   r$   )z&TestReduce.test_reduce.<locals>.BadSeqc                 S   rP  r   )
ValueError)r(   indexr   r   r   r   ;  rS   z2TestReduce.test_reduce.<locals>.BadSeq.__getitem__N)r    r!   r"   r   r   r   r   r   BadSeq:  r,   rW  )rE   reducery   rM   rN   r   rR  rU  )r(   rJ  r  rT  rW  r   r   r   test_reduce  s>    zTestReduce.test_reducec                 C   s   G dd d}ddl m} | | ||dd | | ||ddd | t| j||d | | ||ddd | | ||d	d | | ||d	dd d	d
dd}| | ||d|  d S )Nc                   @   r   )z5TestReduce.test_iterator_usage.<locals>.SequenceClassc                 S   
   || _ d S r   rI  )r(   rI  r   r   r   r   B  r   z>TestReduce.test_iterator_usage.<locals>.SequenceClass.__init__c                 S   s"   d|  kr| j k r|S  ttNr   )rI  r   r(   rH  r   r   r   r   D  s   zATestReduce.test_iterator_usage.<locals>.SequenceClass.__getitem__N)r    r!   r"   r   r   r   r   r   r   SequenceClassA  r   r^  r   )r  rT   r1   rN  4   r/   r0   r6   )ZoneZtwoZthreerv   )operatorr  rE   rX  rM   rN   rz   keys)r(   r^  r  rX   r   r   r   test_iterator_usage@  s   	"zTestReduce.test_iterator_usageN)r    r!   r"   rY  rb  r   r   r   r   rD    s    8rD  c                   @   s   e Zd ZerejZdS dS )TestReduceCN)r    r!   r"   r   rX  r   r   r   r   rc  V  s    
rc  c                   @      e Zd ZeejZdS )TestReducePyN)r    r!   r"   r   r   rX  r   r   r   r   re  \      re  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestCmpToKeyc                 C   s   dd }|  |}| |d|d | |d|d | |d|d dd }|  |}| |d|d | |d	|d
 | |d	|d
 | |d	|d
 d S )Nc                 S      | |k| |k  S r   r   rg   r   r   r   cmp1c  r+   z*TestCmpToKey.test_cmp_to_key.<locals>.cmp1r6   r/   c                 S   s   t | t | S r   rp   rg   r   r   r   cmp2j  r+   z*TestCmpToKey.test_cmp_to_key.<locals>.cmp2g      @4r0   Z35)
cmp_to_keyrE   assertGreaterZassertGreaterEqualZ
assertLessassertLessEqualr-  )r(   ri  r   rk  r   r   r   test_cmp_to_keyb  s   

zTestCmpToKey.test_cmp_to_keyc                 C   s  dd }| j |d}| |dd|dd | |dd|dd | ttf |ddk W d    n1 s:w   Y  | ttf d|dk  W d    n1 sWw   Y  | t |   }W d    n1 spw   Y  | t |  |d }W d    n1 sw   Y  |  |}| t |  W d    n1 sw   Y  | t |d d  W d    d S 1 sw   Y  d S )Nc                 S   rh  r   r   rg   r   r   r   ri  s  r+   z4TestCmpToKey.test_cmp_to_key_arguments.<locals>.cmp1mycmpr6   r   r/   )rm  rE   rn  rM   rN   r   r(   ri  r   r   r   r   test_cmp_to_key_argumentsr  s.   

"z&TestCmpToKey.test_cmp_to_key_argumentsc                    s   dd }|  |}| t |d|dk W d    n1 s!w   Y  G dd d  fdd}| t |d|dk W d    d S 1 sLw   Y  d S )Nc                 S   rP  r   rk   rg   r   r   r   ri    rS   z'TestCmpToKey.test_bad_cmp.<locals>.cmp1r6   r/   c                   @   r$   )z)TestCmpToKey.test_bad_cmp.<locals>.BadCmpc                 S   rP  r   ru  r'   r   r   r   __lt__  rS   z0TestCmpToKey.test_bad_cmp.<locals>.BadCmp.__lt__N)r    r!   r"   rv  r   r   r   r   BadCmp  r,   rw  c                    s     S r   r   rg   rw  r   r   ri       )rm  rM   rk   rs  r   rx  r   test_bad_cmp  s   
"zTestCmpToKey.test_bad_cmpc                 C   s*   dd }| j |d}| |djd d S )Nc                 S   rh  r   r   rg   r   r   r   ri    r+   z)TestCmpToKey.test_obj_field.<locals>.cmp1rq  2   )rm  rE   r   rs  r   r   r   test_obj_field  s   zTestCmpToKey.test_obj_fieldc                 C   s.   dd }|  ttd| |dg d d S )Nc                 S      ||  S r   r   rg   r   r   r   rr    r  z)TestCmpToKey.test_sort_int.<locals>.mycmprT   r   )r7   r6   r0   r/   r   )rE   sortedry   rm  )r(   rr  r   r   r   test_sort_int  s   zTestCmpToKey.test_sort_intc                 C   s@   dd }g d}t || |d}| dd |D g d d S )Nc                 S   s"   t | t |} }| |k| |k  S r   rj  rg   r   r   r   rr    s   z-TestCmpToKey.test_sort_int_str.<locals>.mycmp)	rT   3rV   r0   0rO  r7   Z10r/   r~  c                 S   s   g | ]}t |qS r   rj  )r   r   r   r   r   r         z2TestCmpToKey.test_sort_int_str.<locals>.<listcomp>)	r   r/   r/   r0   r6   r7   rT   rV   r1   )r  rm  rE   )r(   rr  valuesr   r   r   test_sort_int_str  s   zTestCmpToKey.test_sort_int_strc                 C   s<   dd }|  |}|d}| tt| | |tjj d S )Nc                 S   r}  r   r   rg   r   r   r   rr    r  z%TestCmpToKey.test_hash.<locals>.mycmpr1   )rm  rM   rN   hashZassertNotIsInstancecollectionsr	  Hashable)r(   rr  r   kr   r   r   	test_hash  s
   
zTestCmpToKey.test_hashN)
r    r!   r"   rp  rt  rz  r|  r  r  r  r   r   r   r   rg  `  s    	rg  c                   @   s$   e Zd Zer	ejZejdd ZdS )TestCmpToKeyCc                 C   s   t | ttd  d S r   )r   Zcheck_disallow_instantiationr   r   rm  rP   r   r   r   test_disallow_instantiation  s   z)TestCmpToKeyC.test_disallow_instantiationN)r    r!   r"   r   rm  r   cpython_onlyr  r   r   r   r   r    s
    r  c                   @   rd  )TestCmpToKeyPyN)r    r!   r"   r   r   rm  r   r   r   r   r    rf  r  c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestTotalOrderingc                 C   s   t jG dd d}| |d|dk  | |d|dk | |d|dk | |d|dk | |d|dk | |d|dk | |d|dk d S )Nc                   @   r   )z3TestTotalOrdering.test_total_ordering_lt.<locals>.Ac                 S   rZ  r   r   r(   r   r   r   r   r     r   z<TestTotalOrdering.test_total_ordering_lt.<locals>.A.__init__c                 S      | j |j k S r   r  r'   r   r   r   rv    rj   z:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__lt__c                 S      | j |j kS r   r  r'   r   r   r   __eq__  rj   z:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__eq__Nr    r!   r"   r   rv  r  r   r   r   r   r         r   r/   r0   r	   total_orderingrC   r   r(   r   r   r   r   test_total_ordering_lt     z(TestTotalOrdering.test_total_ordering_ltc                 C   s   t jG dd d}| |d|dk  | |d|dk | |d|dk | |d|dk | |d|dk | |d|dk | |d|dk d S )Nc                   @   r   )z3TestTotalOrdering.test_total_ordering_le.<locals>.Ac                 S   rZ  r   r  r  r   r   r   r     r   z<TestTotalOrdering.test_total_ordering_le.<locals>.A.__init__c                 S   s   | j |j kS r   r  r'   r   r   r   __le__  rj   z:TestTotalOrdering.test_total_ordering_le.<locals>.A.__le__c                 S   r  r   r  r'   r   r   r   r    rj   z:TestTotalOrdering.test_total_ordering_le.<locals>.A.__eq__N)r    r!   r"   r   r  r  r   r   r   r   r     r  r   r/   r0   r  r  r   r   r   test_total_ordering_le  r  z(TestTotalOrdering.test_total_ordering_lec                 C   s   t jG dd d}| |d|dk  | |d|dk | |d|dk | |d|dk | |d|dk | |d|dk | |d|dk  d S )Nc                   @   r   )z3TestTotalOrdering.test_total_ordering_gt.<locals>.Ac                 S   rZ  r   r  r  r   r   r   r     r   z<TestTotalOrdering.test_total_ordering_gt.<locals>.A.__init__c                 S   s   | j |j kS r   r  r'   r   r   r   __gt__  rj   z:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__gt__c                 S   r  r   r  r'   r   r   r   r    rj   z:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__eq__N)r    r!   r"   r   r  r  r   r   r   r   r     r  r   r/   r0   r  r  r   r   r   test_total_ordering_gt  r  z(TestTotalOrdering.test_total_ordering_gtc                 C   s   t jG dd d}| |d|dk  | |d|dk | |d|dk | |d|dk | |d|dk | |d|dk | |d|dk d S )Nc                   @   r   )z3TestTotalOrdering.test_total_ordering_ge.<locals>.Ac                 S   rZ  r   r  r  r   r   r   r     r   z<TestTotalOrdering.test_total_ordering_ge.<locals>.A.__init__c                 S   s   | j |j kS r   r  r'   r   r   r   __ge__  rj   z:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__ge__c                 S   r  r   r  r'   r   r   r   r     rj   z:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__eq__N)r    r!   r"   r   r  r  r   r   r   r   r     r  r   r/   r0   r  r  r   r   r   test_total_ordering_ge  r  z(TestTotalOrdering.test_total_ordering_gec                 C   s   t jG dd dt}| |d|dk  | |d|dk | |d|dk | |d|dk | |d|dk | |d|dk d S )Nc                   @   r   )z=TestTotalOrdering.test_total_ordering_no_overwrite.<locals>.ANr   r   r   r   r   r         r   r/   r0   )r	   r  rp   rC   r  r   r   r    test_total_ordering_no_overwrite
  s   z2TestTotalOrdering.test_total_ordering_no_overwritec                 C   sD   |  t tjG dd d}W d    d S 1 sw   Y  d S )Nc                   @   r   )z7TestTotalOrdering.test_no_operations_defined.<locals>.ANr   r   r   r   r   r     r  r   )rM   rU  r	   r  r  r   r   r   test_no_operations_defined  s   "z,TestTotalOrdering.test_no_operations_definedc              	      s  t jG fdddt jG fdddt jG fdddt jG fdddt jG  fd	d
d
 | d# | t ddk  W d    n1 sXw   Y  W d    n1 sgw   Y  | d% | t ddk  W d    n1 sw   Y  W d    n1 sw   Y  | d% | t ddk  W d    n1 sw   Y  W d    n1 sw   Y  | d% | t ddk W d    n1 sw   Y  W d    n1 sw   Y  | d& | t ddk W d    n	1 s!w   Y  W d    n	1 s1w   Y  | d& | t ddk W d    n	1 sUw   Y  W d    n	1 sew   Y  | d& | t ddk W d    n	1 sw   Y  W d    n	1 sw   Y  | d& | t ddk W d    n	1 sw   Y  W d    n	1 sw   Y  | d& | t ddk W d    n	1 sw   Y  W d    n	1 sw   Y  | d0  d} d}| || | t ||k W d    n	1 s/w   Y  W d    n	1 s?w   Y  | d9  d } d }| || | t ||k W d    n1 smw   Y  W d    d S W d    d S 1 sw   Y  d S )!Nc                       ,   e Zd Zdd Z fddZ fddZdS )zRTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanc                 S   rZ  r   r  r  r   r   r   r   !  r   z[TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__init__c                       t | r| j|jkS dS r   
isinstancer   r'   ImplementsLessThanr   r   r  #     
zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__eq__c                    s   t | r| j|jk S tS r   r  r   NotImplementedr'   r  r   r   rv  '  r  zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__lt__Nr    r!   r"   r   r  rv  r   r  r   r   r        r  c                       r  )zUTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanc                 S   rZ  r   r  r  r   r   r   r   .  r   z^TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__init__c                    r  r   r  r'   ImplementsGreaterThanr   r   r  0  r  z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__eq__c                    s   t | r| j|jkS tS r   r  r'   r  r   r   r  4  r  z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__gt__N)r    r!   r"   r   r  r  r   r  r   r   r  ,  r  r  c                       r  )zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualToc                 S   rZ  r   r  r  r   r   r   r   ;  r   zbTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__init__c                    r  r   r  r'   ImplementsLessThanEqualTor   r   r  =  r  z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__eq__c                    s   t | r| j|jkS tS r   r  r'   r  r   r   r  A  r  z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__le__N)r    r!   r"   r   r  r  r   r  r   r   r  9  r  r  c                       r  )z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualToc                 S   rZ  r   r  r  r   r   r   r   H  r   zeTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__init__c                    r  r   r  r'   ImplementsGreaterThanEqualTor   r   r  J  r  zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__eq__c                    s   t | r| j|jkS tS r   r  r'   r  r   r   r  N  r  zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__ge__N)r    r!   r"   r   r  r  r   r  r   r   r  F  r  r  c                       s(   e Zd Zdd Z fddZdd ZdS )zXTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplementedc                 S   rZ  r   r  r  r   r   r   r   U  r   zaTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__init__c                    r  r   r  r'   ComparatorNotImplementedr   r   r  W  r  z_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__eq__c                 S   s   t S r   )r  r'   r   r   r   rv  [  rS   z_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__lt__Nr  r   r  r   r   r  S  s    r  zLT < 1r/   zLT < LEr   zLT < GTzLE <= LTr0   zLE <= GEr6   zGT > GEr7   zGT > LTrT   zGE >= GTr   zGE >= LErV   zGE when equalr   zLE when equalr   )r	   r  r   rM   rN   rE   )r(   r4   r5   r   )r  r  r  r  r  r   $test_type_error_when_not_implemented  s   
         

 $z6TestTotalOrdering.test_type_error_when_not_implementedc              
   C   sx   t tjd D ]2}dD ]-}| j||d tt|}tt||}| || W d    n1 s3w   Y  qqd S )Nr/   )rv  r  r  r  )r   r   )	ry   r   r   r   rs   Orderable_LTr   r   r   )r(   r   r   r   Zmethod_copyr   r   r   r     s   
zTestTotalOrdering.test_picklec                    s^   t jG  fdddt G dd d d}G dd d d}| ||k  | ||k d S )Nc                       s4   e Zd Z fddZfddZfddZ  ZS )zWTestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMetac                    s   t  | |||S r   )super__new__)r   r   basesns	__class__r   r   r    s   z_TestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMeta.__new__c                    s   t | s	 | j|jk S r   r  r    r'   SortableMetar   r   rv       
z^TestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMeta.__lt__c                    s   t | s	 | j|jkS r   r  r'   r  r   r   r    r  z^TestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMeta.__eq__)r    r!   r"   r  rv  r  __classcell__r   r  r  r   r    s    r  c                   @   r   )zLTestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.BNr   r   r   r   r   r    r#   r  	metaclassc                   @   r   )zLTestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.ANr   r   r   r   r   r     r#   r   )r	   r  r   rC   r   )r(   r  r   r   r  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  r   r   r   r   r    s    k	r  c                   @   r   )r  c                 C   rZ  r   r  r  r   r   r   r     r   zOrderable_LT.__init__c                 C   r  r   r  r'   r   r   r   rv    rj   zOrderable_LT.__lt__c                 C   r  r   r  r'   r   r   r   r    rj   zOrderable_LT.__eq__Nr  r   r   r   r   r    r  r  c                   @   r$   )	TestCachec              	      s   | j j fdd |  fddtdD g d |   | j jddd dd    |   | j jd	d	d d	d d S )
Nc                    $   | dk r| S  | d  | d  S Nr0   r/   r   r[  fibr   r   r       z!TestCache.test_cache.<locals>.fibc                       g | ]} |qS r   r   r   rI  r  r   r   r     r  z(TestCache.test_cache.<locals>.<listcomp>rn   r   r/   r/   r0   r6   rT   r      rM  "   7   Y         iy  ib     hitsmissesmaxsizecurrsizer   )modulecacherE   ry   
cache_info
_CacheInfocache_clearrP   r   r  r   
test_cache  s   

zTestCache.test_cacheN)r    r!   r"   r  r   r   r   r   r    s    r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5S )6TestLRUc                    sL  dd }| j jdd|}| \}}}}| |d | |d | |d | |d td}tdD ]}t|t|}	}
||	|
}||	|
}| || q5| \}}}}| ||k | || d | |d |  | \}}}}| |d | |d | |d ||	|
 | \}}}}| |d | |d | |d | |j	| |	|	|
 | \}}}}| |d | |d | |d | j d fd	d
}| | j
d d tdD ]	}| | d q|  d | \}}}}| |d | |d | |d | j d fdd
}| | j
d d tdD ]
}| | d q2|  d | \}}}}| |d | |d | |d | j d fdd
}| | j
d d dD ]}	| ||	|	d  qv|  d | \}}}}| |d | |d | |d d S )Nc                 S      d|  | S Nr6   r   rg   r   r   r   orig  rj   zTestLRU.test_lru.<locals>.origr2   r  r   rT     r/   c                          d7  dS Nr/   r2   r   r   f_cntr   r   ri        zTestLRU.test_lru.<locals>.fc                      r  r  r   r   r  r   r   ri     r  r7   r0   c                    s    d7  | d S Nr/   r1   r   r>   r  r   r   ri     s   )rV   r   rV   r   rV   r   r   r   r   r   r   r   r   r   r   rV   r1      )r  	lru_cacher  rE   ry   r   rC   r  r   r  r  )r(   r  ri   r  r  r  r  domainrH  r?   rh   actualra   r   r  r   test_lru  s   





zTestLRU.test_lruc                 C   sz   | j jdd }| tt|g dg d | | jd | | jd | | jd | | j	d d S )Nc                 S   s   | d S Nr0   r   r>   r   r   r   square$  r   z(TestLRU.test_lru_no_args.<locals>.square)r1   r2   r1   )d   i  r  r/   r0      )
r  r  rE   r&   rG   r  r  r  r  r  )r(   r  r   r   r   test_lru_no_args#  s   
zTestLRU.test_lru_no_argsc                    s~   d| j jdd fdd tdD ]}|  |d| d q|   jd |  dd	 |   jd d S )
NTr1   r  c                    s(   d|  d}| dkrrd | }|S )N.r2   Fr   )r?   rvri   oncer   r   ri   8  s
   z%TestLRU.test_lru_bug_35780.<locals>.f   r  r2   z.20.)r  r  ry   rE   r  r  r(   r?   r   r  r   test_lru_bug_35780/  s   	zTestLRU.test_lru_bug_35780c                 C   s>   | j  dd }|d |di i  | | jd d S )Nc                 S   r  r   r   r>   r   r   r   ri   P  r  z%TestLRU.test_lru_bug_36650.<locals>.fr   r/   r^   )r  r  rE   r  r  rl   r   r   r   test_lru_bug_36650J  s
   
zTestLRU.test_lru_bug_36650c                 C   s  | j jdddd }tj }tjjdd|_tjjdd|_| ||dd | |jjd | |	 d	 | ||dd | |jjd
 | |	 d | |dd
d | |jjd
 | |	 d | ||dd | |jjd | |	 d d S )Nr/   r  c                 S   s   | d | S r  r   rg   r   r   r   ri   ^     z*TestLRU.test_lru_hash_only_once.<locals>.fr  )Zreturn_valuei  rn   )r   r/   r/   r/   r0   )r/   r/   r/   r/   r   r2   )r/   r0   r/   r/   r6   )r/   r6   r/   r/   )
r  r  r;  ZmockZMock__mul____hash__rE   Z
call_countr  )r(   ri   Zmock_intr   r   r   test_lru_hash_only_onceX  s"   

zTestLRU.test_lru_hash_only_oncec                 C   sP   t j}z | jdtt _dD ]}| tdd | | qW |t _d S |t _w )Nr7   )r   r   r/   r0   r6   r6   r7   rT   r   r/   rV   r0   r/   Zabcdefghijklmn)builtinsrF  r  r  rE   )r(   Zold_lenrH  r   r   r   test_lru_reentrancy_with_len{  s   z$TestLRU.test_lru_reentrancy_with_lenc                 C   s6   t  dd }| |ddd | |dd d S )Nc                  W   rR   r   r   r   r   r   r   ri     r  z-TestLRU.test_lru_star_arg_handling.<locals>.fr/   r0   rK   )rK   )r	   r  rE   rl   r   r   r   test_lru_star_arg_handling  s   
z"TestLRU.test_lru_star_arg_handlingc                 C   s   t jd ddd }t jdddd }| t |g  W d    n1 s(w   Y  | t |g  W d    d S 1 sBw   Y  d S )Nr  c                 S   r  r   r   or   r   r   infinite_cache  r  z3TestLRU.test_lru_type_error.<locals>.infinite_cacher1   c                 S   r  r   r   r
  r   r   r   limited_cache  r  z2TestLRU.test_lru_type_error.<locals>.limited_cache)r	   r  rM   rN   )r(   r  r  r   r   r   test_lru_type_error  s   





"zTestLRU.test_lru_type_errorc              	         | j jd d fdd |  fddtdD g d |   | j jddd dd	    |   | j jd
d
d d
d	 d S )Nr  c                    r  r  r   r[  r  r   r   r    r  z/TestLRU.test_lru_with_maxsize_none.<locals>.fibc                    r  r   r   r  r  r   r   r     r  z6TestLRU.test_lru_with_maxsize_none.<locals>.<listcomp>rn   r  r  r  r   r  r  rE   ry   r  r  r  rP   r   r  r   test_lru_with_maxsize_none     

z"TestLRU.test_lru_with_maxsize_nonec              	      sj   | j jdddd  dD ]}|  fddtdD ttd q|   | j jd	d
d	d	d d S )Nir  c                 S   rR   r   r   r[  r   r   r   eq  r  z2TestLRU.test_lru_with_maxsize_negative.<locals>.eqr_   c                    r  r   r   r  r  r   r   r     r  z:TestLRU.test_lru_with_maxsize_negative.<locals>.<listcomp>   r   i,  r  )r  r  rE   ry   r&   r  r  r]  r   r  r   test_lru_with_maxsize_negative  s   
(
z&TestLRU.test_lru_with_maxsize_negativec              	   C   s   dD ]M}| j |dd }| |dd | t}|d W d    n1 s*w   Y  | |jj | t |d W d    n1 sJw   Y  qd S )NNr  c                 S   s   d|  S )Nr	  r   rH  r   r   r   r     r   z.TestLRU.test_lru_with_exceptions.<locals>.funcr   r4   r  )r  r  rE   rM   r   assertIsNone	exception__context__)r(   r  r   cmr   r   r   test_lru_with_exceptions  s   



z TestLRU.test_lru_with_exceptionsc                 C   s   dD ]t}| j j|dddd }| |dd | t|dtd | |dd	 | t|dtd	 | |dd
d | t|dd
td | |dd
d	 | t|dd
td	 | | jd | | jd qd S )Nr  Tr  typedc                 S   s   | |  S r   r   r>   r   r   r   r    r   z+TestLRU.test_lru_with_types.<locals>.squarer6   r   g      @g      "@r>   r7   )r  r  rE   r   r  r  r  )r(   r  r  r   r   r   test_lru_with_types  s   
zTestLRU.test_lru_with_typesc              	      s   | j   fdd |  fddtdD g d |   | j jddddd	    |   | j jd
d
dd
d	 d S )Nc                    (   | dk r| S  | d d | d d S Nr0   r/   r[  r   r[  r  r   r   r       z/TestLRU.test_lru_with_keyword_args.<locals>.fibc                       g | ]} |d qS r[  r   r   numberr  r   r   r         z6TestLRU.test_lru_with_keyword_args.<locals>.<listcomp>rn   r  r  r  r  r   r  rP   r   r  r   test_lru_with_keyword_args  s   

z"TestLRU.test_lru_with_keyword_argsc              	      r  )Nr  c                    r!  r"  r   r[  r  r   r   r    r#  z<TestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.fibc                    r$  r%  r   r&  r  r   r   r     r(  zCTestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.<listcomp>rn   r  r  r  r   r  rP   r   r  r   'test_lru_with_keyword_args_maxsize_none  r  z/TestLRU.test_lru_with_keyword_args_maxsize_nonec              	   C   sj   | j jdddd }| |ddddd	g | |ddd
d	dg | | | j jddddd d S )Nr1   r  c                  [   s   t |  S r   )r&   items)r   r   r   r   ri     r  z$TestLRU.test_kwargs_order.<locals>.fr/   r0   r3   )r4   r/   )r5   r0   )r5   r4   r   r  )r  r  rE   r  r  rl   r   r   r   test_kwargs_order  s   

zTestLRU.test_kwargs_orderc                 C   sB   ddd}| j  |}| j jD ]}| t||t|| qd S )Nzomgzomg_annotationc                 S   r   )zf doc stringrN  r   )r-  r   r   r   ri     r  z,TestLRU.test_lru_cache_decoration.<locals>.f)r-  r.  )r  r  r9  rE   rs   )r(   ri   gr   r   r   r   test_lru_cache_decoration  s
   
z!TestLRU.test_lru_cache_decorationc           	   	      s  d\}dd j j| d   \}}}}|d t  fdd fdd	}t }t	d
 zfddt
|D }t|   W d    n1 s`w   Y    \}}}}j tu r|| || |  n|| || |  || tj|dg}|fddt
|D 7 }  t|   W d    n1 sw   Y  W t	| d S W t	| d S t	| w )N)rT      c                 S   r  r  r   rg   r   r   r   r    rj   z-TestLRU.test_lru_cache_threaded.<locals>.origr  r   c                    s4    d tD ]} | d| d q	d S )Nr1   r   )waitry   rE   )r  rA  )ri   mr  r(   startr   r   full  s   
z-TestLRU.test_lru_cache_threaded.<locals>.fullc                     s(    d td D ]}    qd S )Nr1   r0   )r2  ry   r  )rA  )ri   r3  r4  r   r   clear  s   

z.TestLRU.test_lru_cache_threaded.<locals>.clearư>c                       g | ]
}t j |gd qS )targetr   	threadingThreadr   r  r5  r   r   r   !      z3TestLRU.test_lru_cache_threaded.<locals>.<listcomp>r:  c                    r8  r9  r;  r>  r?  r   r   r   2  r@  )r  r  r  rE   r<  Eventr   getswitchintervalr   setswitchintervalry   r   start_threadssetr   ro  r=  r6  )	r(   rI  r  r  r  r  r6  orig_sithreadsr   )ri   r5  r3  r  r(   r4  r   test_lru_cache_threaded
  sF   




zTestLRU.test_lru_cache_threadedc              
      s2  d\}t |d t |d t |d jj| dfdd   dd| df  fddfd	d
t|D }t|? tD ]1}	d 
  	d 
  	d 
    d|d | | |d f qUW d    d S 1 sw   Y  d S )N)rT   rV   r/   r  c                    s     d d|  S Nr1   r6   )r2  r>   )pauser   r   ri   @     
z+TestLRU.test_lru_cache_threaded2.<locals>.fr   c                     s:   t D ]} d  | d|   d qd S rJ  )ry   r2  rE   r  )ri   r3  r(   r4  stopr   r   testE  s
   
z.TestLRU.test_lru_cache_threaded2.<locals>.testc                    s   g | ]}t j d qS )rA  r;  r>  rN  r   r   r   J  s    z4TestLRU.test_lru_cache_threaded2.<locals>.<listcomp>r1   )r<  Barrierr  r  rE   r  ry   r   rE  r2  reset)r(   rI  rH  rH  r   )ri   r3  rK  r(   r4  rM  rN  r   test_lru_cache_threaded2:  s(   


*"z TestLRU.test_lru_cache_threaded2c                    sn   j jdddd   fddfddtg d	D }t|	 W d    d S 1 s0w   Y  d S )
Nr0   r  c                 S   s   t d d|  S )Ng{Gz?r6   )timesleepr>   r   r   r   ri   V  rL  z+TestLRU.test_lru_cache_threaded3.<locals>.fc                    sH   j | d  |d| |  W d    d S 1 sw   Y  d S )N)threadr6   )r   rE   )rH  r?   )ri   r(   r   r   rN  Z  s   "z.TestLRU.test_lru_cache_threaded3.<locals>.testc                    s"   g | ]\}}t j ||fd qS r9  r;  )r   rH  vrO  r   r   r   ]  s    z4TestLRU.test_lru_cache_threaded3.<locals>.<listcomp>)r/   r0   r0   r6   r0   )r  r  	enumerater   rE  )r(   rH  r   )ri   r(   rN  r   test_lru_cache_threaded3U  s   


"z TestLRU.test_lru_cache_threaded3c                    s^   | j jdddd G  fddd  d  d |  d d d S )	Nr1   r  c                 S   rR   )zEUsed to demonstrate a reentrant lru_cache call within a single threadr   r>   r   r   r   	test_funce  rC  z.TestLRU.test_need_for_rlock.<locals>.test_funcc                       s.   e Zd ZdZdd Zdd Z fddZdS )	z-TestLRU.test_need_for_rlock.<locals>.DoubleEqz=Demonstrate a reentrant lru_cache call within a single threadc                 S   rZ  r   r>   r  r   r   r   r   l  r   z6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__init__c                 S      | j S r   r>   rP   r   r   r   r  n  ry  z6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__hash__c                    s"   | j dkr d | j |j kS r  r>   r'   DoubleEqrY  r   r   r  p  s   
z4TestLRU.test_need_for_rlock.<locals>.DoubleEq.__eq__N)r    r!   r"   r*  r   r  r  r   r[  r   r   r\  j  s
    r\  r/   r0   )r  r  rE   rP   r   r[  r   test_need_for_rlockb  s   
zTestLRU.test_need_for_rlockc                    st  G  fdddt }|d}|d}|d} |j d dD ]} |||d d  q! |j|j|jfd  |j d	 d
D ]} |||d d  qH |j|j|jfd  |j d dD ]} |||d d  qo |j|j|jfd  |j d  |j |j   |j |j   |j |j  d S )Nc                       s$   e Zd ZdZ jddd ZdS )z"TestLRU.test_lru_method.<locals>.Xr   r0   c                 S   s   |  j d7  _ |d |  S r  r  r  r   r   r   ri   }  s   z$TestLRU.test_lru_method.<locals>.X.fN)r    r!   r"   r  r  r  ri   r   rP   r   r   X{  s    
r^  rT   rV   )r   r   r0   r   )
r/   r0   r0   r6   r/   r/   r/   r0   r6   r6   r1   )r   r   r   )r7   r   r0   r0   )
r/   r0   r/   r/   r/   r/   r6   r0   r0   r0   )r   r7   r   )r1   r1   r0   r0   )
r0   r/   r/   r/   r/   r0   r/   r6   r0   r/   )r   r7   rT   )r  r  r0   r0   )rp   rE   ri   r  r  )r(   r^  r4   r5   r;   r?   r   rP   r   test_lru_methodz  s(   zTestLRU.test_lru_methodc              
   C   s   | j }|jd |j|jfD ]2}ttjd D ](}| j||d tt	||}| 
|| W d    n1 s9w   Y  qqd S )Nr   r/   )r   r   )r  cached_funccached_methcached_staticmethry   r   r   r   r   r   r   )r(   r   ri   r   r   r   r   r   r     s   zTestLRU.test_picklec              	   C   s   | j }dd }| j|d}|jd |j|j| jd|f}|D ]#}| j|d t|}| 	|| W d    n1 s?w   Y  q!d S )Nc                 S   r  r  r   rg   r   r   r   r    rj   zTestLRU.test_copy.<locals>.origr0   r   r   )
r  r  rB   r`  ra  rb  r  r   r   r   r(   r   r  r   Zfuncsri   r   r   r   r   r        
zTestLRU.test_copyc              	   C   s   | j }dd }| j|d}|jd |j|j| jd|f}|D ]#}| j|d t	|}| 
|| W d    n1 s?w   Y  q!d S )Nc                 S   r  r  r   rg   r   r   r   r    rj   z#TestLRU.test_deepcopy.<locals>.origr0   r   rc  )r  r  rB   r`  ra  rb  r  r   r   r   r   rd  r   r   r   r     re  zTestLRU.test_deepcopyc                 C   s^   | j jdddd }| | ddd | j jdddd	d }| | ddd d S )
Nr0   r  c                   S   r   Nr/   r   r   r   r   r   ri     r  z,TestLRU.test_lru_cache_parameters.<locals>.fFr  r  Tc                   S   r   rf  r   r   r   r   r   ri     r  )r  r  rE   cache_parametersrl   r   r   r   test_lru_cache_parameters  s   

z!TestLRU.test_lru_cache_parametersc                    s~    j jdd }G  fddd}t|t|jt|jg}|D ]} |  q#~~t  |D ]} 	|  q4d S )Nc                 S   rR   r   r   r>   r   r   r   test_function  r  z9TestLRU.test_lru_cache_weakrefable.<locals>.test_functionc                       s4   e Zd Z jjdd Ze jj fddZdS )z-TestLRU.test_lru_cache_weakrefable.<locals>.Ac                 S   r   r   r   r  r   r   r   test_method  r   z9TestLRU.test_lru_cache_weakrefable.<locals>.A.test_methodc                    s    | fS r   r   r>   rP   r   r   test_staticmethod     z?TestLRU.test_lru_cache_weakrefable.<locals>.A.test_staticmethodN)r    r!   r"   r  r  rj  r   rk  r   rP   r   r   r     s    
r   )
r  r  weakrefrefrj  rk  ZassertIsNotNonegcZcollectr  )r(   ri  r   Zrefsrn  r   rP   r   test_lru_cache_weakrefable  s   



z"TestLRU.test_lru_cache_weakrefableN)r    r!   r"   r  r  r   r  r  r  r	  r  r  r  r  r   r)  r*  r,  r0  rI  rR  rX  r]  r_  r   r   r   rh  rp  r   r   r   r   r    s6    Y#		
0r  c                 C   r  r  r   rg   r   r   r   py_cached_func  r  rq  c                 C   r  r  r   rg   r   r   r   c_cached_func  r  rr  c                   @   :   e Zd ZeZefZe dd Ze	e dd Z
dS )	TestLRUPyc                 C      d| | S r  r   r  r   r   r   ra    r  zTestLRUPy.cached_methc                 C   r  r  r   rg   r   r   r   rb       zTestLRUPy.cached_staticmethN)r    r!   r"   r   r  rq  r`  r  ra  r   rb  r   r   r   r   rt        
rt  c                   @   rs  )TestLRUCc                 C   ru  r  r   r  r   r   r   ra    r  zTestLRUC.cached_methc                 C   r  r  r   rg   r   r   r   rb    rv  zTestLRUC.cached_staticmethN)r    r!   r"   r   r  rr  r`  r  ra  r   rb  r   r   r   r   rx    rw  rx  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zee	d	e
jd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Z d4d5 Z!d6d7 Z"d8S )9TestSingleDispatchc                 C   sZ   t jdd }dd }|t| | |dd | |dd | |g d	d d S )
Nc                 S   r   Nro   r   r   r   r   r   r/  	  r  z3TestSingleDispatch.test_simple_overloads.<locals>.gc                 S   r   )Nintegerr   r  r   r   r   g_int  rS   z7TestSingleDispatch.test_simple_overloads.<locals>.g_intrx   ro   r/   r{  r/   r0   r6   )r	   singledispatchregisterrp   rE   r(   r/  r|  r   r   r   test_simple_overloads  s   
z(TestSingleDispatch.test_simple_overloadsc                 C   s   t jdd }G dd d}G dd d|}G dd d|}G d	d
 d
||}dd }dd }||| ||| | || d | || d | || d | || d d S )Nc                 S   r   rz  r   r   r   r   r   r/    r  z&TestSingleDispatch.test_mro.<locals>.gc                   @   r   )z&TestSingleDispatch.test_mro.<locals>.ANr   r   r   r   r   r     r#   r   c                   @   r   )z&TestSingleDispatch.test_mro.<locals>.CNr   r   r   r   r   C  r#   r  c                   @   r   )z&TestSingleDispatch.test_mro.<locals>.BNr   r   r   r   r   r    r#   r  c                   @   r   )z&TestSingleDispatch.test_mro.<locals>.DNr   r   r   r   r   D  r#   r  c                 S   r   )Nr   r   rU   r   r   r   g_A  rS   z(TestSingleDispatch.test_mro.<locals>.g_Ac                 S   r   )Nr  r   rW   r   r   r   g_B!  rS   z(TestSingleDispatch.test_mro.<locals>.g_B)r	   r~  r  rE   )r(   r/  r   r  r  r  r  r  r   r   r   test_mro  s   
zTestSingleDispatch.test_mroc                 C   sn   t jdd }|tdd }| |dd | |dd | |t| | |t|t d S )	Nc                 S   r   rz  r   r   r   r   r   r/  +  r  z5TestSingleDispatch.test_register_decorator.<locals>.gc                 S   s
   d| f S )Nzint %sr   r  r   r   r   r|  .     
z9TestSingleDispatch.test_register_decorator.<locals>.g_intrv   ro   r  zint 12)	r	   r~  r  rp   rE   r   dispatchr   rx   r  r   r   r   test_register_decorator*  s   

z*TestSingleDispatch.test_register_decoratorc                 C   s>   t jdd }| |jd tjjdk r| |jd d S d S )Nc                 S   r   )Simple testZTestr   r   r   r   r   r/  9  rC  z6TestSingleDispatch.test_wrapping_attributes.<locals>.gr/  r0   r  )r	   r~  rE   r    r   r=  r>  r*  )r(   r/  r   r   r   test_wrapping_attributes8  s   
z+TestSingleDispatch.test_wrapping_attributeszrequires _decimalc                 C   s   t jdd }|tjdd }td}td}| ||d | ||d |tjd	d }| ||d
 | ||d d S )Nc                 S   r   rz  r   r   r   r   r   r/  D  r  z,TestSingleDispatch.test_c_classes.<locals>.gc                 S   rZ  r   r  r   r   r   r   rA  G  s   z,TestSingleDispatch.test_c_classes.<locals>._Exponent < EminNumber got rounded)r  )r  c                 S   r   )NToo small to care.r   r   r   r   r   rA  N  r  r  )r	   r~  r  r   ZDecimalExceptionZ	SubnormalZRoundedrE   )r(   r/  rA  subnZrndr   r   r   test_c_classesA  s   






z!TestSingleDispatch.test_c_classesc                 C   s  t j}tj}|j|j|j|jg}t|D ]}|t	|}| 
|t	|j|j|j|j|j|jtg q|j|j|jt jg}t|D ]}|t j|}| 
|t j|j|j|j|j|j|jtg q>|j|jtg}t|D ]}|t j|j|jtg}| 
|t jt	|j|jtg qgG dd dt j}|j| |j|jg}t|D ]$}|||}| 
|||j|j|jt jt	|j|j|j|j|j|jtg qG dd dt j}|j|j|j|jg}t|D ]}|||}| 
|||jt jt	|j|j|j|j|jtg
 qd S )Nc                   @   r   )z.TestSingleDispatch.test_compose_mro.<locals>.DNr   r   r   r   r   r  r  r#   r  c                   @   r$   )z.TestSingleDispatch.test_compose_mro.<locals>.Cc                 S   r  r   r   rP   r   r   r   __call__  rS   z7TestSingleDispatch.test_compose_mro.<locals>.C.__call__Nr    r!   r"   r  r   r   r   r   r    r,   r  )r  r	  r	   _compose_mroSequenceMutableMappingMappingSetr   rF   rE   
CollectionSizedIterable	Containerr   OrderedDictChainMaprx   defaultdictMutableSequencer  
ReversibleCallable)r(   r;   mror  Zhaystackr3  r  r  r   r   r   test_compose_mroT  sR   


z#TestSingleDispatch.test_compose_mroc                 C   s~  t j}ddi}g d}t d h}t|}d}tjdd }| ||d | ||d | ||d | ||d | ||d ||jdd  | ||d	 | ||d	 | ||d	 | ||d	 | ||d	 ||j	d
d  | ||d | ||d	 | ||d	 | ||d	 | ||d	 |t j
dd  | ||d | ||d	 | ||d	 | ||d	 | ||d	 ||jdd  | ||d | ||d | ||d	 | ||d	 | ||d	 ||jdd  | ||d | ||d | ||d | ||d	 | ||d	 ||jdd  | ||d | ||d | ||d | ||d	 | ||d	 ||jdd  | ||d | ||d | ||d | ||d	 | ||d ||jdd  | ||d | ||d | ||d | ||d | ||d |tdd  | ||d | ||d | ||d | ||d | ||d |tdd  | ||d | ||d | ||d | ||d | ||d |tdd  | ||d | ||d | ||d | ||d | ||d |tdd  | ||d | ||d | ||d | ||d | ||d |tdd  | ||d | ||d | ||d | ||d | ||d d S ) Nr4   r5   r}  c                 S   r   rz  r   r   r   r   r   r/    r  z/TestSingleDispatch.test_register_abc.<locals>.gro   c                 S   r   Nsizedr   r   r   r   r   r@         z6TestSingleDispatch.test_register_abc.<locals>.<lambda>r  c                 S   r   Nmutablemappingr   r   r   r   r   r@     r  r  c                 S   r   )NZchainmapr   r   r   r   r   r@     r  c                 S   r   )Nmutablesequencer   r   r   r   r   r@     r  r  c                 S   r   )N
mutablesetr   r   r   r   r   r@     r  r  c                 S   r   Nmappingr   r   r   r   r   r@     r  c                 S   r   Nsequencer   r   r   r   r   r@     r  r  c                 S   r   NrF  r   r   r   r   r   r@     r  rF  c                 S   r   NrF   r   r   r   r   r   r@     r  rF   c                 S   r   Nr&   r   r   r   r   r   r@     r  r&   c                 S   r   )Nconcrete-setr   r   r   r   r   r@     r  r  c                 S   r   )N
frozen-setr   r   r   r   r   r@     r  r  c                 S   r   )Nr   r   r   r   r   r   r@     r  r   )r  r	  r   	frozensetr	   r~  rE   r  r  r  r  r  
MutableSetr  r  r  rF   r&   rF  r   )r(   r;   rX   lr   ri   tr/  r   r   r   test_register_abc  s   

z$TestSingleDispatch.test_register_abcc              	   C   s   t j}tj}G dd dt}G dd d|}|jjG dd dt}G dd dt}G d	d
 d
|||}||j|||j||j|tg	}t	|j|j|jgD ]}	| 
|||	d| qL|j|j|j|j|jg}
| 
|||
d| d S )Nc                   @   r   )z)TestSingleDispatch.test_c3_abc.<locals>.ANr   r   r   r   r   r     r#   r   c                   @   r$   )z)TestSingleDispatch.test_c3_abc.<locals>.Bc                 S   r   r\  r   rP   r   r   r   r     rS   z1TestSingleDispatch.test_c3_abc.<locals>.B.__len__Nr    r!   r"   r   r   r   r   r   r    r,   r  c                   @   r   )z)TestSingleDispatch.test_c3_abc.<locals>.CNr   r   r   r   r   r    r  r  c                   @   r   )z)TestSingleDispatch.test_c3_abc.<locals>.DNr   r   r   r   r   r    r#   r  c                   @   r$   )z)TestSingleDispatch.test_c3_abc.<locals>.Xc                 S   r  r   r   rP   r   r   r   r    rS   z2TestSingleDispatch.test_c3_abc.<locals>.X.__call__Nr  r   r   r   r   r^    r,   r^  )abcs)r  r	  r	   _c3_mror   r  r  r  r  r   rE   r  r  )r(   r;   r  r   r  r  r  r^  ra   r  Z	many_abcsr   r   r   test_c3_abc  s   zTestSingleDispatch.test_c3_abcc                 C   sl   G dd dt }G dd d|d}G dd d|}tjdd	 }||d
d }| }| ||d d S )Nc                   @   r$   )z1TestSingleDispatch.test_false_meta.<locals>.MetaAc                 S   r   r\  r   rP   r   r   r   r     rS   z9TestSingleDispatch.test_false_meta.<locals>.MetaA.__len__Nr  r   r   r   r   MetaA  r,   r  c                   @   r   )z-TestSingleDispatch.test_false_meta.<locals>.ANr   r   r   r   r   r     r#   r   r  c                   @   r   )z.TestSingleDispatch.test_false_meta.<locals>.AANr   r   r   r   r   AA  r#   r  c                 S   r   )Nzbase Ar   rU   r   r   r   fun  r  z/TestSingleDispatch.test_false_meta.<locals>.func                 S   r   )Nfun Ar   rU   r   r   r   rA    r  z-TestSingleDispatch.test_false_meta.<locals>._r  )r   r	   r~  r  rE   )r(   r  r   r  r  rA  aar   r   r   test_false_meta  s   

z"TestSingleDispatch.test_false_metac                 C   s  t j}tjdd }G dd d|j}| }| ||d ||jdd  ||jdd  ||jd	d  ||j	d
d  | ||d |j| | ||d |j| | ||d |j	| | ||d G dd d}| }| ||d |j| | ||d |j| | 
t}|| W d    n1 sw   Y  | t|jd G dd d|j}| }	| ||	d |j| | ||	d |j	| | ||	d tjdd }
|
|jdd }|
|jdd }| 
t}|
t dd  W d    n	1 s!w   Y  | t|jd G dd dt j}|j| tjdd }||jdd }||jdd }| }| ||d  G d!d" d"}G d#d$ d$||j}| }| |
|d |j| | |
|d G d%d& d&}| }| |
|d |j| | 
t}|
| W d    n	1 sw   Y  | t|jd G d'd( d(|j|}tjd)d* }||d+d }||jd,d }| }| ||d- |j| | ||d. d S )/Nc                 S   r   rz  r   argr   r   r   r/    r  z0TestSingleDispatch.test_mro_conflicts.<locals>.gc                   @   r$   )z0TestSingleDispatch.test_mro_conflicts.<locals>.Oc                 S   r   r\  r   rP   r   r   r   r     rS   z8TestSingleDispatch.test_mro_conflicts.<locals>.O.__len__Nr  r   r   r   r   O  r,   r  ro   c                 S   r   )Niterabler   r  r   r   r   r@     r  z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>c                 S   r   N	containerr   r  r   r   r   r@     r  c                 S   r   r  r   r  r   r   r   r@     r  c                 S   r   r  r   r  r   r   r   r@     r  r  rF  c                   @   r   )z0TestSingleDispatch.test_mro_conflicts.<locals>.PNr   r   r   r   r   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>.Qc                 S   r   r\  r   rP   r   r   r   r   8  rS   z8TestSingleDispatch.test_mro_conflicts.<locals>.Q.__len__Nr  r   r   r   r   Q7  r,   r  c                 S   r   rz  r   r  r   r   r   hA  r  z0TestSingleDispatch.test_mro_conflicts.<locals>.hc                 S   r   r  r   r  r   r   r   rA  D  r  z0TestSingleDispatch.test_mro_conflicts.<locals>._c                 S   r   r  r   r  r   r   r   rA  G  r  c                   S   r   r\  r   r   r   r   r   r@   O  r  )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   r   r   r   r   RW  r#   r  c                 S   r   rz  r   r  r   r   r   rH  Z  r  z0TestSingleDispatch.test_mro_conflicts.<locals>.ic                 S   r   r  r   r  r   r   r   rA  ]  r  c                 S   r   r  r   r  r   r   r   rA  `  r  r  c                   @   r   )z0TestSingleDispatch.test_mro_conflicts.<locals>.SNr   r   r   r   r   Se  r#   r  c                   @   r$   )z0TestSingleDispatch.test_mro_conflicts.<locals>.Tc                 S   r   r\  r   rP   r   r   r   r   h  rS   z8TestSingleDispatch.test_mro_conflicts.<locals>.T.__len__Nr  r   r   r   r   Tg  r,   r  c                   @   r$   )z0TestSingleDispatch.test_mro_conflicts.<locals>.Uc                 S   r   r\  r   rP   r   r   r   r   o  rS   z8TestSingleDispatch.test_mro_conflicts.<locals>.U.__len__Nr  r   r   r   r   Un  r,   r  c                   @   r$   )z0TestSingleDispatch.test_mro_conflicts.<locals>.Vc                 S   r   r\  r   rP   r   r   r   r     rS   z8TestSingleDispatch.test_mro_conflicts.<locals>.V.__len__Nr  r   r   r   r   V  r,   r  c                 S   r   rz  r   r  r   r   r   j  r  z0TestSingleDispatch.test_mro_conflicts.<locals>.jc                 S   r   )Nr   r   r  r   r   r   rA    r  c                 S   r   r  r   r  r   r   r   rA    r  r   r  )r  r	  r	   r~  r  rE   r  r  r  r  rM   rR  r   rx   r  r  r  r  )r(   r;   r/  r  r  r  rI   Zre_oner  qr  rA  Zre_twor  rH  r   r  r  r  r  uZre_threer  r  rV  r   r   r   test_mro_conflicts  s   
















z%TestSingleDispatch.test_mro_conflictsc                    s`  ddl m} dd l}G  fddd|   t|dfdd t j}tjdd	 }i }g }| t	d | ||d
 | t	d | j
g  | jtg | jt |jt  | ||d
 | t	d | j
g  | jttg | jt |jt  | jt |jt  | jt jt  | ||d
 | ||d
 | j
ttg | jttg |tdd  | j
ttg | t	d | ||d
 | t	d | j
ttg | jtttg | jt tt|j | ||d | t	d | j
ttg | jttttg | jt tt|j G dd d}|j| | ||d
 | ||d | j
ttttg | jttttg ||jdd  | t	d | ||d | t	d | j
ttttg | jtttttg | ||d | t	d | j
ttttg | jttttttg | ||d | ||d | j
ttttttg | jttttttg |t |t | j
ttttttttg | jttttttg |j| | t	d | ||d | t	d ||jdd  | t	d | ||d | t	d | ||d | t	d |tdd  | ||d | ||d |  | t	d W d    d S 1 sw   Y  d S )Nr   )UserDictc                       s6   e Zd Z fddZdd Zdd Zdd Z  ZS )	z?TestSingleDispatch.test_cache_invalidation.<locals>.TracingDictc                    s&   t  | j|i | g | _g | _d S r   )r  r   set_opsget_ops)r(   r   r   )TracingDictr  r   r   r     s   
zHTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__init__c                 S   s   | j | }| j| |S r   )r{   r  rG  )r(   r   resultr   r   r   r     r  zKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__getitem__c                 S   s   | j | || j|< d S r   )r  rG  r{   )r(   r   r   r   r   r   __setitem__  s   zKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__setitem__c                 S   s   | j   d S r   )r{   r6  rP   r   r   r   r6       zETestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.clear)r    r!   r"   r   r   r  r6  r  r   )r  r  r   r    s
    r  WeakKeyDictionaryc                      s    S r   r   r   )tdr   r   r@     r  z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>c                 S   r   rz  r   r  r   r   r   r/    r  z5TestSingleDispatch.test_cache_invalidation.<locals>.gro   r/   r0   c                 S   r   r  r   r  r   r   r   r@     r  r&   c                   @   r   )z5TestSingleDispatch.test_cache_invalidation.<locals>.XNr   r   r   r   r   r^    r#   r^  c                 S   r   r  r   r  r   r   r   r@     r  r  c                 S   r   r  r   r  r   r   r   r@     r  r  c                 S   r   r  r   r  r   r   r   r@     r  rF   )r  r  rm  r   Z	swap_attrr	  r	   r~  rE   rF  r  r  rF   r{   registryr   r&   r  
_find_implr  r  r  r  _clear_cache)r(   r  rm  r;   r/  rX   r  r^  r   )r  r  r   test_cache_invalidation  s   


$z*TestSingleDispatch.test_cache_invalidationc                 C   s   t jdd }|jdtjjfdd}|jddd}| |d d | |d	d
id | |g dd | |dd | |dd |tG dd d}| |dd d S )Nc                 S   r   rz  r   r  r   r   r   rH    r  z.TestSingleDispatch.test_annotations.<locals>.ir  c                 S   r   r  r   r  r   r   r   rA    r  .TestSingleDispatch.test_annotations.<locals>._collections.abc.Sequencec                 S   r   r  r   r  r   r   r   rA    r  ro   r4   r/   r  r}  r  rx   c                   @   r   )r  c                 S   rZ  r   r  r(   r  r   r   r   r   	  r   z7TestSingleDispatch.test_annotations.<locals>._.__init__c                 S   s
   | j |kS r   r  r'   r   r   r   r  	  r   z5TestSingleDispatch.test_annotations.<locals>._.__eq__N)r    r!   r"   r   r  r   r   r   r   rA  		  s    rA  )r  r  )r	   r~  r  r  r	  r  rE   rx   )r(   rH  rA  r   r   r   test_annotations  s   
z#TestSingleDispatch.test_annotationsc                 C   s   G dd d}| }| d | |jd | }| t|d | d | |jd | }| t|d | d | |jd	 | }| t|d d S )
Nc                   @   s>   e Zd Zejdd Zeedd Zee	dd ZdS )z2TestSingleDispatch.test_method_register.<locals>.Ac                 S   
   d| _ d S rz  r  r  r   r   r   r  	  r  z4TestSingleDispatch.test_method_register.<locals>.A.tc                 S   r  Nrp   r  r  r   r   r   rA  	  r  z4TestSingleDispatch.test_method_register.<locals>.A._c                 S   r  Nrx   r  r  r   r   r   rA  	  r  N
r    r!   r"   r	   singledispatchmethodr  r  rp   rA  rx   r   r   r   r   r   	  s    

r   r   rp   r  rv   rx           ro   )r  rE   r  r   r   )r(   r   r4   r  r   r   r   test_method_register	  s   



z'TestSingleDispatch.test_method_registerc                 C   J   G dd d}| }|  |d |  |d | |dd d S )Nc                   @   sJ   e Zd Zejedd Zeeedd Z	ee
edd Z	dS )z8TestSingleDispatch.test_staticmethod_register.<locals>.Ac                 S   rR   r   r   r  r   r   r   r  .	  rC  z:TestSingleDispatch.test_staticmethod_register.<locals>.A.tc                 S   
   t | tS r   r  rp   r  r   r   r   rA  2	     
z:TestSingleDispatch.test_staticmethod_register.<locals>.A._c                 S   r  r   r  rx   r  r   r   r   rA  6	  r  Nr    r!   r"   r	   r  r   r  r  rp   rA  rx   r   r   r   r   r   -	  s    r   r   rv   r  rC   r  rE   r(   r   r4   r   r   r   test_staticmethod_register,	  
   z-TestSingleDispatch.test_staticmethod_registerc                 C   N   G dd d}|  |djd |  |djd |  |djd d S )	Nc                   @   sR   e Zd Zdd Zejedd Zee	edd Z
eeedd Z
dS )	z7TestSingleDispatch.test_classmethod_register.<locals>.Ac                 S   rZ  r   r  r  r   r   r   r   B	  r   z@TestSingleDispatch.test_classmethod_register.<locals>.A.__init__c                 S      | dS rz  r   r   r  r   r   r   r  E	  rl  z9TestSingleDispatch.test_classmethod_register.<locals>.A.tc                 S   r  r  r   r  r   r   r   rA  I	  rl  z9TestSingleDispatch.test_classmethod_register.<locals>.A._c                 S   r  r  r   r  r   r   r   rA  M	  rl  Nr    r!   r"   r   r	   r  r   r  r  rp   rA  rx   r   r   r   r   r   A	  s    r   r   rp   rv   rx   r  ro   rE   r  r  r  r   r   r   test_classmethod_register@	     z,TestSingleDispatch.test_classmethod_registerc                 C   s~   G dd d}|j ttdd }|j ttdd }| | djd | | djd	 | | d
jd d S )Nc                   @   s&   e Zd Zdd Zejedd ZdS )z4TestSingleDispatch.test_callable_register.<locals>.Ac                 S   rZ  r   r  r  r   r   r   r   X	  r   z=TestSingleDispatch.test_callable_register.<locals>.A.__init__c                 S   r  rz  r   r  r   r   r   r  [	  rl  z6TestSingleDispatch.test_callable_register.<locals>.A.tN)r    r!   r"   r   r	   r  r   r  r   r   r   r   r   W	  s
    r   c                 S   r  r  r   r  r   r   r   rA  `	  rl  z4TestSingleDispatch.test_callable_register.<locals>._c                 S   r  r  r   r  r   r   r   rA  d	  rl  r   rp   rv   rx   r  ro   )r  r  rp   r   rx   rE   r  )r(   r   rA  r   r   r   test_callable_registerV	  s   
	
z)TestSingleDispatch.test_callable_registerc                 C   sj   G dd dt jd}| |jj | |jd j | t |  W d    d S 1 s.w   Y  d S )Nc                   @   s    e Zd Zejejdd ZdS )zATestSingleDispatch.test_abstractmethod_register.<locals>.Abstractc                 S   r  r   r   r  r   r   r   r  p	  rC  zETestSingleDispatch.test_abstractmethod_register.<locals>.Abstract.addN)r    r!   r"   r	   r  r	  r
  r  r   r   r   r   r  n	  s    r  r  r  )r	  r  rC   r  r  r   rM   rN   )r(   r  r   r   r   test_abstractmethod_registerm	  s   "z/TestSingleDispatch.test_abstractmethod_registerc                 C   sN   G dd d}| }|  |dd |  |dd |  |dd d S )	Nc                   @   sB   e Zd Zejdd ZejdefddZejde	fddZdS )z4TestSingleDispatch.test_type_ann_register.<locals>.Ac                 S   r   rz  r   r  r   r   r   r  }	  r  z6TestSingleDispatch.test_type_ann_register.<locals>.A.tr  c                 S   r   r  r   r  r   r   r   rA  	  r  z6TestSingleDispatch.test_type_ann_register.<locals>.A._c                 S   r   r  r   r  r   r   r   rA  	  r  Nr  r   r   r   r   r   |	  s    
r   r   rp   rv   rx   r  ro   )rE   r  r  r   r   r   test_type_ann_register{	  s
   
z)TestSingleDispatch.test_type_ann_registerc                 C   r  )Nc                   @   sN   e Zd Zejedd ZejedefddZ	ejede
fddZ	dS )zATestSingleDispatch.test_staticmethod_type_ann_register.<locals>.Ac                 S   rR   r   r   r  r   r   r   r  	  rC  zCTestSingleDispatch.test_staticmethod_type_ann_register.<locals>.A.tr  c                 S   r  r   r  r  r   r   r   rA  	  r  zCTestSingleDispatch.test_staticmethod_type_ann_register.<locals>.A._c                 S   r  r   r  r  r   r   r   rA  	  r  Nr  r   r   r   r   r   	  s    r   r   rv   r  r  r  r   r   r   #test_staticmethod_type_ann_register	  r  z6TestSingleDispatch.test_staticmethod_type_ann_registerc                 C   r  )	Nc                   @   sV   e Zd Zdd Zejedd Zejede	fddZ
ejedefddZ
d	S )
z@TestSingleDispatch.test_classmethod_type_ann_register.<locals>.Ac                 S   rZ  r   r  r  r   r   r   r   	  r   zITestSingleDispatch.test_classmethod_type_ann_register.<locals>.A.__init__c                 S   r  rz  r   r  r   r   r   r  	  rl  zBTestSingleDispatch.test_classmethod_type_ann_register.<locals>.A.tr  c                 S   r  r  r   r  r   r   r   rA  	  rl  zBTestSingleDispatch.test_classmethod_type_ann_register.<locals>.A._c                 S   r  r  r   r  r   r   r   rA  	  rl  Nr  r   r   r   r   r   	  s    r   r   rp   rv   rx   r  ro   r  r  r   r   r   "test_classmethod_type_ann_register	  r  z5TestSingleDispatch.test_classmethod_type_ann_registerc              	   C   s   G dd d}|j | j |j| j|j| jfD ](}| j|d | |jd | |jd t W d    n1 s;w   Y  q| |j jd | | j jd | |jjd | | jjd | |jjd | | jjd d S )	Nc                   @   s\   e Zd ZejdedefddZejededefddZ	eje
dedefddZd	S )
z=TestSingleDispatch.test_method_wrapping_attributes.<locals>.Ar  returnc                 S      t |S My function docstringrx   r  r   r   r   r   	  rl  zBTestSingleDispatch.test_method_wrapping_attributes.<locals>.A.funcc                 S   r  r  r  r  r   r   r   cls_func	     zFTestSingleDispatch.test_method_wrapping_attributes.<locals>.A.cls_funcc                 S   s   t | S r  r  r  r   r   r   static_func	  r	  zITestSingleDispatch.test_method_wrapping_attributes.<locals>.A.static_funcN)r    r!   r"   r	   r  rp   rx   r   r   r  r   r
  r   r   r   r   r   	  s    r   methr  r  r   r  r
  )	r   r  r
  r   rE   r*  r"  rp   r    )r(   r   r  r   r   r   test_method_wrapping_attributes	  s&   z2TestSingleDispatch.test_method_wrapping_attributesc              	      s  dd  G  fddd}G  fddd}| d
}|}W d    n1 s(w   Y  | d
}|}W d    n1 s?w   Y  | || | |d | |d|d | |dd d	D ]6}| j|d
& | t||jt||j | t| |jt| |j W d    n1 sw   Y  qg|j | j |j| jfD ](}| j|d | |jd | |jd t W d    n1 sw   Y  q| |j jd | | j jd | |jjd | | jjd d S )Nc                    s$   | j  tt  fdd}|S )Nc                     s    | i |S r   r   )r   r   r  r   r   r  	  s   zgTestSingleDispatch.test_double_wrapped_methods.<locals>.classmethod_friendly_decorator.<locals>.wrapper)__func__r   r	   r@  )r   r  r   r  r   classmethod_friendly_decorator	  s
   zVTestSingleDispatch.test_double_wrapped_methods.<locals>.classmethod_friendly_decoratorc                       sB   e Zd ZeejdedefddZ ededefddZ	dS )zMTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatchr  r  c                 s        zt |V  W dS    Y dS )NDoner  r  r   r   r   cls_context_manager	  s   zaTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatch.cls_context_managerc                 S   r  r   r  r  r   r   r   decorated_classmethod	  rl  zcTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatch.decorated_classmethodN)
r    r!   r"   r   
contextlibcontextmanagerrp   rx   r  r  r   r  r   r   WithoutSingleDispatch	  s    r  c                       sN   e Zd Zejeejdede	fddZ
ej edede	fddZdS )zJTestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatchr  r  c                 s   r  )r  r  r  r  r   r   r   r  	  s   z^TestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatch.cls_context_managerc                 S   r  r  r  r  r   r   r   r  	  s   z`TestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatch.decorated_classmethodN)r    r!   r"   r	   r  r   r  r  rp   rx   r  r  r   r  r   r   WithSingleDispatch	  s    r  rT   5)r  r  )r   r  r  r  r  r  )	r  rE   r  r   rs   r    r*  r"  rp   )r(   r  r  r   Zwithout_single_dispatch_fooZsingle_dispatch_fooZmethod_namer  r   r  r   test_double_wrapped_methods	  sl   

z.TestSingleDispatch.test_double_wrapped_methodsc                 C   s^  d}d}t jdd }| t}|ddd }W d    n1 s$w   Y  | t|j|d  | t|j	| | t}|jd	d }W d    n1 sXw   Y  | t|j|d
  | t|j	| | t}|jdt
jt fdd}W d    n1 sw   Y  | t|jd | t|j	d d S )Nz(Invalid first argument to `register()`: zS. Use either `@register(some_class)` or plain `@register` on an annotated function.c                 S   r   rz  r   r  r   r   r   rH  C
  r  z8TestSingleDispatch.test_invalid_registrations.<locals>.irN  c                 S   r   )NzI annotated with a non-typer   r  r   r   r   rA  G
  r  z8TestSingleDispatch.test_invalid_registrations.<locals>._Z42c                 S   r   )NzI forgot to annotater   r  r   r   r   rA  M
  r  zB<function TestSingleDispatch.test_invalid_registrations.<locals>._r  c                 S   r   )Nz%I annotated with a generic collectionr   r  r   r   r   rA  V
  s   zInvalid annotation for 'arg'.z$typing.Iterable[str] is not a class.)r	   r~  rM   rN   r  rC   rx   r  r7  endswithtypingr  )r(   Z
msg_prefixZ
msg_suffixrH  excrA  r   r   r   test_invalid_registrations=
  s:   

z-TestSingleDispatch.test_invalid_registrationsc                 C   sJ   t jdd }d}| t| |  W d    d S 1 sw   Y  d S )Nc                  W   r  r   r   r  r   r   r   ri   e
  r  z>TestSingleDispatch.test_invalid_positional_argument.<locals>.fz)f requires at least 1 positional argument)r	   r~  assertRaisesRegexrN   )r(   ri   msgr   r   r    test_invalid_positional_argumentd
  s   
"z3TestSingleDispatch.test_invalid_positional_argumentc                 C   s  t jdd }| td |tt dd  W d    n1 s"w   Y  | td |tjt dd  W d    n1 sCw   Y  | td |tt t	B dd  W d    n1 sew   Y  | td |tjt
 tB dd  W d    n1 sw   Y  | td |tjd	d  W d    n1 sw   Y  | |d
gd | |dgd | |dd | |dd d S )Nc                 S   r   Ndefaultr   r  r   r   r   ri   m
  r  z8TestSingleDispatch.test_register_genericalias.<locals>.fInvalid first argument to c                 S   r   Nztypes.GenericAliasr   r  r   r   r   r@   r
  r  z?TestSingleDispatch.test_register_genericalias.<locals>.<lambda>c                 S   r   Nztyping.GenericAliasr   r  r   r   r   r@   t
  r  c                 S   r   )Nz$types.UnionTypes(types.GenericAlias)r   r  r   r   r   r@   v
  r  c                 S   r   Nz!typing.Union[typing.GenericAlias]r   r  r   r   r   r@   x
  r  c                 S   r   Nz
typing.Anyr   r  r   r   r   r@   z
  r  r/   r$        ?rv       )r	   r~  r   rN   r  r&   rp   r  Listrx   floatbytesAnyrE   rl   r   r   r   test_register_genericaliasl
  s*   
z-TestSingleDispatch.test_register_genericaliasc                 C   s@  t jdd }| td |tt  W d    n1 sw   Y  | td |tjt  W d    n1 s=w   Y  | td |tt t	B  W d    n1 s\w   Y  | td |tjt t	B  W d    n1 s|w   Y  | td |tj
 W d    d S 1 sw   Y  d S )Nc                 S   r   r#  r   r  r   r   r   ri   
  r  zBTestSingleDispatch.test_register_genericalias_decorator.<locals>.fr%  )r	   r~  r   rN   r  r&   rp   r  r,  rx   r/  rl   r   r   r   $test_register_genericalias_decorator
  s"   
"z7TestSingleDispatch.test_register_genericalias_decoratorc                 C   s  t jdd }| td |jdtt fdd}W d    n1 s$w   Y  | td |jdtjt	 fdd}W d    n1 sGw   Y  | td |jdtt t
B fdd}W d    n1 skw   Y  | td |jdtjt	 tB fd	d}W d    n1 sw   Y  | td |jdtjfd
d}W d    n1 sw   Y  | |dgd | |dgd | |dd | |dd d S )Nc                 S   r   r#  r   r  r   r   r   ri   
  r  zCTestSingleDispatch.test_register_genericalias_annotation.<locals>.fzInvalid annotation for 'arg'r  c                 S   r   r&  r   r  r   r   r   rA  
  r  zCTestSingleDispatch.test_register_genericalias_annotation.<locals>._c                 S   r   r'  r   r  r   r   r   rA  
  r  c                 S   r   )Nz#types.UnionType(types.GenericAlias)r   r  r   r   r   rA  
  r  c                 S   r   r(  r   r  r   r   r   rA  
  r  c                 S   r   r)  r   r  r   r   r   rA  
  r  r/   r$  r*  rv   r+  )r	   r~  r   rN   r  r&   rp   r  r,  r-  rx   r.  r/  rE   )r(   ri   rA  r   r   r   %test_register_genericalias_annotation
  s4   
z8TestSingleDispatch.test_register_genericalias_annotationN)#r    r!   r"   r  r  r  r  r;  
skipUnlessr   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r"  r0  r1  r2  r   r   r   r   ry    s>    
	6^ f$c'ry  c                   @   &   e Zd ZdZdd Zejdd ZdS )CachedCostItemr/   c                 C   s   t  | _d S r   )r   RLocklockrP   r   r   r   r   
  r  zCachedCostItem.__init__c                 C   s>   | j  |  jd7  _W d   | jS 1 sw   Y  | jS )The cost of the item.r/   N)r7  _costrP   r   r   r   cost
  s   
zCachedCostItem.costN)r    r!   r"   r9  r   r   cached_propertyr:  r   r   r   r   r5  
  
    r5  c                   @   s"   e Zd ZdZdd ZeeZdS )OptionallyCachedCostItemr/   c                 C   s   |  j d7  _ | j S )r8  r/   r9  rP   r   r   r   get_cost
  s   z!OptionallyCachedCostItem.get_costN)r    r!   r"   r9  r?  r   r;  cached_costr   r   r   r   r=  
  s    r=  c                   @   s"   e Zd Zdd Zejdd ZdS )CachedCostItemWaitc                 C   s   d| _ t | _|| _d S rf  )r9  r   r6  r7  event)r(   rB  r   r   r   r   
  s   

zCachedCostItemWait.__init__c                 C   sJ   | j d | j |  jd7  _W d    | jS 1 sw   Y  | jS rf  )rB  r2  r7  r9  rP   r   r   r   r:  
  s   
zCachedCostItemWait.costN)r    r!   r"   r   r   r;  r:  r   r   r   r   rA  
  s    rA  c                   @   r4  )CachedCostItemWithSlotsr9  c                 C   r  rf  r>  rP   r   r   r   r   
  r   z CachedCostItemWithSlots.__init__c                 C   s   t d)Nz!never called, slots not supportedrQ  rP   r   r   r   r:  
  r   zCachedCostItemWithSlots.costN)r    r!   r"   	__slots__r   r   r;  r:  r   r   r   r   rC  
  r<  rC  c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )TestCachedPropertyc                 C   s&   t  }| |jd | |jd d S r  )r5  rE   r:  r(   itemr   r   r   test_cached
  s   zTestCachedProperty.test_cachedc                 C   sF   t  }| | d | |jd | | d | |jd d S )Nr0   r6   r7   )r=  rE   r?  r@  rF  r   r   r   1test_cached_attribute_name_differs_from_func_name
  s
   zDTestCachedProperty.test_cached_attribute_name_differs_from_func_namec              	      s   t  }t| d}t }td z+ fddt|D }t| |	  W d    n1 s3w   Y  W t| nt| w | 
 jd d S )Nr6   r7  c                    s    g | ]}t j fd ddqS )c                      s    j S r   )r:  r   rG  r   r   r@   
  s    z=TestCachedProperty.test_threaded.<locals>.<listcomp>.<lambda>rA  r;  r>  rJ  r   r   r   
  s    z4TestCachedProperty.test_threaded.<locals>.<listcomp>r0   )r<  rB  rA  r   rC  rD  ry   r   rE  rF  rE   r:  )r(   ZgoZnum_threadsrG  rH  r   rJ  r   test_threaded
  s   


z TestCachedProperty.test_threadedc                 C   s>   t  }| td |j W d    d S 1 sw   Y  d S )NzWNo '__dict__' attribute on 'CachedCostItemWithSlots' instance to cache 'cost' property.)rC  r   rN   r:  rF  r   r   r   test_object_with_slots  s   "z)TestCachedProperty.test_object_with_slotsc                 C   sZ   G dd dt }G dd d|d}| td |j W d    d S 1 s&w   Y  d S )Nc                   @   s   e Zd Zejdd ZdS )z6TestCachedProperty.test_immutable_dict.<locals>.MyMetac                 S   r   )NTr   rP   r   r   r   prop  r  z;TestCachedProperty.test_immutable_dict.<locals>.MyMeta.propN)r    r!   r"   r   r;  rM  r   r   r   r   MyMeta  s    rN  c                   @   r   )z7TestCachedProperty.test_immutable_dict.<locals>.MyClassNr   r   r   r   r   MyClass  r#   rO  r  zkThe '__dict__' attribute on 'MyMeta' instance does not support item assignment for caching 'prop' property.)r   r   rN   rM  )r(   rN  rO  r   r   r   test_immutable_dict  s   "z&TestCachedProperty.test_immutable_dictc                 C   sX   |  t}G dd d}W d   n1 sw   Y  | t|jjttd dS )zDDisallow this case because decorated function a would not be cached.c                   @   s   e Zd Zejdd ZeZdS )zKTestCachedProperty.test_reuse_different_names.<locals>.ReusedCachedPropertyc                 S   r  r   r   rP   r   r   r   r4      r  zMTestCachedProperty.test_reuse_different_names.<locals>.ReusedCachedProperty.aN)r    r!   r"   r   r;  r4   r5   r   r   r   r   ReusedCachedProperty  s    
rQ  NzLCannot assign the same cached_property to two different names ('a' and 'b').)rM   rR  rE   rx   r  r  rN   )r(   ctxrQ  r   r   r   test_reuse_different_names  s   

z-TestCachedProperty.test_reuse_different_namesc                    st   dt jfdd G  fddd}G  fddd}| }| }| |jd | |jd	 | |jd d
S )zIReusing a cached_property on different classes under the same name is OK.r   c                    s    d7   S rf  r   )Z_self)counterr   r   _cp/  r  z4TestCachedProperty.test_reuse_same_name.<locals>._cpc                          e Zd Z ZdS )z2TestCachedProperty.test_reuse_same_name.<locals>.ANr    r!   r"   cpr   rU  r   r   r   5  r   r   c                       rV  )z2TestCachedProperty.test_reuse_same_name.<locals>.BNrW  r   rY  r   r   r  8  r   r  r/   r0   N)r   r;  rE   rX  )r(   r   r  r4   r5   r   )rU  rT  r   test_reuse_same_name+  s   z'TestCachedProperty.test_reuse_same_namec                 C   s\   t dd }G dd d}||_| td | j W d    d S 1 s'w   Y  d S )Nc                 S   r  r   r   )r   r   r   r   r@   C  r  z=TestCachedProperty.test_set_name_not_called.<locals>.<lambda>c                   @   r   )z8TestCachedProperty.test_set_name_not_called.<locals>.FooNr   r   r   r   r   FooD  r#   r[  zGCannot use cached_property instance without calling __set_name__ on it.)r   r;  rX  r   rN   )r(   rX  r[  r   r   r   test_set_name_not_calledB  s   
"z+TestCachedProperty.test_set_name_not_calledc                 C   s   |  tjtj d S r   )ZassertIsInstancer5  r:  r   r;  rP   r   r   r   test_access_from_classO     z)TestCachedProperty.test_access_from_classc                 C   s   |  tjjd d S )Nr8  )rE   r5  r:  r*  rP   r   r   r   test_docR  r^  zTestCachedProperty.test_docN)r    r!   r"   rH  rI  rK  rL  rP  rS  rZ  r\  r]  r_  r   r   r   r   rE  
  s    rE  __main__)Or	  r  r  collections.abcr   	itertoolsr   r   randomr   r   rN  r   r<  rS  r  r;  Zunittest.mockosrm  ro  r   r  Ztest.supportr   r   Ztest.support.script_helperr   r	   Zimport_fresh_moduler   r   r   r  r   r   r   r   r   r%   rF   r-   r.   r3  ZTestCaser   r   rB   r   r   r   r   r   r  r?  rD  rc  re  rg  r  r  r  r  r  r  r  r  rq  rr  rt  rx  ry  r5  r=  rA  rC  rE  r    mainr   r   r   r   <module>   s    

  
G3
 r>
O
S h	    

       1
r