a
    ze[                    @   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Zejddgd	Zejddg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,Z-G d"d# d#ej,Z.e(edG d$d% d%e*Z/G d&d' d'e+Z0G d(d) d)ej)Z1G d*d+ d+ej)Z2G d,d- d-e2Z3G d.d/ d/Z4e(edG d0d1 d1e4ej)Z5G d2d3 d3e4ej)Z6G d4d5 d5Z7e(edG d6d7 d7e7ej)Z8G d8d9 d9e7ej)Z9G d:d; d;ej)Z:ej;G d<d= d=Z<G d>d? d?Z=G d@dA dAZ>e? dBdC Z@e? dDdE ZAG dFdG dGe>ej)ZBG dHdI dIe>ej)ZCG dJdK dKej)ZDG dLdM dMZEG dNdO dOZFG dPdQ dQZGG dRdS dSZHG dTdU dUej)ZIeJdVkreK  dS )W    N)permutations)choice)support)proxy)assert_python_ok	functools
_functools)Zblocked)ZfreshdecimalZ_decimalc              	   c   s:   t j|  }|t j| < zd V  W |t j| < n|t j| < 0 d S N)sysmodules)nameZreplacementZoriginal_module r   )/usr/lib/python3.9/test/test_functools.pyreplaced_module   s
    

r   c                  O   s   | |fS )z,capture all positional and keyword argumentsr   )argskwr   r   r   capture(   s    r   c                 C   s   | j | j| j| jfS )z* return the signature of a partial object )funcr   keywords__dict__)partr   r   r   	signature-   s    r   c                   @   s   e Zd ZdS )MyTupleN__name__
__module____qualname__r   r   r   r   r   1   s   r   c                   @   s   e Zd Zdd ZdS )BadTuplec                 C   s   t | t | S r
   )listselfotherr   r   r   __add__5   s    zBadTuple.__add__N)r   r   r   r#   r   r   r   r   r   4   s   r   c                   @   s   e Zd ZdS )MyDictNr   r   r   r   r   r$   8   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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         (   r,   cr&   r'   r-   r.   r+   r,   r2   c                 S   s   | d S )Nr(   r   xr   r   r   <lambda>C       z1TestPartial.test_basic_examples.<locals>.<lambda>)r(   r)   r/   r0   )partialr   
assertTruecallableassertEqualdictmapr   r!   pr   r   r   test_basic_examples>   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&   r'   r(   r)   r*   r&   r'   )r9   r   r<   r   r   r   r=   r?   r   r   r   test_attributesF   s    zTestPartial.test_attributesc                 C   s@   |  t| j z| d  W n ty0   Y n0 | d d S )Nr'   z%First arg not checked for callability)assertRaises	TypeErrorr9   failr!   r   r   r   test_argument_checkingM   s    z"TestPartial.test_argument_checkingc                 C   sd   ddd}ddi}| j |dd}| |f i |d | |ddi |d	d
 | |ddi d S )Nr(   r)   c                 S   s   | S r
   r   r*   r   r   r   r   X   s    zBTestPartial.test_protection_of_callers_dict_argument.<locals>.funcr+   r-      r+      r,   )r(   r)   )r9   r<   )r!   r   dr@   r   r   r   (test_protection_of_callers_dict_argumentV   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 )Nr+   r-   r   rI   r9   r   r<   )r!   rM   r@   r   r   r   test_kwargs_copya   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&   r'   rB   r-   r.   r3   rO   r?   r   r   r   test_arg_combinationsj   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&   rJ   r+   r'   rL   r*   r-   )r9   r   r<   r   r?   r   r   r   test_kw_combinationst   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&   r'   )r   r&   r'   r-   r5   r6   r9   r   r:   )r!   r   r@   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)r+   r   Ng      @rJ   )r+   r6   r5   r   rU   )r!   r+   r@   rV   rX   rW   r   r   r   test_keyword   s
    
zTestPartial.test_keywordc                 C   sd   | j tddd}|ddd\}}| |dko8|dddk | \}}| |dko\|d	dik d S )
Nr   r&   rJ   r'   rL   rT   r*   rS   r+   rU   )r!   r@   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   r6   yr   r   r   f   s    z-TestPartial.test_error_propagation.<locals>.fr&   r   )r]   )rD   ZeroDivisionErrorr9   r!   r^   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   )
r9   intr   r<   r   r   
gc_collectrD   ReferenceErrorgetattrr!   r^   r@   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 )Nr(    
0123456789)r   r>   strranger9   joinr<   )r!   datarn   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)r9   r   r<   )r!   r9   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   s   | S r
   r   rs   r   r   r   foo   s    z;TestPartial.test_nested_partial_with_attribute.<locals>.foofirstsecondZspam)r9   Znew_attrr<   )r!   r9   rx   r@   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 rZd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).0r+   r   r   r   	<genexpr>   r8   z(TestPartial.test_repr.<locals>.<genexpr>r*   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   )objectrn   
format_mapr9   c_functoolspy_functoolsr   r   r<   r}   assertIn)r!   r   kwargsZkwargs_reprsr^   r   r   r   	test_repr   s2    
"


zTestPartial.test_reprc                 C   sH  | 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 0 |  t}|t|fi i f z.| t|d|tf  W |tdi i f n|tdi i f 0 |  t}|tdd|ii f z.| t|d|tf  W |tdi i f n|tdi i f 0 d S )Nr   r   z%s(...)z%s(%r, ...)r+   z%s(%r, a=...))r9   r   r   r   r   __setstate__r<   r}   )r!   r   r^   r   r   r   test_recursive_repr   s$    
(
(
zTestPartial.test_recursive_reprc                 C   s   |   d | jtdgdgd}g |_ttjd D ]*}tt||}| 	t|t| q2W d    n1 sr0    Y  d S )Nrr   Trs   r&   )
AllowPickler9   r   attrrm   pickleHIGHEST_PROTOCOLloadsdumpsr<   r!   r^   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 rq   )r9   r   r   copyr<   assertIsr   r   r!   r^   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 )Nrr   Trs   r   rt   )	r9   r   r   r   deepcopyr<   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&   r(   rJ   r   r'   r)   rL   rB   r*   r,   r   )r'   )r9   r   r   r   r=   r<   r`   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   )r9   r   rD   rE   r   r   r`   r   r   r   test_setstate_errors/  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   r(   rJ   r&   r'   r+   r   rB   )r9   r   r   r   r   r$   r<   r=   r   typetupler   )r!   r^   srr   r   r   test_setstate_subclasses9  s"    
z$TestPartial.test_setstate_subclassesc                 C   s"  |    | t}||di i f z`ttjd D ]:}| t t	|| W d    q81 sh0    Y  q8W |tdi i f n|tdi i f 0 | t}|t|fi i f zzttjd D ]T}t
t	||}z(| |jd | W |tdi i f q|tdi i f 0 qW |tdi i f n|tdi i f 0 | t}|tdd|ii f z|ttjd D ]V}t
t	||}z(| |jd | W |tdi i f n|tdi i f 0 q|W |tdi i f n|tdi i f 0 W d    n1 s0    Y  d S )Nr   r&   r   r+   )r   r9   r   r   rm   r   r   rD   RecursionErrorr   r   r   r   r   r   r   r   r   test_recursive_pickleM  s4    
.(
,(
.z!TestPartial.test_recursive_picklec                 C   s.   G dd d}|  t}| t|j|  d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z7TestPartial.test_setstate_refcount.<locals>.BadSequencec                 S   s   dS )Nr.   r   rG   r   r   r   __len__s  s    z?TestPartial.test_setstate_refcount.<locals>.BadSequence.__len__c                 S   s4   |dkrt S |dkr ttdS |dv r,i S td S )Nr   r&   i@B )r'   r-   )maxr   rm   
IndexError)r!   keyr   r   r   __getitem__u  s    zCTestPartial.test_setstate_refcount.<locals>.BadSequence.__getitem__N)r   r   r   r   r   r   r   r   r   BadSequencer  s   r   )r9   r   rD   rE   r   )r!   r   r^   r   r   r   test_setstate_refcountq  s    
z"TestPartial.test_setstate_refcountN)r   r   r   rA   rC   rH   rN   rP   rQ   rR   rY   rZ   r[   ra   ri   rp   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   <   s2   		
	
$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                   @   s   e Zd Zdd Zdd ZdS )zTestPartialC.AllowPicklec                 C   s   | S r
   r   rG   r   r   r   	__enter__  s    z"TestPartialC.AllowPickle.__enter__c                 C   s   dS NFr   r!   r   valuetbr   r   r   __exit__  s    z!TestPartialC.AllowPickle.__exit__N)r   r   r   r   r   r   r   r   r   r     s   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	yv   Y n0 | 
d
 d S )Nr&   r'   r(   r)   r*   r   r   rB   r   z-partial object allowed __dict__ to be deleted)r9   r   rD   AttributeErrorsetattrr>   r=   hexr   rE   rF   r?   r   r   r   test_attributes_unwritable  s    
z'TestPartialC.test_attributes_unwritablec                 C   sh   |  t}d|jd< t|}| d| | d| | t |  W d    n1 sZ0    Y  d S )Nr   i  Z1234z'value')r9   r   r   r}   r   rD   rE   )r!   r@   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   rG   r@   r   r   __str__  s    zHTestPartialC.test_keystr_replaces_value.<locals>.MutatesYourDict.__str__N)r   r   r   r   r   r   r   r   MutatesYourDict  s   r   Zsthr   z['sth'])r9   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   r9   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                   @   s$   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   _cmrG   r   r   r   __init__  s    z"TestPartialPy.AllowPickle.__init__c                 C   s
   | j  S r
   )r   r   rG   r   r   r   r     s    z#TestPartialPy.AllowPickle.__enter__c                 C   s   | j |||S r
   )r   r   r   r   r   r   r     s    z"TestPartialPy.AllowPickle.__exit__N)r   r   r   r   r   r   r   r   r   r   r     s   r   N)r   r   r   r   r9   r   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )CPartialSubclassNr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )PyPartialSubclassNr   r   r   r   r   r     s   r   c                   @   s   e Zd ZereZdZdS )TestPartialCSubclassN)r   r   r   r   r   r9   rw   r   r   r   r   r     s   r   c                   @   s   e Zd ZeZdS )TestPartialPySubclassN)r   r   r   r   r9   r   r   r   r   r     s   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&   r'   rJ   r-   r.   rL   r!   r   rI      r2   rK      	   rM   N)r   r   r   r   partialmethodr   nothing
