
    7bh                       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@eAej\                        ZB ejZ                  ed       G dA dBeAej\                               ZC G dC dD      ZDej                         dE        ZFerej                         dF        ZG G dG dHeDej\                        ZH ejZ                  ed       G dI dJeDej\                               ZI G dK dLej\                        ZJ G dM dN      ZK G dO dP      ZL G dQ dR      ZM G dS dTej\                        ZNeOdUk(  r ej                          yy)V    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      =/opt/python-3.12.12/usr/lib/python3.12/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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   sP    9D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   sN    $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     4t!d1gts   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*6; q2k]!<*68	9 DLL24262d1g*68*6; q2i[;-qI*6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Ytf=AAFv66:;fll1e&<=  6!2IaLA < 766s   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  st   [$++6W%ANNAr2r?+6"6#:#:Q#>?E**>:Q. ;: @ R45W%ANNGaT2r236"6#:#:Q#>?E#\\&,,q%*@AFCfkk!nf=++Wb"b,AB @ R45W%ANNGR#q2676"6#:#:Q#>?E#\\&,,q%*@AFCfooc&:FC++Wb"b,AB @ R45A 76
 ;: R45 ++Wb"b,ABR45 ++Wb"b,ABR45A 7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   c                     | j                   t           }| j                  |j                  | j                          | j	                  |j
                  t        f       | j	                  |j                  d       y r   )rL   r   r   
__origin__rO   __args____parameters__)r1   aliass     r   test_partial_genericaliasz%TestPartial.test_partial_genericalias  sT    S!e&&5#0--r2r   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   r   r7   r7   D   s    ?7?	%.2<==:F>3=
.9626B3	D(2N)(!6HD 3r   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  sb    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 )Nr0  )r(  assertFalsehasattrr!  r   r#  r%  r>   r1  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r2  )r  r`   )r  r`   r  r  rd   r  r  r-  )r(  r>   subTestrO   r%  r'  r1  s     r   test_descriptorsz"TestPartialMethod.test_descriptors!  s[   FFDFF#C#&  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   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   Br@  4  s    000q9r   rC  c                   .    e Zd Z ej                         Zy)r@  NrA  r   r   r   rC  z.TestPartialMethod.test_invalid_args.<locals>.B7  s    0002r   c                   4    e Zd Z ej                  ed      Zy)r@  r9   )r    r>   N)r(   r)   r*   r
   r  r   rB  r   r   r   rC  z.TestPartialMethod.test_invalid_args.<locals>.B:  s    000gCr   )rY   rZ   r   )r1   rC  s     r   test_invalid_argsz#TestPartialMethod.test_invalid_args2  s    y):F : * y)3 3 * y)D D *) *) *) *)s#   A?B+B?BBB c                    | j                  t        t        | j                        d         dj	                  t
                     | j                  t        t        | j                        d         dj	                  t
                     | j                  t        t        | j                        d         dj	                  t
                     | j                  t        t        | j                        d         dj	                  t
                     | j                  t        t        | j                        d	         d
j	                  t
                     y )Nr  zfunctools.partialmethod({})r   zfunctools.partialmethod({}, 1)r!   z functools.partialmethod({}, a=2)r"  z+functools.partialmethod({}, self=1, func=2)r!  z#functools.partialmethod({}, 3, b=4))rO   r   varsr(  formatr   r\   s    r   r   zTestPartialMethod.test_repr=  s    d466l9566==gF	Hd466l<899@@I	Kd466l:67;BB7K	Md466l?;<FMMgV	X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.addL      r   r`   N)	r(   r)   r*   abcabstractmethodrO  r
   r  add5r   r   r   AbstractrL  J  s0       +9**32Dr   rT  __isabstractmethod__F)rQ  ABCMetarM   rO  rU  rS  r(  r%  r'  r#  r   r!  r5  r   )r1   rT  r    s      r   test_abstractzTestPartialMethod.test_abstractI  s    	3s{{ 	3 	99:::;VV]]DFFJJ0C0CTVV]]TXTZTZT_T_`DWT+A5IJ a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>.fY      q5Lr   r9   r:   )r
   rL   rO   r   s      r   test_positional_onlyz&TestPartialMethod.test_positional_onlyX  s5    	 a#1qAw'r   N)r(   r)   r*   r   r(  r>   rj   r+  r.  r3  r7  r;  r=  rF  r   rW  r[  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   r_  )	r1   wrapperwrappedassignedupdatedr   wrapper_attrwrapped_attrr   s	            r   check_wrapperzTestUpdateWrapper.check_wrapperb  s     DMM''40''42HI  D"7D1L"7D1L#:%#*>l3/c1BC	 $  	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>.fv      r   )r>   This is a new annotationr   )	.defaultsri  s     r   z<generic parameters of f>zDTestUpdateWrapper._default_update.<locals>.<generic parameters of f>v  s	    a 	r   This is also a testzThis is a bald faced liec                      y r   r   rc   s    r   r`  z2TestUpdateWrapper._default_update.<locals>.wrapper{      r   )r?   zThis is the prior annotation)r   r_  r
   update_wrapperr1   r   r`  s      r   _default_updatez!TestUpdateWrapper._default_updateu  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   rp  r>   rn  r?   )ru  rf  __type_params__r   r_  rO   r(   r*   r   __annotations__assertNotIn)r1   r`  r   ri  s       r   test_default_updatez%TestUpdateWrapper.test_default_update  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 Nrl  ru  rO   __doc__r1   r`  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rk  r   r   r   r   r   z+TestUpdateWrapper.test_no_update.<locals>.f  rm  r   rp  c                       y r   r   r   r   r   r`  z1TestUpdateWrapper.test_no_update.<locals>.wrapper  rr  r   r   r`  r   )r   r
   rs  rf  rO   r(   assertNotEqualr*   r  rx  r5  r6  rt  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  rr  r   This is a different testr9   r:   r@   rG   c                       y r   r   r   r   r   r`  z8TestUpdateWrapper.test_selective_update.<locals>.wrapper  rr  r   r   	dict_attrr`  )r   rP   r  r
   rs  rf  rO   r(   r  r*   r  r1   r   r`  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  rr  r   c                       y r   r   r   r   r   r`  z:TestUpdateWrapper.test_missing_attributes.<locals>.wrapper  rr  r   r   r  r   r9   )r  r
   rs  ry  r"   rO   rY   r   r  s        r   test_missing_attributesz)TestUpdateWrapper.test_missing_attributes  s    		  !VV<!1!12**B/~.$$Wa@ /~.$$Wa@ /. /. /.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   r`  z6TestUpdateWrapper.test_builtin_update.<locals>.wrapper  rr  r   r   zmax()	r
   rs  r   rO   r(   rM   r  
startswithrx  r1   r`  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   r`  z;TestUpdateWrapper.test_update_type_wrapper.<locals>.wrapper  s    Dr   r   r   )r
   rs  r   rO   r(   rx  rw  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_UPDATESrf  ru  rz  unittestskipIfr   flagsoptimizer  r  r  r  r   requires_docstringsr  r  r   r   r   r]  r]  `  s      )<<'774&	
8 X__SYY''1,@B<B<39$A(   X__SYY''1,@B6B !66r   r]  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rk  r   r   r   r   r   z$TestWraps._default_update.<locals>.f  rm  r   rp  zThis is still a bald faced liec                       y r   r   r   r   r   r`  z*TestWraps._default_update.<locals>.wrapper  rm  r   )r   r_  r
   wrapsrt  s      r   ru  zTestWraps._default_update  s<    	 '8			 
	zr   c                 
   | j                         \  }}| j                  ||       | j                  |j                  d       | j                  |j                  |j                         | j                  |j
                  d       y )Nr   rp  )ru  rf  rO   r(   r*   r   r  s      r   rz  zTestWraps.test_default_update  si    ))+
