
    dafV                        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mZ d dlZd dlmZ d dlmZ d dlmZ d dlZ ej8                  d	d
g      Z ej8                  d	d
g      Z ej8                  ddg      Zej@                  gZ!ere!jE                  ej@                         ejF                  d        Z$d Z%d Z& G d de'      Z( G d de'      Z) G d de*      Z+ G d d      Z, ejZ                  ed       G d de,ej\                               Z/ G d de,ej\                        Z0er G d d ej@                        Z1 G d! d"ej@                        Z2 ejZ                  ed       G d# d$e/             Z3 G d% d&e0      Z4 G d' d(ej\                        Z5 G d) d*ej\                        Z6 G d+ d,e6      Z7 G d- d.      Z8 ejZ                  ed       G d/ d0e8ej\                               Z9 G d1 d2e8ej\                        Z: G d3 d4      Z; ejZ                  ed       G d5 d6e;ej\                               Z< G d7 d8e;ej\                        Z= G d9 d:ej\                        Z>ej~                   G d; d<             Z@ G d= d>      ZA G d? d@      ZBej                         dA        ZDerej                         dB        ZE G dC dDeBej\                        ZF ejZ                  ed       G dE dFeBej\                               ZG G dG dHej\                        ZH G dI dJ      ZI G dK dL      ZJ G dM dN      ZK G dO dPej\                        ZLeMdQk(  r ej                          yy)R    N)permutations)choice)support)proxy)	Signature)import_helper)threading_helper	functools
_functools)blocked)freshdecimal_decimalc              #      K   t         j                  |    }|t         j                  | <   	 d  |t         j                  | <   y # |t         j                  | <   w xY wwN)sysmodules)namereplacementoriginal_modules      ./root/Python-3.12.4/Lib/test/test_functools.pyreplaced_moduler   '   sF     kk$'O#CKK,+DODs   'AA AAAc                  
    | |fS )z,capture all positional and keyword arguments )argskws     r   capturer   0   s    8O    c                 ^    | j                   | j                  | j                  | j                  fS )z* return the signature of a partial object )funcr   keywords__dict__)parts    r   	signaturer$   5   s!    IItyy$--??r   c                       e Zd Zy)MyTupleN__name__
__module____qualname__r   r   r   r&   r&   9       r   r&   c                       e Zd Zd Zy)BadTuplec                 0    t        |       t        |      z   S r   )listselfothers     r   __add__zBadTuple.__add__=   s    DzDK''r   N)r(   r)   r*   r3   r   r   r   r-   r-   <   s    (r   r-   c                       e Zd Zy)MyDictNr'   r   r   r   r5   r5   @   r+   r   r5   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestPartialc           	      8   | j                  t        dddd      }| j                  t        |             | j	                   |dddd	
      dt        ddd	      f       | j                  t        d       }| j	                  t         |g d            g d       y )N      
      ab         (   r?   cr9   r:   r@   rA   r>   r?   rE   c                     | dz  S )Nr;   r   xs    r   <lambda>z1TestPartial.test_basic_examples.<locals>.<lambda>K   s
    " r   )r;   r<   rB   rC   )partialr   
assertTruecallableassertEqualdictmapr/   r1   ps     r   test_basic_exampleszTestPartial.test_basic_examplesF   s    LL!Q"L3$1a2,&rR2(>?	ALLn-a	l+-=>r   c                     | j                  t        dddd      }| j                  |j                  t               | j                  |j                  d       | j                  |j
                  t        dd             y )Nr9   r:   r;   r<   r=   r9   r:   )rL   r   rO   r    r   r!   rP   rR   s     r   test_attributeszTestPartial.test_attributesN   s]    LL!Q"L3)(TB"%56r   c                     | j                  t        | j                         	  | j                  d              | j                  d       y # t        $ r Y y w xY w)Nr:   z%First arg not checked for callability)assertRaises	TypeErrorrL   failr1   s    r   test_argument_checkingz"TestPartial.test_argument_checkingU   sN    )T\\2	?DLLO II=>  		s   A
 
	AAc                     dd}ddi}| j                  |d      }| j                   |d	i |d       | j                  |ddi        |d       | j                  |ddi       y )
Nc                     | S r   r   r=   s     r   r    zBTestPartial.test_protection_of_callers_dict_argument.<locals>.func`   s    Hr   r>   r@      r>      r?   )r;   r<   r   )rL   rO   )r1   r    drS   s       r   (test_protection_of_callers_dict_argumentz4TestPartial.test_protection_of_callers_dict_argument^   sg    	GLLL#Q#SG$	ASG$r   c                     ddi} | j                   t        fi |}| j                   |       dddif       d|d<   | j                   |       dddif       y )Nr>   r@   r   r`   rL   r   rO   )r1   rd   rS   s      r   test_kwargs_copyzTestPartial.test_kwargs_copyi   s_     !HDLL&A&rC8n-#rC8n-r   c                 ,   | j                  t              }| j                   |       di f       | j                   |dd      di f       | j                  t        dd      }| j                   |       di f       | j                   |dd      di f       y )Nr   r9   r:   rV   r@   rA   rF   rg   rR   s     r   test_arg_combinationsz!TestPartial.test_arg_combinationsr   s     LL!r2h'1Q%-LL!Q'ubk*1Q)R1r   c                    | j                  t              }| j                  |j                  i        | j                   |       di f       | j                   |d      dddif       | j                  t        d      }| j                  |j                  ddi       | j                   |       dddif       | j                   |d      ddddf       | j                   |dd      ddddf       y )	Nr   r9   ra   r>   r:   rc   r=   r@   )rL   r   rO   r!   rR   s     r   test_kw_combinationsz TestPartial.test_kw_combinations|   s     LL!R(r2h'Q"s1g/LLAL&c!W-rC7m,Q"1!n!56Q!rq>&:;r   c                     dD ]D  } | j                   t        g| }|dz   } |d      \  }}| j                  ||k(  xr |i k(         F y )N)r   r   r   r9   )r   r9   r:   )r   r9   r:   r@   rI   rJ   rL   r   rM   )r1   r   rS   expectedgotemptys         r   test_positionalzTestPartial.test_positional   sU    9 	=DW,t,Af}H3JCOOHO;<		=r   c                     dD ]E  }| j                  t        |      }|d d} |d       \  }}| j                  ||k(  xr |dk(         G y )N)r>   r   Ng      @ra   )r>   rJ   rI   r   rp   )r1   r>   rS   rq   rs   rr   s         r   test_keywordzTestPartial.test_keyword   sS    $ 	=AW*A$'HTJE3OOHO;<		=r   c                     | j                  t        dd      } |dd      \  }}| j                  |dk(  xr |dddk(          |       \  }}| j                  |dk(  xr |d	dik(         y )
Nr   r9   ra   r:   rc   ro   r=   rn   r>   rp   )r1   rS   args1kw1args2kw2s         r   test_no_side_effectsz TestPartial.test_no_side_effects   sk    LL!qL)qAY
s?3qQ-+?@S
s8##a.9r   c                 D   d }| j                  t        | j                  |dd             | j                  t        | j                  |d      d       | j                  t        | j                  |      dd       | j                  t        | j                  |d      d       y )Nc                     | |z   y r   r   rJ   ys     r   fz-TestPartial.test_error_propagation.<locals>.f   s	    Er   r9   r   )r   )rY   ZeroDivisionErrorrL   r1   r   s     r   test_error_propagationz"TestPartial.test_error_propagation   s    	+T\\!Q-BC+T\\!Q-?C+T\\!_aC+T\\!q\-A1Er   c                     | j                  t        d      }t        |      }| j                  |j                  |j                         d }t        j                          | j                  t        t        |d       y )N   )baser    )
rL   intr   rO   r    r   
gc_collectrY   ReferenceErrorgetattrr1   r   rS   s      r   test_weakrefzTestPartial.test_weakref   sZ    LL2L&!H(.'1f=r   c                    t        t        t        t        d                  }| j	                  t        j
                  d      }| j                   ||      d       | j	                  dj
                        }| j                   ||      d       y )Nr;    
0123456789)r/   rQ   strrangerL   joinrO   )r1   datar   s      r   #test_with_bound_and_unbound_methodsz/TestPartial.test_with_bound_and_unbound_methods   se    CU2Y'(||CHHb)d\2||BGG$d\2r   c                     | j                   } |t        d      } ||d      } |t        dd      }| j                  t        |      t        |             y NasdfTbar)rL   r$   rO   )r1   rL   innernestedflats        r   test_nested_optimizationz$TestPartial.test_nested_optimization   sJ    ,,	6*D)y&d36*IdO<r   c                     | j                   }d } ||d      } ||d      }d|_        | j                  |j                  d       y )Nc                     | S r   r   r   s    r   fooz;TestPartial.test_nested_partial_with_attribute.<locals>.foo   s    Jr   firstsecondspam)rL   new_attrrO   )r1   rL   r   rS   p2s        r   "test_nested_partial_with_attributez.TestPartial.test_nested_partial_with_attribute   sE    ,,	 C!Q!f-r   c                 f   t               t               f}dj                  d |D              }t               t               d}dj                  |      dj                  |      g}| j                  t        v rd}n| j                  j
                  }| j                  t              }| j                  | dt        dt        |              | j                  t        g| }| j                  | dt        d| dt        |              | j                  t        fi |}| j                  t        |      |D cg c]  }| dt        d| d c}        | j                  t        g|i |}| j                  t        |      |D cg c]  }| dt        d| d| d c}       y c c}w c c}w )	Nz, c              3   2   K   | ]  }t        |        y wr   )repr).0r>   s     r   	<genexpr>z(TestPartial.test_repr.<locals>.<genexpr>   s     4!d1g4s   r=   za={a!r}, b={b!r}zb={b!r}, a={a!r}functools.partial())
objectr   
format_maprL   _partial_typesr(   r   rO   r   assertIn)r1   r   	args_reprkwargskwargs_reprsr   r   kwargs_reprs           r   	test_reprzTestPartial.test_repr   s   &(#II4t44	xfh/*55f=*55f=?<<>)&D<<((DLL!D67+Q/a9DLL(4(D67+R	{!<d1gFDLL+F+d1g*68& q2k]!< 8	9 DLL24262d1g*68& q2i[;-qI 8	9	8
8s   8F)
F.
c                    | j                   t        v rd}n| j                   j                  }| j                  t              }|j	                  |di i f       	 | j                  t        |      |d       |j	                  t        di i f       | j                  t              }|j	                  t        |fi i f       	 | j                  t        |      |dt        d       |j	                  t        di i f       | j                  t              }|j	                  t        dd|ii f       	 | j                  t        |      |dt        d       |j	                  t        di i f       y # |j	                  t        di i f       w xY w# |j	                  t        di i f       w xY w# |j	                  t        di i f       w xY w)Nr   r   z(...)r   z, ...)r>   z, a=...))rL   r   r(   r   __setstate__rO   r   )r1   r   r   s      r   test_recursive_reprzTestPartial.test_recursive_repr   sp   <<>)&D<<((DLL!	2r2'	2T!W4&9:NNGRR01LL!	!r2./	2T!WtW&FGNNGRR01LL!	c1Xr23	2T!Ww&HINNGRR01 NNGRR01 NNGRR01 NNGRR01s$   E, >%F
 -%F( ,F
F%(Gc                 z   t        d| j                        5  | j                  t        dgdg      }g |_        t        t        j                  dz         D ]O  }t        j                  t        j                  ||            }| j                  t        |      t        |             Q 	 d d d        y # 1 sw Y   y xY w)Nr
   r   Tr   r9   )r   modulerL   r$   attrr   pickleHIGHEST_PROTOCOLloadsdumpsrO   r1   r   protof_copys       r   test_picklezTestPartial.test_pickle  s    [$++6 	BYtf=AAFv66:; Bfll1e&<=  6!2IaLAB	B 	B 	Bs   BB11B:c                    | j                  t        dgdg      }g |_        t        j                  |      }| j	                  t        |      t        |             | j                  |j                  |j                         | j                  |j                  |j                         | j                  |j                  |j                         y r   )rL   r$   r   copyrO   assertIsr   r!   r1   r   r   s      r   	test_copyzTestPartial.test_copy
  s    LLVH4&L916*IaL9fkk166*fkk166*fooqzz2r   c                 L   | j                  t        dgdg      }g |_        t        j                  |      }| j                  t        |      t        |             | j                  |j                  |j                         | j                  |j                  |j                         | j                  |j                  d   |j                  d          | j                  |j                  |j                         | j                  |j                  d   |j                  d          y )Nr   Tr   r   r   )	rL   r$   r   r   deepcopyrO   assertIsNotr   r!   r   s      r   test_deepcopyzTestPartial.test_deepcopy  s    LLVH4&L9q!6*IaL9aff-aff-Q3!**5/E1BCr   c           	          | j                  t              }|j                  t        dt	        d      t	        g       f       | j                  t        |      t        dt	        d      t	        g       f       | j                   |dd      dddd	f       |j                  t        dt	        d      d f       | j                  t        |      t        dt	        d      i f       | j                   |dd      dddd	f       |j                  t        dd d f       | j                   |dd      dd
dif       | j                   |d      di f       | j                   |       di f       |j                  t        di d f       | j                  t        |      t        di i f       | j                   |dd      dd
dif       | j                   |d      di f       | j                   |       di f       y )Nr9   r;   ra   r   r:   r<   rc   rV   r=   r?   r   )r:   )rL   r$   r   r   rP   rO   r   s     r   test_setstatezTestPartial.test_setstate  s   LL#	tbz4R=AB1!4Tr]C	E1fBR.@%AB	tbz4891tbz2'FG1fBR.@%AB	tT231fsBi%891|,tRj)	R./1R'<=1dS"I%671bz*r2h'r   c           	      d   | j                  t              }| j                  t        |j                  t
        di f       | j                  t        |j                  t
        di i d f       | j                  t        |j                  t
        di d g       | j                  t        |j                  d di d f       | j                  t        |j                  t
        d i d f       | j                  t        |j                  t
        g i d f       | j                  t        |j                  t
        dg d f       y )Nr   )rL   r$   rY   rZ   r   r   r   s     r   test_setstate_errorsz TestPartial.test_setstate_errors7  s    LL#)Q^^gr25FG)Q^^gr2r45PQ)Q^^gr2t5LM)Q^^dBD5IJ)Q^^gtR5NO)Q^^gr2t5LM)Q^^gr2t5LMr   c                 |   | j                  t              }|j                  t        t	        d      t        d      d f       t        |      }| j                  |t        dt        d      i f       | j                  t        |d         t               | j                  t        |d         t                |       }| j                  |dddif       | j                  t        |d         t               | j                  t        |d         t               |j                  t        t        d      i d f       t        |      }| j                  |t        di i f       | j                  t        |d         t                |d      }| j                  |di f       | j                  t        |d         t               y )	Nr   r;   ra   r9   r:   r>   r   rV   )rL   r$   r   r   r&   r5   rO   rP   r   typetupler-   )r1   r   srs       r   test_setstate_subclassesz$TestPartial.test_setstate_subclassesA  sO   LL#	dCDaLWdD2J;<d1Q4j%(d1Q4j$'CTC9-.d1Q4j%(d1Q4j$'	$T:;aLWdB34d1Q4j%(aDVRL)d1Q4j%(r   c           
         t        d| j                        5  | j                  t              }|j	                  |di i f       	 t        t        j                  dz         D ]6  }| j                  t              5  t        j                  ||       d d d        8 	 |j	                  t        di i f       | j                  t              }|j	                  t        |fi i f       	 t        t        j                  dz         D ]d  }t        j                  t        j                  ||            }	 | j                  |j                  d   |       |j	                  t        di i f       f 	 |j	                  t        di i f       | j                  t              }|j	                  t        dd|ii f       	 t        t        j                  dz         D ]d  }t        j                  t        j                  ||            }	 | j                  |j                  d   |       |j	                  t        di i f       f 	 |j	                  t        di i f       	 d d d        y # 1 sw Y   xY w# |j	                  t        di i f       w xY w# |j	                  t        di i f       w xY w# |j	                  t        di i f       w xY w# |j	                  t        di i f       w xY w# |j	                  t        di i f       w xY w# 1 sw Y   y xY w)Nr
   r   r9   r   r>   )r   r   rL   r   r   r   r   r   rY   RecursionErrorr   r   r   r   r!   r   s       r   test_recursive_picklez!TestPartial.test_recursive_pickleU  s   [$++6  	6W%ANNAr2r?+6"6#:#:Q#>? /E**>: /Q./ // R45W%ANNGaT2r236"6#:#:Q#>? CE#\\&,,q%*@AFCfkk!nf=++Wb"b,ABC R45W%ANNGR#q2676"6#:#:Q#>? CE#\\&,,q%*@AFCfooc&:FC++Wb"b,ABC R45A 	6  	6
/ / R45 ++Wb"b,ABR45 ++Wb"b,ABR45A 	6  	6s   +K:4I$7I
I$AK:"AJ +J
J &A	K:0AK9J>K4K:I!I$$I??K:JJ  J;;K:>KKK77K::Lc                      G d d      }| j                  t              }| j                  t        |j                   |              y )Nc                       e Zd Zd Zd Zy)7TestPartial.test_setstate_refcount.<locals>.BadSequencec                      y)NrA   r   r\   s    r   __len__z?TestPartial.test_setstate_refcount.<locals>.BadSequence.__len__{      r   c                 b    |dk(  rt         S |dk(  rt        t        d            S |dv ri S t        )Nr   r9   i@B )r:   r@   )maxr   r   
IndexError)r1   keys     r   __getitem__zCTestPartial.test_setstate_refcount.<locals>.BadSequence.__getitem__}  s6    !8JAX w00F]I  r   N)r(   r)   r*   r   r   r   r   r   BadSequencer   z  s    !r   r   )rL   r   rY   rZ   r   )r1   r   r   s      r   test_setstate_refcountz"TestPartial.test_setstate_refcounty  s4    
	! 
	! LL )Q^^[]Cr   N)r(   r)   r*   rT   rW   r]   re   rh   rj   rl   rt   rv   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r7   D   s    ?7?	%.2<==:F>3=