positionalr   bothspec_keywordsrv   r9   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 )NrI   r   r   r2   r&   r+   r'   )r+   r2   r-   r,   r.   r1   r   )r<   r+   r   r   r   r   r   r   rG   r   r   r   rQ     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&   rI   r   rK   r   rM   )r<   r+   rv   r   rG   r   r   r   test_nested  s
    "&*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 )NrK   r2   r   rI   r   r   r2   rM   )r<   r+   r   r   rG   r   r   r   test_over_partial  s
     $&*z#TestPartialMethod.test_over_partialc                 C   s`   | j }| |jj| | |jj| | |jj| | |jj| j | | jjj| j d S r
   )r+   r   r   __self__rv   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   rv   r   r   r+   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    q1 s0    Y  qd S )Nr   )r   rI   )r   rI   r   r   rM   r   r   r   )r   r+   subTestr<   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 )Nr-   rJ   r+   )r<   r+   r   r   rG   r   r   r   test_overriding_keywords*  s    "z*TestPartialMethod.test_overriding_keywordsc                 C   s   |  t  G dd dt}W d    n1 s00    Y  |  t G dd d}W d    n1 sh0    Y  |  t G dd d}W d    n1 s0    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   B0  s   r   c                   @   s   e Zd Ze ZdS )r   Nr   r   r   r   r   r   3  s   c                   @   s   e Zd ZejeddZdS )r   r&   )r   r+   N)r   r   r   r   r   r   r   r   r   r   r   r   6  s   )rD   rE   r   )r!   r   r   r   r   test_invalid_args.  s    .,z#TestPartialMethod.test_invalid_argsc                 C   s$   |  tt| jd dt d S )Nr   z#functools.partialmethod({}, 3, b=4))r<   r}   varsr   formatr   rG   r   r   r   r   9  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 qPd S )Nc                   @   s&   e Zd Zejdd ZeedZdS )z1TestPartialMethod.test_abstract.<locals>.Abstractc                 S   s   d S r
   r   r!   r6   r]   r   r   r   add@  s    z5TestPartialMethod.test_abstract.<locals>.Abstract.addrI   N)	r   r   r   abcabstractmethodr   r   r   add5r   r   r   r   Abstract>  s   
r   __isabstractmethod__F)r   ABCMetar:   r   r   r   r   r   r   r   rv   r   r   rg   )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   | | S r
   r   r*   r   r   r   r^   M  s    z1TestPartialMethod.test_positional_only.<locals>.fr&   r'   )r   r9   r<   rh   r   r   r   test_positional_onlyL  s    z&TestPartialMethod.test_positional_onlyN)r   r   r   r   r   r+   rQ   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 ]H}t||}t||}|D ]*}|dkrX|dkrXqB|  || ||  qBq&|  |j| d S )Nr   __wrapped__)r   rg   r   )	r!   wrapperwrappedassignedupdatedr   Zwrapper_attrZwrapped_attrr   r   r   r   check_wrapperV  s    

zTestUpdateWrapper.check_wrapperc                 C   s<   dddd}d|_ d|_ddd	d
}t|| ||fS )NThis is a new annotationrJ   c                 S   s   dS This is a testNr   rJ   r   r   r   r^   j  s    z,TestUpdateWrapper._default_update.<locals>.fThis is also a testzThis is a bald faced liezThis is the prior annotationrL   c                 S   s   d S r
   r   rL   r   r   r   r   o  s    z2TestUpdateWrapper._default_update.<locals>.wrapper)r   r   r   update_wrapperr!   r^   r   r   r   r   _default_updatei  s    z!TestUpdateWrapper._default_updatec                 C   sv   |   \}}| || | |j| | |jd | |j|j | |jd | |jd d | 	d|j d S )Nr^   r  r+   r  r,   )
r	  r  r   r   r<   r   r   r   __annotations__assertNotInr!   r   r^   r   r   r   test_default_updatet  s    z%TestUpdateWrapper.test_default_updater'   )Docstrings are omitted with -O2 and abovec                 C   s   |   \}}| |jd d S Nr  r	  r<   __doc__r  r   r   r   test_default_update_doc~  s    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   s   dS r  r   r   r   r   r   r^     s    z+TestUpdateWrapper.test_no_update.<locals>.fr  c                   S   s   d S r
   r   r   r   r   r   r     s    z1TestUpdateWrapper.test_no_update.<locals>.wrapperr   r   r   )r   r   r  r  r<   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   s   d S r
   r   r   r   r   r   r^     s    z2TestUpdateWrapper.test_selective_update.<locals>.fThis is a different testr&   r'   r-   r4   c                   S   s   d S r
   r   r   r   r   r   r     s    z8TestUpdateWrapper.test_selective_update.<locals>.wrapperr   	dict_attrr   )r   r=   r  r   r  r  r<   r   r  r   r  r!   r^   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~0    Y  d|_ | t  t|||| W d    n1 s0    Y  d S )	Nc                   S   s   d S r
   r   r   r   r   r   r^     s    z4TestUpdateWrapper.test_missing_attributes.<locals>.fc                   S   s   d S r
   r   r   r   r   r   r     s    z:TestUpdateWrapper.test_missing_attributes.<locals>.wrapperr   r  r   r&   )r  r   r  r  r   r<   rD   r   r  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   s   d S r
   r   r   r   r   r   r     s    z6TestUpdateWrapper.test_builtin_update.<locals>.wrapperr   zmax()	r   r  r   r<   r   r:   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  r  r  r   Zrequires_docstringsr  r   r   r   r   r   T  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   s   dS r  r   r   r   r   r   r^     s    z$TestWraps._default_update.<locals>.fr  zThis is still a bald faced liec                   S   s   d S r
   r   r   r   r   r   r     s    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 )Nr^   r  )r	  r  r<   r   r   r   r  r   r   r   r    s
    zTestWraps.test_default_updater'   r  c                 C   s   |   \}}| |jd d S r  r  )r!   r   _r   r   r   r    s    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   s   dS r  r   r   r   r   r   r^     s    z#TestWraps.test_no_update.<locals>.fr  r   c                   S   s   d S r
   r   r   r   r   r   r     s    z)TestWraps.test_no_update.<locals>.wrapperr   r   )r   r   r&  r  r<   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   s   d S r
   r   r   r   r   r   r^     s    z*TestWraps.test_selective_update.<locals>.fr  r&   r'   r-   r4   c                 S   s
   i | _ | S r
   r  )r^   r   r   r   add_dict_attr  s    z6TestWraps.test_selective_update.<locals>.add_dict_attrr   r  c                   S   s   d S r
   r   r   r   r   r   r     s    z0TestWraps.test_selective_update.<locals>.wrapperr   )r   r=   r  r   r&  r  r<   r   r  r   r  )r!   r^   r(  r  r  r   r   r   r   r    s    zTestWraps.test_selective_updateN)r   r   r   r	  r  r!  r"  r   r#  r$  r  r  r  r   r   r   r   r%    s   
r%  c                   @   s   e Zd Zdd Zdd ZdS )
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                   @   s$   e Zd Zdd Zdd Zdd ZdS )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
   )lenr*  rG   r   r   r   r     s    z/TestReduce.test_reduce.<locals>.Squares.__len__c                 S   sR   d|  kr| j k sn tt| j}||krH| j||  |d7 }q&| j| S )Nr   r&   )r   r   r+  r*  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   r/  c                 S   s   | | S r
   r   r\   r   r   r   r     s    z#TestReduce.test_reduce.<locals>.addr4   rj   r   r+   r2   rM   w)r+   r2   rM   r0  c                 S   s   | | S r
   r   r\   r   r   r   r7     r8   z(TestReduce.test_reduce.<locals>.<lambda>r'   r   r&   i  c                 S   s   | | S r
   r   r\   r   r   r   r7     r8      l     h r(   i  r   *   1)r2  r2  r   c                   @   s   e Zd Zdd ZdS )z/TestReduce.test_reduce.<locals>.TestFailingIterc                 S   s   t d S r
   RuntimeErrorrG   r   r   r   __iter__0  s    z8TestReduce.test_reduce.<locals>.TestFailingIter.__iter__N)r   r   r   r6  r   r   r   r   TestFailingIter/  s   r7  c                   @   s   e Zd Zdd ZdS )z&TestReduce.test_reduce.<locals>.BadSeqc                 S   s   t d S r
   )