7A&))3/--q~~>'<=r   r:   r{  c                 b    | j                         \  }}| j                  |j                  d       y r}  r~  )r1   r`  _s      r   r  z!TestWraps.test_default_update_doc  r  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rk  r   r   r   r   r   z#TestWraps.test_no_update.<locals>.f  rm  r   rp  r   c                       y r   r   r   r   r   r`  z)TestWraps.test_no_update.<locals>.wrapper  rm  r   r`  r   )r   r
   r  rf  rO   r(   r  r*   r  r5  r6  rt  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  rr  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   r`  z0TestWraps.test_selective_update.<locals>.wrapper  s     r   r`  )r   rP   r  r
   r  rf  rO   r(   r  r*   r  )r1   r   r  r  r  r`  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*   ru  rz  r  r  r   r  r  r  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   rO  z#TestReduce.test_reduce.<locals>.add+  rZ  r   rG   r   rQ  r>   rE   rd   w)r>   rE   rd   r  c                     | |z  S r   r   r   s     r   rK   z(TestReduce.test_reduce.<locals>.<lambda>2  s    !A#r   r:   r  r9   i  c                     | |z  S r   r   r   s     r   rK   z(TestReduce.test_reduce.<locals>.<lambda>4  s    QqSr      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__F  s    ""r   N)r(   r)   r*   r  r   r   r   TestFailingIterr  E  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__N  s      r   N)r(   r)   r*   r   r   r   r   BadSeqr  M  s    !r   r  )rO   reducer   rY   rZ   r   r  r  )r1   r  rO  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__U  	    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__W  s(    ?DFF?H # %$*$r   N)r(   r)   r*   r  r   r   r   r   SequenceClassr  T  s    %r   r  r   )rO  r`   r;   r  4   r9   r:   r@   )onetwothreer   )operatorrO  rO   r  rY   rZ   r   keys)r1   r  rO  rd   s       r   test_iterator_usagezTestReduce.test_iterator_usageS  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  i  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  o  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>.cmp1v      Ea!e$$r   r@   r9   c                 0    t        |       t        |      z
  S r   r   r   s     r   cmp2z*TestCmpToKey.test_cmp_to_key.<locals>.cmp2}  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_keyu  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>.cmp1  r  r   mycmpr@   r9  r9   )r  rO   r  rY   rZ   r   r1   r  r   s      r   test_cmp_to_key_argumentsz&TestCmpToKey.test_cmp_to_key_arguments  sB   	%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 2	( 	(	01FSVO 21 21 21s   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   r2  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  rZ  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  sL    	% 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  rZ  r   r;   )r  rY   rZ   hashassertNotIsInstancecollectionsrQ  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  s  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_onlyr1  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   r4  r4    s    l556Jr   r4  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   r;  r0   s     r   r  z:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__lt__      zzEKK//r   c                 4    | j                   |j                   k(  S r   r;  r0   s     r   __eq__z:TestTotalOrdering.test_total_ordering_lt.<locals>.A.__eq__      zzU[[00r   Nr(   r)   r*   r  r  rA  r   r   r   r(  r9        #01r   r(  r9   r:   r
   total_orderingrM   r5  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   r;  r<  s     r   r  z<TestTotalOrdering.test_total_ordering_le.<locals>.A.__init__  r=  r   c                 4    | j                   |j                   k  S r   r;  r0   s     r   __le__z:TestTotalOrdering.test_total_ordering_le.<locals>.A.__le__  rB  r   c                 4    | j                   |j                   k(  S r   r;  r0   s     r   rA  z:TestTotalOrdering.test_total_ordering_le.<locals>.A.__eq__  rB  r   N)r(   r)   r*   r  rO  rA  r   r   r   r(  rL        #11r   r(  r9   r:   rE  rG  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   r;  r<  s     r   r  z<TestTotalOrdering.test_total_ordering_gt.<locals>.A.__init__  r=  r   c                 4    | j                   |j                   kD  S r   r;  r0   s     r   __gt__z:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__gt__  r?  r   c                 4    | j                   |j                   k(  S r   r;  r0   s     r   rA  z:TestTotalOrdering.test_total_ordering_gt.<locals>.A.__eq__  rB  r   N)r(   r)   r*   r  rY  rA  r   r   r   r(  rV    rD  r   r(  r9   r:   rE  rG  s     r   test_total_ordering_gtz(TestTotalOrdering.test_total_ordering_gt  rI  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   r;  r<  s     r   r  z<TestTotalOrdering.test_total_ordering_ge.<locals>.A.__init__  r=  r   c                 4    | j                   |j                   k\  S r   r;  r0   s     r   __ge__z:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__ge__  rB  r   c                 4    | j                   |j                   k(  S r   r;  r0   s     r   rA  z:TestTotalOrdering.test_total_ordering_ge.<locals>.A.__eq__  rB  r   N)r(   r)   r*   r  ra  rA  r   r   r   r(  r^    rQ  r   r(  r9   r:   rE  rG  s     r   test_total_ordering_gez(TestTotalOrdering.test_total_ordering_ge  rS  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(  rf  %      r   r(  r9   r:   )r
   rF  r   rM   rG  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(  rk  1  s    r   r(  )rY   r  r
   rF  rG  s     r   test_no_operations_definedz,TestTotalOrdering.test_no_operations_defined/  s9    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   r;  r<  s     r   r  zJTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThan.__init__9  r=  r   c                 P    t        |      r| j                  |j                  k(  S yNF
isinstancer   r1   r2   ImplementsLessThans     r   rA  zHTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThan.__eq__;  $    e%78::44r   c                 Z    t        |      r| j                  |j                  k  S t        S r   rt  r   NotImplementedru  s     r   r  zHTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThan.__lt__?  '    e%78::33%%r   Nr(   r)   r*   r  rA  r  rv  s   r   rv  ro  7      #&r   rv  c                   (    e Zd Zd Z fdZ fdZy)HTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThanEqualToc                     || _         y r   r;  r<  s     r   r  zQTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThanEqualTo.__init__F  r=  r   c                 P    t        |      r| j                  |j                  k(  S yrr  rs  r1   r2   ImplementsLessThanEqualTos     r   rA  zOTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThanEqualTo.__eq__H  $    e%>?::44r   c                 Z    t        |      r| j                  |j                  k  S t        S r   ry  r  s     r   rO  zOTestTotalOrdering.test_notimplemented.<locals>.ImplementsLessThanEqualTo.__le__L  '    e%>?::44%%r   Nr(   r)   r*   r  rA  rO  r  s   r   r  r  D  r~  r   r  c                   (    e Zd Zd Z fdZ fdZy)DTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThanc                     || _         y r   r;  r<  s     r   r  zMTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThan.__init__S  r=  r   c                 P    t        |      r| j                  |j                  k(  S yrr  rs  r1   r2   ImplementsGreaterThans     r   rA  zKTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThan.__eq__U  $    e%:;::44r   c                 Z    t        |      r| j                  |j                  kD  S t        S r   ry  r  s     r   rY  zKTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThan.__gt__Y  '    e%:;::33%%r   Nr(   r)   r*   r  rA  rY  r  s   r   r  r  Q  r~  r   r  c                   (    e Zd Zd Z fdZ fdZy)KTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThanEqualToc                     || _         y r   r;  r<  s     r   r  zTTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThanEqualTo.__init__`  r=  r   c                 P    t        |      r| j                  |j                  k(  S yrr  rs  r1   r2   ImplementsGreaterThanEqualTos     r   rA  zRTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThanEqualTo.__eq__b  $    e%AB::44r   c                 Z    t        |      r| j                  |j                  k\  S t        S r   ry  r  s     r   ra  zRTestTotalOrdering.test_notimplemented.<locals>.ImplementsGreaterThanEqualTo.__ge__f  '    e%AB::44%%r   Nr(   r)   r*   r  rA  ra  r  s   r   r  r  ^  r~  r   r  r9   )r
   rF  r   rO  rz  rY  ra  r  )r1   r  r  rv  r  s    @@@@r   test_notimplementedz%TestTotalOrdering.test_notimplemented5  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   r;  r<  s     r   r  z[TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__init__}  r=  r   c                 P    t        |      r| j                  |j                  k(  S yrr  rs  ru  s     r   rA  zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__eq__  rw  r   c                 Z    t        |      r| j                  |j                  k  S t        S r   ry  ru  s     r   r  zYTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThan.__lt__  r{  r   Nr|  r}  s   r   rv  r  {  r~  r   rv  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   r;  r<  s     r   r  z^TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__init__  r=  r   c                 P    t        |      r| j                  |j                  k(  S yrr  rs  r  s     r   rA  z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__eq__  r  r   c                 Z    t        |      r| j                  |j                  kD  S t        S r   ry  r  s     r   rY  z\TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThan.__gt__  r  r   Nr  r  s   r   r  r    r~  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   r;  r<  s     r   r  zbTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__init__  r=  r   c                 P    t        |      r| j                  |j                  k(  S yrr  rs  r  s     r   rA  z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__eq__  r  r   c                 Z    t        |      r| j                  |j                  k  S t        S r   ry  r  s     r   rO  z`TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsLessThanEqualTo.__le__  r  r   Nr  r  s   r   r  r    r~  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   r;  r<  s     r   r  zeTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__init__  r=  r   c                 P    t        |      r| j                  |j                  k(  S yrr  rs  r  s     r   rA  zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__eq__  r  r   c                 Z    t        |      r| j                  |j                  k\  S t        S r   ry  r  s     r   ra  zcTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ImplementsGreaterThanEqualTo.__ge__  r  r   Nr  r  s   r   r  r    r~  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   r;  r<  s     r   r  zaTestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__init__  r=  r   c                 P    t        |      r| j                  |j                  k(  S yrr  rs  )r1   r2   ComparatorNotImplementeds     r   rA  z_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__eq__  s$    e%=>::44r   c                     t         S r   )rz  r0   s     r   r  z_TestTotalOrdering.test_type_error_when_not_implemented.<locals>.ComparatorNotImplemented.__lt__  s    %%r   Nr|  )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
   rF  r:  rY   rZ   rO   )r1   r>   r?   r  r  r  rv  r  s      @@@@@r   $test_type_error_when_not_implementedz6TestTotalOrdering.test_type_error_when_not_implementedx  s    
	!	!
	& 
	& 
"
	& 
	!	!
	& 
	& 
"
	& 
	!	!
	& 
	& 
"
	& 
	!	!
	& 
	& 
"
	& 
	!	!	& 	& 
"	& \\(#T%6%6y%Ar"Q& &B# \\)$d&7&7	&Bq!$=a$@@ 'C$ \\)$d&7&7	&Bq!$9!$<< 'C$ \\*%t'8'8'C%a(,>q,AA (D% \\*%t'8'8'C%a(,H,KK (D% \\)$d&7&7	&B!!$'CA'FF 'C$ \\)$d&7&7	&B!!$'9!'<< 'C$ \\*%t'8'8'C(+/DQ/GG (D% \\*%t'8'8'C(+/H/KK (D% \\/*(+A(+AQ"""9-Q .	 + \\/*(+A(+AQ"""9-Q .	 +*E &B%A## 'C&B$$ 'C&B$$ (D'C%% (D'C%% 'C&B$$ 'C&B$$ (D'C%% (D'C%% .-	 +* .-	 +*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  rY  rO  ra  )rB  r   )	r   r   r   r:  r   Orderable_LTr   r   r   )r1   r   r   rB  method_copys        r   r   zTestTotalOrdering.test_pickle  sx    622Q67E>\\U\;$\48F"(,,v||FE/J"KKMM+v6 <; ? 8;;s   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   rt  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   rA  z^TestTotalOrdering.test_total_ordering_for_metaclasses_issue_44605.<locals>.SortableMeta.__eq__  s#    !%6}}66r   )r(   r)   r*   r  r  rA  __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   rC  r        r   rC  	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
   rF  r   rM   r5  )r1   rC  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*   rH  rR  r[  rc  rh  rl  r  r  r   r  r   r   r   r6  r6    s9    &"'"&"'"
&AQFiV7 r   r6  c                       e Zd Zd Zd Zd Zy)r  c                     || _         y r   r;  r<  s     r   r  zOrderable_LT.__init__	  s	    
r   c                 4    | j                   |j                   k  S r   r;  r0   s     r   r  zOrderable_LT.__lt__  s    zzEKK''r   c                 4    | j                   |j                   k(  S r   r;  r0   s     r   rA  zOrderable_LT.__eq__  s    zzU[[((r   NrC  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    				' 
	' 	%)4)Q#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eZy)TestCachePyN)r(   r)   r*   r  r   r   r   r   r  r  $  s    Fr   r  c                       e Zd ZereZyy)
TestCacheCN)r(   r)   r*   r  r   r   r   r   r  r  (  s     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>.orig1      q519r   r<   r  r   r`     r9   c                       dz   yNr9   r<   r   f_cnts   r   r   zTestLRU.test_lru.<locals>.fY       QJEr   c                       dz   yr  r   r  s   r   r   zTestLRU.test_lru.<locals>.fi  r  r   rA   r:   c                     dz  | dz  S Nr9   r;   r   )rJ   r  s    r   r   zTestLRU.test_lru.<locals>.fy  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   r_  r  )r1   r   r   r  r  r  r  domainr  rJ   r   actualrq   r  s                @r   test_lruzTestLRU.test_lru0  sE   	-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>.square  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_args  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  rm  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  sg     ,,	#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  rm  r   r;   c                      y r   r   r9  s    r   limited_cachez2TestLRU.test_lru_type_error.<locals>.limited_cache  rm  r   )r   r  rY   rZ   )r1   r;  r=  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		,	' 
-	' 	%)4)Q#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   rE  r  r  s       r   test_lru_with_maxsize_negativez&TestLRU.test_lru_with_maxsize_negative  s    			s		+	 
,	AU3Z8ZbeZ8$uSz:JK 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 )NrQ  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 )NrJ  Tr  typedc                     | | z  S r   r   rI   s    r   r  z+TestLRU.test_lru_with_types.<locals>.square2  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_types0  s4   "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)rT  r9   r  True      ?z1.0r   r  FFalse        z0.0r   z(1,))T)rY  rn   z(0,))F)r[  c                       e Zd Zy)8TestLRU.test_lru_cache_typed_is_not_recursive.<locals>.TNr'   r   r   r   ri  r]  Q  r  r   ri  )r   r  r   rO   r   )r1   cachedri  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>.fib\  *    1u1:ac
**r   r   r  r  r  r  r  r   rA  r1   numberr  s     @r   test_lru_with_keyword_argsz"TestLRU.test_lru_with_keyword_args[  s    				 	+ 
!	+ 	).r3vS6]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 rb  r   r  s    r   r  z<TestLRU.test_lru_with_keyword_args_maxsize_none.<locals>.fibl  rc  r   r   r  r  r  r  r   rA  rd  s     @r   'test_lru_with_keyword_args_maxsize_nonez/TestLRU.test_lru_with_keyword_args_maxsize_nonek  s    			t		,	+ 
-	+ 	eBi@iF#-i@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>.f{  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_ordery  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>.f  s    r   )rp  zomg_annotation)r   r  r  rO   r   )r1   r   gr   s       r   test_lru_cache_decorationz!TestLRU.test_lru_cache_decoration  sT    	 $DKK!!#A&KK33DWQ-wq$/?@ 4r   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>.orig  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  s8    JJrN1X  1a$q!*5 r   c                  n    j                  d       t        dz        D ]  } j                           y )Nr;   r:   )rx  r   r  )r  r   ry  rz  s    r   clearz.TestLRU.test_lru_cache_threaded.<locals>.clear  s)    JJrN1Q3Z  r   gư>targetr   r  )r   r  r  rO   	threadingEventr   getswitchintervalr   setswitchintervalr   Threadr	   start_threadssetr  r  r}  )r1   r  r  r  r  r  r{  r}  orig_sir'  threadsr   ry  r   rz  s   `          @@@@r   test_lru_cache_threadedzTestLRU.test_lru_cache_threaded  s   1	.DKK!!!A#!.t4*+,,.'fgx1%!	6 	6
	 
 '')!!$'	+ !&a* (1 !''t1#> (  *!//8		 9 /0lln+D&'8{{l*$$VQ/$$T1Q3<8  +  qsV|4Xq) !''u56G!&q+!)A "((A3?!)+ +GKKM!//8		 9 !!'*/*88+ 9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@   )rx  )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   rx  rO   )r  r   ry  r1   rz  stops    r   testz.TestLRU.test_lru_cache_threaded2.<locals>.test  s?    1X

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