.9626B3	D(2N)(!6HDr   r7   z requires the C _functools modulec                   >    e Zd ZereZej
                  Zd Zd Zd Zy)TestPartialCc           
      t   | j                  t        dddd      }| j                  t        t        |dt
               | j                  t        t        |dd       | j                  t        t        |d	t        dd             | j                  t              }	 |`| j                  d
       y # t        $ r Y y w xY w)Nr9   r:   r;   r<   r=   r    r   rV   r!   z-partial object allowed __dict__ to be deleted)rL   r   rY   AttributeErrorsetattrrQ   rP   hexr"   r[   rZ   rR   s     r   test_attributes_unwritablez'TestPartialC.test_attributes_unwritable  s    LL!Q"L3.'1fcB.'1ffE.'1j$a.QLL	G
 IIEF  		s   B+ +	B76B7c                    | j                  t              }d|j                  d<   t        |      }| j	                  d|       | j	                  d|       | j                  t              5   |        d d d        y # 1 sw Y   y xY w)Nvaluei  1234z'value')rL   r   r!   r   r   rY   rZ   )r1   rS   r   s      r   'test_manually_adding_non_string_keywordz4TestPartialC.test_manually_adding_non_string_keyword  sk    LL!"

4Gfa i#y) 	C	 	 	s   )A::Bc                     | j                  t               G fddt              }dgj                   |       <   t	              }| j                  d|       | j                  d|       y )Nc                       e Zd Z fdZy)@TestPartialC.test_keystr_replaces_value.<locals>.MutatesYourDictc                 &    dgj                   | <   y)Nsth2astr)r!   rR   s    r   __str__zHTestPartialC.test_keystr_replaces_value.<locals>.MutatesYourDict.__str__  s    $*8

4 r   N)r(   r)   r*   r   )rS   s   r   MutatesYourDictr     s    r   r   sthr   z['sth'])rL   r   r   r!   r   r   )r1   r   r   rS   s      @r   test_keystr_replaces_valuez'TestPartialC.test_keystr_replaces_value  sW    LL!	f 	 */

?$%Gfa i#r   N)	r(   r)   r*   c_functoolsr   rL   r   r   r   r   r   r   r   r     s%    %%G$r   r   c                   (    e Zd ZeZej
                  Zy)TestPartialPyN)r(   r)   r*   py_functoolsr   rL   r   r   r   r  r    s    F""Gr   r  c                       e Zd Zy)CPartialSubclassNr'   r   r   r   r  r    s    r   r  c                       e Zd Zy)PyPartialSubclassNr'   r   r   r   r  r    r+   r   r  c                       e Zd ZereZdZy)TestPartialCSubclassN)r(   r)   r*   r  r  rL   r   r   r   r   r
  r
    s    "  $r   r
  c                       e Zd ZeZy)TestPartialPySubclassN)r(   r)   r*   r  rL   r   r   r   r  r    s    Gr   r  c                   r    e Zd Z G d de      Z e       Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zy)TestPartialMethodc                      e Zd Z ej                  e      Z ej                  ed      Z ej                  ed      Z ej                  edd      Z	 ej                  edd      Z
 ej                  ed      Z ej                   ej                  ed	
      d      Z ej                   ee      d      Z ej                   ee      d      Zy)TestPartialMethod.Ar9   r:   ra   r@   rA   rc   r1   r    r`      rE   rb      	   rd   N)r(   r)   r*   r
   partialmethodr   nothing
positionalr!   bothspec_keywordsr   rL   over_partialstaticmethodstaticclassmethodclsr   r   r   Ar    s    ))))'2,Y,,Wa8
*9**7a8&y&&wQ7/	//aaH(((Q7.y../@y/@/@A/NPQR(((g)>B%i%%k'&:a@r   r!  c                 t   | j                  | j                  j                         | j                  fi f       | j                  | j                  j                  d      | j                  dfi f       | j                  | j                  j                  d      | j                  fddif       | j                  | j                  j                  dd      | j                  dfddif       | j                  | j                  j                         | j                  dfi f       | j                  | j                  j                  d      | j                  ddfi f       | j                  | j                  j                  d      | j                  dfddif       | j                  | j                  j                  dd      | j                  ddfddif       | j                  | j                  j	                         | j                  fddif       | j                  | j                  j	                  d      | j                  dfddif       | j                  | j                  j	                  d      | j                  fdddf       | j                  | j                  j	                  dd      | j                  dfdddf       | j                  | j                  j                         | j                  d	fd
dif       | j                  | j                  j                  d      | j                  d	dfd
dif       | j                  | j                  j                  d      | j                  d	fdddf       | j                  | j                  j                  dd      | j                  d	dfdddf       | j                  | j                  j                  | j                  dd      | j                  d	dfdddf       | j                  | j                  j                         | j                  fdddf       y )Nr`   r  r  rE   r9   r>   r:   )r>   rE   r@   r?   rA   rD   r  )rO   r>   r  r  r!   r  r!  r  r\   s    r   rj   z'TestPartialMethod.test_arg_combinations  sW   )TVVIr?;*dffa[",=>!,y3(.CDQ/4661+Qx1HI**,{B.?@**1-A/CD**Q*/4661+Qx1HI**1*2dffa^c1X4NO*dffYa,AB+tvvqkC8-DE1-	;K/LMa0DFFA;aa@P2QR$&&!sAh(?@Q4661a.3()CDq)TVVQKqq9I+JKQ!,1~QQ?O.PQTVVQ!41~QUVGW6XY--/466)aQR=S1TUr   c                 x   | j                  | j                  j                         | j                  ddfi f       | j                  | j                  j                  d      | j                  dddfi f       | j                  | j                  j                  d      | j                  ddfddif       | j                  | j                  j                  dd      | j                  dddfddif       | j                  | j                  j                  | j                  dd      | j                  dddfddif       y )Nr9   r`   r  rb   r  rd   )rO   r>   r   r!  r\   s    r   test_nestedzTestPartialMethod.test_nested  s   DFFAq>2*>?q)TVVQ1,=r+BC+tvvq!nsAh-GHqA.$&&!Q1BS!H0MNtvvqA6$&&!Q9JSRSH8UVr   c                 |   | j                  | j                  j                         | j                  dfddif       | j                  | j                  j                  d      | j                  ddfddif       | j                  | j                  j                  d      | j                  dfdddf       | j                  | j                  j                  dd      | j                  ddfdddf       | j                  | j                  j                  | j                  dd      | j                  ddfdddf       y )Nrb   rE   r  r`   r  r  rE   rd   )rO   r>   r  r!  r\   s    r   test_over_partialz#TestPartialMethod.test_over_partial  s   ,,.$&&!sAh0GH,,Q/4661a.3(1KL,,q,1TVVQKqqAQ3RS,,Q!,41~QUVGW6XY,,TVVQ!,<1~UV]^O_>`ar   c                    | j                   }| j                  |j                  j                  |       | j                  |j                  j                  |       | j                  |j
                  j                  |       | j                  |j                  j                  | j                         | j                  | j                  j                  j                  | j                         y r   )r>   r   r  __self__r   r  r   r!  r1   objs     r   test_bound_method_introspectionz1TestPartialMethod.test_bound_method_introspection
  s    ffchh''-cjj))3/c&&//5cgg&&/dffjj))4662r   c                    | j                   }| j                  t        |j                  d             | j                  t        |j                  d             | j                  t        |j
                  d             | j                  t        |j                  d             | j                  t        | j                  j                  d             y )Nr)  )r!  assertFalsehasattrr  r   r  r  r>   r*  s     r   test_unbound_method_retrievalz/TestPartialMethod.test_unbound_method_retrieval  s    ff:67Z89!1!1:>?Z89
;<r   c           	      B   | j                   | j                  fD ]v  }| j                  |      5  | j                  |j	                         di f       | j                  |j	                  d      di f       | j                  |j	                  d      dddif       | j                  |j	                  dd      dddif       | j                  |j                         | j                   fddif       | j                  |j                  d      | j                   dfddif       | j                  |j                  d	      | j                   fddd
f       | j                  |j                  dd	      | j                   dfddd
f       d d d        y y # 1 sw Y   xY w)Nr+  )r  r`   )r  r`   r  r  rd   r  r  r&  )r!  r>   subTestrO   r  r   r*  s     r   test_descriptorsz"TestPartialMethod.test_descriptors  sr   FFDFF# 
	SC#& 	S  bz:  A=  a4#q2BC  A!3fsAh5GH  dffYa,AB  tvvqkC8-DE  1	;K/LM  aDFFA;aa@P2QR	S 	S
	S	S 	Ss   EFF	c                    | j                  | j                  j                  d      | j                  fddif       | j                  | j                  j                  | j                  d      | j                  fddif       y )Nr@   ra   r>   )rO   r>   r!   r!  r\   s    r   test_overriding_keywordsz*TestPartialMethod.test_overriding_keywords'  sd    1-	C8/DE15	C87LMr   c                 F   | j                  t              5   G d dt              }d d d        | j                  t              5   G d d      }d d d        | j                  t              5   G d d      }d d d        y # 1 sw Y   ZxY w# 1 sw Y   >xY w# 1 sw Y   y xY w)Nc                   2    e Zd Z ej                  dd      Zy).TestPartialMethod.test_invalid_args.<locals>.BNr9   r(   r)   r*   r
   r  methodr   r   r   Br9  -  s    000q9r   r<  c                   .    e Zd Z ej                         Zy)r9  Nr:  r   r   r   r<  z.TestPartialMethod.test_invalid_args.<locals>.B0  s    0002r   c                   4    e Zd Z ej                  ed      Zy)r9  r9   )r    r>   N)r(   r)   r*   r
   r  r   r;  r   r   r   r<  z.TestPartialMethod.test_invalid_args.<locals>.B3  s    000gCr   )rY   rZ   r   )r1   r<  s     r   test_invalid_argsz#TestPartialMethod.test_invalid_args+  s    y) 	::F :	: y) 	33 3	3 y) 	DD D	D 	D	: 	:	3 	3	D 	Ds#   A?B+B?BBB c                     | j                  t        t        | j                        d         dj	                  t
                     y )Nr  z#functools.partialmethod({}, 3, b=4))rO   r   varsr!  formatr   r\   s    r   r   zTestPartialMethod.test_repr6  s3    d466l623>EEgN	Pr   c                     G d dt         j                        }| j                  |j                  j                         | j                  |j
                  j                         | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  fD ]  }| j                  t        |dd               y )Nc                   V    e Zd Zej                  d        Z ej                  ed      Zy)1TestPartialMethod.test_abstract.<locals>.Abstractc                      y r   r   r1   rJ   r   s      r   addz5TestPartialMethod.test_abstract.<locals>.Abstract.add=  s    r   r`   N)	r(   r)   r*   abcabstractmethodrH  r
   r  add5r   r   r   AbstractrE  ;  s0       +9**32Dr   rL  __isabstractmethod__F)rI  ABCMetarM   rH  rM  rK  r!  r  r   r  r   r  r.  r   )r1   rL  r    s      r   test_abstractzTestPartialMethod.test_abstract:  s    	3s{{ 	3 	99:::;VV]]DFFJJ0C0CTVV]]TXTZTZT_T_` 	KDWT+A5IJ	Kr   c                 t    d }t        j                  |d      }| j                   |d       |dd             y )Nc                    | |z   S r   r   r=   s     r   r   z1TestPartialMethod.test_positional_only.<locals>.fJ      q5Lr   r9   r:   )r
   rL   rO   r   s      r   test_positional_onlyz&TestPartialMethod.test_positional_onlyI  s5    	 a#1qAw'r   N)r(   r)   r*   r   r!  r>   rj   r$  r'  r,  r0  r4  r6  r?  r   rO  rS  r   r   r   r  r    sX    AF A 	