ValueError)r!   indexr   r   r   r   8  s    z2TestReduce.test_reduce.<locals>.BadSeq.__getitem__N)r   r   r   r   r   r   r   r   BadSeq7  s   r:  )r<   reducerm   rD   rE   r   r5  r8  )r!   r/  r   r7  r:  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                   @   s   e Zd Zdd Zdd ZdS )z5TestReduce.test_iterator_usage.<locals>.SequenceClassc                 S   s
   || _ d S r
   r.  )r!   r.  r   r   r   r   ?  s    z>TestReduce.test_iterator_usage.<locals>.SequenceClass.__init__c                 S   s&   d|  kr| j k rn n|S td S Nr   )r.  r   r!   r-  r   r   r   r   A  s    zATestReduce.test_iterator_usage.<locals>.SequenceClass.__getitem__N)r   r   r   r   r   r   r   r   r   SequenceClass>  s   r@  r   )r   rI   r(   r2  4   r&   r'   r-   )ZoneZtwoZthreerj   )operatorr   r<   r;  rD   rE   rn   keys)r!   r@  r   rM   r   r   r   test_iterator_usage=  s    	zTestReduce.test_iterator_usageN)r   r   r   r<  rD  r   r   r   r   r)    s   8r)  c                   @   s   e Zd ZerejZdS )TestReduceCN)r   r   r   r   r;  r   r   r   r   rE  S  s   rE  c                   @   s   e Zd ZeejZdS )TestReducePyN)r   r   r   r   r   r;  r   r   r   r   rF  Y  s   rF  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   s   | |k| |k  S r
   r   r\   r   r   r   cmp1`  s    z*TestCmpToKey.test_cmp_to_key.<locals>.cmp1r-   r&   c                 S   s   t | t | S r
   rd   r\   r   r   r   cmp2g  s    z*TestCmpToKey.test_cmp_to_key.<locals>.cmp2g      @4r'   Z35)
cmp_to_keyr<   assertGreaterZassertGreaterEqualZ
assertLessassertLessEqualr  )r!   rH  r   rJ  r   r   r   test_cmp_to_key_  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 st0    Y  | ttf d|dk  W d    n1 s0    Y  | t |   }W d    n1 s0    Y  | t |  |d }W d    n1 s0    Y  |  |}| t |  W d    n1 sT0    Y  | t |d d  W d    n1 s0    Y  d S )Nc                 S   s   | |k| |k  S r
   r   r\   r   r   r   rH  p  s    z4TestCmpToKey.test_cmp_to_key_arguments.<locals>.cmp1mycmpr-   r   r&   )rL  r<   rM  rD   rE   r   r!   rH  r   r   r   r   test_cmp_to_key_argumentso  s"    **&,
&z&TestCmpToKey.test_cmp_to_key_argumentsc                    s   dd }|  |}| t  |d|dk W d    n1 sB0    Y  G dd d  fdd}| t  |d|dk W d    n1 s0    Y  d S )Nc                 S   s   t d S r
   r_   r\   r   r   r   rH    s    z'TestCmpToKey.test_bad_cmp.<locals>.cmp1r-   r&   c                   @   s   e Zd Zdd ZdS )z)TestCmpToKey.test_bad_cmp.<locals>.BadCmpc                 S   s   t d S r
   rT  r    r   r   r   __lt__  s    z0TestCmpToKey.test_bad_cmp.<locals>.BadCmp.__lt__N)r   r   r   rU  r   r   r   r   BadCmp  s   rV  c                    s     S r
   r   r\   rV  r   r   rH    s    )rL  rD   r_   rR  r   rW  r   test_bad_cmp  s    
.zTestCmpToKey.test_bad_cmpc                 C   s*   dd }| j |d}| |djd d S )Nc                 S   s   | |k| |k  S r
   r   r\   r   r   r   rH    s    z)TestCmpToKey.test_obj_field.<locals>.cmp1rP  2   )rL  r<   r   rR  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   ||  S r
   r   r\   r   r   r   rQ    s    z)TestCmpToKey.test_sort_int.<locals>.mycmprI   r   )r.   r-   r'   r&   r   )r<   sortedrm   rL  )r!   rQ  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
   rI  r\   r   r   r   rQ    s    z-TestCmpToKey.test_sort_int_str.<locals>.mycmp)	rI   3rK   r'   0r3  r.   Z10r&   r[  c                 S   s   g | ]}t |qS r   rI  )r~   r   r   r   r   r     r8   z2TestCmpToKey.test_sort_int_str.<locals>.<listcomp>)	r   r&   r&   r'   r-   r.   rI   rK   r(   )r\  rL  r<   )r!   rQ  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   s   ||  S r
   r   r\   r   r   r   rQ    s    z%TestCmpToKey.test_hash.<locals>.mycmpr(   )rL  rD   rE   hashZassertNotIsInstancecollectionsr   Hashable)r!   rQ  r   kr   r   r   	test_hash  s
    
zTestCmpToKey.test_hashN)
r   r   r   rO  rS  rX  rZ  r]  ra  rf  r   r   r   r   rG  ]  s   	rG  c                   @   s   e Zd ZerejZdS )TestCmpToKeyCN)r   r   r   r   rL  r   r   r   r   rg    s   rg  c                   @   s   e Zd ZeejZdS )TestCmpToKeyPyN)r   r   r   r   r   rL  r   r   r   r   rh    s   rh  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                   @   s$   e Zd Zdd Zdd Zdd ZdS )z3TestTotalOrdering.test_total_ordering_lt.<locals>.Ac                 S   s
   || _ d S r
   r   r!   r   r   r   r   r     s    z<TestTotalOrdering.test_total_ordering_lt.<locals>.A.__init__c                 S   s   | j |j k S r
   rj  r    r   r   r   rU    s    z:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__lt__c                 S   s   | j |j kS r
   rj  r    r   r   r   __eq__  s    z:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__eq__Nr   r   r   r   rU  rl  r   r   r   r   r     s   r   r&   r'   r   total_orderingr:   r   r!   r   r   r   r   test_total_ordering_lt  s    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                   @   s$   e Zd Zdd Zdd Zdd ZdS )z3TestTotalOrdering.test_total_ordering_le.<locals>.Ac                 S   s
   || _ d S r
   rj  rk  r   r   r   r     s    z<TestTotalOrdering.test_total_ordering_le.<locals>.A.__init__c                 S   s   | j |j kS r
   rj  r    r   r   r   __le__  s    z:TestTotalOrdering.test_total_ordering_le.<locals>.A.__le__c                 S   s   | j |j kS r
   rj  r    r   r   r   rl    s    z:TestTotalOrdering.test_total_ordering_le.<locals>.A.__eq__N)r   r   r   r   rr  rl  r   r   r   r   r     s   r   r&   r'   rn  rp  r   r   r   test_total_ordering_le  s    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                   @   s$   e Zd Zdd Zdd Zdd ZdS )z3TestTotalOrdering.test_total_ordering_gt.<locals>.Ac                 S   s
   || _ d S r
   rj  rk  r   r   r   r     s    z<TestTotalOrdering.test_total_ordering_gt.<locals>.A.__init__c                 S   s   | j |j kS r
   rj  r    r   r   r   __gt__  s    z:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__gt__c                 S   s   | j |j kS r
   rj  r    r   r   r   rl    s    z:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__eq__N)r   r   r   r   rt  rl  r   r   r   r   r     s   r   r&   r'   rn  rp  r   r   r   test_total_ordering_gt  s    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                   @   s$   e Zd Zdd Zdd Zdd ZdS )z3TestTotalOrdering.test_total_ordering_ge.<locals>.Ac                 S   s
   || _ d S r
   rj  rk  r   r   r   r     s    z<TestTotalOrdering.test_total_ordering_ge.<locals>.A.__init__c                 S   s   | j |j kS r
   rj  r    r   r   r   __ge__  s    z:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__ge__c                 S   s   | j |j kS r
   rj  r    r   r   r   rl    s    z:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__eq__N)r   r   r   r   rv  rl  r   r   r   r   r     s   r   r&   r'   rn  rp  r   r   r   test_total_ordering_ge  s    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                   @   s   e Zd ZdS )z=TestTotalOrdering.test_total_ordering_no_overwrite.<locals>.ANr   r   r   r   r   r     s   r   r&   r'   )r   ro  rd   r:   rp  r   r   r    test_total_ordering_no_overwrite   s    z2TestTotalOrdering.test_total_ordering_no_overwritec                 C   sB   |  t$ tjG dd d}W d    n1 s40    Y  d S )Nc                   @   s   e Zd ZdS )z7TestTotalOrdering.test_no_operations_defined.<locals>.ANr   r   r   r   r   r     s   r   )rD   r8  r   ro  rp  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F | t ddk  W d    n1 s0    Y  W d    n1 s0    Y  | dL | t  ddk  W d    n1 s0    Y  W d    n1 s60    Y  | dL | t  ddk  W d    n1 s~0    Y  W d    n1 s0    Y  | dL | t  ddk W d    n1 s0    Y  W d    n1 s0    Y  | dL | t  ddk W d    n1 sN0    Y  W d    n1 sn0    Y  | dL | t  ddk W d    n1 s0    Y  W d    n1 s0    Y  | dL | t  ddk W d    n1 s0    Y  W d    n1 s>0    Y  | dL | t  ddk W d    n1 s0    Y  W d    n1 s0    Y  | dL | t  ddk W d    n1 s0    Y  W d    n1 s0    Y  | d`  d} d}| || | t ||k W d    n1 sj0    Y  W d    n1 s0    Y  | d`  d } d }| || | t ||k W d    n1 s0    Y  W d    n1 s0    Y  d S )!Nc                       s,   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   s
   || _ d S r
   rj  rk  r   r   r   r     s    z[TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__init__c                    s   t | r| j|jkS dS r   
isinstancer   r    ImplementsLessThanr   r   rl    s    
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   rU    s    
zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__lt__Nr   r   r   r   rl  rU  r   r|  r   r   r}    s   r}  c                       s,   e Zd Zdd Z fddZ fddZdS )zUTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanc                 S   s
   || _ d S r
   rj  rk  r   r   r   r   $  s    z^TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__init__c                    s   t | r| j|jkS dS r   rz  r    ImplementsGreaterThanr   r   rl  &  s    
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   rt  *  s    
z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__gt__N)r   r   r   r   rl  rt  r   r  r   r   r  "  s   r  c                       s,   e Zd Zdd Z fddZ fddZdS )zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualToc                 S   s
   || _ d S r
   rj  rk  r   r   r   r   1  s    zbTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__init__c                    s   t | r| j|jkS dS r   rz  r    ImplementsLessThanEqualTor   r   rl  3  s    
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   rr  7  s    
z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__le__N)r   r   r   r   rl  rr  r   r  r   r   r  /  s   r  c                       s,   e Zd Zdd Z fddZ fddZdS )z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualToc                 S   s
   || _ d S r
   rj  rk  r   r   r   r   >  s    zeTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__init__c                    s   t | r| j|jkS dS r   rz  r    ImplementsGreaterThanEqualTor   r   rl  @  s    
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   rv  D  s    
zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__ge__N)r   r   r   r   rl  rv  r   r  r   r   r  <  s   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   s
   || _ d S r
   rj  rk  r   r   r   r   K  s    zaTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__init__c                    s   t | r| j|jkS dS r   rz  r    ComparatorNotImplementedr   r   rl  M  s    
z_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__eq__c                 S   s   t S r
   )r  r    r   r   r   rU  Q  s    z_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__lt__Nr  r   r  r   r   r  I  s   r  zLT < 1r&   zLT < LEr   zLT < GTzLE <= LTr'   zLE <= GEr-   zGT > GEr.   zGT > LTrI   zGE >= GTr   zGE >= LErK   zGE when equalr   zLE when equalr   )r   ro  r   rD   rE   r<   )r!   r+   r,   r   )r  r  r  r}  r  r   $test_type_error_when_not_implemented  sP    
HPPPPPPPPHz6TestTotalOrdering.test_type_error_when_not_implementedc              
   C   sx   t tjd D ]d}dD ]Z}| j||d8 tt|}tt||}| || W d    q1 sf0    Y  qqd S )Nr&   )rU  rt  rr  rv  )r   r   )	rm   r   r   r   rg   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   rU    s    
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   rl    s    
z^TestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMeta.__eq__)r   r   r   r  rU  rl  __classcell__r   r  r  r   r    s   r  c                   @   s   e Zd ZdS )zLTestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.BNr   r   r   r   r   r     s   r   	metaclassc                   @   s   e Zd ZdS )zLTestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.ANr   r   r   r   r   r     s   r   )r   ro  r   r:   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   rq  rs  ru  rw  rx  ry  r  r   r  r   r   r   r   ri    s   k	ri  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r  c                 C   s
   || _ d S r
   rj  rk  r   r   r   r     s    zOrderable_LT.__init__c                 C   s   | j |j k S r
   rj  r    r   r   r   rU    s    zOrderable_LT.__lt__c                 C   s   | j |j kS r
   rj  r    r   r   r   rl    s    zOrderable_LT.__eq__Nrm  r   r   r   r   r    s   r  c                   @   s   e Zd Zdd ZdS )	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                    s$   | dk r| S  | d  | d  S Nr'   r&   r   r=  fibr   r   r    s    z!TestCache.test_cache.<locals>.fibc                    s   g | ]} |qS r   r   r~   r.  r  r   r   r     r8   z(TestCache.test_cache.<locals>.<listcomp>rb   r   r&   r&   r'   r-   rI   r      r1  "   7   Y         iy  ib     hitsmissesmaxsizecurrsizer   )modulecacher<   rm   
cache_info
_CacheInfocache_clearrG   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                    sN  dd }| j jdd|}| \}}}}| |d | |d | |d | |d td}tdD ]6}t|t| }	}
||	|
}||	|
}| || qj| \}}}}| ||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 qf|  d | \}}}}| |d | |d | |d | j d fdd
}| | j
d d dD ]}	| ||	|	d  q|  d | \}}}}| |d | |d | |d d S )Nc                 S   s   d|  | S Nr-   r   r\   r   r   r   orig  s    zTestLRU.test_lru.<locals>.origr)   r  r   rI     r&   c                      s    d7  dS Nr&   r)   r   r   f_cntr   r   r^     s    zTestLRU.test_lru.<locals>.fc                      s    d7  dS r  r   r   r  r   r   r^     s    r.   r'   c                    s    d7  | d S Nr&   r(   r   r5   r  r   r   r^   	  s    )rK   r   rK   r   rK   r   r   r   r   r   r   r   r   r   r   rK   r(      )r  	lru_cacher  r<   rm   r   r:   r  r   r   r  )r!   r  r^   r  r  r  r  domainr-  r6   r]   actualrV   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 Nr'   r   r5   r   r   r   square  s    z(TestLRU.test_lru_no_args.<locals>.square)r(   r)   r(   )d   i  r  r&   r'      )
r  r  r<   r   r>   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 )
NTr(   r  c                    s(   d|  d}| dkr$r$d | }|S )N.r)   Fr   )r6   rvr^   oncer   r   r^   .  s
    z%TestLRU.test_lru_bug_35780.<locals>.f   r  r)   z.20.)r  r  rm   r<   r  r  r!   r6   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   s   d S r
   r   r5   r   r   r   r^   F  s    z%TestLRU.test_lru_bug_36650.<locals>.fr   r&   )r   )r  r  r<   r  r  r`   r   r   r   test_lru_bug_36650@  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   r\   r   r   r   r^   T  s    z*TestLRU.test_lru_hash_only_once.<locals>.fr  )Zreturn_valuei  rb   )r   r&   r&   r&   r'   )r&   r&   r&   r&   r   r)   )r&   r'   r&   r&   r-   )r&   r-   r&   r&   )