2



2		"  !ac1Wac1Q31GH  54 D44s   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                   |      d|z  |        y r  )rO   )r  rJ   r   r1   s     r   r  z.TestLRU.test_lru_cache_threaded3.<locals>.test  s    QqT1q5!,r   )r9   r:   r:   r@   r:   r~  )r   r  	enumerater  r  r	   r  )r1   r  r  vr  r   s   `    @r   test_lru_cache_threaded3z TestLRU.test_lru_cache_threaded3  s    			q		)	 
*		-  )9;9tq! ##4q!f=9 	 ;++G4 54;44s   #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   rA  z4TestLRU.test_need_for_rlock.<locals>.DoubleEq.__eq__  s-    66Q;hqk*vv((r   N)r(   r)   r*   r  r  r*  rA  )r  r  s   r   r  r    s    K)r   r  r9   r:   r5  )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   r:  r   r   r   )r1   r'  r   r   r   s        r   r   zTestLRU.test_pickle  s    nn#S__c6K6KKAv66:;\\A\6#\\&,,q%*@AFMM&!, 76 < L66s   (<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  r:  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>.orig2  r  r   r:   r   r  )r  r   rL   r  r  r  r  r:  r   r   r   r  s          r   r   zTestLRU.test_deepcopy0  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   FrS  r  Tc                       yr  r   r   r   r   r   z,TestLRU.test_lru_cache_parameters.<locals>.fB  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_functionH  rF  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_methodM  s    ay r   c                     | fS r   r   )rJ   r1   s    r   test_staticmethodz?TestLRU.test_lru_cache_weakrefable.<locals>.A.test_staticmethodQ  s     ay r   N)r(   r)   r*   r   r  r  r$  r  r\   s   r   r(  r  L  sE    [[""! #! [[""! # !r   r(  )
r   r  weakrefrefr  r  assertIsNotNonegccollectrM  )r1   r  r(  refsr  s   `    r   test_lru_cache_weakrefablez"TestLRU.test_lru_cache_weakrefableG  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>.orige  s    Cr   r9   z())r   r  rO   r   r   r*  r  r  )r1   r   lrus      r   test_common_signatureszTestLRU.test_common_signaturesd  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-  r2  r6  r>  rB  rH  rQ  rV  r_  rf  ri  rm  rs  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  l  s    q519r   c                     d| z  |z   S r  r   r   s     r   c_cached_funcr  q      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   rN  s      r   r  zTestLRUPy.cached_methz  r  r   c                     d| z  |z   S r  r   r   s     r   r  zTestLRUPy.cached_staticmeth~  s     1uqyr   N)r(   r)   r*   r  r   r  r  r  r  r$  r  r   r   r   r  r  v  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   rN  s      r   r  zTestLRUC.cached_meth  r$  r   c                     d| z  |z   S r  r   r   s     r   r  zTestLRUC.cached_staticmeth  s     q519r   N)r(   r)   r*   r  r   r  r  r  r  r$  r  r   r   r   r  r    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%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   r9  s    r   rr  z3TestSingleDispatch.test_simple_overloads.<locals>.g      r   c                      y)Nintegerr   rL  s    r   g_intz7TestSingleDispatch.test_simple_overloads.<locals>.g_int  s    r   r   r   r9   r  r9   r:   r@   )r
   singledispatchregisterr   rO   r1   rr  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   r9  s    r   rr  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   rC  r    r  r   rC  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)NrC  r   rc   s    r   g_Bz(TestSingleDispatch.test_mro.<locals>.g_B  r  r   )r
   r  r  rO   )r1   rr  r(  r  rC  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   r9  s    r   rr  z5TestSingleDispatch.test_register_decorator.<locals>.g  r  r   c                     d| S )Nzint r   rL  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   r9  s    r   rr  z6TestSingleDispatch.test_wrapping_attributes.<locals>.g  s     r   rr  r:   r
  )r
   r  rO   r(   r   r  r  r  )r1   rr  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   r9  s    r   rr  z,TestSingleDispatch.test_c_classes.<locals>.g  r  r   c                     | j                   S r   r  r9  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   r9  s    r   r  z,TestSingleDispatch.test_c_classes.<locals>._  s    'r   r  )r
   r  r  r   DecimalException	SubnormalRoundedrO   )r1   rr  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%  rQ  r
   _compose_mroSequenceMutableMappingMappingSetr   rP   rO   
CollectionSizedIterable	Containerr   OrderedDictChainMapr   defaultdictMutableSequencer  
ReversibleCallable)r1   rE   mror  haystackry  r  r  s           r   test_compose_mroz#TestSingleDispatch.test_compose_mro  s   OO$$Q--qyy!%%@$U+HD(#AQq'7'7!"qww

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

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

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

!"f!6 7 ,r   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   r9  s    r   rr  z/TestSingleDispatch.test_register_abc.<locals>.g  r  r   r   c                      yNsizedr   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>&      r   r:  c                      yNmutablemappingr   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>,  s    1Ar   r>  c                      y)Nchainmapr   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>2  s    Zr   c                      y)Nmutablesequencer   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>8  s    2Cr   rB  c                      y)N
mutablesetr   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>>  s    \r   rD  c                      yNmappingr   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>D  s    )r   c                      yNsequencer   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>J      :r   rJ  c                      yNr  r   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>P      er   r  c                      yNrP   r   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>V      Vr   rP   c                      yNr/   r   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>\  rQ  r   r/   c                      y)Nconcrete-setr   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>b  s    Nr   rU  c                      y)N
frozen-setr   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>h  s    ,r   rW  c                      y)Nr   r   r9  s    r   rK   z6TestSingleDispatch.test_register_abc.<locals>.<lambda>n  s    gr   r   )r%  rQ  r   	frozensetr
   r  rO   r  r*  r&  r.  r0  
MutableSetr'  r%  r(  rP   r/   r  r   )r1   rE   rd   lr   r   trr  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(  r`  x  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__{  r   r   Nr(   r)   r*   r   r   r   r   rC  rb  z      r   rC  c                       e Zd Zy))TestSingleDispatch.test_c3_abc.<locals>.CNr'   r   r   r   r  rg  }  rg  r   r  c                       e Zd Zy))TestSingleDispatch.test_c3_abc.<locals>.DNr'   r   r   r   r  ri    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__  r!  r   Nr"  r   r   r   r  rk    r#  r   r  )abcs)r%  rQ  r
   _c3_mror   r,  r  r2  r*  r   rO   r'  r+  )r1   rE   r3  r(  rC  r  r  r  rq   rm  	many_abcss              r   test_c3_abczTestSingleDispatch.test_c3_abcu  s   OO	 		 	 
			 	 
		 		1a 	 qzz1aa!VL !''1::q{{!CDDS.9 E 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__  r   r   Nrd  r   r   r   MetaArs    re  r   ru  c                       e Zd Zy)-TestSingleDispatch.test_false_meta.<locals>.ANr'   r   r   r   r(  rw    r  r   r(  r  c                       e Zd Zy).TestSingleDispatch.test_false_meta.<locals>.AANr'   r   r   r   AAry    r  r   rz  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   r~  )r   r
   r  r  rO   )r1   ru  r(  rz  r|  r  aas          r   test_false_metaz"TestSingleDispatch.test_false_meta  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   rr  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   Nrd  r   r   r   Or    re  r   r  r   c                      y)Niterabler   r  s    r   rK   z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>  rK  r   c                      yN	containerr   r  s    r   rK   z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>  s    Kr   c                      yr9  r   r  s    r   rK   z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>  r;  r   c                      yrM  r   r  s    r   rK   z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>  rN  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   Nrd  r   r   r   Qr    re  r   r  c                      yr  r   r  s    r   hz0TestSingleDispatch.test_mro_conflicts.<locals>.h  r  r   c                      yr9  r   r  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>._  r  r   c                      yr  r   r  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>._      r   c                       yr  r   r   r   r   rK   z7TestSingleDispatch.test_mro_conflicts.<locals>.<lambda>  s    ar   )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   r  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>.i  r  r   c                      yrF  r   r  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>._      r   c                      yrI  r   r  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>._      r   rJ  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   Nrd  r   r   r   ri  r    re  r   ri  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   Nrd  r   r   r   Ur    re  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   Nrd  r   r   r   Vr  	  re  r   r  c                      yr  r   r  s    r   jz0TestSingleDispatch.test_mro_conflicts.<locals>.j	  r  r   c                      y)Nr   r   r  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>._	  s    r   c                      yr  r   r  s    r   r  z0TestSingleDispatch.test_mro_conflicts.<locals>._	  r  r   r   r  )r%  rQ  r
   r  r*  rO   r  r+  r,  r(  rY   r  r   r   rN  r/  r0  r&  )r1   rE   rr  r  r:  r  rS   re_oner  qr  r  re_twor  r  r   r  ri  r\  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	 	 
!	 |,k%%i01 -  !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 -,@ -,P -,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   r}  r\   s    r   r}  zETestSingleDispatch.test_cache_invalidation.<locals>.TracingDict.clear.	  s    		!r   )r(   r)   r*   r  r   r  r}  r  )r  r  s   @r   r  r  "	  s    "'"r   r  WeakKeyDictionaryc                       S r   r   )tds   r   rK   z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>2	  s    Rr   c                      yr  r   r  s    r   rr  z5TestSingleDispatch.test_cache_invalidation.<locals>.g4	      r   r   r9   r:   c                      yrS  r   r  s    r   rK   z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>J	      r   r/   c                       e Zd Zy)5TestSingleDispatch.test_cache_invalidation.<locals>.XNr'   r   r   r   r  r  Y	  s    r   r  c                      yr9  r   r  s    r   rK   z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>a	  s    Gr   r:  c                      yr=  r   r  s    r   rK   z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>x	  s    5Er   r>  c                      yrP  r   r  s    r   rK   z<TestSingleDispatch.test_cache_invalidation.<locals>.<lambda>~	  r  r   rP   )r%  r  r  r   	swap_attrrQ  r
   r  rO   r  r  r  rP   r   registryr   r/   r  