AV2Wb3=SN	DPK(r   r  c                   B   e Zd Zej                  ej
                  fdZd Zd Z e	j                  ej                  j                  dk\  d      d        Zd Zd Zd	 Zej&                   e	j                  ej                  j                  dk\  d      d
               Zd Zy)TestUpdateWrapperc                 (   |D ](  }| j                  t        ||      t        ||             * |D ]D  }t        ||      }t        ||      }|D ]%  }|dk(  r|dk(  r| j                  ||   ||          ' F | j                  |j                  |       y )Nr"   __wrapped__)r   r   rW  )	r1   wrapperwrappedassignedupdatedr   wrapper_attrwrapped_attrr   s	            r   check_wrapperzTestUpdateWrapper.check_wrapperS  s      	JDMM''40''42HI	J  	DD"7D1L"7D1L# D:%#*>l3/c1BC	D	D 	g))73r   c                 j     d        }d|_         d|_        dd}t        j                  ||       ||fS )Nc                      d x}fddcS )Tc                      yThis is a testNr   ra   s    r   r   z,TestUpdateWrapper._default_update.<locals>.fg      r   )r>   This is a new annotationr   )	.defaultsra  s     r   z<generic parameters of f>zDTestUpdateWrapper._default_update.<locals>.<generic parameters of f>g  s	    a 	r   This is also a testzThis is a bald faced liec                      y r   r   rc   s    r   rX  z2TestUpdateWrapper._default_update.<locals>.wrapperl      r   )r?   zThis is the prior annotation)r   rW  r
   update_wrapperr1   r   rX  s      r   _default_updatez!TestUpdateWrapper._default_updatef  s6    	 '2	  !,zr   c                    | j                         \  }}| j                  ||       |j                  \  }| j                  |j                  |       | j                  |j                  d       | j                  |j                  |j                         | j                  |j                  d       | j                  |j                  d   d       | j                  d|j                         | j                  |j                  |f       y )Nr   rh  r>   rf  r?   )rm  r^  __type_params__r   rW  rO   r(   r*   r   __annotations__assertNotIn)r1   rX  r   ra  s       r   test_default_updatez%TestUpdateWrapper.test_default_updateq  s    ))+
7A&g))1-))3/--q~~>'<=0057QRg556001$7r   r:   )Docstrings are omitted with -O2 and abovec                 b    | j                         \  }}| j                  |j                  d       y Nrd  rm  rO   __doc__r1   rX  r   s      r   test_default_update_docz)TestUpdateWrapper.test_default_update_doc}  +     ))+
*:;r   c                    d }d|_         d }t        j                  ||dd       | j                  ||dd       | j	                  |j
                  d       | j                  |j                  |j                         | j	                  |j                  d        | j	                  |j                  i        | j                  t        |d             y )Nc                       yrc  r   r   r   r   r   z+TestUpdateWrapper.test_no_update.<locals>.f  re  r   rh  c                       y r   r   r   r   r   rX  z1TestUpdateWrapper.test_no_update.<locals>.wrapper  rj  r   r   rX  r   )r   r
   rk  r^  rO   r(   assertNotEqualr*   rw  rp  r.  r/  rl  s      r   test_no_updatez TestUpdateWrapper.test_no_update  s    	 '	  !R47Ar2.))95G00!..A$/00"5&12r   c                    d }d|_         t        ddd      |_        d }i |_        d}d	}t        j                  ||||       | j                  ||||       | j                  |j                  d
       | j                  |j                  |j                         | j                  |j                  d        | j                  |j                   d       | j                  |j                  |j                         y )Nc                       y r   r   r   r   r   r   z2TestUpdateWrapper.test_selective_update.<locals>.f  rj  r   This is a different testr9   r:   r@   rG   c                       y r   r   r   r   r   rX  z8TestUpdateWrapper.test_selective_update.<locals>.wrapper  rj  r   r   	dict_attrrX  )r   rP   r  r
   rk  r^  rO   r(   r~  r*   rw  r1   r   rX  assignupdates        r   test_selective_updatez'TestUpdateWrapper.test_selective_update  s    	+Q!q)	  !VV<7Avv6))95G00!..A$/'AB**AKK8r   c                    d }d }i |_         d}d}t        j                  ||||       | j                  d|j                         | j                  |j                   i        |` | j                  t              5  t        j                  ||||       d d d        d|_         | j                  t              5  t        j                  ||||       d d d        y # 1 sw Y   GxY w# 1 sw Y   y xY w)Nc                       y r   r   r   r   r   r   z4TestUpdateWrapper.test_missing_attributes.<locals>.f  rj  r   c                       y r   r   r   r   r   rX  z:TestUpdateWrapper.test_missing_attributes.<locals>.wrapper  rj  r   r   r  r   r9   )r  r
   rk  rq  r"   rO   rY   r   r  s        r   test_missing_attributesz)TestUpdateWrapper.test_missing_attributes  s    		  !VV<!1!12**B/~. 	A$$Wa@	A~. 	A$$Wa@	A 	A	A 	A	A 	As   9C6C$C!$C-c                    d }t        j                  |t               | j                  |j                  d       | j                  |j                  j                  d             | j                  |j                  i        y )Nc                       y r   r   r   r   r   rX  z6TestUpdateWrapper.test_builtin_update.<locals>.wrapper  rj  r   r   zmax()	r
   rk  r   rO   r(   rM   rw  
startswithrp  r1   rX  s     r   test_builtin_updatez%TestUpdateWrapper.test_builtin_update  s^    
	  #.))51226:;00"5r   c                     d }t        j                  |t               | j                  |j                  d       | j                  |j
                  i        | j                  |j                  d       y )Nc                       y r   r   r   s    r   rX  z;TestUpdateWrapper.test_update_type_wrapper.<locals>.wrapper  s    Dr   r   r   )r
   rk  r   rO   r(   rp  ro  r  s     r   test_update_type_wrapperz*TestUpdateWrapper.test_update_type_wrapper  sW       $/))6200"500"5r   N)r(   r)   r*   r
   WRAPPER_ASSIGNMENTSWRAPPER_UPDATESr^  rm  rr  unittestskipIfr   flagsoptimizery  r  r  r  r   requires_docstringsr  r  r   r   r   rU  rU  Q  s      )<<'774&	
8 X__SYY''1,@B<B<39$A(   X__SYY''1,@B6B !66r   rU  c                       e Zd Zd Zd Z ej                  ej                  j                  dk\  d      d        Z
d Zd Zy)		TestWrapsc                 b    d }d|_         d|_        t        j                  |      d        }||fS )Nc                       yrc  r   r   r   r   r   z$TestWraps._default_update.<locals>.f  re  r   rh  zThis is still a bald faced liec                       y r   r   r   r   r   rX  z*TestWraps._default_update.<locals>.wrapper  re  r   )r   rW  r
   wrapsrl  s      r   rm  zTestWraps._default_update  s<    	 '8			 
	zr   c                 
   | j                         \  }}| j                  ||       | j                  |j                  d       | j                  |j                  |j                         | j                  |j
                  d       y )Nr   rh  )rm  r^  rO   r(   r*   r   rx  s      r   rr  zTestWraps.test_default_update  si    ))+
7A&))3/--q~~>'<=r   r:   rs  c                 b    | j                         \  }}| j                  |j                  d       y ru  rv  )r1   rX  _s      r   ry  z!TestWraps.test_default_update_doc  rz  r   c                 l   d }d|_         t        j                  |dd      d        }| j                  ||dd       | j	                  |j
                  d       | j                  |j                  |j                         | j	                  |j                  d        | j                  t        |d             y )Nc                       yrc  r   r   r   r   r   z#TestWraps.test_no_update.<locals>.f  re  r   rh  r   c                       y r   r   r   r   r   rX  z)TestWraps.test_no_update.<locals>.wrapper  re  r   rX  r   )r   r
   r  r^  rO   r(   r~  r*   rw  r.  r/  rl  s      r   r  zTestWraps.test_no_update  s    	 '	B	#	 
$	7Ar2.))95G00!..A$/&12r   c                    d }d|_         t        ddd      |_        d }d}d	}t        j                  |||      |d
               }| j                  ||||       | j                  |j                  d       | j                  |j                  |j                         | j                  |j                  d        | j                  |j                   d       | j                  |j                  |j                         y )Nc                       y r   r   r   r   r   r   z*TestWraps.test_selective_update.<locals>.f  rj  r   r  r9   r:   r@   rG   c                     i | _         | S r   r  )r   s    r   add_dict_attrz6TestWraps.test_selective_update.<locals>.add_dict_attr  s    AKHr   r   r  c                       y r   r   r   r   r   rX  z0TestWraps.test_selective_update.<locals>.wrapper  s     r   rX  )r   rP   r  r
   r  r^  rO   r(   r~  r*   rw  )r1   r   r  r  r  rX  s         r   r  zTestWraps.test_selective_update  s    	+Q!q)	 	FF	+		 
 
,	7Avv6))95G00!..A$/'AB**AKK8r   N)r(   r)   r*   rm  rr  r  r  r   r  r  ry  r  r  r   r   r   r  r    sK    	> X__SYY''1,@B<B<39r   r  c                       e Zd Zd Zd Zy)
TestReducec           	      t    G d d      }d }| j                  | j                  |g dd      d       | j                  | j                  |ddgg d	d
ggg       g d       | j                  | j                  d t        dd      d      d       | j                  | j                  d t        dd      d      d       | j                  | j                  | |d            d       | j                  | j                  | |d      d      d       | j                  | j                  | |d      d      d       | j                  t        | j                         | j                  t        | j                  dd       | j                  t        | j                  ddd       | j                  | j                  dd      d       | j                  | j                  ddd      d       | j                  t        | j                  dd       | j                  t        | j                  |g        | j                  t        | j                  |d       | j                  t        | j                  |d       | j                  t        | j                  |t                       G d d      }| j                  t        | j                  | |              | j                  | j                  |g d       d        | j                  | j                  |g d      d        G d d      }| j                  t        | j                  d |              y )Nc                       e Zd Zd Zd Zd Zy)'TestReduce.test_reduce.<locals>.Squaresc                      || _         g | _        y r   )r   sofar)r1   r   s     r   __init__z0TestReduce.test_reduce.<locals>.Squares.__init__  s    
r   c                 ,    t        | j                        S r   )lenr  r\   s    r   r   z/TestReduce.test_reduce.<locals>.Squares.__len__  s    4::&r   c                     d|cxk  r| j                   k  st         t        t        | j                        }||k  r)| j                  j	                  ||z         |dz  }||k  r)| j                  |   S )Nr   r9   )r   r   r  r  append)r1   ins      r   r   z3TestReduce.test_reduce.<locals>.Squares.__getitem__  sl    A((
*:(
*:

O1fJJ%%ac*FA 1f zz!}$r   N)r(   r)   r*   r  r   r   r   r   r   Squaresr    s     '%r   r  c                     | |z   S r   r   r   s     r   rH  z#TestReduce.test_reduce.<locals>.add  rR  r   rG   r   rI  r>   rE   rd   w)r>   rE   rd   r  c                     | |z  S r   r   r   s     r   rK   z(TestReduce.test_reduce.<locals>.<lambda>#  s
    !A# r   r:   r  r9   i  c                     | |z  S r   r   r   s     r   rK   z(TestReduce.test_reduce.<locals>.<lambda>%  s
    QqS r      l     h r;   i  r   *   1)r  r  r   c                       e Zd Zd Zy)/TestReduce.test_reduce.<locals>.TestFailingIterc                     t         r   RuntimeErrorr\   s    r   __iter__z8TestReduce.test_reduce.<locals>.TestFailingIter.__iter__7  s    ""r   N)r(   r)   r*   r  r   r   r   TestFailingIterr  6  s    #r   r  c                       e Zd Zd Zy)&TestReduce.test_reduce.<locals>.BadSeqc                     t         r   )
ValueError)r1   indexs     r   r   z2TestReduce.test_reduce.<locals>.BadSeq.__getitem__?  s      r   N)r(   r)   r*   r   r   r   r   BadSeqr  >  s    !r   r  )rO   reducer   rY   rZ   r   r  r  )r1   r  rH  r  r  s        r   test_reducezTestReduce.test_reduce  s   	% 	%	S/2>FKKsCj"sCj92>	
 	%5uQqz1EtLKK(%"+q9	
 	S'"+6<S'"+q93?S'!*a8!<)T[[1)T[["b9)T[["b"=R-s3RS137)T[["h?)T[[#r:)T[[#r:)T[[#r:)T[[#vx@	# 	# 	,S/:KLS"d3T:S"b126	! 	! 	*dkk2vx@r   c                     G d d      }ddl m} | j                  | j                  | |d            d       | j                  | j                  | |d      d      d       | j	                  t
        | j                  | |d             | j                  | j                  | |d      d      d       | j                  | j                  | |d	            d       | j                  | j                  | |d	      d      d       d	d
dd}| j                  | j                  ||      dj                  |j                                      y )Nc                       e Zd Zd Zd Zy)5TestReduce.test_iterator_usage.<locals>.SequenceClassc                     || _         y r   r  )r1   r  s     r   r  z>TestReduce.test_iterator_usage.<locals>.SequenceClass.__init__F  	    r   c                 J    d|cxk  r| j                   k  r	|S  t        t        Nr   )r  r   )r1   r  s     r   r   zATestReduce.test_iterator_usage.<locals>.SequenceClass.__getitem__H  s(    ?DFF?H # %$*$r   N)r(   r)   r*   r  r   r   r   r   SequenceClassr  E  s    %r   r  r   )rH  r`   r;   r  4   r9   r:   r@   )onetwothreer   )operatorrH  rO   r  rY   rZ   r   keys)r1   r  rH  rd   s       r   test_iterator_usagezTestReduce.test_iterator_usageD  s
   	% 	% 	!S-*:;R@S-*:B?D)T[[#}Q7GHS-*:B?DS-*:;Q?S-*:B?Da!,S!,bggaffh.?@r   N)r(   r)   r*   r  r  r   r   r   r  r    s    5ApAr   r  c                   *    e Zd Zerej                  Zyy)TestReduceCN)r(   r)   r*   r  r  r   r   r   r  r  Z  s    ## r   r  c                   0    e Zd Z eej
                        Zy)TestReducePyN)r(   r)   r*   r  r  r  r   r   r   r  r  `  s    ,--.Fr   r  c                   |    e Zd Zd Zd Zd Zd Zd Zd Zd Z	 e
j                  ej                  d      d	        Zy
)TestCmpToKeyc                    d }| j                  |      }| j                   |d       |d             | j                   |d       |d             | j                   |d       |d             d }| j                  |      }| j                   |d       |d             | j	                   |d       |d             | j                   |d       |d             | j                   |d       |d             y )	Nc                     | |kD  | |k  z
  S r   r   r   s     r   cmp1z*TestCmpToKey.test_cmp_to_key.<locals>.cmp1g      Ea!e$$r   r@   r9   c                 0    t        |       t        |      z
  S r   r   r   s     r   cmp2z*TestCmpToKey.test_cmp_to_key.<locals>.cmp2n  s    q6CF?"r   g      @4r:   35)
cmp_to_keyrO   assertGreaterassertGreaterEqual
assertLessassertLessEqualr~  )r1   r  r   r  s       r   test_cmp_to_keyzTestCmpToKey.test_cmp_to_keyf  s    	%ood#QQ(3q63q6*AA/	#ood#S3s8,AD	*SVSY/CFCI.r   c                 p   d }| j                  |      }| j                   |d       |d             | j                   |d       |d             | j                  t        t
        f      5   |d      dkD   d d d        | j                  t        t
        f      5  d |d      k   d d d        | j                  t              5  | j                         }d d d        | j                  t              5  | j                  |d       }d d d        | j                  |      }| j                  t              5   |        d d d        | j                  t              5   |d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   axY w# 1 sw Y   y xY w)Nc                     | |kD  | |k  z
  S r   r   r   s     r   r  z4TestCmpToKey.test_cmp_to_key_arguments.<locals>.cmp1w  r  r   mycmpr@   r2  r9   )r  rO   r  rY   rZ   r   r1   r  r   s      r   test_cmp_to_key_argumentsz&TestCmpToKey.test_cmp_to_key_argumentsv  sv   	%ooDo)SQZ031:sqz2	>:; 	FQJ		>:; 	AJ	y) 	$//#C	$y) 	.//$-C	.ood#y) 	E	y) 	dO	 		 		 		$ 	$	. 	.	 		 	sH   1E0 E<	F7F8F 
F,0E9<FFF F),F5c                 8   d }| j                  |      }| j                  t              5   |d       |d      kD   d d d         G d d      fd}| j                  t              5   |d       |d      kD   d d d        y # 1 sw Y   HxY w# 1 sw Y   y xY w)Nc                     t         r   r   r   s     r   r  z'TestCmpToKey.test_bad_cmp.<locals>.cmp1  s    ##r   r@   r9   c                       e Zd Zd Zy))TestCmpToKey.test_bad_cmp.<locals>.BadCmpc                     t         r   r  r0   s     r   __lt__z0TestCmpToKey.test_bad_cmp.<locals>.BadCmp.__lt__  s    ''r   N)r(   r)   r*   r  r   r   r   BadCmpr    s    (r   r  c                             S r   r   )rJ   r   r  s     r   r  z'TestCmpToKey.test_bad_cmp.<locals>.cmp1  s
    8Or   )r  rY   r   )r1   r  r   r  s      @r   test_bad_cmpzTestCmpToKey.test_bad_cmp  s    	$ood#01 	FSVO		( 	(	01 	FSVO	 		 		 	s   B)BBBc                 r    d }| j                  |      }| j                   |d      j                  d       y )Nc                     | |kD  | |k  z
  S r   r   r   s     r   r  z)TestCmpToKey.test_obj_field.<locals>.cmp1  r  r   r  2   )r  rO   r+  r  s      r   test_obj_fieldzTestCmpToKey.test_obj_field  s/    	%ooDo)Rb)r   c                 x    d }| j                  t        t        d      | j                  |            g d       y )Nc                     || z
  S r   r   r   s     r   r  z)TestCmpToKey.test_sort_int.<locals>.mycmp  rR  r   r`   r   )rA   r@   r:   r9   r   )rO   sortedr   r  )r1   r  s     r   test_sort_intzTestCmpToKey.test_sort_int  s.    	adooe.DE(	*r   c                     d }g d}t        || j                  |            }| j                  |D cg c]  }t        |       c}g d       y c c}w )Nc                 D    t        |       t        |      }} | |kD  | |k  z
  S r   r  r   s     r   r  z-TestCmpToKey.test_sort_int_str.<locals>.mycmp  s&    q63q6qAEa!e$$r   )	r`   3rb   r:   0r  rA   10r9   r  )	r   r9   r9   r:   r@   rA   r`   rb   r;   )r  r  rO   r   )r1   r  valuesr   s       r   test_sort_int_strzTestCmpToKey.test_sort_int_str  sH    	% 6DOOE$:;&9#e*95	79s   Ac                     d }| j                  |      } |d      }| j                  t        t        |       | j	                  |t
        j                  j                         y )Nc                     || z
  S r   r   r   s     r   r  z%TestCmpToKey.test_hash.<locals>.mycmp  rR  r   r;   )r  rY   rZ   hashassertNotIsInstancecollectionsrI  Hashable)r1   r  r   ks       r   	test_hashzTestCmpToKey.test_hash  sJ    	ooe$G)T1-  KOO$<$<=r   z6Signature information for builtins requires docstringsc                 t    | j                  t        t        j                  | j                              d       y )Nz(mycmp))rO   r   r   from_callabler  r\   s    r   test_cmp_to_signaturez"TestCmpToKey.test_cmp_to_signature  s+     	Y44T__EF"	$r   N)r(   r)   r*   r  r  r  r  r  r  r   r  r  r   MISSING_C_DOCSTRINGSr#  r   r   r   r  r  d  sQ    / (**7> X__W11MO$O$r   r  c                   L    e Zd Zerej                  Zej                  d        Zy)TestCmpToKeyCc                 h    t        j                  | t        t        j	                  d                    y r   )r   check_disallow_instantiationr   r  r  r\   s    r   test_disallow_instantiationz)TestCmpToKeyC.test_disallow_instantiation  s'     	,,${--d34	
r   N)r(   r)   r*   r  r  r   cpython_onlyr)  r   r   r   r&  r&    s(     ++

 
r   r&  c                   0    e Zd Z eej
                        Zy)TestCmpToKeyPyN)r(   r)   r*   r  r  r  r   r   r   r,  r,    s    l556Jr   r,  c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestTotalOrderingc                    t         j                   G d d             }| j                   |d       |d      k         | j                   |d       |d      kD         | j                   |d       |d      k         | j                   |d       |d      k\         | j                   |d       |d      k         | j                   |d       |d      k\         | j                   |d       |d      kD         y )Nc                       e Zd Zd Zd Zd Zy)3TestTotalOrdering.test_total_ordering_lt.<locals>.Ac                     || _         y r   r   r1   r   s     r   r  z<TestTotalOrdering.test_total_ordering_lt.<locals>.A.__init__  	    "
r   c                 4    | j                   |j                   k  S r   r3  r0   s     r   r  z:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__lt__      zzEKK//r   c                 4    | j                   |j                   k(  S r   r3  r0   s     r   __eq__z:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__eq__      zzU[[00r   Nr(   r)   r*   r  r  r9  r   r   r   r!  r1        #01r   r!  r9   r:   r
   total_orderingrM   r.  r1   r!  s     r   test_total_ordering_ltz(TestTotalOrdering.test_total_ordering_lt      		!	!	1 	1 
"	1 	!qt$!qt$!!%!!%!!%!!%1!%r   c                    t         j                   G d d             }| j                   |d       |d      k         | j                   |d       |d      kD         | j                   |d       |d      k         | j                   |d       |d      k\         | j                   |d       |d      k         | j                   |d       |d      k\         | j                   |d       |d      k\         y )Nc                       e Zd Zd Zd Zd Zy)3TestTotalOrdering.test_total_ordering_le.<locals>.Ac                     || _         y r   r3  r4  s     r   r  z<TestTotalOrdering.test_total_ordering_le.<locals>.A.__init__  r5  r   c                 4    | j                   |j                   k  S r   r3  r0   s     r   __le__z:TestTotalOrdering.test_total_ordering_le.<locals>.A.__le__  r:  r   c                 4    | j                   |j                   k(  S r   r3  r0   s     r   r9  z:TestTotalOrdering.test_total_ordering_le.<locals>.A.__eq__  r:  r   N)r(   r)   r*   r  rG  r9  r   r   r   r!  rD        #11r   r!  r9   r:   r=  r?  s     r   test_total_ordering_lez(TestTotalOrdering.test_total_ordering_le      		!	!	1 	1 
"	1 	!qt$!qt$!!%!!%!!%!!%11&r   c                    t         j                   G d d             }| j                   |d       |d      k         | j                   |d       |d      kD         | j                   |d       |d      k         | j                   |d       |d      k\         | j                   |d       |d      k         | j                   |d       |d      k\         | j                   |d       |d      k         y )Nc                       e Zd Zd Zd Zd Zy)3TestTotalOrdering.test_total_ordering_gt.<locals>.Ac                     || _         y r   r3  r4  s     r   r  z<TestTotalOrdering.test_total_ordering_gt.<locals>.A.__init__  r5  r   c                 4    | j                   |j                   kD  S r   r3  r0   s     r   __gt__z:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__gt__  r7  r   c                 4    | j                   |j                   k(  S r   r3  r0   s     r   r9  z:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__eq__  r:  r   N)r(   r)   r*   r  rQ  r9  r   r   r   r!  rN    r<  r   r!  r9   r:   r=  r?  s     r   test_total_ordering_gtz(TestTotalOrdering.test_total_ordering_gt  rA  r   c                    t         j                   G d d             }| j                   |d       |d      k         | j                   |d       |d      kD         | j                   |d       |d      k         | j                   |d       |d      k\         | j                   |d       |d      k         | j                   |d       |d      k\         | j                   |d       |d      k         y )Nc                       e Zd Zd Zd Zd Zy)3TestTotalOrdering.test_total_ordering_ge.<locals>.Ac                     || _         y r   r3  r4  s     r   r  z<TestTotalOrdering.test_total_ordering_ge.<locals>.A.__init__  r5  r   c                 4    | j                   |j                   k\  S r   r3  r0   s     r   __ge__z:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__ge__  r:  r   c                 4    | j                   |j                   k(  S r   r3  r0   s     r   r9  z:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__eq__
  r:  r   N)r(   r)   r*   r  rY  r9  r   r   r   r!  rV    rI  r   r!  r9   r:   r=  r?  s     r   test_total_ordering_gez(TestTotalOrdering.test_total_ordering_ge  rK  r   c                    t         j                   G d dt                     }| j                   |d       |d      k         | j                   |d       |d      kD         | j                   |d       |d      k         | j                   |d       |d      k\         | j                   |d       |d      k         | j                   |d       |d      k\         y )Nc                       e Zd Zy)=TestTotalOrdering.test_total_ordering_no_overwrite.<locals>.ANr'   r   r   r   r!  r^        r   r!  r9   r:   )r
   r>  r   rM   r?  s     r    test_total_ordering_no_overwritez2TestTotalOrdering.test_total_ordering_no_overwrite  s    		!	!	 	 
"	!qt$!qt$!!%!!%!!%!!%r   c                     | j                  t              5  t        j                   G d d             }d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)7TestTotalOrdering.test_no_operations_defined.<locals>.ANr'   r   r   r   r!  rc  "  s    r   r!  )rY   r  r
   r>  r?  s     r   test_no_operations_definedz,TestTotalOrdering.test_no_operations_defined   sB    z* 	%%  &	 	 	s	   =Ac                    t         j                   G fdd             t         j                   G fdd             t         j                   G fdd             t         j                   G fdd             | j                   d	      j                  d	      t               | j                   d	      j                  d	      t               | j                   d	      j                  d	      t               | j                   d	      j                  d	      t               | j                   d	      j                  d	      t               | j                   d	      j                  d	      t               | j                   d	      j                  d	      t               | j                   d	      j                  d	      t               | j                   d	      j                  d	      t               | j                   d	      j                  d	      t               | j                   d	      j                  d	      t               | j                   d	      j                  d	      t               y )
Nc                   (    e Zd Zd Z fdZ fdZy)ATestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThanc                     || _         y r   r3  r4  s     r   r  zJTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThan.__init__*  r5  r   c                 P    t        |      r| j                  |j                  k(  S yNF
isinstancer   r1   r2   ImplementsLessThans     r   r9  zHTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThan.__eq__,  $    e%78::44r   c                 Z    t        |      r| j                  |j                  k  S t        S r   rl  r   NotImplementedrm  s     r   r  zHTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThan.__lt__0  '    e%78::33%%r   Nr(   r)   r*   r  r9  r  rn  s   r   rn  rg  (      #&r   rn  c                   (    e Zd Zd Z fdZ fdZy)HTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThanEqualToc                     || _         y r   r3  r4  s     r   r  zQTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThanEqualTo.__init__7  r5  r   c                 P    t        |      r| j                  |j                  k(  S yrj  rk  r1   r2   ImplementsLessThanEqualTos     r   r9  zOTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThanEqualTo.__eq__9  $    e%>?::44r   c                 Z    t        |      r| j                  |j                  k  S t        S r   rq  r{  s     r   rG  zOTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThanEqualTo.__le__=  '    e%>?::44%%r   Nr(   r)   r*   r  r9  rG  r|  s   r   r|  rx  5  rv  r   r|  c                   (    e Zd Zd Z fdZ fdZy)DTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThanc                     || _         y r   r3  r4  s     r   r  zMTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThan.__init__D  r5  r   c                 P    t        |      r| j                  |j                  k(  S yrj  rk  r1   r2   ImplementsGreaterThans     r   r9  zKTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThan.__eq__F  $    e%:;::44r   c                 Z    t        |      r| j                  |j                  kD  S t        S r   rq  r  s     r   rQ  zKTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThan.__gt__J  '    e%:;::33%%r   Nr(   r)   r*   r  r9  rQ  r  s   r   r  r  B  rv  r   r  c                   (    e Zd Zd Z fdZ fdZy)KTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThanEqualToc                     || _         y r   r3  r4  s     r   r  zTTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThanEqualTo.__init__Q  r5  r   c                 P    t        |      r| j                  |j                  k(  S yrj  rk  r1   r2   ImplementsGreaterThanEqualTos     r   r9  zRTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThanEqualTo.__eq__S  $    e%AB::44r   c                 Z    t        |      r| j                  |j                  k\  S t        S r   rq  r  s     r   rY  zRTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThanEqualTo.__ge__W  '    e%AB::44%%r   Nr(   r)   r*   r  r9  rY  r  s   r   r  r  O  rv  r   r  r9   )r
   r>  r   rG  rr  rQ  rY  r  )r1   r  r  rn  r|  s    @@@@r   test_notimplementedz%TestTotalOrdering.test_notimplemented&  s   		!	!
	& 
	& 