r  r  r!  ZmockZMock__mul____hash__r<   Z
call_countr  )r!   r^   Zmock_intr   r   r   test_lru_hash_only_onceN  s"    

zTestLRU.test_lru_hash_only_oncec                 C   sR   t j}z>| jdtt _dD ]}| tdd | | qW |t _n|t _0 d S )Nr.   )r   r   r&   r'   r-   r-   r.   rI   r   r&   rK   r'   r&   Zabcdefghijklmn)builtinsr+  r  r  r<   )r!   Zold_lenr-  r   r   r   test_lru_reentrancy_with_lenq  s    z$TestLRU.test_lru_reentrancy_with_lenc                 C   s6   t  dd }| |ddd | |dd d S )Nc                  W   s   | S r
   r   r   r   r   r   r^     s    z-TestLRU.test_lru_star_arg_handling.<locals>.fr&   r'   rB   )rB   )r   r  r<   r`   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 sP0    Y  | t |g  W d    n1 s0    Y  d S )Nr  c                 S   s   d S r
   r   or   r   r   infinite_cache  s    z3TestLRU.test_lru_type_error.<locals>.infinite_cacher(   c                 S   s   d S r
   r   r  r   r   r   limited_cache  s    z2TestLRU.test_lru_type_error.<locals>.limited_cache)r   r  rD   rE   )r!   r  r  r   r   r   test_lru_type_error  s    



&zTestLRU.test_lru_type_errorc              	      s   | 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                    s$   | dk r| S  | d  | d  S r  r   r=  r  r   r   r    s    z/TestLRU.test_lru_with_maxsize_none.<locals>.fibc                    s   g | ]} |qS r   r   r  r  r   r   r     r8   z6TestLRU.test_lru_with_maxsize_none.<locals>.<listcomp>rb   r  r  r  r   r  r  r<   rm   r  r  r  rG   r   r  r   test_lru_with_maxsize_none  s    

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   s   | S r
   r   r=  r   r   r   eq  s    z2TestLRU.test_lru_with_maxsize_negative.<locals>.eqrT   c                    s   g | ]} |qS r   r   r  r  r   r   r     r8   z:TestLRU.test_lru_with_maxsize_negative.<locals>.<listcomp>   r   i,  r  )r  r  r<   rm   r   r  r  r?  r   r  r   test_lru_with_maxsize_negative  s    
(
z&TestLRU.test_lru_with_maxsize_negativec              	   C   s   dD ]}| j |dd }| |dd | t}|d W d    n1 sT0    Y  | |jj | t |d W d    q1 s0    Y  qd S )NNr  c                 S   s   d|  S )Nr   r   r-  r   r   r   r     s    z.TestLRU.test_lru_with_exceptions.<locals>.funcr   r+   r  )r  r  r<   rD   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 ]}| 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   r5   r   r   r   r    s    z+TestLRU.test_lru_with_types.<locals>.squarer-   r   g      @g      "@r5   r.   )r  r  r<   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                    s(   | dk r| S  | d d | d d S Nr'   r&   r=  r   r=  r  r   r   r    s    z/TestLRU.test_lru_with_keyword_args.<locals>.fibc                    s   g | ]} |d qS r=  r   r~   Znumberr  r   r   r     r8   z6TestLRU.test_lru_with_keyword_args.<locals>.<listcomp>rb   r  r  r  r  r   r  rG   r   r  r   test_lru_with_keyword_args  s    