_find_implr&  r*  r  rZ  _clear_cache)
r1   r  r  rE   rr  rd   r[  r  r  r  s
           @@r   test_cache_invalidationz*TestSingleDispatch.test_cache_invalidation	  s   (	"( 	" ]w(;ZH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 IHHs   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   r  s    r   r  z.TestSingleDispatch.test_annotations.<locals>.i	  r  r   r  c                      yrF  r   r  s    r   r  z.TestSingleDispatch.test_annotations.<locals>._	  r  r   c                      yrI  r   r  s    r   r  z.TestSingleDispatch.test_annotations.<locals>._	  r  r   r   r>   r9   rG  r  rJ  r   c                       e Zd Zd Zd Zy).TestSingleDispatch.test_annotations.<locals>._c                     || _         y r   r  r1   r  s     r   r  z7TestSingleDispatch.test_annotations.<locals>._.__init__	  	    r   c                      | j                   |k(  S r   r  r0   s     r   rA  z5TestSingleDispatch.test_annotations.<locals>._.__eq__	  s    xx5((r   N)r(   r)   r*   r  rA  r   r   r   r  r  	  s    )r   r  )r  zcollections.abc.Sequence)r
   r  r  r%  rQ  r'  rO   r   )r1   r  r  s      r   test_annotationsz#TestSingleDispatch.test_annotations	  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  r  r  s     r   r\  z4TestSingleDispatch.test_method_register.<locals>.A.t	  s	    !r   c                     d| _         y Nr   r  r  s     r   r  z4TestSingleDispatch.test_method_register.<locals>.A._	  	     r   c                     d| _         y Nr   r  r  s     r   r  z4TestSingleDispatch.test_method_register.<locals>.A._	  r  r   N