"
	& 
	!	!
	& 
	& 
"
	& 
	!	!
	& 
	& 
"
	& 
	!	!
	& 
	& 
"
	& 	(+2215~F(+2215~F(+2215~F/299!<nM/299!<nM/299!<nM+A.55a8.I+A.55a8.I+A.55a8.I215<<Q?P215<<Q?P215<<Q?Pr   c                 
   t         j                   G fdd             t         j                   G fdd             t         j                   G fdd             t         j                   G fdd             t         j                   G fd	d
             | j                  d      5  | j                  t              5   d      dk   d d d        d d d        | j                  d      5  | j                  t              5   d       d      k   d d d        d d d        | j                  d      5  | j                  t              5   d       d      k   d d d        d d d        | j                  d      5  | j                  t              5   d       d      k   d d d        d d d        | j                  d      5  | j                  t              5   d       d      k   d d d        d d d        | j                  d      5  | j                  t              5   d       d      kD   d d d        d d d        | j                  d      5  | j                  t              5   d       d      kD   d d d        d d d        | j                  d      5  | j                  t              5   d       d      k\   d d d        d d d        | j                  d      5  | j                  t              5   d       d      k\   d d d        d d d        | j                  d      5   d      } d      }| j                  ||       | j                  t              5  ||k\   d d d        d d d        | j                  d      5   d       } d       }| j                  ||       | j                  t              5  ||k   d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   bxY w# 1 sw Y   .xY w# 1 sw Y   3xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   \xY w# 1 sw Y   axY w# 1 sw Y   xY w# 1 sw Y   y xY w)!Nc                   (    e Zd Zd Z fdZ fdZy)RTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanc                     || _         y r   r3  r4  s     r   r  z[TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__init__n  r5  r   c                 P    t        |      r| j                  |j                  k(  S yrj  rk  rm  s     r   r9  zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__eq__p  ro  r   c                 Z    t        |      r| j                  |j                  k  S t        S r   rq  rm  s     r   r  zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__lt__t  rs  r   Nrt  ru  s   r   rn  r  l  rv  r   rn  c                   (    e Zd Zd Z fdZ fdZy)UTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanc                     || _         y r   r3  r4  s     r   r  z^TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__init__{  r5  r   c                 P    t        |      r| j                  |j                  k(  S yrj  rk  r  s     r   r9  z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__eq__}  r  r   c                 Z    t        |      r| j                  |j                  kD  S t        S r   rq  r  s     r   rQ  z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__gt__  r  r   Nr  r  s   r   r  r  y  rv  r   r  c                   (    e Zd Zd Z fdZ fdZy)YTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualToc                     || _         y r   r3  r4  s     r   r  zbTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__init__  r5  r   c                 P    t        |      r| j                  |j                  k(  S yrj  rk  r{  s     r   r9  z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__eq__  r}  r   c                 Z    t        |      r| j                  |j                  k  S t        S r   rq  r{  s     r   rG  z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__le__  r  r   Nr  r  s   r   r|  r    rv  r   r|  c                   (    e Zd Zd Z fdZ fdZy)\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualToc                     || _         y r   r3  r4  s     r   r  zeTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__init__  r5  r   c                 P    t        |      r| j                  |j                  k(  S yrj  rk  r  s     r   r9  zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__eq__  r  r   c                 Z    t        |      r| j                  |j                  k\  S t        S r   rq  r  s     r   rY  zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__ge__  r  r   Nr  r  s   r   r  r    rv  r   r  c                   $    e Zd Zd Z fdZd Zy)XTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplementedc                     || _         y r   r3  r4  s     r   r  zaTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__init__  r5  r   c                 P    t        |      r| j                  |j                  k(  S yrj  rk  )r1   r2   ComparatorNotImplementeds     r   r9  z_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__eq__  s$    e%=>::44r   c                     t         S r   )rr  r0   s     r   r  z_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__lt__  s    %%r   Nrt  )r  s   r   r  r    s    #&r   r  zLT < 1r9   zLT < LEr   zLT < GTzLE <= LTr:   zLE <= GEr@   zGT > GErA   zGT > LTr`   zGE >= GTr  zGE >= LErb   zGE when equalr  zLE when equalr  )r
   r>  r3  rY   rZ   rO   )r1   r>   r?   r  r  r  rn  r|  s      @@@@@r   $test_type_error_when_not_implementedz6TestTotalOrdering.test_type_error_when_not_implementedi  s    
	!	!
	& 
	& 
"
	& 
	!	!
	& 
	& 
"
	& 
	!	!
	& 
	& 
"
	& 
	!	!
	& 
	& 
"
	& 
	!	!	& 	& 
"	& \\(# 	'T%6%6y%A 	'r"Q&	' 	' \\)$ 	Ad&7&7	&B 	Aq!$=a$@@	A 	A \\)$ 	=d&7&7	&B 	=q!$9!$<<	= 	= \\*% 	Bt'8'8'C 	B%a(,>q,AA	B 	B \\*% 	Lt'8'8'C 	L%a(,H,KK	L 	L \\)$ 	Gd&7&7	&B 	G!!$'CA'FF	G 	G \\)$ 	=d&7&7	&B 	=!!$'9!'<<	= 	= \\*% 	Ht'8'8'C 	H(+/DQ/GG	H 	H \\*% 	Lt'8'8'C 	L(+/H/KK	L 	L \\/* 	(+A(+AQ"""9- Q		 \\/* 	(+A(+AQ"""9- Q		 	E	' 	' 	' 	'	A 	A 	A 	A	= 	= 	= 	=	B 	B 	B 	B	L 	L 	L 	L	G 	G 	G 	G	= 	= 	= 	=	H 	H 	H 	H	L 	L 	L 	L 		 	 		 	s  2O8O+O85PPP>P,P&P,QP9/QQ &Q8Q Q:/Q-Q:"R8R
R+R.R!R.4S
R;S=8S"5S;S"8S<S/S<+O5	0O88PP	
PPP)	$P,,P69Q	>QQQ	Q  Q*-Q7	2Q::RR	RR!R+	&R..R8;S	 SSS	S""S,/S9	4S<<Tc           	      :   t        t        j                  dz         D ]p  }dD ]i  }| j                  ||      5  t	        t
        |      }t        j                  t        j                  ||            }| j                  ||       d d d        k r y # 1 sw Y   xxY w)Nr9   )r  rQ  rG  rY  )r;  r   )	r   r   r   r3  r   Orderable_LTr   r   r   )r1   r   r   r;  method_copys        r   r   zTestTotalOrdering.test_pickle  s    622Q67 	7E> 7\\U\; 7$\48F"(,,v||FE/J"KKMM+v67 77	77 7s   ABBc                     t         j                   G fddt                      G d d      } G d d      }| j                  ||k         | j	                  ||kD         y )Nc                   4     e Zd Z fdZfdZfdZ xZS )WTestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMetac                 (    t         |   | |||      S r   )super__new__)r   r   basesns	__class__s       r   r  z_TestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMeta.__new__  s    wsD%<<r   c                 P    t        |      s	 | j                  |j                  k  S r   rl  r(   r1   r2   SortableMetas     r   r  z^TestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMeta.__lt__  s#    !%6}}u~~55r   c                 P    t        |      s	 | j                  |j                  k(  S r   r  r  s     r   r9  z^TestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMeta.__eq__  s#    !%6}}66r   )r(   r)   r*   r  r  r9  __classcell__)r  r  s   @r   r  r    s    =6
7 7r   r  c                       e Zd Zy)LTestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.BNr'   r   r   r   r<  r        r   r<  	metaclassc                       e Zd Zy)LTestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.ANr'   r   r   r   r!  r    r  r   r!  )r
   r>  r   rM   r.  )r1   r<  r!  r  s      @r   /test_total_ordering_for_metaclasses_issue_44605zATestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605  s^    		!	!	74 	7 
"	7	, 		, 	 	AQr   N)r(   r)   r*   r@  rJ  rS  r[  r`  rd  r  r  r   r  r   r   r   r.  r.    s9    &"'"&"'"
&AQFiV7 r   r.  c                       e Zd Zd Zd Zd Zy)r  c                     || _         y r   r3  r4  s     r   r  zOrderable_LT.__init__  s	    
r   c                 4    | j                   |j                   k  S r   r3  r0   s     r   r  zOrderable_LT.__lt__  s    zzEKK''r   c                 4    | j                   |j                   k(  S r   r3  r0   s     r   r9  zOrderable_LT.__eq__  s    zzU[[((r   Nr;  r   r   r   r  r    s    ()r   r  c                       e Zd Zd Zy)	TestCachec           	         | j                   j                  fd       | j                  t        d      D cg c]
  } |       c}g d       | j                  j	                         | j                   j                  ddd d             j                          | j                  j	                         | j                   j                  ddd d             y c c}w )Nc                 @    | dk  r| S  | dz
         | dz
        z   S Nr:   r9   r   r  fibs    r   r  z!TestCache.test_cache.<locals>.fib  *    1uqs8c!A#h&&r   r   r   r9   r9   r:   r@   r`   r     r  "   7   Y         iy  ib     hitsmissesmaxsizecurrsizer   )r   cacherO   r   
cache_info
_CacheInfocache_clearr1   r  r  s     @r   
test_cachezTestCache.test_cache  s    				' 
	' 	%)4Q#a&4I	K)KK""2tb"Q	S)KK""!TA"N	P 5s   CN)r(   r)   r*   r  r   r   r   r  r    s    Pr   r  c                   ,   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z ej*                         d        Z ej*                         d        Z ej*                         d        Zd Zd Zd Zd Zd Zd Zd Zd Z y)TestLRUc                 	   d } | j                   j                  d      |      }|j                         \  }}}}| j                  |d       | j                  |d       | j                  |d       | j                  |d       t	        d      }t	        d      D ]<  }t        |      t        |      }
}	 ||	|
      } ||	|
      }| j                  ||       > |j                         \  }}}}| j                  ||kD         | j                  ||z   d       | j                  |d       |j                          |j                         \  }}}}| j                  |d       | j                  |d       | j                  |d        |	
       |j                         \  }}}}| j                  |d       | j                  |d       | j                  |d       | j                  |j                  |       |j                  |	|
       |j                         \  }}}}| j                  |d       | j                  |d       | j                  |d       | j                   j                  d      fd       }| j                  |j                         j                  d       dt	        d      D ]  }| j                   |       d        | j                  d       |j                         \  }}}}| j                  |d       | j                  |d       | j                  |d       | j                   j                  d      fd	       }| j                  |j                         j                  d       dt	        d      D ]  }| j                   |       d        | j                  d       |j                         \  }}}}| j                  |d
       | j                  |d       | j                  |d       | j                   j                  d      fd       }| j                  |j                         j                  d       ddD ]  }	| j                   ||	      |	dz          | j                  d
       |j                         \  }}}}| j                  |d       | j                  |d
       | j                  |d       y )Nc                     d| z  |z   S Nr@   r   r   s     r   origzTestLRU.test_lru.<locals>.orig      q519r   r<   r  r   r`     r9   c                       dz   yNr9   r<   r   f_cnts   r   r   zTestLRU.test_lru.<locals>.f@       QJEr   c                       dz   yr  r   r  s   r   r   zTestLRU.test_lru.<locals>.fP  r  r   rA   r:   c                     dz  | dz  S Nr9   r;   r   )rJ   r  s    r   r   zTestLRU.test_lru.<locals>.f`  s     QJER4Kr   )rb   r  rb   r  rb   r  r  r  r  r  r  r  r  r  r  rb   r;      )r   	lru_cacher  rO   r   r   rM   r  r   rW  r  )r1   r  r   r  r  r  r  domainr  rJ   r   actualrq   r  s                @r   test_lruzTestLRU.test_lru  sX   	-DKK!!"!-d3*+,,.'fgx"%1%q!#qt 	/A&>6&>qAq!WFAqzHVX.		/
 +,,,.'fgxv&-2&	*+,,.'fgxq!#1%	!Q*+,,.'fgxq!#1% 	ammT*	a*+,,.'fgxq!#1% 
		q	!	 
"	 	//3q 	&AQS"%	&"*+,,.'fgxq!#1% 
		q	!	 
"	 	//3q 	&AQS"%	&"*+,,.'fgxq!#1% 
		q	!	 
"	 	//3? 	)AQqT1R4(	) 	"*+,,.'fgxr"#1%r   c           	         | j                   j                  d        }| j                  t        t	        |g d            g d       | j                  |j                         j                  d       | j                  |j                         j                  d       | j                  |j                         j                  d       | j                  |j                         j                  d       y )Nc                     | dz  S Nr:   r   rI   s    r   squarez(TestLRU.test_lru_no_args.<locals>.squareq  s    6Mr   )r;   r<   r;   )d   i  r	  r9   r:      )
r   r  rO   r/   rQ   r  r  r  r  r  )r1   r  s     r   test_lru_no_argszTestLRU.test_lru_no_argsp  s    				 
	 	c&,78(	***,1115**,33Q7**,44c:**,55q9r   c                    d| j                   j                  d      fd       t        d      D ]  }| j                   |      d| d         | j                  j	                         j
                  d       | j                   d      d       | j                  j	                         j
                  d       y )	NTr;   r  c                 6    d|  d}| dk(  rr
d |       }|S )N.r<   Fr   )rJ   rvr   onces     r   r   z%TestLRU.test_lru_bug_35780.<locals>.f  s.     QCqBBw4qTIr      r  r<   z.20.)r   r  r   rO   r  r  )r1   rJ   r   r  s     @@r   test_lru_bug_35780zTestLRU.test_lru_bug_35780|  s     			r		*	 
+	 r 	-AQqTQqc8,	-00"5 	2'00"5r   c                     | j                   j                         d        } |d        |di i  | j                  |j                         j                  d       y )Nc                      y r   r   rI   s    r   r   z%TestLRU.test_lru_bug_36650.<locals>.f  re  r   r   r9   rn   )r   r  rO   r  r  r   s     r   test_lru_bug_36650zTestLRU.test_lru_bug_36650  sQ     
			 	 
!	 	
!	
r
,,a0r   c                    | j                   j                  d      d        }t        j                  j	                         }t        j                  j	                  d      |_        t        j                  j	                  d      |_        | j                   ||d      d       | j                  |j                  j                  d       | j                  |j                         d       | j                   ||d      d       | j                  |j                  j                  d	       | j                  |j                         d
       | j                   |dd	      d       | j                  |j                  j                  d	       | j                  |j                         d       | j                   ||d      d       | j                  |j                  j                  d       | j                  |j                         d       y )Nr9   r  c                     | dz  |z   S r  r   r   s     r   r   z*TestLRU.test_lru_hash_only_once.<locals>.f      q519r   r  )return_value  r   )r   r9   r9   r9   r:   )r9   r9   r9   r9   r  r<   )r9   r:   r9   r9   r@   )r9   r@   r9   r9   )
r   r  r  mockMock__mul____hash__rO   
call_countr  )r1   r   mock_ints      r   test_lru_hash_only_oncezTestLRU.test_lru_hash_only_once  s    
		q		)	 
*	 ==%%'#==--2->$MM..C.@ 	8Q,**55q96 	8Q,**55q96 	1a"%**55q96 	8Q,**55q96r   c                    t         j                  }	  | j                  j                  d      t              t         _        dD ]   }| j	                  t        dd |       |       " 	 |t         _        y # |t         _        w xY w)NrA   )r   r   r9   r:   r@   r@   rA   r`   r  r9   rb   r:   r9   abcdefghijklmn)builtinsr  r   r  rO   )r1   old_lenr  s      r   test_lru_reentrancy_with_lenz$TestLRU.test_lru_reentrancy_with_len  sl     ,,	#34;;003C8HL< ?  %5bq%9!:A>? #HL7HLs   AA2 2A?c                     | j                   j                         d        }| j                   |dd      d       | j                   |d      d       y )Nc                      | S r   r   r  s    r   r   z-TestLRU.test_lru_star_arg_handling.<locals>.f  s    Kr   r9   r:   rV   )rV   r   r  rO   r   s     r   test_lru_star_arg_handlingz"TestLRU.test_lru_star_arg_handling  sM    				 	 
!	 	1a&)6I.r   c                 T   | j                   j                  d       d        }| j                   j                  d      d        }| j                  t              5   |g        d d d        | j                  t              5   |g        d d d        y # 1 sw Y   0xY w# 1 sw Y   y xY w)Nr  c                      y r   r   os    r   infinite_cachez3TestLRU.test_lru_type_error.<locals>.infinite_cache  re  r   r;   c                      y r   r   r-  s    r   limited_cachez2TestLRU.test_lru_type_error.<locals>.limited_cache  re  r   )r   r  rY   rZ   )r1   r/  r1  s      r   test_lru_type_errorzTestLRU.test_lru_type_error  s    
 
		t		,	 
-	 
		r		*	 
+	 y) 	2	 y) 	"	 		 		 	s   	B 	BBB'c           	         | j                   j                  d       fd       | j                  t        d      D cg c]
  } |       c}g d       | j                  j	                         | j                   j                  ddd d             j                          | j                  j	                         | j                   j                  ddd d             y c c}w )Nr  c                 @    | dk  r| S  | dz
         | dz
        z   S r  r   r  s    r   r  z/TestLRU.test_lru_with_maxsize_none.<locals>.fib  r  r   r   r  r  r  r   r   r  rO   r   r  r  r  r  s     @r   test_lru_with_maxsize_nonez"TestLRU.test_lru_with_maxsize_none  s    			t		,	' 
-	' 	%)4Q#a&4I	K)KK""2tb"Q	S)KK""!TA"N	P 5s   C"c           	      \   | j                   j                  d      d        }dD ]C  }| j                  t        d      D cg c]
  } ||       c}t	        t        d                   E | j                  |j                         | j                   j                  dddd             y c c}w )	Nir  c                     | S r   r   r  s    r   eqz2TestLRU.test_lru_with_maxsize_negative.<locals>.eq      Hr   ro      r   i,  r  )r   r  rO   r   r/   r  r  )r1   r9  r  r  s       r   test_lru_with_maxsize_negativez&TestLRU.test_lru_with_maxsize_negative  s    			s		+	 
,	 	LAU3Z8be8$uSz:JK	LKK""#q1"M	O 9s    B)
c                    dD ]  }| j                   j                  |      d        }| j                   |d      d       | j                  t              5 } |d       d d d        | j                  j                  j                         | j                  t              5   |d       d d d         y # 1 sw Y   WxY w# 1 sw Y   xY w)NNr
  c                     d|    S )NrI  r   r  s    r   r    z.TestLRU.test_lru_with_exceptions.<locals>.func  s    Qxr   r   r>   r  )r   r  rO   rY   r   assertIsNone	exception__context__)r1   r  r    cms       r   test_lru_with_exceptionsz TestLRU.test_lru_with_exceptions  s     # 
	G[[""7+  , T!Wc*"":. "Rbll667"":. R 
	
  s   	B3	B?3B<	?C	c                    dD ]  }| j                   j                  |d      d        }| j                   |d      d       | j                  t         |d            t        d             | j                   |d      d       | j                  t         |d            t        d             | j                   |d	      d       | j                  t         |d	            t        d             | j                   |d	      d       | j                  t         |d	            t        d             | j                  |j	                         j
                  d
       | j                  |j	                         j                  d
        y )Nr>  Tr  typedc                     | | z  S r   r   rI   s    r   r  z+TestLRU.test_lru_with_types.<locals>.square  s    1ur   r@   r  g      @g      "@rI   rA   )r   r  rO   r   r  r  r  )r1   r  r  s      r   test_lru_with_typeszTestLRU.test_lru_with_types  s9   " 	<G[[""7$"? @VAY*T&)_d1g6VC[#.T&+.S	:Va[!,T&1+.Q8Vc]C0T&3-0$s)<V..055q9V..077;	<r   c                     | j                   j                  d      t              }| j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d	       | j                   |d
      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d       | j                   |d      d        G d dt              }| j                   | |d            d       | j                   | |d            d       | j                   | |d            d       | j                   | |d            d       | j                   | |d            d       | j                   | |d            d       y )NT)rH  r9   r  True      ?z1.0r   r  FFalse        z0.0r   z(1,))T)rM  rn   z(0,))F)rO  c                       e Zd Zy)8TestLRU.test_lru_cache_typed_is_not_recursive.<locals>.TNr'   r   r   r   ra  rQ  8  r  r   ra  )r   r  r   rO   r   )r1   cachedra  s      r   %test_lru_cache_typed_is_not_recursivez-TestLRU.test_lru_cache_typed_is_not_recursive'  s   2&&T&248C(v.e,C(0e,v.&10v.)620	 	 	$&1'
+V4&	*F3$&1(,f5&	*F3r   c           	         | j                   j                         fd       | j                  t        d      D cg c]  } |       c}g d       | j                  j	                         | j                   j                  dddd             j                          | j                  j	                         | j                   j                  dddd             y c c}w )	Nc                 D    | dk  r| S  | dz
         | dz
        z   S Nr:   r9   r  r   r  s    r   r  z/TestLRU.test_lru_with_keyword_args.<locals>.fibC  *    1u1:ac
**r   r   r  r  r  r
  r  r   r5  r1   numberr  s     @r   test_lru_with_keyword_argsz"TestLRU.test_lru_with_keyword_argsB  s    				 	+ 
!	+ 	).r3vS6]3I	
 	)KK""2sR"P	R)KK""!S1"M	O 4s   C!c           	         | j                   j                  d       fd       | j                  t        d      D cg c]  } |       c}g d       | j                  j	                         | j                   j                  ddd d             j                          | j                  j	                         | j                   j                  ddd d             y c c}w )	Nr  c                 D    | dk  r| S  | dz
         | dz
        z   S rV  r   r  s    r   r  z<TestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.fibS  rW  r   r   r  r  r  r  r   r5  rX  s     @r   'test_lru_with_keyword_args_maxsize_nonez/TestLRU.test_lru_with_keyword_args_maxsize_noneR  s    			t		,	+ 
-	+ 	eBi@F#-@I	K)KK""2tb"Q	S)KK""!TA"N	P As   C#c           	      2   | j                   j                  d      d        }| j                   |dd      ddg       | j                   |dd	      ddg       | j                  |j                         | j                   j	                  d
ddd             y )Nr;   r  c                  4    t        | j                               S r   )r/   items)r   s    r   r   z$TestLRU.test_kwargs_order.<locals>.fb  s    ''r   r9   r:   r=   )r>   r9   )r?   r:   )r?   r>   r   r  )r   r  rO   r  r  r   s     r   test_kwargs_orderzTestLRU.test_kwargs_order`  s    			r		*	( 
+	(Q!x&:;Q!x&:;KK""!R!"L	Nr   c                     dd} | j                   j                         |      }| j                   j                  D ](  }| j                  t	        ||      t	        ||             * y )Nc                      y)zf doc stringr  r   )zomgs    r   r   z,TestLRU.test_lru_cache_decoration.<locals>.fk  s    r   )rd  zomg_annotation)r   r  r  rO   r   )r1   r   gr   s       r   test_lru_cache_decorationz!TestLRU.test_lru_cache_decorationj  s[    	 $DKK!!#A&KK33 	ADWQ-wq$/?@	Ar   c                     d\  }d   j                   j                  |z              j                         \  }}}} j                  |d       t	        j
                          fd}fd}t        j                         }t        j                  d       	 t        |      D 	cg c]  }	t	        j                  ||	g       }
}	t        j                  |
      5  j                          d d d        j                         \  }}}} j                   t        u r+ j!                  ||        j!                  ||z  |z
         n* j                  ||        j                  ||z  |z
          j                  ||       t	        j                  |	      g}
|
t        |      D 	cg c]  }	t	        j                  ||	g       c}	z  }
j#                          t        j                  |
      5  j                          d d d        t        j                  |       y c c}	w # 1 sw Y   :xY wc c}	w # 1 sw Y   6xY w# t        j                  |       w xY w)
N)r`      c                     d| z  |z   S r  r   r   s     r   r  z-TestLRU.test_lru_cache_threaded.<locals>.origu  r  r   r  r   c                     j                  d       t              D ]"  }j                   | d       | d             $ y )Nr;   r   )waitr   rO   )r  r  r   mr  r1   starts     r   fullz-TestLRU.test_lru_cache_threaded.<locals>.full|  s=    JJrN1X 6  1a$q!*56r   c                  n    j                  d       t        dz        D ]  } j                           y )Nr;   r:   )rl  r   r  )r  r   rm  rn  s    r   clearz.TestLRU.test_lru_cache_threaded.<locals>.clear  s.    JJrN1Q3Z   r   gư>targetr   rs  )r   r  r  rO   	threadingEventr   getswitchintervalr   setswitchintervalr   Threadr	   start_threadssetr  r  rq  )r1   r  r  r  r  r  ro  rq  orig_sir  threadsr   rm  r  rn  s   `          @@@@r   test_lru_cache_threadedzTestLRU.test_lru_cache_threadedr  s   1	.DKK!!!A#!.t4*+,,.'fgx1%!	6 	6
	 
 '')!!$'	+ !&a* !''t1#> *G *!//8 		 /0lln+D&'8{{l*$$VQ/$$T1Q3<8  +  qsV|4Xq) !''u56G!&q+ "((A3? + +GKKM!//8 		 !!'*/* +  !!'*s[   (I 5H/I +H4<B;I 7I*I  II /I 4H>9I II I)c           
      V   	
 d\  }t        j                  |dz         	t        j                  |dz         t        j                  |dz         
 j                  j                  |z        fd        j	                  j                         dd|z  df        	