z"TestLRU.test_lru_with_keyword_argsc              	      s   | 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                    s(   | dk r| S  | d d | d d S r  r   r=  r  r   r   r    s    z<TestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.fibc                    s   g | ]} |d qS r  r   r  r  r   r   r     r8   zCTestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.<listcomp>rb   r  r  r  r   r  rG   r   r  r   'test_lru_with_keyword_args_maxsize_none  s    

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 )Nr(   r  c                  [   s   t |  S r
   )r   items)r   r   r   r   r^     s    z$TestLRU.test_kwargs_order.<locals>.fr&   r'   r*   )r+   r&   )r,   r'   )r,   r+   r   r  )r  r  r<   r  r  r`   r   r   r   test_kwargs_order  s    

zTestLRU.test_kwargs_orderc                 C   sF   dddd}| j  |}| j jD ]}| t||t|| q$d S )NZzomg_annotationZzomgc                 S   s   dS )zf doc stringr2  r   r  r   r   r   r^     s    z,TestLRU.test_lru_cache_decoration.<locals>.f)r  r  r  r<   rg   )r!   r^   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 s0    Y    \}}}}j tu r
|| || |  n || || |  || tj|dg}|fddt
|D 7 }  t|   W d    n1 s0    Y  W t	| nt	| 0 d S )N)rI      c                 S   s   d|  | S r  r   r\   r   r   r   r    s    z-TestLRU.test_lru_cache_threaded.<locals>.origr  r   c                    s4    d tD ]} | d| d qd S )Nr(   r   )waitrm   r<   )re  r'  )r^   mr  r!   startr   r   full	  s    
z-TestLRU.test_lru_cache_threaded.<locals>.fullc                     s(    d td D ]}    qd S )Nr(   r'   )r  rm   r  )r'  )r^   r  r  r   r   clear  s    
z.TestLRU.test_lru_cache_threaded.<locals>.clearư>c                    s   g | ]}t j |gd qS )targetr   	threadingThreadr~   re  r  r   r   r     s   z3TestLRU.test_lru_cache_threaded.<locals>.<listcomp>r  c                    s   g | ]}t j |gd qS r  r  r  r  r   r   r   (  s   )r  r  r  r<   r  Eventr   getswitchintervalr   setswitchintervalrm   start_threadssetr   rN  r  r  )	r!   r.  r  r  r  r  r  orig_sithreadsr   )r^   r  r  r  r!   r  r   test_lru_cache_threaded   s>    

&*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 ]b}	d 
  	d 
  	d 
    d|d | | |d f qW d    n1 s$0    Y  d S )N)rI   rK   r&   r  c                    s     d d|  S Nr(   r-   )r  r5   )pauser   r   r^   6  s    
z+TestLRU.test_lru_cache_threaded2.<locals>.fr   c                     s:   t D ],} d  | d|   d qd S r	  )rm   r  r<   r  )r^   r  r!   r  stopr   r   test;  s    
z.TestLRU.test_lru_cache_threaded2.<locals>.testc                    s   g | ]}t j d qS )r   r  r  r  r   r   r   @  r8   z4TestLRU.test_lru_cache_threaded2.<locals>.<listcomp>r(   )r  Barrierr  r  r<   r  rm   r   r  r  reset)r!   r.  r  r-  r   )r^   r  r
  r!   r  r  r  r   test_lru_cache_threaded20  s$    


z TestLRU.test_lru_cache_threaded2c                    sl   j jdddd   fddfddtg d	D }t| W d    n1 s^0    Y  d S )
Nr'   r  c                 S   s   t d d|  S )Ng{Gz?r-   )timesleepr5   r   r   r   r^   L  s    
z+TestLRU.test_lru_cache_threaded3.<locals>.fc                    sF   j | d&  |d| |  W d    n1 s80    Y  d S )N)threadr-   )r   r<   )r-  r6   )r^   r!   r   r   r  P  s    z.TestLRU.test_lru_cache_threaded3.<locals>.testc                    s"   g | ]\}}t j ||fd qS r  r  )r~   r-  vr  r   r   r   S  s   z4TestLRU.test_lru_cache_threaded3.<locals>.<listcomp>)r&   r'   r'   r-   r'   )r  r  	enumerater   r  )r!   r  r   )r^   r!   r  r   test_lru_cache_threaded3K  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 )	Nr(   r  c                 S   s   | S )zEUsed to demonstrate a reentrant lru_cache call within a single threadr   r5   r   r   r   	test_func[  s    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   s
   || _ d S r
   r5   r  r   r   r   r   b  s    z6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__init__c                 S   s   | j S r
   r5   rG   r   r   r   r  d  s    z6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__hash__c                    s"   | j dkr d | j |j kS r  r5   r    DoubleEqr  r   r   rl  f  s    
z4TestLRU.test_need_for_rlock.<locals>.DoubleEq.__eq__N)r   r   r   r  r   r  rl  r   r  r   r   r  `  s   r  r&   r'   )r  r  r<   rG   r   r  r   test_need_for_rlockX  s    
zTestLRU.test_need_for_rlockc                    st  G  fdddt }|d}|d}|d} |j d dD ]} |||d d  qB |j|j|jfd  |j d	 d
D ]} |||d d  q |j|j|jfd  |j d dD ]} |||d d  qވ |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   r'   c                 S   s   |  j d7  _ |d |  S r  r  r  r   r   r   r^   s  s    z$TestLRU.test_lru_method.<locals>.X.fN)r   r   r   r  r  r  r^   r   rG   r   r   Xq  s   
r  rI   rK   )r   r   r'   r   )
r&   r'   r'   r-   r&   r&   r&   r'   r-   r-   r(   )r   r   r   )r.   r   r'   r'   )
r&   r'   r&   r&   r&   r&   r-   r'   r'   r'   )r   r.   r   )r(   r(   r'   r'   )
r'   r&   r&   r&   r&   r'   r&   r-   r'   r&   )r   r.   rI   )r  r  r'   r'   )rd   r<   r^   r  r  )r!   r  r+   r,   r2   r6   r   rG   r   test_lru_methodp  s(    zTestLRU.test_lru_methodc              
   C   s   | j }|jd |j|jfD ]d}ttjd D ]P}| j||d. tt	||}| 
|| W d    q,1 sr0    Y  q,qd S )Nr   r&   )r   r   )r  cached_funccached_methcached_staticmethrm   r   r   r   r   r   r   )r!   r   r^   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 ]F}| j|d& t|}| 	|| W d    qB1 s~0    Y  qBd S )Nc                 S   s   d|  | S r  r   r\   r   r   r   r    s    zTestLRU.test_copy.<locals>.origr'   r   r   )
r  r  r9   r  r  r  r  r   r   r   r!   r   r  r   Zfuncsr^   r   r   r   r   r     s    
zTestLRU.test_copyc              	   C   s   | j }dd }| j|d}|jd |j|j| jd|f}|D ]F}| j|d& t	|}| 
|| W d    qB1 s~0    Y  qBd S )Nc                 S   s   d|  | S r  r   r\   r   r   r   r    s    z#TestLRU.test_deepcopy.<locals>.origr'   r   r   )r  r  r9   r  r  r  r  r   r   r   r   r!  r   r   r   r     s    
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 )
Nr'   r  c                   S   s   dS Nr&   r   r   r   r   r   r^     s    z,TestLRU.test_lru_cache_parameters.<locals>.fFr  r  Tc                   S   s   dS r"  r   r   r   r   r   r^     s    )r  r  r<   cache_parametersr`   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 ]} |  qF~~t  |D ]} 	|  qhd S )Nc                 S   s   | S r
   r   r5   r   r   r   test_function  s    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   s   | |fS r
   r   r  r   r   r   test_method  s    z9TestLRU.test_lru_cache_weakrefable.<locals>.A.test_methodc                    s    | fS r
   r   r5   rG   r   r   test_staticmethod  s    z?TestLRU.test_lru_cache_weakrefable.<locals>.A.test_staticmethodN)r   r   r   r  r  r&  r   r'  r   rG   r   r   r     s
   
r   )
r  r  weakrefrefr&  r'  ZassertIsNotNonegcZcollectr  )r!   r%  r   Zrefsr)  r   rG   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  r  r  r  r  r  r  r   r   r   r$  r+  r   r   r   r   r    s4   Y#		
0r  c                 C   s   d|  | S r  r   r\   r   r   r   py_cached_func  s    r,  c                 C   s   d|  | S r  r   r\   r   r   r   c_cached_func  s    r-  c                   @   s:   e Zd ZeZefZe dd Ze	e dd Z
dS )	TestLRUPyc                 C   s   d| | S r  r   r   r   r   r   r    s    zTestLRUPy.cached_methc                 C   s   d|  | S r  r   r\   r   r   r   r    s    zTestLRUPy.cached_staticmethN)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ZefZe dd Ze	e dd Z
dS )TestLRUCc                 C   s   d| | S r  r   r   r   r   r   r    s    zTestLRUC.cached_methc                 C   s   d|  | S r  r   r\   r   r   r   r    s    zTestLRUC.cached_staticmethN)r   r   r   r   r  r-  r  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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   s   dS Nrc   r   r   r   r   r   r    s    z3TestSingleDispatch.test_simple_overloads.<locals>.gc                 S   s   dS )Nintegerr   r  r   r   r   g_int  s    z7TestSingleDispatch.test_simple_overloads.<locals>.g_intrl   rc   r&   r2  r&   r'   r-   )r   singledispatchregisterrd   r<   r!   r  r3  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   s   dS r1  r   r   r   r   r   r  
  s    z&TestSingleDispatch.test_mro.<locals>.gc                   @   s   e Zd ZdS )z&TestSingleDispatch.test_mro.<locals>.ANr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )z&TestSingleDispatch.test_mro.<locals>.CNr   r   r   r   r   C  s   r9  c                   @   s   e Zd ZdS )z&TestSingleDispatch.test_mro.<locals>.BNr   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )z&TestSingleDispatch.test_mro.<locals>.DNr   r   r   r   r   D  s   r:  c                 S   s   dS )Nr   r   rJ   r   r   r   g_A  s    z(TestSingleDispatch.test_mro.<locals>.g_Ac                 S   s   dS )Nr   r   rL   r   r   r   g_B  s    z(TestSingleDispatch.test_mro.<locals>.g_B)r   r5  r6  r<   )r!   r  r   r9  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   s   dS r1  r   r   r   r   r   r  !  s    z5TestSingleDispatch.test_register_decorator.<locals>.gc                 S   s
   d| f S )Nzint %sr   r  r   r   r   r3  $  s    z9TestSingleDispatch.test_register_decorator.<locals>.g_intrj   rc   r  zint 12)	r   r5  r6  rd   r<   r   dispatchr   rl   r7  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 r6| |jd d S )Nc                 S   s   dS )Simple testZTestr   r   r   r   r   r  /  s    z6TestSingleDispatch.test_wrapping_attributes.<locals>.gr  r'   r@  )r   r5  r<   r   r   r#  r$  r  )r!   r  r   r   r   test_wrapping_attributes.  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   s   dS r1  r   r   r   r   r   r  :  s    z,TestSingleDispatch.test_c_classes.<locals>.gc                 S   s   | j S r
   r  r   r   r   r   r'  =  s    z,TestSingleDispatch.test_c_classes.<locals>._Exponent < EminNumber got rounded)rB  )rC  c                 S   s   dS )NToo small to care.r   r   r   r   r   r'  D  s    rD  )r   r5  r6  r	   ZDecimalExceptionZ	SubnormalZRoundedr<   )r!   r  r'  subnZrndr   r   r   test_c_classes7  s    






z!TestSingleDispatch.test_c_classesc                 C   s  t j}tj}|j|j|j|jg}t|D ]6}|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 ]6}|t j|j|jtg}| 
|t jt	|j|jtg qG dd dt j}|j| |j|jg}t|D ]J}|||}| 
|||j|j|jt jt	|j|j|j|j|j|jtg q8G 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                   @   s   e Zd ZdS )z.TestSingleDispatch.test_compose_mro.<locals>.DNr   r   r   r   r   r:  h  s   r:  c                   @   s   e Zd Zdd ZdS )z.TestSingleDispatch.test_compose_mro.<locals>.Cc                 S   s   d S r
   r   rG   r   r   r   __call__w  s    z7TestSingleDispatch.test_compose_mro.<locals>.C.__call__Nr   r   r   rG  r   r   r   r   r9  v  s   r9  )rc  r   r   _compose_mroSequenceMutableMappingMappingSetr   r=   r<   