r(   r)   r*   r
   singledispatchmethodr\  r  r   r  r   r   r   r   r(  r  	  sN    ++" ,"ZZ_! !ZZ_! !r   r(  r   r   r  r   r   r[  r   )r\  rO   r  r5  r6  )r1   r(  r>   r  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   r  s    r   r\  z:TestSingleDispatch.test_staticmethod_register.<locals>.A.t	  	     
r   c                 "    t        | t              S r   rt  r   r  s    r   r  z:TestSingleDispatch.test_staticmethod_register.<locals>.A._	       "#s++r   c                 "    t        | t              S r   rt  r   r  s    r   r  z:TestSingleDispatch.test_staticmethod_register.<locals>.A._	  r  r   Nr(   r)   r*   r
   r  r$  r\  r  r   r  r   r   r   r   r(  r  	  sf    ++  ,ZZ_,  ,ZZ_,  ,r   r(  r   r   r[  rM   r\  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   r  r  s     r   r  z@TestSingleDispatch.test_classmethod_register.<locals>.A.__init__	  r  r   c                      | d      S r  r   r'  r  s     r   r\  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&  r\  r  r   r  r   r   r   r   r(  r  	  sm     ++#  ,#ZZ_"  "ZZ_"  "r   r(  r   r   r   r   r[  r   rO   r\  r  rG  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   r  r  s     r   r  z=TestSingleDispatch.test_callable_register.<locals>.A.__init__	  r  r   c                      | d      S r  r   r  s     r   r\  z6TestSingleDispatch.test_callable_register.<locals>.A.t	  r  r   N)r(   r)   r*   r  r
   r  r&  r\  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   r[  r   )r\  r  r   r&  r   rO   r  )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   rN  s      r   rO  zETestSingleDispatch.test_abstractmethod_register.<locals>.Abstract.add	  s     r   N)r(   r)   r*   r
   r  rQ  rR  rO  r   r   r   rT  r  	  s(    ++   ,r   rT  r  rO  )rQ  rV  rM   rO  rU  r"   rY   rZ   )r1   rT  s     r   test_abstractmethod_registerz/TestSingleDispatch.test_abstractmethod_register	  sf    	 	 	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   r\  z6TestSingleDispatch.test_type_ann_register.<locals>.A.t

  r  r   r  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   r[  r   )rO   r\  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   r  s    r   r\  zCTestSingleDispatch.test_staticmethod_type_ann_register.<locals>.A.t
  r  r   r  c                 "    t        | t              S r   r  r  s    r   r  zCTestSingleDispatch.test_staticmethod_type_ann_register.<locals>.A._
  r  r   c                 "    t        | t              S r   r  r  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   r[  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   r  r  s     r   r  zITestSingleDispatch.test_classmethod_type_ann_register.<locals>.A.__init__/
  r  r   c                      | d      S r  r   r  s     r   r\  zBTestSingleDispatch.test_classmethod_type_ann_register.<locals>.A.t2
  r  r   r  c                      | d      S r  r   r  s     r   r  zBTestSingleDispatch.test_classmethod_type_ann_register.<locals>.A._6
  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   r[  r   r  rG  s     r   "test_classmethod_type_ann_registerz5TestSingleDispatch.test_classmethod_type_ann_register-
  r  r   c                     G d d      }|j                   dz   }|j                   |       j                  |j                   |       j                  |j                   |       j                  fD ]  }| j	                  |      5  | j                  |j                   ||j                  z          | j                  |j                  t        j                  rdnd        | j                  |j                  d   t               d d d         | 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   x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>.Ar  returnc                     t        |      S My function docstringr   r  s     r   r    zBTestSingleDispatch.test_method_wrapping_attributes.<locals>.A.funcE
       3xr   c                     t        |      S r:  r<  r  s     r   cls_funczFTestSingleDispatch.test_method_wrapping_attributes.<locals>.A.cls_funcI
       3xr   c                     t        |       S r:  r<  r  s    r   static_funczITestSingleDispatch.test_method_wrapping_attributes.<locals>.A.static_funcN
  r@  r   N)r(   r)   r*   r
   r  r   r   r    r&  r?  r$  rB  r   r   r   r(  r7  D
  s    ++      ,  ++ 3  3    ,  ++       , r   r(  r  methr;  r  r    r?  rB  )r*   r    r?  rB  r:  rO   r(   r  r   HAVE_DOCSTRINGSrx  r   )r1   r(  prefixrD  s       r   test_method_wrapping_attributesz2TestSingleDispatch.test_method_wrapping_attributesC
  s|   	  	   #%FFCHHJJCLLMMCOO
D 4(  !2!2FT]]4JK  %,%<%< #:'+.   !5!5e!<cB )(
  	&1**F3,,j9..
;//?11=A )(s   A;G;;H	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   ra  s     r   r`  zgTestSingleDispatch.test_double_wrapped_methods.<locals>.classmethod_friendly_decorator.<locals>.wrappero
  s     ///r   )__func__r&  r
   r  )r    r`  ra  s     @r   classmethod_friendly_decoratorzVTestSingleDispatch.test_double_wrapped_methods.<locals>.classmethod_friendly_decoratorm
  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>.WithoutSingleDispatchr  r8  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_managerv
  s     "c(N!6    c                     t        |      S r   r<  r  s     r   decorated_classmethodzcTestSingleDispatch.test_double_wrapped_methods.<locals>.WithoutSingleDispatch.decorated_classmethod~
  r=  r   N)
r(   r)   r*   r&  
contextlibcontextmanagerr   r   rQ  rT  rL  s   r   WithoutSingleDispatchrN  u
  s[    &&"c "c " ' " ,       , r   rX  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>.WithSingleDispatchr  r8  c              3   6   K   	 t        |       y#  Y yxY ww)r;  rP  r<  r  s     r   rQ  z^TestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatch.cls_context_manager
  s     
"c(N!6rR  c                     t        |      S r:  r<  r  s     r   rT  z`TestSingleDispatch.test_double_wrapped_methods.<locals>.WithSingleDispatch.decorated_classmethod
  s    
 3xr   N)r(   r)   r*   r
   r  r&  rU  rV  r   r   rQ  rT  rW  s   r   WithSingleDispatchrZ  
  sw    ++&&"c "c " '  ," +++       , , r   r]  r`   5)rQ  rT  )rB  rC  r;  r  rQ  rT  )rQ  rO   rT  r:  r   r(   r  r   rE  rx  r   )	r1   rX  r]  r   without_single_dispatch_foosingle_dispatch_foomethod_namerD  rL  s	           @r   test_double_wrapped_methodsz.TestSingleDispatch.test_double_wrapped_methodsl
  s   		  	 	  	 ( #66q9S*-' :  33A6#"% 7 	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1 L 22 4444 66	
D 4(  %,%<%< #:'+.   !5!5e!<cB )(
 	22;;!	
 	 44==!	
 	44==#	
 	 66??#	
m :9 76 21" )(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   r  s    r   r  z8TestSingleDispatch.test_invalid_registrations.<locals>.i
  r  r   r  c                      y)NzI annotated with a non-typer   r  s    r   r  z8TestSingleDispatch.test_invalid_registrations.<locals>._
  s    4r   42c                      y)NzI forgot to annotater   r  s    r   r  z8TestSingleDispatch.test_invalid_registrations.<locals>._
  s    -r   zB<function TestSingleDispatch.test_invalid_registrations.<locals>._r  c                      y)Nz%I annotated with a generic collectionr   r  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   r  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   rN  r  endswithtypingr+  Unionr   )r1   
msg_prefix
msg_suffixr  excr  s         r   test_invalid_registrationsz-TestSingleDispatch.test_invalid_registrations
  sd   ?
" 	 
	!	!	 
"	y)SZZ^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 *) *) *) *)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  rm  r   z)f requires at least 1 positional argument)r
   r  assertRaisesRegexrZ   )r1   r   msgs      r    test_invalid_positional_argumentz3TestSingleDispatch.test_invalid_positional_argument  s@    		!	!	 
"	9##Is3C 433s   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   r  s    r   r   z(TestSingleDispatch.test_union.<locals>.f  r  r   r  c                      yNtyping.Unionr   r  s    r   r  z(TestSingleDispatch.test_union.<locals>._      !r   c                      yNtypes.UnionTyper   r  s    r   r  z(TestSingleDispatch.test_union.<locals>._      $r   ry  r   r|  r   r9   r  rY  )
r
   r  r  rk  rl  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rx  r   r  s    r   r   z1TestSingleDispatch.test_union_conflict.<locals>.f   r  r   r  c                      yr{  r   r  s    r   r  z1TestSingleDispatch.test_union_conflict.<locals>._$  r}  r   c                      yr  r   r  s    r   r  z1TestSingleDispatch.test_union_conflict.<locals>._(  r  r   ry  r   r  r   r|  r9   )	r
   r  r  rk  rl  r   r  r   rO   r  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rx  r   r  s    r   typing_unionz8TestSingleDispatch.test_union_None.<locals>.typing_union2  r  r   r  c                      yr{  r   r  s    r   r  z-TestSingleDispatch.test_union_None.<locals>._6  r}  r   r9   ry  r   r|  c                      yrx  r   r  s    r   types_unionz7TestSingleDispatch.test_union_None.<locals>.types_union>  r  r   c                      yr  r   r  s    r   r  z-TestSingleDispatch.test_union_None.<locals>._B  r  r   r  )r
   r  r  rk  rl  r   rO   r   )r1   r  r  r  s       r   test_union_Nonez"TestSingleDispatch.test_union_None1  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rx  r   r  s    r   r   z8TestSingleDispatch.test_register_genericalias.<locals>.fK  r  r   Invalid first argument to c                      yNztypes.GenericAliasr   r  s    r   rK   z?TestSingleDispatch.test_register_genericalias.<locals>.<lambda>P  s    .Br   c                      yNztyping.GenericAliasr   r  s    r   rK   z?TestSingleDispatch.test_register_genericalias.<locals>.<lambda>R  s    5Jr   c                      y)Nz$types.UnionTypes(types.GenericAlias)r   r  s    r   rK   z?TestSingleDispatch.test_register_genericalias.<locals>.<lambda>T  s    4Zr   c                      yNz!typing.Union[typing.GenericAlias]r   r  s    r   rK   z?TestSingleDispatch.test_register_genericalias.<locals>.<lambda>V  s    ?br   r9   ry  rY  r   r   )r
   r  rs  rZ   r  r/   r   rk  Listr   r  r  rO   r   s     r   test_register_genericaliasz-TestSingleDispatch.test_register_genericaliasJ  sL   		!	!	 
"	 ##I/KLJJtCy"BC M##I/KLJJv{{3')JK M##I/KLJJtCy3(Z[ M##I/KLJJv{{5)E13bc M 	A3+C59-2	*3+ MLLLLLLLs/   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rx  r   r  s    r   r   zBTestSingleDispatch.test_register_genericalias_decorator.<locals>.f^  r  r   r  )
r
   r  rs  rZ   r  r/   r   rk  r  r   r   s     r   $test_register_genericalias_decoratorz7TestSingleDispatch.test_register_genericalias_decorator]  s    		!	!	 
"	 ##I/KLJJtCy! M##I/KLJJv{{3'( M##I/KLJJtCy3' M##I/KLJJv{{3'#-. ML MLLLLLLLs/   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rx  r   r  s    r   r   zCTestSingleDispatch.test_register_genericalias_annotation.<locals>.fl  r  r   zInvalid annotation for 'arg'r  c                      yr  r   r  s    r   r  zCTestSingleDispatch.test_register_genericalias_annotation.<locals>._q  s    +r   c                      yr  r   r  s    r   r  zCTestSingleDispatch.test_register_genericalias_annotation.<locals>._u  s    ,r   c                      y)Nz#types.UnionType(types.GenericAlias)r   r  s    r   r  zCTestSingleDispatch.test_register_genericalias_annotation.<locals>._y  s    <r   c                      yr  r   r  s    r   r  zCTestSingleDispatch.test_register_genericalias_annotation.<locals>._}  s    :r   r9   ry  rY  r   r   )r
   r  rs  rZ   r  r/   r   rk  r  r  r   r  rO   r  s      r   %test_register_genericalias_annotationz8TestSingleDispatch.test_register_genericalias_annotationk  s   		!	!	 
"	 ##I/MNZZ,tCy , , O ##I/MNZZ-v{{5) - - O ##I/MNZZ=tCy3 = = O ##I/MNZZ;v{{5)E1 ; ; O
 	A3+C59-2	*3+) ON ON ON ONs/   !F,+F%5(F2;2F>F"%F/2F;>Gc                      G d d      } |       } |       }| j                  |j                  d      |       | j                  |j                  d      |       y )Nc                   <    e Zd Zd Zd Zej                  d        Zy)9TestSingleDispatch.test_method_equal_instances.<locals>.Ac                      yNTr   r0   s     r   rA  z@TestSingleDispatch.test_method_equal_instances.<locals>.A.__eq__  s    r   c                      yr  r   r\   s    r   r*  zBTestSingleDispatch.test_method_equal_instances.<locals>.A.__hash__  r   r   c                     | S r   r   r  s     r   r\  z;TestSingleDispatch.test_method_equal_instances.<locals>.A.t  s    r   Nr(   r)   r*   rA  r*  r
   r  r\  r   r   r   r(  r    s$    ++ ,r   r(  r9   r:   )r   r\  )r1   r(  r>   r?   s       r   test_method_equal_instancesz.TestSingleDispatch.test_method_equal_instances  sH    	 	 CCacc!fa acc!fa r   c                      G d d      } |       j                  d       t         |       j                           |       j                    |       j                   k(   y )Nc                   <    e Zd Zd Zd Zej                  d        Zy)2TestSingleDispatch.test_method_bad_hash.<locals>.Ac                     t         r   AssertionErrorr0   s     r   rA  z9TestSingleDispatch.test_method_bad_hash.<locals>.A.__eq__      $$r   c                     t         r   r  r\   s    r   r*  z;TestSingleDispatch.test_method_bad_hash.<locals>.A.__hash__  r  r   c                      y r   r   r  s     r   r\  z4TestSingleDispatch.test_method_bad_hash.<locals>.A.t  rP  r   Nr  r   r   r   r(  r    s$    %%++ ,r   r(  r9   )r\  r#  rG  s     r   test_method_bad_hashz'TestSingleDispatch.test_method_bad_hash  s;    	 	 	
aQSUU	r   c                     G d d      } |       }|j                  d      }| j                   |              ~t        j                  d      st        j                          | j                   |               |       }|j                   }~t        j                           |d      }| j                   |              ~t        j                  d      st        j                          | j                   |              y )Nc                   0    e Zd Zej                  d        Zy)<TestSingleDispatch.test_method_no_reference_loops.<locals>.Ac                 ,    t        j                  |       S r   )r  r  r  s     r   r\  z>TestSingleDispatch.test_method_no_reference_loops.<locals>.A.t  s    {{4((r   N)r(   r)   r*   r
   r  r\  r   r   r   r(  r    s    ++) ,)r   r(  r9   T)cpython)r\  r  r   check_impl_detailr   rM  )r1   r(  r>   r   r\  s        r   test_method_no_reference_loopsz1TestSingleDispatch.test_method_no_reference_loops  s    	) 	)
 CCCFQS!((6 !#CCCaDQS!((6 !#r   c                     t         j                  dt        dt        fd       }|j                  dt        dt
        dt        fd       }| j                  t        t        j                  |            d       y )Nr  r8  c                     t        |       S r   r<  itemr  s     r   r    z0TestSingleDispatch.test_signatures.<locals>.func      t9r   r  c                     t        |       S r   r<  r  s     r   r  z-TestSingleDispatch.test_signatures.<locals>._  r  r   (item, arg: int) -> str)	r
   r  r   r   r  r  rO   r   r*  )r1   r    r  s      r   test_signaturesz"TestSingleDispatch.test_signatures  sx    		!	!	C 	C 	 
"			C 	e 	 	 
	 	Y44T:;2	4r   c                     G d d      }| j                  t        t        j                  |j                              d       | j                  t        t        j                   |       j                              d       | j                  t        t        j                  |j
                              d       | j                  t        t        j                  |j                              d       y )Nc                   r   e Zd ZdedefdZededefd       Zej                  dedef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ej                  ededefd	              Ze
j                  ededefd
              Zy)4TestSingleDispatch.test_method_signatures.<locals>.Ar  r8  c                     t        |      S r   r<  r1   r  r  s      r   ry  z6TestSingleDispatch.test_method_signatures.<locals>.A.m  s    4y r   c                     t        |      S r   r<  r'  r  r  s      r   rP  z7TestSingleDispatch.test_method_signatures.<locals>.A.cm      4y r   c                     t        |      S r   r<  r  s      r   r    z9TestSingleDispatch.test_method_signatures.<locals>.A.func  r  r   c                     t        |      S r   r<  r  s      r   r  z6TestSingleDispatch.test_method_signatures.<locals>.A._  r  r   c                     t        |      S r   r<  r  s      r   r?  z=TestSingleDispatch.test_method_signatures.<locals>.A.cls_func  r=  r   c                     t        |      S r   r<  r  s      r   r  z6TestSingleDispatch.test_method_signatures.<locals>.A._       4y r   c                     t        |      S r   r<  r  s     r   rB  z@TestSingleDispatch.test_method_signatures.<locals>.A.static_func  r=  r   c                     t        |       S r   r<  r  s     r   r  z6TestSingleDispatch.test_method_signatures.<locals>.A._  r  r   N)r(   r)   r*   r   r   ry  r&  rP  r
   r  r    r  r  r  r?  r$  rB  r   r   r   r(  r    s7   !3 !3 !!3 !3 ! !++!c !c ! ,!]]!5 !S ! ! ++       , ]]!% !C !  ! ++ s  s    , ]]!U !s !  !r   r(  z(self, item, arg: int) -> strz(cls, item, arg: int) -> strr  )rO   r   r   r*  r    r?  rB  rG  s     r   test_method_signaturesz)TestSingleDispatch.test_method_signatures  s    	! 	!> 	Y44QVV<=8	:Y44QSXX>?8	:Y44QZZ@A7	9Y44Q]]CD2	4r   N)+r(   r)   r*   r  r  r  r  r  
skipUnlessr   r   r2  r  r5  r]  rp  r  r  r  r  r  r   r  r  r  r%  r,  r4  rG  rb  rp  ru  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r    s    	-&.
;7 X"56:  7:"47l\(|;.+$},@d)L*6-4((/,/.+"((/,'BRd
L0d4&2$?2,&/,6! 4	4'4r   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__  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.cost  s7     YYJJ!OJ zz zzs	   7AN)r(   r)   r*   r  r  r  cached_propertyr  r   r   r   r  r    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   r  s     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  rs  rZ   r  r  s     r   test_object_with_slotsz)TestCachedProperty.test_object_with_slots%  s7    &(##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r  r   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  3  r  r   r  r  zkThe '__dict__' attribute on 'MyMeta' instance does not support item assignment for caching 'prop' property.)r   rs  rZ   r  )r1   r  r  s      r   test_immutable_dictz&TestCachedProperty.test_immutable_dict-  sI    	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   rN  )r1   ctxr  s      r   test_reuse_different_namesz-TestCachedProperty.test_reuse_different_names<  sT    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>._cpO  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  U      Br   r(  c                       e Zd ZW  Zy)2TestCachedProperty.test_reuse_same_name.<locals>.BNr  r  s   r   rC  r  X  r  r   rC  r9   r:   N)r  r  rO   r  )r1   r(  rC  r>   r?   r  r  s        @@r   test_reuse_same_namez'TestCachedProperty.test_reuse_same_nameK  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>c  s    Dr   c                       e Zd Zy)8TestCachedProperty.test_set_name_not_called.<locals>.FooNr'   r   r   r   Foor  d  r  r   r  zGCannot use cached_property instance without calling __set_name__ on it.)r  r  r  rs  rZ   )r1   r  r  s      r   test_set_name_not_calledz+TestCachedProperty.test_set_name_not_calledb  sT    )).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_classo  s    n11<3O3OPr   c                     | j                  t        j                  j                  t        j
                  rd       y d        y )Nr  )rO   r  r  r  r   rE  r\   s    r   test_doczTestCachedProperty.test_docr  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   r2  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&  z  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  r\  r)  s      @r   test_subclass_with___set__z-TestCachedProperty.test_subclass_with___set__x  sY    	;|'C'C 	;	" 	" G##r   N)r(   r)   r*   r  r  r  r  r
  r  r  r!  r#  r0  r   r   r   r  r    s5    '
.
".Q&$r   r  __main__)QrQ  r0  r%  collections.abcr   	itertoolsr   r   randomr   r   r  r   r  r  rk  r  unittest.mockr  r  r   rU  inspectr   test.supportr   r	   r
   import_fresh_moduler  r  r   rL   r   r  rV  r   r   r$   r   r&   r-   rP   r5   r7   r  TestCaser   r
  r  r  r  r  r  r]  r  r  r  r  r  r.  r4  r6  rF  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 	I3 I3X
 ["DE+$; 1 1 +$ F+$\#K!2!2 #
 ;.. 	,, 	 ["DE$< $ F$ M  G()) G(T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&)X..  ["DEH--  F
{N {N|    **  ["DEw))  F]4** ]4@# 9 9@ @q$** q$h zHMMO r   