fd}t        |      D cg c]  }t        j                  |       }}t        j                  |      5  t              D ]  }	j                  d       
j                          j                  d       	j                          
j                  d       j                           j	                  j                         d|dz   |z  |z  |dz   f        	 d d d        y c c}w # 1 sw Y   y xY w)	N)r`   rb   r9   r  c                 0    j                  d       d| z  S Nr;   r@   )rl  )rJ   pauses    r   r   z+TestLRU.test_lru_cache_threaded2.<locals>.f  s    JJrNq5Lr   r   c                      t              D ]?  } j                  d       j                   |       d| z         j                  d       A y r  )r   rl  rO   )r  r   rm  r1   rn  stops    r   testz.TestLRU.test_lru_cache_threaded2.<locals>.test  sD    1X 

2  1q1u-		"r   rt  r;   )ru  Barrierr   r  rO   r  r   ry  r	   rz  rl  reset)r1   r  r  r  r}  r  r   rm  r  rn  r  s   `     @@@@@r   test_lru_cache_threaded2z TestLRU.test_lru_cache_threaded2  sx    1!!!A#&!!!A#&  1%			qs		+	 
,	 	!Q!Q8	 	
 ;@(CQ9##40CC++G4 	I1X I

2



2		"  !ac1Wac1Q31GHI	I 	I D	I 	Is   8F,B$FF(c           	      &     j                   j                  d      d         fd}t        g d      D cg c]  \  }}t        j                  |||f        }}}t        j                  |      5  	 d d d        y c c}}w # 1 sw Y   y xY w)Nr:   r  c                 6    t        j                  d       d| z  S )Ng{Gz?r@   )timesleeprI   s    r   r   z+TestLRU.test_lru_cache_threaded3.<locals>.f  s    JJsOq5Lr   c                     j                  |       5  j                   |      d|z  |        d d d        y # 1 sw Y   y xY w)N)threadr@   )r3  rO   )r  rJ   r   r1   s     r   r  z.TestLRU.test_lru_cache_threaded3.<locals>.test  s@    Q' 1  1q1ua01 1 1s	   :A)r9   r:   r:   r@   r:   rr  )r   r  	enumerateru  ry  r	   rz  )r1   r  r  vr}  r   s   `    @r   test_lru_cache_threaded3z TestLRU.test_lru_cache_threaded3  s    			q		)	 
*		1  )9;q! ##4q!f= ; ;++G4 		 	;	 	s   #B6BBc                     | j                   j                  d      d         G fdd        d               d             | j                    d             d             y )Nr;   r  c                     | S )zEUsed to demonstrate a reentrant lru_cache call within a single threadr   rI   s    r   	test_funcz.TestLRU.test_need_for_rlock.<locals>.test_func  s	     Hr   c                   *    e Zd ZdZd Zd Z fdZy)-TestLRU.test_need_for_rlock.<locals>.DoubleEqz=Demonstrate a reentrant lru_cache call within a single threadc                     || _         y r   rI   r1   rJ   s     r   r  z6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__init__  r  r   c                     | j                   S r   rI   r\   s    r   r  z6TestLRU.test_need_for_rlock.<locals>.DoubleEq.__hash__  s    vvr   c                 p    | j                   dk(  r  d             | j                   |j                   k(  S r  rI   )r1   r2   DoubleEqr  s     r   r9  z4TestLRU.test_need_for_rlock.<locals>.DoubleEq.__eq__  s-    66Q;hqk*vv((r   N)r(   r)   r*   rw  r  r  r9  )r  r  s   r   r  r    s    K)r   r  r9   r:   r)  )r1   r  r  s    @@r   test_need_for_rlockzTestLRU.test_need_for_rlock  sm     
		r		*	 
+			) 		) 	(1+(1+8A;/!!	&r   c                 z     G  fddt               } |d      } |d      } |d      } j                  |j                  j                         d       dD ])  } j                  |j                  |      |dz  dz          +  j                  |j                  |j                  |j                  fd        j                  |j                  j                         d	       d
D ])  } j                  |j                  |      |dz  dz          +  j                  |j                  |j                  |j                  fd        j                  |j                  j                         d       dD ])  } j                  |j                  |      |dz  dz          +  j                  |j                  |j                  |j                  fd        j                  |j                  j                         d        j                  |j                  j                         |j                  j                                 j                  |j                  j                         |j                  j                                 j                  |j                  j                         |j                  j                                y )Nc                   V    e Zd ZdZW  j                  j                  d      d        Zy)"TestLRU.test_lru_method.<locals>.Xr   r:   c                 <    | xj                   dz  c_         |dz  | z   S r  r  r  s     r   r   z$TestLRU.test_lru_method.<locals>.X.f  s    

a
tDy r   N)r(   r)   r*   r  r   r  r   r\   s   r   Xr    s)    E[[""1%! &!r   r  r`   rb   )r   r   r:   r   )
r9   r:   r:   r@   r9   r9   r9   r:   r@   r@   r;   )r  r   r   )rA   r  r:   r:   )
r9   r:   r9   r9   r9   r9   r@   r:   r:   r:   )r  rA   r   )r;   r;   r:   r:   )
r:   r9   r9   r9   r9   r:   r9   r@   r:   r9   )r  rA   r`   )r  r  r:   r:   )r   rO   r   r  r  )r1   r  r>   r?   rE   rJ   s   `     r   test_lru_methodzTestLRU.test_lru_method  s    	! 	! aDaDaD)<8- 	/AQSSVQrTAX.	/!''177AGG4i@)<8- 	/AQSSVQrTAX.	/!''177AGG4i@)>:- 	/AQSSVQrTAX.	/!''177AGG4i@)>:)133>>+;<)133>>+;<)133>>+;<r   c           	      z   | j                   }|j                  d   |j                  |j                  fD ]z  }t	        t
        j                  dz         D ]Y  }| j                  ||      5  t        j                  t        j                  ||            }| j                  ||       d d d        [ | y # 1 sw Y   hxY w)Nr   r9   )r   r    )r  cached_funccached_methcached_staticmethr   r   r   r3  r   r   r   )r1   r   r   r   r   s        r   r   zTestLRU.test_pickle  s    nn#S__c6K6KK 	-Av66:; -\\A\6 -#\\&,,q%*@AFMM&!,- --	-- -s   (<B11B:c                    | j                   }d }| j                  j                  |d      }|j                  d   |j                  |j
                   | j                  j                  d      |      f}|D ]D  }| j                  |      5  t        j                  |      }| j                  ||       d d d        F y # 1 sw Y   QxY w)Nc                     d| z  |z   S r  r   r   s     r   r  zTestLRU.test_copy.<locals>.orig  r  r   r:   r   r    )
r  r   rL   r  r  r  r  r3  r   r   r1   r   r  r#   funcsr   r   s          r   r   zTestLRU.test_copy  s    nn	{{""4+#S__c6K6K)&&q)$/1 	)A1% )1fa() )	)) )   	(B<<C	c                    | j                   }d }| j                  j                  |d      }|j                  d   |j                  |j
                   | j                  j                  d      |      f}|D ]D  }| j                  |      5  t        j                  |      }| j                  ||       d d d        F y # 1 sw Y   QxY w)Nc                     d| z  |z   S r  r   r   s     r   r  z#TestLRU.test_deepcopy.<locals>.orig  r  r   r:   r   r  )r  r   rL   r  r  r  r  r3  r   r   r   r  s          r   r   zTestLRU.test_deepcopy  s    nn	{{""4+#S__c6K6K)&&q)$/1 	)A1% )q)fa() )	)) )r  c                    | j                   j                  d      d        }| j                  |j                         ddd       | j                   j                  dd      d        }| j                  |j                         ddd       y )	Nr:   r  c                       yNr9   r   r   r   r   r   z,TestLRU.test_lru_cache_parameters.<locals>.f%      r   FrG  r  Tc                       yr  r   r   r   r   r   z,TestLRU.test_lru_cache_parameters.<locals>.f*  r  r   )r   r  rO   cache_parametersr   s     r   test_lru_cache_parametersz!TestLRU.test_lru_cache_parameters$  s    			q		)	 
*	++-1u/MN			t4		8	 
9	++-4$/OPr   c                      j                   j                  d        } G  fdd      }t        j                  |      t        j                  |j                        t        j                  |j
                        g}|D ]  } j                   |               ~~t        j                          |D ]  } j                   |               y )Nc                     | S r   r   rI   s    r   test_functionz9TestLRU.test_lru_cache_weakrefable.<locals>.test_function0  r:  r   c                       e Zd ZW  j                  j                  d        ZeW  j                  j                   fd              Zy)-TestLRU.test_lru_cache_weakrefable.<locals>.Ac                 
    | |fS r   r   r  s     r   test_methodz9TestLRU.test_lru_cache_weakrefable.<locals>.A.test_method5  s    ay r   c                     | fS r   r   )rJ   r1   s    r   test_staticmethodz?TestLRU.test_lru_cache_weakrefable.<locals>.A.test_staticmethod9  s     ay r   N)r(   r)   r*   r   r  r  r  r  r\   s   r   r!  r  4  sE    [[""! #! [[""! # !r   r!  )
r   r  weakrefrefr  r  assertIsNotNonegccollectrA  )r1   r  r!  refsr  s   `    r   test_lru_cache_weakrefablez"TestLRU.test_lru_cache_weakrefable/  s    				 
		! 	! M*AMM*A//02  	(C  '	( 


 	%Cce$	%r   c                 ,   d } | j                   j                  d      |      }| j                  t        t	        j
                  |j                              d       | j                  t        t	        j
                  |j                              d       y )Nc                       y r   r   r   r   r   r  z,TestLRU.test_common_signatures.<locals>.origM  s    Cr   r9   z())r   r  rO   r   r   r"  r  r  )r1   r  lrus      r   test_common_signatureszTestLRU.test_common_signaturesL  sh    &dkk##A&t,Y44S^^DEtLY44S__EFMr   N)!r(   r)   r*   r  r  r  r  r!  r&  r*  r2  r6  r<  rE  rJ  rS  rZ  r]  ra  rg  r	   requires_working_threadingr~  r  r  r  r  r   r   r   r  r  r  r   r   r   r  r    s    W&r
:661!7F
#/&PO < 46O PNA 1002.+ 3.+` 1002I 3I6 1002 3&0=>-
)
)	Q%:Nr   r  c                     d| z  |z   S r  r   r   s     r   py_cached_funcr  T  s    q519r   c                     d| z  |z   S r  r   r   s     r   c_cached_funcr  Y      1uqyr   c                   x    e Zd ZeZefZej                         d        Ze	ej                         d               Z
y)	TestLRUPyc                     d|z  |z   S r  r   rG  s      r   r  zTestLRUPy.cached_methb  r  r   c                     d| z  |z   S r  r   r   s     r   r  zTestLRUPy.cached_staticmethf  s     1uqyr   N)r(   r)   r*   r  r   r  r  r  r  r  r  r   r   r   r  r  ^  sN    F /K    r   r  c                   ~    e Zd Zer7eZefZej                         d        Ze	ej                         d               Z
yy)TestLRUCc                     d|z  |z   S r  r   rG  s      r   r  zTestLRUC.cached_methr  r  r   c                     d| z  |z   S r  r   r   s     r   r  zTestLRUC.cached_staticmethv  s     q519r   N)r(   r)   r*   r  r   r  r  r  r  r  r  r   r   r   r  r  l  sV    #n					 
	 
					 
 
	 r   r  c                   
   e Zd Zd Zd Zd Zd Z ej                  e	d      e
j                  d               Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%y )!TestSingleDispatchc                     t         j                  d        }d }|j                  t        |       | j	                   |d      d       | j	                   |d      d       | j	                   |g d      d       y )Nc                      yNr   r   r2  s    r   rf  z3TestSingleDispatch.test_simple_overloads.<locals>.g~      r   c                      y)Nintegerr   r@  s    r   g_intz7TestSingleDispatch.test_simple_overloads.<locals>.g_int  s    r   r   r   r9   r  r9   r:   r@   )r
   singledispatchregisterr   rO   r1   rf  r  s      r   test_simple_overloadsz(TestSingleDispatch.test_simple_overloads}  si    		!	!	 
"			