CollectionSizedIterable	Containerr   OrderedDictChainMaprl   defaultdictMutableSequencer6  
ReversibleCallable)r!   r2   mror  Zhaystackr  r:  r9  r   r   r   test_compose_mroJ  sP    



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 ) Nr+   r,   r4  c                 S   s   dS r1  r   r   r   r   r   r    s    z/TestSingleDispatch.test_register_abc.<locals>.grc   c                 S   s   dS Nsizedr   r   r   r   r   r7     r8   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>r[  c                 S   s   dS Nmutablemappingr   r   r   r   r   r7     r8   r]  c                 S   s   dS )NZchainmapr   r   r   r   r   r7     r8   c                 S   s   dS )Nmutablesequencer   r   r   r   r   r7     r8   r^  c                 S   s   dS )N
mutablesetr   r   r   r   r   r7     r8   r_  c                 S   s   dS Nmappingr   r   r   r   r   r7     r8   c                 S   s   dS Nsequencer   r   r   r   r   r7     r8   rc  c                 S   s   dS Nr  r   r   r   r   r   r7     r8   r  c                 S   s   dS Nr=   r   r   r   r   r   r7     r8   r=   c                 S   s   dS Nr   r   r   r   r   r   r7     r8   r   c                 S   s   dS )Nconcrete-setr   r   r   r   r   r7     r8   rg  c                 S   s   dS )N
frozen-setr   r   r   r   r   r7     r8   rh  c                 S   s   dS )Nr   r   r   r   r   r   r7     r8   r   )rc  r   r   	frozensetr   r5  r<   r6  rO  rK  rS  rU  
MutableSetrL  rJ  rM  r=   r   r  r   )r!   r2   rM   lr   r^   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| q|j|j|j|j|jg}
| 
|||
d| d S )Nc                   @   s   e Zd ZdS )z)TestSingleDispatch.test_c3_abc.<locals>.ANr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )z)TestSingleDispatch.test_c3_abc.<locals>.Bc                 S   s   dS r>  r   rG   r   r   r   r     s    z1TestSingleDispatch.test_c3_abc.<locals>.B.__len__Nr   r   r   r   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )z)TestSingleDispatch.test_c3_abc.<locals>.CNr   r   r   r   r   r9    s   r9  c                   @   s   e Zd ZdS )z)TestSingleDispatch.test_c3_abc.<locals>.DNr   r   r   r   r   r:    s   r:  c                   @   s   e Zd Zdd ZdS )z)TestSingleDispatch.test_c3_abc.<locals>.Xc                 S   s   d S r
   r   rG   r   r   r   rG    s    z2TestSingleDispatch.test_c3_abc.<locals>.X.__call__NrH  r   r   r   r   r    s   r  )abcs)rc  r   r   _c3_mror   rQ  r6  rW  rO  r   r<   rL  rP  )r!   r2   rX  r   r   r9  r:  r  rV   ro  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                   @   s   e Zd Zdd ZdS )z1TestSingleDispatch.test_false_meta.<locals>.MetaAc                 S   s   dS r>  r   rG   r   r   r   r     s    z9TestSingleDispatch.test_false_meta.<locals>.MetaA.__len__Nrn  r   r   r   r   MetaA  s   rr  c                   @   s   e Zd ZdS )z-TestSingleDispatch.test_false_meta.<locals>.ANr   r   r   r   r   r     s   r   r  c                   @   s   e Zd ZdS )z.TestSingleDispatch.test_false_meta.<locals>.AANr   r   r   r   r   AA  s   rs  c                 S   s   dS )Nzbase Ar   rJ   r   r   r   fun  s    z/TestSingleDispatch.test_false_meta.<locals>.func                 S   s   dS )Nfun Ar   rJ   r   r   r   r'    s    z-TestSingleDispatch.test_false_meta.<locals>._ru  )r   r   r5  r6  r<   )r!   rr  r   rs  rt  r'  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 s^0    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 sD0    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 sx0    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   s   dS r1  r   argr   r   r   r  	  s    z0TestSingleDispatch.test_mro_conflicts.<locals>.gc                   @   s   e Zd Zdd ZdS )z0TestSingleDispatch.test_mro_conflicts.<locals>.Oc                 S   s   dS r>  r   rG   r   r   r   r     s    z8TestSingleDispatch.test_mro_conflicts.<locals>.O.__len__Nrn  r   r   r   r   O  s   rz  rc   c                 S   s   dS )Niterabler   rx  r   r   r   r7     r8   z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>c                 S   s   dS N	containerr   rx  r   r   r   r7     r8   c                 S   s   dS rZ  r   rx  r   r   r   r7     r8   c                 S   s   dS rd  r   rx  r   r   r   r7     r8   r[  r  c                   @   s   e Zd ZdS )z0TestSingleDispatch.test_mro_conflicts.<locals>.PNr   r   r   r   r   P  s   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                   @   s   e Zd Zdd ZdS )z0TestSingleDispatch.test_mro_conflicts.<locals>.Qc                 S   s   dS r>  r   rG   r   r   r   r   .  s    z8TestSingleDispatch.test_mro_conflicts.<locals>.Q.__len__Nrn  r   r   r   r   Q-  s   r  c                 S   s   dS r1  r   rx  r   r   r   h7  s    z0TestSingleDispatch.test_mro_conflicts.<locals>.hc                 S   s   dS rZ  r   rx  r   r   r   r'  :  s    z0TestSingleDispatch.test_mro_conflicts.<locals>._c                 S   s   dS r|  r   rx  r   r   r   r'  =  s    c                   S   s   dS r>  r   r   r   r   r   r7   E  r8   )zZAmbiguous dispatch: <class 'collections.abc.Container'> or <class 'collections.abc.Sized'>zZAmbiguous dispatch: <class 'collections.abc.Sized'> or <class 'collections.abc.Container'>c                   @   s   e Zd ZdS )z0TestSingleDispatch.test_mro_conflicts.<locals>.RNr   r   r   r   r   RM  s   r  c                 S   s   dS r1  r   rx  r   r   r   r-  P  s    z0TestSingleDispatch.test_mro_conflicts.<locals>.ic                 S   s   dS r`  r   rx  r   r   r   r'  S  s    c                 S   s   dS rb  r   rx  r   r   r   r'  V  s    rc  c                   @   s   e Zd ZdS )z0TestSingleDispatch.test_mro_conflicts.<locals>.SNr   r   r   r   r   S[  s   r  c                   @   s   e Zd Zdd ZdS )z0TestSingleDispatch.test_mro_conflicts.<locals>.Tc                 S   s   dS r>  r   rG   r   r   r   r   ^  s    z8TestSingleDispatch.test_mro_conflicts.<locals>.T.__len__Nrn  r   r   r   r   T]  s   r  c                   @   s   e Zd Zdd ZdS )z0TestSingleDispatch.test_mro_conflicts.<locals>.Uc                 S   s   dS r>  r   rG   r   r   r   r   e  s    z8TestSingleDispatch.test_mro_conflicts.<locals>.U.__len__Nrn  r   r   r   r   Ud  s   r  c                   @   s   e Zd Zdd ZdS )z0TestSingleDispatch.test_mro_conflicts.<locals>.Vc                 S   s   dS r>  r   rG   r   r   r   r   v  s    z8TestSingleDispatch.test_mro_conflicts.<locals>.V.__len__Nrn  r   r   r   r   Vu  s   r  c                 S   s   dS r1  r   rx  r   r   r   jx  s    z0TestSingleDispatch.test_mro_conflicts.<locals>.jc                 S   s   dS )Nr   r   rx  r   r   r   r'  {  s    c                 S   s   dS r|  r   rx  r   r   r   r'  ~  s    r   r}  )rc  r   r   r5  rO  r<   r6  rP  rQ  rM  rD   r5  r   rl   r  rT  rU  rK  )r!   r2   r  rz  r  r~  r@   Zre_oner  qr  r'  Zre_twor  r-  r   r  r  rl  r  uZre_threer  r  r  r   r   r   test_mro_conflicts  s    
(




2




(



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    n1 sP0    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
   )ro   r  r,  )r!   r   resultr   r   r   r     s    
zKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__getitem__c                 S   s   | j | || j|< d S r
   )r  r,  ro   )r!   r   r   r   r   r   __setitem__  s    zKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__setitem__c                 S   s   | j   d S r
   )ro   r  rG   r   r   r   r    s    zETestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.clear)r   r   r   r   r   r  r  r  r   )r  r  r   r    s   r  WeakKeyDictionaryc                      s    S r
   r   r   )tdr   r   r7     r8   z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>c                 S   s   dS r1  r   rx  r   r   r   r    s    z5TestSingleDispatch.test_cache_invalidation.<locals>.grc   r&   r'   c                 S   s   dS rf  r   rx  r   r   r   r7     r8   r   c                   @   s   e Zd ZdS )z5TestSingleDispatch.test_cache_invalidation.<locals>.XNr   r   r   r   r   r    s   r  c                 S   s   dS rZ  r   rx  r   r   r   r7     r8   r[  c                 S   s   dS r\  r   rx  r   r   r   r7     r8   r]  c                 S   s   dS re  r   rx  r   r   r   r7     r8   r=   )rc  r  r(  r   Z	swap_attrr   r   r5  r<   r+  r  r  r=   ro   registryr   r   r6  
_find_implrK  rO  r>  rj  _clear_cache)r!   r  r(  r2   r  rM   rk  r  r   )r  r  r   test_cache_invalidation  s    


z*TestSingleDispatch.test_cache_invalidationc                 C   s   t jdd }|jtjjddd}|jd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   s   dS r1  r   rx  r   r   r   r-    s    z.TestSingleDispatch.test_annotations.<locals>.irx  c                 S   s   dS r`  r   rx  r   r   r   r'    s    .TestSingleDispatch.test_annotations.<locals>._zcollections.abc.Sequencec                 S   s   dS rb  r   rx  r   r   r   r'    s    rc   r+   r&   ra  r4  rc  rl   c                   @   s   e Zd Zdd Zdd ZdS )r  c                 S   s
   || _ d S r
   rx  r!   ry  r   r   r   r   	  s    z7TestSingleDispatch.test_annotations.<locals>._.__init__c                 S   s
   | j |kS r
   rx  r    r   r   r   rl  	  s    z5TestSingleDispatch.test_annotations.<locals>._.__eq__N)r   r   r   r   rl  r   r   r   r   r'    s   r'  )r   r5  r6  rc  r   rL  r<   rl   )r!   r-  r'  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   s
   d| _ d S r1  rx  r  r   r   r   rl  
	  s    z4TestSingleDispatch.test_method_register.<locals>.A.tc                 S   s
   d| _ d S Nrd   rx  r  r   r   r   r'  	  s    z4TestSingleDispatch.test_method_register.<locals>.A._c                 S   s
   d| _ d S Nrl   rx  r  r   r   r   r'  	  s    N
r   r   r   r   singledispatchmethodrl  r6  rd   r'  rl   r   r   r   r   r   		  s   

r   r   rd   ry  rj   rl           rc   )rl  r<   ry  r   r   )r!   r   r+   rv  r   r   r   test_method_register	  s    



z'TestSingleDispatch.test_method_registerc                 C   sJ   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   s   | S r
   r   rx  r   r   r   rl  $	  s    z:TestSingleDispatch.test_staticmethod_register.<locals>.A.tc                 S   s
   t | tS r
   r{  rd   rx  r   r   r   r'  (	  s    z:TestSingleDispatch.test_staticmethod_register.<locals>.A._c                 S   s
   t | tS r
   r{  rl   rx  r   r   r   r'  ,	  s    Nr   r   r   r   r  r   rl  r6  rd   r'  rl   r   r   r   r   r   #	  s   r   r   rj   r  r:   rl  r<   r!   r   r+   r   r   r   test_staticmethod_register"	  s
    z-TestSingleDispatch.test_staticmethod_registerc                 C   sN   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   s
   || _ d S r
   rx  r  r   r   r   r   8	  s    z@TestSingleDispatch.test_classmethod_register.<locals>.A.__init__c                 S   s   | dS r1  r   r   ry  r   r   r   rl  ;	  s    z9TestSingleDispatch.test_classmethod_register.<locals>.A.tc                 S   s   | dS r  r   r  r   r   r   r'  ?	  s    z9TestSingleDispatch.test_classmethod_register.<locals>.A._c                 S   s   | dS r  r   r  r   r   r   r'  C	  s    Nr   r   r   r   r   r  r   rl  r6  rd   r'  rl   r   r   r   r   r   7	  s   r   r   rd   rj   rl   r  rc   r<   rl  ry  rp  r   r   r   test_classmethod_register6	  s    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   s
   || _ d S r
   rx  r  r   r   r   r   N	  s    z=TestSingleDispatch.test_callable_register.<locals>.A.__init__c                 S   s   | dS r1  r   r  r   r   r   rl  Q	  s    z6TestSingleDispatch.test_callable_register.<locals>.A.tN)r   r   r   r   r   r  r   rl  r   r   r   r   r   M	  s   r   c                 S   s   | dS r  r   r  r   r   r   r'  V	  s    z4TestSingleDispatch.test_callable_register.<locals>._c                 S   s   | dS r  r   r  r   r   r   r'  Z	  s    r   rd   rj   rl   r  rc   )rl  r6  rd   r   rl   r<   ry  )r!   r   r'  r   r   r   test_callable_registerL	  s    	

z)TestSingleDispatch.test_callable_registerc                 C   sh   G dd dt jd}| |jj | |jd j | t |  W d    n1 sZ0    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   s   d S r
   r   r   r   r   r   r   f	  s    zETestSingleDispatch.test_abstractmethod_register.<locals>.Abstract.addN)r   r   r   r   r  r   r   r   r   r   r   r   r   d	  s   r   r  r   )r   r   r:   r   r   r   rD   rE   )r!   r   r   r   r   test_abstractmethod_registerc	  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edddZeje	dddZdS )z4TestSingleDispatch.test_type_ann_register.<locals>.Ac                 S   s   dS r1  r   r  r   r   r   rl  s	  s    z6TestSingleDispatch.test_type_ann_register.<locals>.A.trx  c                 S   s   dS r  r   r  r   r   r   r'  v	  s    z6TestSingleDispatch.test_type_ann_register.<locals>.A._c                 S   s   dS r  r   r  r   r   r   r'  y	  s    Nr  r   r   r   r   r   r	  s   
r   r   rd   rj   rl   r  rc   )r<   rl  r  r   r   r   test_type_ann_registerq	  s
    
z)TestSingleDispatch.test_type_ann_registerc                 C   sJ   G dd d}| }|  |d |  |d | |dd d S )Nc                   @   sN   e Zd Zejedd ZejeedddZ	ejee
dddZ	dS )zATestSingleDispatch.test_staticmethod_type_ann_register.<locals>.Ac                 S   s   | S r
   r   rx  r   r   r   rl  	  s    zCTestSingleDispatch.test_staticmethod_type_ann_register.<locals>.A.trx  c                 S   s
   t | tS r
   r  rx  r   r   r   r'  	  s    zCTestSingleDispatch.test_staticmethod_type_ann_register.<locals>.A._c                 S   s
   t | tS r
   r  rx  r   r   r   r'  	  s    Nr  r   r   r   r   r   	  s   r   r   rj   r  r  r  r   r   r   #test_staticmethod_type_ann_register	  s
    z6TestSingleDispatch.test_staticmethod_type_ann_registerc                 C   sN   G dd d}|  |djd |  |djd |  |djd d S )	Nc                   @   sV   e Zd Zdd Zejedd Zejee	dddZ
ejeedddZ
d	S )
z@TestSingleDispatch.test_classmethod_type_ann_register.<locals>.Ac                 S   s
   || _ d S r
   rx  r  r   r   r   r   	  s    zITestSingleDispatch.test_classmethod_type_ann_register.<locals>.A.__init__c                 S   s   | dS r1  r   r  r   r   r   rl  	  s    zBTestSingleDispatch.test_classmethod_type_ann_register.<locals>.A.trx  c                 S   s   | dS r  r   r  r   r   r   r'  	  s    zBTestSingleDispatch.test_classmethod_type_ann_register.<locals>.A._c                 S   s   | dS r  r   r  r   r   r   r'  	  s    Nr  r   r   r   r   r   	  s   r   r   rd   rj   rl   r  rc   r  rp  r   r   r   "test_classmethod_type_ann_register	  s    z5TestSingleDispatch.test_classmethod_type_ann_registerc              	   C   s   G dd d}|j | j |j| j|j| jfD ]P}| j|d0 | |jd | |jd t W d    q01 sv0    Y  q0| |j jd | | j jd | |jjd | | jjd | |jjd | | jjd d S )	Nc                   @   sV   e Zd ZejeedddZejeeedddZ	eje
eedddZdS )	z=TestSingleDispatch.test_method_wrapping_attributes.<locals>.Ary  returnc                 S   s   t |S My function docstringrl   r  r   r   r   r   	  s    zBTestSingleDispatch.test_method_wrapping_attributes.<locals>.A.funcc                 S   s   t |S r  r  r  r   r   r   cls_func	  s    zFTestSingleDispatch.test_method_wrapping_attributes.<locals>.A.cls_funcc                 S   s   t | S r  r  rx  r   r   r   static_func	  s    zITestSingleDispatch.test_method_wrapping_attributes.<locals>.A.static_funcN)r   r   r   r   r  rd   rl   r   r   r  r   r  r   r   r   r   r   	  s   r   methr  ry  r   r  r  )	r   r  r  r   r<   r  r
  rd   r   )r!   r   r  r   r   r   test_method_wrapping_attributes	  s"    2z2TestSingleDispatch.test_method_wrapping_attributesc              	      s  dd  G  fddd}G  fddd}| d}|}W d    n1 sP0    Y  | d}|}W d    n1 s~0    Y  | || | |d | |d|d | |dd d	D ]n}| j|d
L | t||jt||j | t| |jt| |j W d    q1 s20    Y  q|j | j |j| jfD ]T}| j|d0 | |jd | |jd t W d    n1 s0    Y  qV| |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                       s>   e Zd ZeejeedddZ eeedddZ	dS )zMTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatchr  c                 s   s$   zt |V  W dS    Y dS 0 d S )NDoner  r  r   r   r   cls_context_manager	  s    zaTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatch.cls_context_managerc                 S   s   t |S r
   r  r  r   r   r   decorated_classmethod	  s    zcTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatch.decorated_classmethodN)
r   r   r   r   
contextlibcontextmanagerrd   rl   r  r  r   r  r   r   WithoutSingleDispatch	  s   r  c                       sJ   e Zd Zejeejee	dddZ
ej eee	dddZdS )zJTestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatchr  c                 s   s$   zt |V  W dS    Y dS 0 dS )r  r  Nr  r  r   r   r   r  	  s    z^TestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatch.cls_context_managerc                 S   s   t |S 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  rd   rl   r  r  r   r  r   r   WithSingleDispatch	  s   r  rI   5)r  r  )r   r  r  ry  r  r  )	r  r<   r  r   rg   r   r  r
  rd   )r!   r  r  rx   Zwithout_single_dispatch_fooZsingle_dispatch_fooZmethod_namer  r   r  r   test_double_wrapped_methods	  s`    ""

&6z.TestSingleDispatch.test_double_wrapped_methodsc                 C   s`  d}d}t jdd }| t"}|ddd }W d    n1 sH0    Y  | t|j|d  | t|j	| | t}|jd	d }W d    n1 s0    Y  | t|j|d
  | t|j	| | t*}|jt
jt ddd}W d    n1 s&0    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   s   dS r1  r   rx  r   r   r   r-  9
  s    z8TestSingleDispatch.test_invalid_registrations.<locals>.ir2  c                 S   s   dS )NzI annotated with a non-typer   rx  r   r   r   r'  =
  s    z8TestSingleDispatch.test_invalid_registrations.<locals>._Z42c                 S   s   dS )NzI forgot to annotater   rx  r   r   r   r'  C
  s    zB<function TestSingleDispatch.test_invalid_registrations.<locals>._rx  c                 S   s   dS )Nz%I annotated with a generic collectionr   rx  r   r   r   r'  L
  s    zInvalid annotation for 'arg'.z$typing.Iterable[str] is not a class.)r   r5  rD   rE   r6  r:   rl   r  r  endswithtypingrP  )r!   Z
msg_prefixZ
msg_suffixr-  excr'  r   r   r   test_invalid_registrations3
  s4    
((6z-TestSingleDispatch.test_invalid_registrationsc                 C   sH   t jdd }d}| t| |  W d    n1 s:0    Y  d S )Nc                  W   s   d S r
   r   r  r   r   r   r^   [
  s    z>TestSingleDispatch.test_invalid_positional_argument.<locals>.fz)f requires at least 1 positional argument)r   r5  assertRaisesRegexrE   )r!   r^   msgr   r   r    test_invalid_positional_argumentZ
  s
    