356*1y)7V,r   c                    t         j                  d        } G d d      } G d d|      } G d d|      } G d d	||      }d
 }d }|j                  ||       |j                  ||       | j                   | |             d       | j                   | |             d       | j                   | |             d       | j                   | |             d       y )Nc                      yr  r   r2  s    r   rf  z&TestSingleDispatch.test_mro.<locals>.g  r  r   c                       e Zd Zy)&TestSingleDispatch.test_mro.<locals>.ANr'   r   r   r   r!  r    r  r   r!  c                       e Zd Zy)&TestSingleDispatch.test_mro.<locals>.CNr'   r   r   r   Cr    r  r   r  c                       e Zd Zy)&TestSingleDispatch.test_mro.<locals>.BNr'   r   r   r   r<  r    r  r   r<  c                       e Zd Zy)&TestSingleDispatch.test_mro.<locals>.DNr'   r   r   r   Dr    r  r   r  c                      y)Nr!  r   ra   s    r   g_Az(TestSingleDispatch.test_mro.<locals>.g_A      r   c                      y)Nr<  r   rc   s    r   g_Bz(TestSingleDispatch.test_mro.<locals>.g_B  r  r   )r
   r  r  rO   )r1   rf  r!  r  r<  r  r  r  s           r   test_mrozTestSingleDispatch.test_mro  s    		!	!	 
"		 		 		 		1 				

1c	

1c13%13%13%13%r   c                    t         j                  d        }|j                  t              d        }| j	                   |d      d       | j	                   |d      d       | j                  |j                  t              |       | j                  |j                  t              |j                  t                     y )Nc                      yr  r   r2  s    r   rf  z5TestSingleDispatch.test_register_decorator.<locals>.g  r  r   c                     d| S )Nzint r   r@  s    r   r  z9TestSingleDispatch.test_register_decorator.<locals>.g_int  s
     ?"r   r   r   r   zint 12)	r
   r  r  r   rO   r   dispatchr   r   r  s      r   test_register_decoratorz*TestSingleDispatch.test_register_decorator  s    		!	!	 
"		
C	# 
	#2'2)ajjou-ajj(!**S/:r   c                     t         j                  d        }| j                  |j                  d       t        j
                  j                  dk  r| j                  |j                  d       y y )Nc                      y)Simple testTestr   r2  s    r   rf  z6TestSingleDispatch.test_wrapping_attributes.<locals>.g  s     r   rf  r:   r  )r
   r  rO   r(   r   r  r  rw  )r1   rf  s     r   test_wrapping_attributesz+TestSingleDispatch.test_wrapping_attributes  s[    		!	!	 
"	 	S)99!QYY6 "r   zrequires _decimalc                    t         j                  d        }|j                  t        j                        d        }t        j                  d      }t        j                  d      }| j                   ||      d       | j                   ||      d       |j                  t        j
                        d        }| j                   ||      d       | j                   ||      d       y )	Nc                      yr  r   r2  s    r   rf  z,TestSingleDispatch.test_c_classes.<locals>.g  r  r   c                     | j                   S r   r  r2  s    r   r  z,TestSingleDispatch.test_c_classes.<locals>._  s    88Or   Exponent < EminNumber got rounded)r  )r  c                      y)NToo small to care.r   r2  s    r   r  z,TestSingleDispatch.test_c_classes.<locals>._  s    'r   r  )r
   r  r  r   DecimalException	SubnormalRoundedrO   )r1   rf  r  subnrnds        r   test_c_classesz!TestSingleDispatch.test_c_classes  s     
	!	!	 
"		
G,,	-	 
.	  !23oo234"673!89	
G%%	&	( 
'	(4"673!89r   c                    t         j                  }t        j                  }|j                  |j
                  |j                  |j                  g}t        |      D ]m  } |t        |      }| j                  |t        |j
                  |j                  |j                  |j                  |j                  |j                  t        g       o |j                  |j                  |j
                  t         j                   g}t        |      D ]  } |t         j"                  |      }| j                  |t         j"                  |j
                  |j                  |j                  |j                  |j                  |j                  t        g        |j                  |j                  t$        g}t        |      D ]u  } |t         j&                  |j                  |j                  t$        g      }| j                  |t         j&                  t        |j                  |j                  t        g       w  G d dt         j&                        }|j(                  j+                  |       |j(                  |j
                  g}t        |      D ]  } |||      }| j                  |||j(                  |j                  |j,                  t         j&                  t        |j
                  |j                  |j                  |j                  |j                  |j                  t        g         G d dt         j&                        }|j                  |j.                  |j                  |j                  g}t        |      D ]y  } |||      }| j                  |||j.                  t         j&                  t        |j                  |j                  |j                  |j                  |j                  t        g
       { y )Nc                       e Zd Zy).TestSingleDispatch.test_compose_mro.<locals>.DNr'   r   r   r   r  r    r  r   r  c                       e Zd Zd Zy).TestSingleDispatch.test_compose_mro.<locals>.Cc                      y r   r   r\   s    r   __call__z7TestSingleDispatch.test_compose_mro.<locals>.C.__call__      r   Nr(   r)   r*   r  r   r   r   r  r        r   r  )r  rI  r
   _compose_mroSequenceMutableMappingMappingSetr   rP   rO   
CollectionSizedIterable	Containerr   OrderedDictChainMapr   defaultdictMutableSequencer  
ReversibleCallable)r1   rE   mror  haystackrm  r  r  s           r   test_compose_mroz#TestSingleDispatch.test_compose_mro  s   OO$$Q--qyy!%%@$U+ 	7HD(#AQq'7'7!"qww

!"f!6 7	7
 aii)9)9;;R;RS$U+ 	7HK(((3AQ!5!5q7G7G!"qww

!"f!6 7	7 aggs+$U+ 	7HK++aggq{{C-HIAQ!8!8$!"f!6 7	7	'' 		""1%""A$4$45$U+ 	*HAx AQA$5$5qzz1<<!,!8!8$@P@PRSR[R[!"qww

AKK!'!) *	*	'' 	 !**akk199=$U+ 	7HAx AQAJJ0G0Gqyy!"qww

!"f!6 7	7r   c                 p   t         j                  }ddi}g d}t               d h}t        |      }d}t        j
                  d        }| j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  |j                  d        | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  |j                  d        | j                   ||      d	       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  t         j                  d
        | j                   ||      d	       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  |j                  d        | j                   ||      d	       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  |j                  d        | j                   ||      d	       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  |j                  d        | j                   ||      d	       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  |j                  d        | j                   ||      d	       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  |j                  d        | j                   ||      d	       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  t         d        | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  t"        d        | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  t$        d        | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  t        d        | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       |j                  t&        d        | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       | j                   ||      d       y )Nr>   r?   r  c                      yr  r   r2  s    r   rf  z/TestSingleDispatch.test_register_abc.<locals>.g  r  r   r   c                      yNsizedr   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>      r   r/  c                      yNmutablemappingr   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>  r0  r   r3  c                      y)Nchainmapr   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>  r0  r   c                      y)Nmutablesequencer   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>   r0  r   r7  c                      y)N
mutablesetr   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>&  r0  r   r9  c                      yNmappingr   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>,  r0  r   c                      yNsequencer   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>2  r0  r   r?  c                      yNr{  r   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>8  r0  r   r{  c                      yNrP   r   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>>  r0  r   rP   c                      yNr/   r   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>D  r0  r   r/   c                      y)Nconcrete-setr   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>J  r0  r   rG  c                      y)N
frozen-setr   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>P  r0  r   rI  c                      y)Nr   r   r2  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>V  r0  r   r   )r  rI  r   	frozensetr
   r  rO   r  r  r  r#  r%  
MutableSetr  r  r  rP   r/   r{  r   )r1   rE   rd   lr   r   trf  s           r   test_register_abcz$TestSingleDispatch.test_register_abc  s   OO#JXtaL		!	!	 
"	1v&1v&1v&1v&1v&	

177/01w'1w'1w'1w'1w'	

1##%AB1/01w'1w'1w'1w'	

;'')?@1/01w'1w'1w'1w'	

1$$&CD1/01011w'1w'1w'	

1<<!9:1/01011|,1w'1w'	

199341/01011|,1w'1w'	

1::561/01011|,1w'1z*	

155+,1/01011|,1u%1z*	

4+,1v&1011|,1u%1z*	

4+,1v&1v&1|,1u%1z*	

3231v&1v&1~.1u%1z*	

9671v&1v&1~.1|,1z*	

5-.1v&1v&1~.1|,1w'r   c           	         t         j                  }t        j                  } G d dt              } G d d|      }|j
                  j                   G d dt                     } G d dt              } G d	 d
|||      }||j                  |||j
                  ||j                  |t        g	}t        |j                  |j                  |j
                  g      D ]  }	| j                   |||	      |        |j                  |j                  |j                  |j
                  |j                  g}
| j                   |||
      |       y )Nc                       e Zd Zy))TestSingleDispatch.test_c3_abc.<locals>.ANr'   r   r   r   r!  rR  `  r  r   r!  c                       e Zd Zd Zy))TestSingleDispatch.test_c3_abc.<locals>.Bc                      yr  r   r\   s    r   r   z1TestSingleDispatch.test_c3_abc.<locals>.B.__len__c  r   r   Nr(   r)   r*   r   r   r   r   r<  rT  b      r   r<  c                       e Zd Zy))TestSingleDispatch.test_c3_abc.<locals>.CNr'   r   r   r   r  rY  e  r_  r   r  c                       e Zd Zy))TestSingleDispatch.test_c3_abc.<locals>.DNr'   r   r   r   r  r[  h  r  r   r  c                       e Zd Zd Zy))TestSingleDispatch.test_c3_abc.<locals>.Xc                      y r   r   r\   s    r   r  z2TestSingleDispatch.test_c3_abc.<locals>.X.__call__k  r  r   Nr  r   r   r   r  r]  j  r  r   r  )abcs)r  rI  r
   _c3_mror   r!  r  r'  r  r   rO   r  r   )r1   rE   r(  r!  r<  r  r  r  rq   r_  	many_abcss              r   test_c3_abczTestSingleDispatch.test_c3_abc]  s   OO	 		 	 
			 	 
		 		1a 	 qzz1aa!VL !''1::q{{!CD 	:DS.9	: YYQ[[!**M	QY/:r   c                      G d dt               } G d d|      } G d d|      }t        j                  d        }|j                  |      d	        } |       }| j	                   ||      d
       y )Nc                       e Zd Zd Zy)1TestSingleDispatch.test_false_meta.<locals>.MetaAc                      yr  r   r\   s    r   r   z9TestSingleDispatch.test_false_meta.<locals>.MetaA.__len__w  r   r   NrV  r   r   r   MetaAre  v  rW  r   rg  c                       e Zd Zy)-TestSingleDispatch.test_false_meta.<locals>.ANr'   r   r   r   r!  ri  y  r  r   r!  r  c                       e Zd Zy).TestSingleDispatch.test_false_meta.<locals>.AANr'   r   r   r   AArk  {  r  r   rl  c                      y)Nzbase Ar   ra   s    r   funz/TestSingleDispatch.test_false_meta.<locals>.fun}  s    r   c                      y)Nfun Ar   ra   s    r   r  z-TestSingleDispatch.test_false_meta.<locals>._      r   rp  )r   r
   r  r  rO   )r1   rg  r!  rl  rn  r  aas          r   test_false_metaz"TestSingleDispatch.test_false_metat  ss    	D 		% 		 			!	!	 
"		a	 
	TR'*r   c                 8   t         j                  }t        j                  d        } G d d|j                        } |       }| j                   ||      d       |j                  |j                  d        |j                  |j                  d        |j                  |j                  d        |j                  |j                  d        | j                   ||      d	       |j                  j                  |       | j                   ||      d	       |j                  j                  |       | j                   ||      d	       |j                  j                  |       | j                   ||      d
        G d d      } |       }| j                   ||      d       |j                  j                  |       | j                   ||      d       |j                  j                  |       | j                  t              5 } ||       d d d        | j                  t        j                        d        G d d|j                        } |       }	| j                   ||	      d	       |j                  j                  |       | j                   ||	      d	       |j                  j                  |       | j                   ||	      d
       t        j                  d        }
|
j                  |j                        d        }|
j                  |j                        d        }| j                  t              5 } |
t        j                  d              d d d        | j                  t        j                        d        G d dt         j                        }|j                   j                  |       t        j                  d        }|j                  |j"                        d        }|j                  |j                         d        } |       }| j                   ||      d        G d d      } G d d||j                        } |       }| j                   |
|      d	       |j                  j                  |       | j                   |
|      d	        G d  d!      } |       }| j                   |
|      d	       |j                  j                  |       | j                  t              5 } |
|       d d d        | j                  t        j                        d        G d" d#|j                  |      }t        j                  d$        }|j                  |      d%        }|j                  |j                        d&        } |       }| j                   ||      d'       |j                  j                  |       | j                   ||      d(       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w))Nc                      yr  r   args    r   rf  z0TestSingleDispatch.test_mro_conflicts.<locals>.g  r  r   c                       e Zd Zd Zy)0TestSingleDispatch.test_mro_conflicts.<locals>.Oc                      yr  r   r\   s    r   r   z8TestSingleDispatch.test_mro_conflicts.<locals>.O.__len__  r   r   NrV  r   r   r   Ory    rW  r   r{  r   c                      y)Niterabler   rv  s    r   rK   z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>  r0  r   c                      yN	containerr   rv  s    r   rK   z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>  r0  r   c                      yr.  r   rv  s    r   rK   z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>  r0  r   c                      yrA  r   rv  s    r   rK   z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>  r0  r   r/  r{  c                       e Zd Zy)0TestSingleDispatch.test_mro_conflicts.<locals>.PNr'   r   r   r   Pr    r  r   r  r}  )z]Ambiguous dispatch: <class 'collections.abc.Container'> or <class 'collections.abc.Iterable'>z]Ambiguous dispatch: <class 'collections.abc.Iterable'> or <class 'collections.abc.Container'>c                       e Zd Zd Zy)0TestSingleDispatch.test_mro_conflicts.<locals>.Qc                      yr  r   r\   s    r   r   z8TestSingleDispatch.test_mro_conflicts.<locals>.Q.__len__  r   r   NrV  r   r   r   Qr    rW  r   r  c                      yr  r   rv  s    r   hz0TestSingleDispatch.test_mro_conflicts.<locals>.h  r  r   c                      yr.  r   rv  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>._  rq  r   c                      yr  r   rv  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>._      r   c                       yr  r   r   r   r   rK   z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>  r0  r   )zZAmbiguous dispatch: <class 'collections.abc.Container'> or <class 'collections.abc.Sized'>zZAmbiguous dispatch: <class 'collections.abc.Sized'> or <class 'collections.abc.Container'>c                       e Zd Zy)0TestSingleDispatch.test_mro_conflicts.<locals>.RNr'   r   r   r   Rr    r  r   r  c                      yr  r   rv  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>.i  r  r   c                      yr;  r   rv  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>._      r   c                      yr>  r   rv  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>._      r   r?  c                       e Zd Zy)0TestSingleDispatch.test_mro_conflicts.<locals>.SNr'   r   r   r   Sr    r  r   r  c                       e Zd Zd Zy)0TestSingleDispatch.test_mro_conflicts.<locals>.Tc                      yr  r   r\   s    r   r   z8TestSingleDispatch.test_mro_conflicts.<locals>.T.__len__  r   r   NrV  r   r   r   ra  r    rW  r   ra  c                       e Zd Zd Zy)0TestSingleDispatch.test_mro_conflicts.<locals>.Uc                      yr  r   r\   s    r   r   z8TestSingleDispatch.test_mro_conflicts.<locals>.U.__len__  r   r   NrV  r   r   r   Ur    rW  r   r  c                       e Zd Zd Zy)0TestSingleDispatch.test_mro_conflicts.<locals>.Vc                      yr  r   r\   s    r   r   z8TestSingleDispatch.test_mro_conflicts.<locals>.V.__len__  r   r   NrV  r   r   r   Vr    rW  r   r  c                      yr  r   rv  s    r   jz0TestSingleDispatch.test_mro_conflicts.<locals>.j  r  r   c                      y)Nr   r   rv  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>._  s    r   c                      yr  r   rv  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>._  r  r   r   r  )r  rI  r
   r  r  rO   r  r   r!  r  rY   r  r   r   rB  r$  r%  r  )r1   rE   rf  r{  r.  r  rS   re_oner  qr  r  re_twor  r  r   r  ra  rN  r  ure_threer  r  r  s                            r   test_mro_conflictsz%TestSingleDispatch.test_mro_conflicts  s   OO		!	!	 
"		 	 C1v&	

1::56	

1;; 78	

177/0	

155+,1w'	

A1w'	Q1w'	q1u%	 	C1v&	

A1z*	Q|, 	aD	  !9	
	 	 C1w'	

A1w'	q1u%		!	!	 
"		
AGG		 
		
AKK	 	 
!	 |, 	2k%%i01	2  !9	
	'' 		""1%		!	!	 
"		
A$$	%	 
&		
A%%	&	 
'	C1z*	 		177 	 C1w'	Q1w'	 	 C1w'	Q|, 	aD	""#9	
	 	 
	!	!	 
"		
A	 
		
AKK	 	 
!	C1s#	Q1{+A	 	@	2 	2P	 	s$   	W6	X		X6X XXc                 :  	 ddl m} dd l} G fdd|              	t        j                  |d	fd      5  t         j
                  }t        j                  d        }i }g }| j                  t        	      d       | j                   ||      d       | j                  t        	      d	       | j                  	j                  g        | j                  	j                  t        g       | j                  	j                  t           |j                  t                  | j                   ||      d       | j                  t        	      d
       | j                  	j                  g        | j                  	j                  t        t         g       | j                  	j                  t           |j                  t                  | j                  	j                  t            |j                  t                  | j                  	j                  t           	j                  t                   | j                   ||      d       | j                   ||      d       | j                  	j                  t         t        g       | j                  	j                  t        t         g       |j#                  t         d        | j                  	j                  t         t        g       | j                  t        	      d       | j                   ||      d       | j                  t        	      d	       | j                  	j                  t         t        g       | j                  	j                  t        t         t        g       | j                  	j                  t           t        j$                  t        |j                               | j                   ||      d       | j                  t        	      d
       | j                  	j                  t         t        g       | j                  	j                  t        t         t        t         g       | j                  	j                  t            t        j$                  t         |j                                G d d      }|j&                  j#                  |       | j                   ||      d       | j                   ||      d       | j                  	j                  t         t        t        t         g       | j                  	j                  t        t         t        t         g       |j#                  |j(                  d        | j                  t        	      d       | j                   ||      d       | j                  t        	      d	       | j                  	j                  t         t        t        t         g       | j                  	j                  t        t         t        t         t        g       | j                   ||      d       | j                  t        	      d
       | j                  	j                  t         t        t        t         g       | j                  	j                  t        t         t        t         t        t         g       | j                   ||      d       | j                   ||      d       | j                  	j                  t         t        t        t         t         t        g       | j                  	j                  t        t         t        t         t        t         g       |j+                  t                |j+                  t               | j                  	j                  t         t        t        t         t         t        t         t        g       | j                  	j                  t        t         t        t         t        t         g       |j,                  j#                  |       | j                  t        	      d
       | j                   ||      d       | j                  t        	      d	       |j#                  |j&                  d        | j                  t        	      d       | j                   ||      d       | j                  t        	      d	       | j                   ||      d       | j                  t        	      d
       |j#                  t        d        | j                   ||      d       | j                   ||      d       |j/                          | j                  t        	      d       d d d        y # 1 sw Y   y xY w)Nr   )UserDictc                   4     e Zd Z fdZd Zd Zd Z xZS )?TestSingleDispatch.test_cache_invalidation.<locals>.TracingDictc                 @    t        |   |i | g | _        g | _        y r   )r  r  set_opsget_ops)r1   r   r   TracingDictr  s      r   r  zHTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__init__	  s%    k414B6B!!r   c                 Z    | j                   |   }| j                  j                  |       |S r   )r   r  r  )r1   r   results      r   r   zKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__getitem__	  s&    3##C(r   c                 X    | j                   j                  |       || j                  |<   y r   )r  r  r   )r1   r   r   s      r   __setitem__zKTestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.__setitem__	  s!    ##C(!&		#r   c                 8    | j                   j                          y r   )r   rq  r\   s    r   rq  zETestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.clear	  s    		!r   )r(   r)   r*   r  r   r  rq  r  )r  r  s   @r   r  r  
	  s    "'"r   r  WeakKeyDictionaryc                       S r   r   )tds   r   rK   z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>	  s    R r   c                      yr  r   rv  s    r   rf  z5TestSingleDispatch.test_cache_invalidation.<locals>.g	      r   r   r9   r:   c                      yrE  r   rv  s    r   rK   z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>2	  r0  r   r/   c                       e Zd Zy)5TestSingleDispatch.test_cache_invalidation.<locals>.XNr'   r   r   r   r  r  A	  s    r   r  c                      yr.  r   rv  s    r   rK   z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>I	  r0  r   r/  c                      yr2  r   rv  s    r   rK   z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>`	  r0  r   r3  c                      yrC  r   rv  s    r   rK   z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>f	  r0  r   rP   )r  r  r  r   	swap_attrrI  r
   r  rO   r  r  r  rP   r   registryr   r/   r  
_find_implr  r  r  rL  _clear_cache)
r1   r  r  rE   rf  rd   rM  r  r  r  s
           @@r   test_cache_invalidationz*TestSingleDispatch.test_cache_invalidation	  s   (	"( 	" ]w(;ZH P	)A%% &AASWa(QqT6*SWa(RZZ,RZZ$0RWWT]AJJv,>?QqT6*SWa(RZZ,RZZ$6RWWT]AJJv,>?RWWT]AJJv,>?RWWT]BGGDM:QqT6*QqT6*RZZ$6RZZ$6JJt/0RZZ$6SWa(QqT6*SWa(RZZ$6RZZ$d);<RWWT]&11$

CEQqT6*SWa(RZZ$6RZZ$dD)ABRWWT]&11$

CE %%a(QqT6*QqT6*RZZ$dD)ABRZZ$dD)ABJJqww 34SWa(QqT7+SWa(RZZ$dD)ABRZZ$dD$)GHQqT6*SWa(RZZ$dD)ABRZZ$dD$)MNQqT6*QqT7+RZZ$dD$)MNRZZ$dD$)MNJJtJJtRZZ$dD$*.*6 7RZZ$dD$)MNLL!!!$SWa(QqT6*SWa(JJq'')EFSWa(QqT#34SWa(QqT6*SWa(JJt/0QqT6*QqT6*NNSWa(aP	) P	) P	)s   effc                    t         j                  d        }|j                  dt        j                  j
                  fd       }|j                  dd       }| j                   |d       d       | j                   |ddi      d       | j                   |g d	      d
       | j                   |d	      d
       | j                   |d      d
       |j                  t               G d d             }| j                   |d      d       y )Nc                      yr  r   rv  s    r   r  z.TestSingleDispatch.test_annotations.<locals>.im	  r  r   rw  c                      yr;  r   rv  s    r   r  z.TestSingleDispatch.test_annotations.<locals>._p	  r  r   c                      yr>  r   rv  s    r   r  z.TestSingleDispatch.test_annotations.<locals>._s	  r  r   r   r>   r9   r<  r  r?  r   c                       e Zd Zd Zd Zy).TestSingleDispatch.test_annotations.<locals>._c                     || _         y r   rv  r1   rw  s     r   r  z7TestSingleDispatch.test_annotations.<locals>._.__init__	  	    r   c                      | j                   |k(  S r   rv  r0   s     r   r9  z5TestSingleDispatch.test_annotations.<locals>._.__eq__	  s    xx5((r   N)r(   r)   r*   r  r9  r   r   r   r  r  ~	  s    )r   r  )rw  zcollections.abc.Sequence)r
   r  r  r  rI  r  rO   r   )r1   r  r  s      r   test_annotationsz#TestSingleDispatch.test_annotationsl	  s    		!	!	 
"		
	;??** 	 
		
	 
	4&)C8i09z29z25:. 
C	) 	) 
	) 	55)r   c                      G d d      } |       }|j                  d       | j                  |j                  d        |       }| j                  t	        |d             |j                  d       | j                  |j                  d        |       }| j                  t	        |d             |j                  d       | j                  |j                  d	        |       }| j                  t	        |d             y )
Nc                       e Zd Zej                  d        Zej                  e      d        Zej                  e	      d        Zy)2TestSingleDispatch.test_method_register.<locals>.Ac                     d| _         y r  rv  r  s     r   rN  z4TestSingleDispatch.test_method_register.<locals>.A.t	  s	    !r   c                     d| _         y Nr   rv  r  s     r   r  z4TestSingleDispatch.test_method_register.<locals>.A._	  	     r   c                     d| _         y Nr   rv  r  s     r   r  z4TestSingleDispatch.test_method_register.<locals>.A._	  r  r   N
r(   r)   r*   r
   singledispatchmethodrN  r  r   r  r   r   r   r   r!  r  	  sN    ++" ,"ZZ_! !ZZ_! !r   r!  r   r   rw  r   r   rO  r   )rN  rO   rw  r.  r/  )r1   r!  r>   rr  s       r   test_method_registerz'TestSingleDispatch.test_method_register	  s    		! 		! C	A&SU+,	B&SU+,	C'SU+,r   c                      G d d      } |       }| j                  |j                  d             | j                  |j                  d             | j                  |j                  d      d       y )Nc                       e Zd Zej                  ed               Zej                  e      ed               Z	ej                  e
      ed               Z	y)8TestSingleDispatch.test_staticmethod_register.<locals>.Ac                     | S r   r   rv  s    r   rN  z:TestSingleDispatch.test_staticmethod_register.<locals>.A.t	  	     
r   c                 "    t        | t              S r   rl  r   rv  s    r   r  z:TestSingleDispatch.test_staticmethod_register.<locals>.A._	       "#s++r   c                 "    t        | t              S r   rl  r   rv  s    r   r  z:TestSingleDispatch.test_staticmethod_register.<locals>.A._	  r  r   Nr(   r)   r*   r
   r  r  rN  r  r   r  r   r   r   r   r!  r  	  sf    ++  ,ZZ_,  ,ZZ_,  ,r   r!  r   r   rO  rM   rN  rO   r1   r!  r>   s      r   test_staticmethod_registerz-TestSingleDispatch.test_staticmethod_register	  U    	, 	, CAB S3'r   c                     G d d      }| j                  |j                  d      j                  d       | j                  |j                  d      j                  d       | j                  |j                  d      j                  d       y )	Nc                       e Zd Zd Zej
                  ed               Zej                  e	      ed               Z
ej                  e      ed               Z
y)7TestSingleDispatch.test_classmethod_register.<locals>.Ac                     || _         y r   rv  r  s     r   r  z@TestSingleDispatch.test_classmethod_register.<locals>.A.__init__	  r  r   c                      | d      S r  r   r   rw  s     r   rN  z9TestSingleDispatch.test_classmethod_register.<locals>.A.t	       6{"r   c                      | d      S r  r   r  s     r   r  z9TestSingleDispatch.test_classmethod_register.<locals>.A._	       5z!r   c                      | d      S r  r   r  s     r   r  z9TestSingleDispatch.test_classmethod_register.<locals>.A._	  r  r   Nr(   r)   r*   r  r
   r  r  rN  r  r   r  r   r   r   r   r!  r  	  sm     ++#  ,#ZZ_"  "ZZ_"  "r   r!  r   r   r   r   rO  r   rO   rN  rw  r?  s     r   test_classmethod_registerz,TestSingleDispatch.test_classmethod_register	  b    	" 	"" 	QU+Re,Sv.r   c                     G d d      }|j                   j                  t              t        d               }|j                   j                  t              t        d               }| j                  |j                  d      j                  d       | j                  |j                  d      j                  d       | j                  |j                  d	      j                  d
       y )Nc                   @    e Zd Zd Zej
                  ed               Zy)4TestSingleDispatch.test_callable_register.<locals>.Ac                     || _         y r   rv  r  s     r   r  z=TestSingleDispatch.test_callable_register.<locals>.A.__init__	  r  r   c                      | d      S r  r   r  s     r   rN  z6TestSingleDispatch.test_callable_register.<locals>.A.t	  r  r   N)r(   r)   r*   r  r
   r  r  rN  r   r   r   r!  r  	  s)     ++#  ,#r   r!  c                      | d      S r  r   r  s     r   r  z4TestSingleDispatch.test_callable_register.<locals>._	       u:r   c                      | d      S r  r   r  s     r   r  z4TestSingleDispatch.test_callable_register.<locals>._	  r  r   r   r   r   r   rO  r   )rN  r  r   r  r   rO   rw  )r1   r!  r  s      r   test_callable_registerz)TestSingleDispatch.test_callable_register	  s    	# 	# 
c			 
 
		
c			 
 
	 	QU+Re,Sv.r   c                 4    G d dt         j                        }| j                  |j                  j                         | j                  |j
                  d   j                         | j                  t              5   |        d d d        y # 1 sw Y   y xY w)Nc                   N    e Zd Zej                  ej                  d               Zy)ATestSingleDispatch.test_abstractmethod_register.<locals>.Abstractc                      y r   r   rG  s      r   rH  zETestSingleDispatch.test_abstractmethod_register.<locals>.Abstract.add	  s     r   N)r(   r)   r*   r
   r  rI  rJ  rH  r   r   r   rL  r  	  s(    ++   ,r   rL  r  rH  )rI  rN  rM   rH  rM  r"   rY   rZ   )r1   rL  s     r   test_abstractmethod_registerz/TestSingleDispatch.test_abstractmethod_register	  so    	 	 	99:))%0EEFy) 	J	 	 	s   =BBc                      G d d      } |       }| j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       y )	Nc                       e Zd Zej                  d        Zej                  defd       Zej                  de	fd       Zy)4TestSingleDispatch.test_type_ann_register.<locals>.Ac                      yr  r   r  s     r   rN  z6TestSingleDispatch.test_type_ann_register.<locals>.A.t	  r  r   rw  c                      yr  r   r  s     r   r  z6TestSingleDispatch.test_type_ann_register.<locals>.A._	      r   c                      yr  r   r  s     r   r  z6TestSingleDispatch.test_type_ann_register.<locals>.A._	  r  r   Nr  r   r   r   r!  r  	  sT    ++ ,ZZS  ZZS  r   r!  r   r   r   r   rO  r   )rO   rN  r  s      r   test_type_ann_registerz)TestSingleDispatch.test_type_ann_register	  s]    		 		 CQ'R%(S6*r   c                      G d d      } |       }| j                  |j                  d             | j                  |j                  d             | j                  |j                  d      d       y )Nc                       e Zd Zej                  ed               Zej                  edefd              Z	ej                  ede
fd              Z	y)ATestSingleDispatch.test_staticmethod_type_ann_register.<locals>.Ac                     | S r   r   rv  s    r   rN  zCTestSingleDispatch.test_staticmethod_type_ann_register.<locals>.A.t
  r  r   rw  c                 "    t        | t              S r   r  rv  s    r   r  zCTestSingleDispatch.test_staticmethod_type_ann_register.<locals>.A._
  r  r   c                 "    t        | t              S r   r  rv  s    r   r  zCTestSingleDispatch.test_staticmethod_type_ann_register.<locals>.A._
  r  r   Nr  r   r   r   r!  r  
  sl    ++  ,ZZ,s ,  ,ZZ,s ,  ,r   r!  r   r   rO  r  r  s      r   #test_staticmethod_type_ann_registerz6TestSingleDispatch.test_staticmethod_type_ann_register
  r  r   c                     G d d      }| j                  |j                  d      j                  d       | j                  |j                  d      j                  d       | j                  |j                  d      j                  d       y )	Nc                       e Zd Zd Zej
                  ed               Zej                  ede	fd              Z
ej                  edefd              Z
y)@TestSingleDispatch.test_classmethod_type_ann_register.<locals>.Ac                     || _         y r   rv  r  s     r   r  zITestSingleDispatch.test_classmethod_type_ann_register.<locals>.A.__init__
  r  r   c                      | d      S r  r   r  s     r   rN  zBTestSingleDispatch.test_classmethod_type_ann_register.<locals>.A.t
  r  r   rw  c                      | d      S r  r   r  s     r   r  zBTestSingleDispatch.test_classmethod_type_ann_register.<locals>.A._
  r  r   c                      | d      S r  r   r  s     r   r  zBTestSingleDispatch.test_classmethod_type_ann_register.<locals>.A._"
  r  r   Nr  r   r   r   r!  r   
  ss     ++#  ,#ZZ"C "  "ZZ"C "  "r   r!  r   r   r   r   rO  r   r  r?  s     r   "test_classmethod_type_ann_registerz5TestSingleDispatch.test_classmethod_type_ann_register
  r   r   c                     G d d      }|j                    |       j                   |j                   |       j                  |j                   |       j                  fD ]n  }| j                  |      5  | j	                  |j
                  t        j                  rdnd        | j	                  |j                  d   t               d d d        p | j	                  |j                   j                  d       | j	                   |       j                   j                  d       | j	                  |j                  j                  d       | j	                   |       j                  j                  d       | j	                  |j                  j                  d       | j	                   |       j                  j                  d       y # 1 sw Y   oxY w)	Nc                       e Zd Zej                  dedefd       Zej                  ededefd              Z	ej                  e
dedefd              Zy)=TestSingleDispatch.test_method_wrapping_attributes.<locals>.Arw  returnc                     t        |      S My function docstringr   r  s     r   r    zBTestSingleDispatch.test_method_wrapping_attributes.<locals>.A.func-
       3xr   c                     t        |      S r+  r-  r  s     r   cls_funczFTestSingleDispatch.test_method_wrapping_attributes.<locals>.A.cls_func1
       3xr   c                     t        |       S r+  r-  rv  s    r   static_funczITestSingleDispatch.test_method_wrapping_attributes.<locals>.A.static_func6
  r1  r   N)r(   r)   r*   r
   r  r   r   r    r  r0  r  r3  r   r   r   r!  r(  ,
  s    ++      ,  ++ 3  3    ,  ++       , r   r!  methr,  rw  r    r0  r3  )r    r0  r3  r3  rO   rw  r   HAVE_DOCSTRINGSrp  r   r(   )r1   r!  r5  s      r   test_method_wrapping_attributesz2TestSingleDispatch.test_method_wrapping_attributes+
  sd   	  	 " FFCHHJJCLLMMCOO
 	CD 4( C  %,%<%< #:'+.   !5!5e!<cBC C	C 	&1**F3,,j9..
;//?11=AC Cs   3AGG	c           	         d  G fdd      } G fdd      }|j                  d      5 }|}d d d        |j                  d      5 }|}d d d        | j                         | j                  |d       | j                  |j                  d      |j                  d             | j                  |j                  d      d       dD ]  }| j                  |	      5  | j                  t	        ||      j
                  t	        ||      j
                         | j                  t	         |       |      j
                  t	         |       |      j
                         d d d         |j                    |       j                   |j                   |       j                  fD ]n  }| j                  |
      5  | j                  |j                  t        j                  rdnd        | j                  |j                  d   t               d d d        p | j                  |j                   j
                  d       | j                   |       j                   j
                  d       | j                  |j                  j
                  d       | j                   |       j                  j
                  d       y # 1 sw Y   xY w# 1 sw Y   xxY w# 1 sw Y   xY w# 1 sw Y   ExY w)Nc                 l    | j                   t        t        j                        fd              }|S )Nc                       | i |S r   r   )r   r   rY  s     r   rX  zgTestSingleDispatch.test_double_wrapped_methods.<locals>.classmethod_friendly_decorator.<locals>.wrapperU
  s     ///r   )__func__r  r
   r  )r    rX  rY  s     @r   classmethod_friendly_decoratorzVTestSingleDispatch.test_double_wrapped_methods.<locals>.classmethod_friendly_decoratorS
  s4    mmG__W%0 & 0Nr   c                   l    e Zd Zeej
                  dedefd              ZW  ededefd              Z	y)MTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatchrw  r)  c              3   6   K   	 t        |       y#  Y yxY ww)NDoner-  r  s     r   cls_context_managerzaTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatch.cls_context_manager\
  s     "c(N!6    c                     t        |      S r   r-  r  s     r   decorated_classmethodzcTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatch.decorated_classmethodd
  r.  r   N)
r(   r)   r*   r  
contextlibcontextmanagerr   r   rA  rD  r<  s   r   WithoutSingleDispatchr>  [
  s[    &&"c "c " ' " ,       , r   rH  c                       e Zd Zej                  eej                  dede	fd                     Z
ej                  W  edede	fd                     Zy)JTestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatchrw  r)  c              3   6   K   	 t        |       y#  Y yxY ww)r,  r@  r-  r  s     r   rA  z^TestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatch.cls_context_managerj
  s     