z3TestSingleDispatch.test_invalid_positional_argumentc                 C   s  t jdd }| td$ |tt dd  W d    n1 sD0    Y  | td& |tjt dd  W d    n1 s0    Y  | td. |tj	tt t
f dd  W d    n1 s0    Y  | td0 |tj	tjt tf dd  W d    n1 s0    Y  | td" |tjd	d  W d    n1 s^0    Y  | |d
gd | |dgd | |dd | |dd d S )Nc                 S   s   dS Ndefaultr   rx  r   r   r   r^   c
  s    z8TestSingleDispatch.test_register_genericalias.<locals>.fInvalid first argument to c                 S   s   dS Nztypes.GenericAliasr   rx  r   r   r   r7   h
  r8   z?TestSingleDispatch.test_register_genericalias.<locals>.<lambda>c                 S   s   dS Nztyping.GenericAliasr   rx  r   r   r   r7   j
  r8   c                 S   s   dS )Nz typing.Union[types.GenericAlias]r   rx  r   r   r   r7   l
  r8   c                 S   s   dS Nz!typing.Union[typing.GenericAlias]r   rx  r   r   r   r7   n
  r8   c                 S   s   dS Nz
typing.Anyr   rx  r   r   r   r7   p
  r8   r&   r        ?rj   r8   )r   r5  r  rE   r6  r   rd   r  ListUnionrl   floatbytesAnyr<   r`   r   r   r   test_register_genericaliasb
  s     
24<@2z-TestSingleDispatch.test_register_genericaliasc                 C   sN  t jdd }| td |tt  W d    n1 s>0    Y  | td  |tjt  W d    n1 sz0    Y  | td( |tj	tt t
f  W d    n1 s0    Y  | td* |tj	tjt t
f  W d    n1 s0    Y  | td |tj W d    n1 s@0    Y  d S )Nc                 S   s   dS r  r   rx  r   r   r   r^   x
  s    zBTestSingleDispatch.test_register_genericalias_decorator.<locals>.fr  )r   r5  r  rE   r6  r   rd   r  r  r  rl   r  r`   r   r   r   $test_register_genericalias_decoratorw
  s    
,.6:z7TestSingleDispatch.test_register_genericalias_decoratorc                 C   s  t jdd }| td( |jtt ddd}W d    n1 sH0    Y  | td* |jtjt	 ddd}W d    n1 s0    Y  | td2 |jtj
tt tf ddd}W d    n1 s0    Y  | td4 |jtj
tjt	 tf dd	d}W d    n1 s.0    Y  | td& |jtjdd
d}W d    n1 sr0    Y  | |dgd | |dgd | |dd | |dd d S )Nc                 S   s   dS r  r   rx  r   r   r   r^   
  s    zCTestSingleDispatch.test_register_genericalias_annotation.<locals>.fzInvalid annotation for 'arg'rx  c                 S   s   dS r  r   rx  r   r   r   r'  
  s    zCTestSingleDispatch.test_register_genericalias_annotation.<locals>._c                 S   s   dS r  r   rx  r   r   r   r'  
  s    c                 S   s   dS )Nz#types.UnionType(types.GenericAlias)r   rx  r   r   r   r'  
  s    c                 S   s   dS r  r   rx  r   r   r   r'  
  s    c                 S   s   dS r  r   rx  r   r   r   r'  
  s    r&   r  r  rj   r8   )r   r5  r  rE   r6  r   rd   r  r  r  r  rl   r  r  r<   )r!   r^   r'  r   r   r   %test_register_genericalias_annotation
  s*    
24<@2z8TestSingleDispatch.test_register_genericalias_annotationN)#r   r   r   r8  r=  r?  rA  r!  
skipUnlessr	   r   Zcpython_onlyrF  rY  rm  rq  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r0    s<   	
6^ f$c'r0  c                   @   s&   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lockrG   r   r   r   r   
  s    zCachedCostItem.__init__c                 C   s:   | j  |  jd7  _W d   n1 s*0    Y  | jS )The cost of the item.r&   N)r  _costrG   r   r   r   cost
  s    ,zCachedCostItem.costN)r   r   r   r  r   r   cached_propertyr  r   r   r   r   r  
  s   r  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 )r  r&   r  rG   r   r   r   get_cost
  s    z!OptionallyCachedCostItem.get_costN)r   r   r   r  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 r"  )r  r   r  r  event)r!   r  r   r   r   r   
  s    
zCachedCostItemWait.__init__c                 C   sF   | j d | j |  jd7  _W d    n1 s60    Y  | jS r"  )r  r  r  r  rG   r   r   r   r  
  s    ,zCachedCostItemWait.costN)r   r   r   r   r   r  r  r   r   r   r   r  
  s   r  c                   @   s&   e Zd ZdZdd Zejdd ZdS )CachedCostItemWithSlotsr  c                 C   s
   d| _ d S r"  r  rG   r   r   r   r   
  s    z CachedCostItemWithSlots.__init__c                 C   s   t dd S )Nz!never called, slots not supportedr4  rG   r   r   r   r  
  s    zCachedCostItemWithSlots.costN)r   r   r   	__slots__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S )TestCachedPropertyc                 C   s&   t  }| |jd | |jd d S r  )r  r<   r  r!   itemr   r   r   test_cached
  s    zTestCachedProperty.test_cachedc                 C   sF   t  }| | d | |jd | | d | |jd d S )Nr'   r-   r.   )r  r<   r  r  r  r   r   r   1test_cached_attribute_name_differs_from_func_name
  s
    zDTestCachedProperty.test_cached_attribute_name_differs_from_func_namec              	      s   t  }t| d}t }td zV fddt|D }t| |	  W d    n1 sf0    Y  W t| nt| 0 | 
 jd d S )Nr-   r  c                    s    g | ]}t j fd ddqS )c                      s    j S r
   )r  r   r  r   r   r7   
  r8   z=TestCachedProperty.test_threaded.<locals>.<listcomp>.<lambda>r   r  r  r  r   r   r   
  s   z4TestCachedProperty.test_threaded.<locals>.<listcomp>r'   )r  r  r  r   r  r  rm   r   r  r  r<   r  )r!   ZgoZnum_threadsr  r  r   r  r   test_threaded
  s    

(z TestCachedProperty.test_threadedc                 C   s<   t  }| td |j W d    n1 s.0    Y  d S )NzWNo '__dict__' attribute on 'CachedCostItemWithSlots' instance to cache 'cost' property.)r  r  rE   r  r  r   r   r   test_object_with_slots
  s    z)TestCachedProperty.test_object_with_slotsc                 C   sX   G dd dt }G dd d|d}| td |j W d    n1 sJ0    Y  d S )Nc                   @   s   e Zd Zejdd ZdS )z6TestCachedProperty.test_immutable_dict.<locals>.MyMetac                 S   s   dS )NTr   rG   r   r   r   prop  s    z;TestCachedProperty.test_immutable_dict.<locals>.MyMeta.propN)r   r   r   r   r  r  r   r   r   r   MyMeta  s   r  c                   @   s   e Zd ZdS )z7TestCachedProperty.test_immutable_dict.<locals>.MyClassNr   r   r   r   r   MyClass	  s   r  r  zkThe '__dict__' attribute on 'MyMeta' instance does not support item assignment for caching 'prop' property.)r   r  rE   r  )r!   r  r  r   r   r   test_immutable_dict  s    z&TestCachedProperty.test_immutable_dictc                 C   sX   |  t}G dd d}W d   n1 s.0    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   s   d S r
   r   rG   r   r   r   r+     s    zMTestCachedProperty.test_reuse_different_names.<locals>.ReusedCachedProperty.aN)r   r   r   r   r  r+   r,   r   r   r   r   ReusedCachedProperty  s   
r  NzLCannot assign the same cached_property to two different names ('a' and 'b').)rD   r5  r<   rl   r  r  rE   )r!   ctxr  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 r"  r   )Z_self)counterr   r   _cp%  s    z4TestCachedProperty.test_reuse_same_name.<locals>._cpc                       s   e Zd Z ZdS )z2TestCachedProperty.test_reuse_same_name.<locals>.ANr   r   r   cpr   r  r   r   r   +  s   r   c                       s   e Zd Z ZdS )z2TestCachedProperty.test_reuse_same_name.<locals>.BNr  r   r  r   r   r   .  s   r   r&   r'   N)r   r  r<   r  )r!   r   r   r+   r,   r   )r  r  r   test_reuse_same_name!  s    z'TestCachedProperty.test_reuse_same_namec                 C   sZ   t dd }G dd d}||_| td | j W d    n1 sL0    Y  d S )Nc                 S   s   d S r
   r   )r   r   r   r   r7   9  r8   z=TestCachedProperty.test_set_name_not_called.<locals>.<lambda>c                   @   s   e Zd ZdS )z8TestCachedProperty.test_set_name_not_called.<locals>.FooNr   r   r   r   r   Foo:  s   r  zGCannot use cached_property instance without calling __set_name__ on it.)r   r  r  r  rE   )r!   r  r  r   r   r   test_set_name_not_called8  s    z+TestCachedProperty.test_set_name_not_calledc                 C   s   |  tjtj d S r
   )ZassertIsInstancer  r  r   r  rG   r   r   r   test_access_from_classE  s    z)TestCachedProperty.test_access_from_classc                 C   s   |  tjjd d S )Nr  )r<   r  r  r  rG   r   r   r   test_docH  s    zTestCachedProperty.test_docN)r   r   r   r  r  r  r  r  r  r   r  r  r  r   r   r   r   r  
  s   r  __main__)Lr   r  rc  collections.abcr   	itertoolsr   r   randomr   r   r  r   r  r  r  r!  Zunittest.mockosr(  r*  r   r  Ztest.support.script_helperr   r   Zimport_fresh_moduler   r   r	   r  r   r   r   r   r   r   r=   r$   r%   r  ZTestCaser   r   r9   r   r   r   r   r   r   r%  r)  rE  rF  rG  rg  rh  ri  ro  r  r  r  r  r,  r-  r.  r/  r0  r  r  r  r  r  r   mainr   r   r   r   <module>   s   
  G
3
 r>O
S
 h	    

       1r