"c(N!6rB  c                     t        |      S r+  r-  r  s     r   rD  z`TestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatch.decorated_classmethodt
  s    
 3xr   N)r(   r)   r*   r
   r  r  rE  rF  r   r   rA  rD  rG  s   r   WithSingleDispatchrJ  i
  sw    ++&&"c "c " '  ," +++       , , r   rM  r`   5)rA  rD  )r;  r4  r,  rw  rA  rD  )rA  rO   rD  r3  r   r(   rw  r   r6  rp  r   )	r1   rH  rM  r   without_single_dispatch_foosingle_dispatch_foomethod_namer5  r<  s	           @r   test_double_wrapped_methodsz.TestSingleDispatch.test_double_wrapped_methodsR
  s   		  	 	  	 ( #66q9 	.S*-'	.  33A6 	&#"%	& 	46IJ,c2!77:44Q7	

 	+AA!DcJ L 
	K[1 	  .<EE1;?HH
   .0+>GG13[AJJ	 	
	 22 4444 66	
 	CD 4( C  %,%<%< #:'+.   !5!5e!<cBC C	C 	22;;!	
 	 44==!	
 	44==#	
 	 66??#	
m	. 	.	& 	&	 	"C Cs1   J6
K!A?K7AK6K KK	K'	c                    d}d}t         j                  d        }| j                  t              5 }|j	                  d      d        }d d d        | j                  t        j                        j                  |dz                | j                  t        |j                        j                  |             | j                  t              5 }|j                  d        }d d d        | j                  t        |j                        j                  |dz                | j                  t        |j                        j                  |             | j                  t              5 }|j                  d	t        j                  t           fd
       }d d d        | j                  t        |j                        j                  d             | j                  t        |j                        j                  d             | j                  t              5 }|j                  d	t        j                  t        t        j                  t           f   fd       }d d d        | j                  t        |j                        j                  d             | j                  t        |j                        j                  d             y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   PxY w# 1 sw Y   xY w)Nz(Invalid first argument to `register()`: zS. Use either `@register(some_class)` or plain `@register` on an annotated function.c                      yr  r   rv  s    r   r  z8TestSingleDispatch.test_invalid_registrations.<locals>.i
  r  r   r  c                      y)NzI annotated with a non-typer   rv  s    r   r  z8TestSingleDispatch.test_invalid_registrations.<locals>._
  s    4r   42c                      y)NzI forgot to annotater   rv  s    r   r  z8TestSingleDispatch.test_invalid_registrations.<locals>._
  s    -r   zB<function TestSingleDispatch.test_invalid_registrations.<locals>._rw  c                      y)Nz%I annotated with a generic collectionr   rv  s    r   r  z8TestSingleDispatch.test_invalid_registrations.<locals>._
  s     ?r   zInvalid annotation for 'arg'.z$typing.Iterable[str] is not a class.c                      y)NzInvalid Unionr   rv  s    r   r  z8TestSingleDispatch.test_invalid_registrations.<locals>._
  s    &r   zFtyping.Union[int, typing.Iterable[str]] not all arguments are classes.)r
   r  rY   rZ   r  rM   r   rB  r  endswithtypingr   Unionr   )r1   
msg_prefix
msg_suffixr  excr  s         r   test_invalid_registrationsz-TestSingleDispatch.test_invalid_registrations
  s   ?
" 	 
	!	!	 
"	y) 	5SZZ^5 5	5 	CMM*55j46GHICMM*33J?@y) 	.SZZ. .	. 	CMM*55jP7Q 
 	 	CMM*33J?@y) 	?SZZ?vs+ ? ?	? 	CMM*55+
 	 	CMM*332
 	 y) 	'SZZ'v||C)=$=> ' '	' 	CMM*55+
 	 	CMM*33T
 	K	5 	5	. 	.	? 	?	' 	's0   KK'+K AK-KK K*-K6c                     t         j                  d        }d}| j                  t        |      5   |        d d d        y # 1 sw Y   y xY w)Nc                       y r   r   r  s    r   r   z>TestSingleDispatch.test_invalid_positional_argument.<locals>.f
  re  r   z)f requires at least 1 positional argument)r
   r  assertRaisesRegexrZ   )r1   r   msgs      r    test_invalid_positional_argumentz3TestSingleDispatch.test_invalid_positional_argument
  sI    		!	!	 
"	9##Is3 	C	 	 	s   A  A	c                    t         j                  d        }|j                  dt        j                  t
        t        f   fd       }|j                  dt        t        z  fd       }| j                   |g       d       | j                   |d      d       | j                   |d      d       | j                   |d	      d
       | j                   |d      d
       y )Nc                      yNdefaultr   rv  s    r   r   z(TestSingleDispatch.test_union.<locals>.f
  r  r   rw  c                      yNtyping.Unionr   rv  s    r   r  z(TestSingleDispatch.test_union.<locals>._
      !r   c                      yNtypes.UnionTyper   rv  s    r   r  z(TestSingleDispatch.test_union.<locals>._
      $r   ri  r   rl  r   r9   rp  rM  )
r
   r  r  r[  r\  r   bytesr   floatrO   r1   r   r  s      r   
test_unionzTestSingleDispatch.test_union
  s    		!	!	 
"	 
	"6<<U
+ 	" 
	" 
	%3; 	% 
	% 	2	*2/301013!23r   c                    t         j                  d        }|j                  dt        j                  t
        t        f   fd       }|j                  dt        t
        z  fd       }| j                   |g       d       | j                   |d      d       | j                   |d      d	       | j                   |d
      d       y )Nc                      yrh  r   rv  s    r   r   z1TestSingleDispatch.test_union_conflict.<locals>.f  r  r   rw  c                      yrk  r   rv  s    r   r  z1TestSingleDispatch.test_union_conflict.<locals>._
  rm  r   c                      yro  r   rv  s    r   r  z1TestSingleDispatch.test_union_conflict.<locals>._  rq  r   ri  r   rp  r   rl  r9   )	r
   r  r  r[  r\  r   rr  r   rO   rt  s      r   test_union_conflictz&TestSingleDispatch.test_union_conflict  s    		!	!	 
"	 
	"6<<U
+ 	" 
	" 
	%39 	% 
	% 	2	*2 1230101r   c                    t         j                  d        }|j                  dt        j                  t
        d f   fd       }| j                   |d      d       | j                   |d      d       | j                   |d       d       t         j                  d        }|j                  dt        d z  fd	       }| j                   |d      d       | j                   |d      d
       | j                   |d       d
       y )Nc                      yrh  r   rv  s    r   typing_unionz8TestSingleDispatch.test_union_None.<locals>.typing_union  r  r   rw  c                      yrk  r   rv  s    r   r  z-TestSingleDispatch.test_union_None.<locals>._  rm  r   r9   ri  r   rl  c                      yrh  r   rv  s    r   types_unionz7TestSingleDispatch.test_union_None.<locals>.types_union$  r  r   c                      yro  r   rv  s    r   r  z-TestSingleDispatch.test_union_None.<locals>._(  rq  r   rp  )r
   r  r  r[  r\  r   rO   r   )r1   r}  r  r  s       r   test_union_Nonez"TestSingleDispatch.test_union_None  s   		!	!	 
"	 
			"6<<T	* 	" 
	" 	a)4b)>:d+^<		!	!	 
"	 
			%3: 	% 
	% 	R)4Q):;T*,=>r   c                    t         j                  d        }| j                  t        d      5  |j	                  t
        t           d        d d d        | j                  t        d      5  |j	                  t        j                  t           d        d d d        | j                  t        d      5  |j	                  t
        t           t        z  d        d d d        | j                  t        d      5  |j	                  t        j                  t           t        z  d        d d d        | j                   |dg      d       | j                   |d	g      d       | j                   |d
      d       | j                   |d      d       y # 1 sw Y   FxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nc                      yrh  r   rv  s    r   r   z8TestSingleDispatch.test_register_genericalias.<locals>.f1  r  r   Invalid first argument to c                      yNztypes.GenericAliasr   rv  s    r   rK   z?TestSingleDispatch.test_register_genericalias.<locals>.<lambda>6  r0  r   c                      yNztyping.GenericAliasr   rv  s    r   rK   z?TestSingleDispatch.test_register_genericalias.<locals>.<lambda>8  r0  r   c                      y)Nz$types.UnionTypes(types.GenericAlias)r   rv  s    r   rK   z?TestSingleDispatch.test_register_genericalias.<locals>.<lambda>:  r0  r   c                      yNz!typing.Union[typing.GenericAlias]r   rv  s    r   rK   z?TestSingleDispatch.test_register_genericalias.<locals>.<lambda><  r0  r   r9   ri  rM  r   r   )r
   r  rc  rZ   r  r/   r   r[  Listr   rs  rr  rO   r   s     r   test_register_genericaliasz-TestSingleDispatch.test_register_genericalias0  sy   		!	!	 
"	 ##I/KL 	DJJtCy"BC	D##I/KL 	LJJv{{3')JK	L##I/KL 	\JJtCy3(Z[	\##I/KL 	dJJv{{5)E13bc	d 	A3+C59-2	*3+	D 	D	L 	L	\ 	\	d 	ds/   F*)F1&F*50F6FF'*F36F?c                    t         j                  d        }| j                  t        d      5  |j	                  t
        t                  d d d        | j                  t        d      5  |j	                  t        j                  t                  d d d        | j                  t        d      5  |j	                  t
        t           t        z         d d d        | j                  t        d      5  |j	                  t        j                  t           t        z         d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   y xY w)Nc                      yrh  r   rv  s    r   r   zBTestSingleDispatch.test_register_genericalias_decorator.<locals>.fD  r  r   r  )
r
   r  rc  rZ   r  r/   r   r[  r  r   r   s     r   $test_register_genericalias_decoratorz7TestSingleDispatch.test_register_genericalias_decoratorC  s   		!	!	 
"	 ##I/KL 	"JJtCy!	"##I/KL 	)JJv{{3'(	)##I/KL 	(JJtCy3'	(##I/KL 	/JJv{{3'#-.	/ 	/	" 	"	) 	)	( 	(	/ 	/s/   D&('D2-$D>/.E
&D/2D;>E
Ec                    t         j                  d        }| j                  t        d      5  |j                  dt
        t           fd       }d d d        | j                  t        d      5  |j                  dt        j                  t           fd       }d d d        | j                  t        d      5  |j                  dt
        t           t        z  fd       }d d d        | j                  t        d      5  |j                  dt        j                  t           t        z  fd       }d d d        | j                   |dg      d	       | j                   |d
g      d	       | j                   |d      d	       | j                   |d      d	       y # 1 sw Y   LxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nc                      yrh  r   rv  s    r   r   zCTestSingleDispatch.test_register_genericalias_annotation.<locals>.fR  r  r   zInvalid annotation for 'arg'rw  c                      yr  r   rv  s    r   r  zCTestSingleDispatch.test_register_genericalias_annotation.<locals>._W  s    +r   c                      yr  r   rv  s    r   r  zCTestSingleDispatch.test_register_genericalias_annotation.<locals>._[  s    ,r   c                      y)Nz#types.UnionType(types.GenericAlias)r   rv  s    r   r  zCTestSingleDispatch.test_register_genericalias_annotation.<locals>.__  s    <r   c                      yr  r   rv  s    r   r  zCTestSingleDispatch.test_register_genericalias_annotation.<locals>._c  s    :r   r9   ri  rM  r   r   )r
   r  rc  rZ   r  r/   r   r[  r  rs  r   rr  rO   rt  s      r   %test_register_genericalias_annotationz8TestSingleDispatch.test_register_genericalias_annotationQ  s   		!	!	 
"	 ##I/MN 	,ZZ,tCy , ,	, ##I/MN 	-ZZ-v{{5) - -	- ##I/MN 	=ZZ=tCy3 = =	= ##I/MN 	;ZZ;v{{5)E1 ; ;	;
 	A3+C59-2	*3+)	, 	,	- 	-	= 	=	; 	;s/   !F,+F%5(F2;2F>F"%F/2F;>GN)&r(   r)   r*   r  r  r  r  r  
skipUnlessr   r   r*  r  r*  rO  rb  rs  r  r  r  r  r  r  r	  r  r  r  r%  r7  rR  r`  re  ru  rz  r  r  r  r  r   r   r   r  r  |  s    	-&.
;7 X"56:  7:"47l\(|;.+$},@d)L*6-4((/,/.+"((/,%BNd
L0d4&2$?2,&/,r   r  c                   :    e Zd ZdZd Zej                  d        Zy)CachedCostItemr9   c                 6    t         j                         | _        y r   )r  RLocklockr\   s    r   r  zCachedCostItem.__init__p  s     &&(	r   c                     | j                   5  | xj                  dz  c_        ddd       | j                  S # 1 sw Y   | j                  S xY w)The cost of the item.r9   N)r  _costr\   s    r   costzCachedCostItem.costs  s<     YY 	JJ!OJ	zz	zzs	   7AN)r(   r)   r*   r  r  r  cached_propertyr  r   r   r   r  r  m  s&    E) !! "r   r  c                   8    e Zd ZdZd Zej                  e      Zy)OptionallyCachedCostItemr9   c                 D    | xj                   dz  c_         | j                   S )r  r9   r  r\   s    r   get_costz!OptionallyCachedCostItem.get_cost~  s    

a
zzr   N)r(   r)   r*   r  r  r  r  cached_costr   r   r   r  r  {  s    E
 ..x8Kr   r  c                   :    e Zd ZdZd Zej                  d        Zy)CachedCostItemWithSlotsr  c                     d| _         y r  r  r\   s    r   r  z CachedCostItemWithSlots.__init__  s	    
r   c                     t        d      )Nz!never called, slots not supportedr  r\   s    r   r  zCachedCostItemWithSlots.cost  s    >??r   N)r(   r)   r*   	__slots__r  r  r  r  r   r   r   r  r    s(    I !!@ "@r   r  c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestCachedPropertyc                     t               }| j                  |j                  d       | j                  |j                  d       y r  )r  rO   r  r1   items     r   test_cachedzTestCachedProperty.test_cached  s2    A&A&r   c                    t               }| j                  |j                         d       | j                  |j                  d       | j                  |j                         d       | j                  |j                  d       y )Nr:   r@   rA   )r  rO   r  r  r  s     r   1test_cached_attribute_name_differs_from_func_namezDTestCachedProperty.test_cached_attribute_name_differs_from_func_name  sb    ')!,))1-!,))1-r   c                     t               }| j                  t        d      5  |j                   d d d        y # 1 sw Y   y xY w)NzWNo '__dict__' attribute on 'CachedCostItemWithSlots' instance to cache 'cost' property.)r  rc  rZ   r  r  s     r   test_object_with_slotsz)TestCachedProperty.test_object_with_slots  s<    &(##i
 	 II		 	 	s	   7A c                      G d dt               } G d d|      }| j                  t        d      5  |j                   d d d        y # 1 sw Y   y xY w)Nc                   0    e Zd Zej                  d        Zy)6TestCachedProperty.test_immutable_dict.<locals>.MyMetac                      y)NTr   r\   s    r   propz;TestCachedProperty.test_immutable_dict.<locals>.MyMeta.prop  s    r   N)r(   r)   r*   r  r  r  r   r   r   MyMetar    s    )) *r   r  c                       e Zd Zy)7TestCachedProperty.test_immutable_dict.<locals>.MyClassNr'   r   r   r   MyClassr    r  r   r  r  zkThe '__dict__' attribute on 'MyMeta' instance does not support item assignment for caching 'prop' property.)r   rc  rZ   r  )r1   r  r  s      r   test_immutable_dictz&TestCachedProperty.test_immutable_dict  sN    	T 	
	 	 ##y
 	 LL		 	 	s   AAc                     | j                  t              5 } G d d      }ddd       | j                  t        j                        t        t        d                   y# 1 sw Y   AxY w)zDDisallow this case because decorated function a would not be cached.c                   4    e Zd Zej                  d        ZeZy)KTestCachedProperty.test_reuse_different_names.<locals>.ReusedCachedPropertyc                      y r   r   r\   s    r   r>   zMTestCachedProperty.test_reuse_different_names.<locals>.ReusedCachedProperty.a  s    r   N)r(   r)   r*   r  r  r>   r?   r   r   r   ReusedCachedPropertyr    s!    -- . r   r  NzLCannot assign the same cached_property to two different names ('a' and 'b').)rY   rZ   rO   r   rB  )r1   ctxr  s      r   test_reuse_different_namesz-TestCachedProperty.test_reuse_different_names  s[    y) 	S 	 		hij	
	 	s   A!!A*c                 0   dt         j                  fd        G fdd      } G fdd      } |       } |       }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       y	)
zIReusing a cached_property on different classes under the same name is OK.r   c                     dz  S r  r   )_selfcounters    r   _cpz4TestCachedProperty.test_reuse_same_name.<locals>._cp  s     qLGNr   c                       e Zd ZW  Zy)2TestCachedProperty.test_reuse_same_name.<locals>.ANr(   r)   r*   cpr  s   r   r!  r        Br   r!  c                       e Zd ZW  Zy)2TestCachedProperty.test_reuse_same_name.<locals>.BNr  r  s   r   r<  r    r  r   r<  r9   r:   N)r  r  rO   r  )r1   r!  r<  r>   r?   r  r  s        @@r   test_reuse_same_namez'TestCachedProperty.test_reuse_same_name  s    		%	%	 
&	
	 		 	 CCq!q!q!r   c                     t         j                  d       } G d d      }||_        | j                  t        d      5   |       j                   d d d        y # 1 sw Y   y xY w)Nc                      y r   r   )r   s    r   rK   z=TestCachedProperty.test_set_name_not_called.<locals>.<lambda>  r0  r   c                       e Zd Zy)8TestCachedProperty.test_set_name_not_called.<locals>.FooNr'   r   r   r   Foor    r  r   r  zGCannot use cached_property instance without calling __set_name__ on it.)r  r  r  rc  rZ   )r1   r  r  s      r   test_set_name_not_calledz+TestCachedProperty.test_set_name_not_called  sY    )).9	 	 ##Y
 	 EHH		 	 	s   AA"c                 `    | j                  t        j                  t        j                         y r   )assertIsInstancer  r  r  r  r\   s    r   test_access_from_classz)TestCachedProperty.test_access_from_class  s    n11<3O3OPr   c                     | j                  t        j                  j                  t        j
                  rd       y d        y )Nr  )rO   r  r  rw  r   r6  r\   s    r   test_doczTestCachedProperty.test_doc  s6    ,,44$44 2	&  $	&r   c                      G d dt         j                         G fdd      } |d      }| j                  |j                  d       d|_        | j                  |j                  d       y)z4Caching still works for a subclass defining __set__.c                       e Zd Zd Zy)OTestCachedProperty.test_subclass_with___set__.<locals>.readonly_cached_propertyc                     t        d      )Nzread only property)r   )r1   r+  r   s      r   __set__zWTestCachedProperty.test_subclass_with___set__.<locals>.readonly_cached_property.__set__  s    $%9::r   N)r(   r)   r*   r  r   r   r   readonly_cached_propertyr    s    ;r   r  c                   &    e Zd Zd ZW  d        Zy);TestCachedProperty.test_subclass_with___set__.<locals>.Testc                     || _         y r   _prop)r1   r  s     r   r  zDTestCachedProperty.test_subclass_with___set__.<locals>.Test.__init__  s	    !
r   c                     | j                   S r   r  r\   s    r   r  z@TestCachedProperty.test_subclass_with___set__.<locals>.Test.prop  s    zz!r   N)r(   r)   r*   r  r  )r  s   r   r   r    s    " &" &"r   r   r9   r  N)r  r  rO   r  r  )r1   r   rN  r  s      @r   test_subclass_with___set__z-TestCachedProperty.test_subclass_with___set__  sY    	;|'C'C 	;	" 	" G##r   N)r(   r)   r*   r  r  r  r  r  r  r  r  r  r  r   r   r   r  r    s5    '
.
".Q&$r   r  __main__)OrI  r$  r  collections.abcr   	itertoolsr   r   randomr   r   r  r   ru  r  r[  r  unittest.mockr  r  r   rE  inspectr   test.supportr   r	   r
   import_fresh_moduler  r  r   rL   r   r  rF  r   r   r$   r   r&   r-   rP   r5   r7   r  TestCaser   r  r  r  r
  r  r  rU  r  r  r  r  r  r&  r,  r.  r>  r  r  r  r  r  r  r  r  r  r  r  r  r  r(   mainr   r   r   <module>r     s   
     "   
        	    & ) 0}00:FI/m//7CnF ,-
+
+Ij\
J&&'+--. , ,
@	e 	(u (	T 	CD CDJ
 ["DE+$; 1 1 +$ F+$\#K!2!2 #
 ;.. 	,, 	 ["DE$< $ F$ M  ()) (Dy6)) y6x;9! ;9|LA LA^ ["DE$*h// $ F$
/:x00 /V$ V$r ["DE	
L("3"3 	
 F	
7\8#4#4 7g )) g T	 ) ) )P P&|N |N~    **  ["DEw))  Fn,** n,b 9 9@ @q$** q$h zHMMO r   