
    0hhu8                       S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKJr  S SKJrJrJr  S SKJr  S SKJr  S SKJr  S SKJrJr  SqSr " S	 S
5      r " S S5      rS rS r " S S5      r " S S5      r " S S\R@                  5      r!\RD                  S+S j5       r# " S S\!5      r$ " S S\!5      r% " S S\R@                  5      r& " S S\!5      r'S SKJ(r(   " S S \(RR                  5      r* " S! S"\(RR                  5      r+ " S# S$\R@                  5      r, " S% S&\R@                  5      r-S'r.S(\.0r/S) r0\1S*:X  a  \Rd                  " 5         gg),    N)support)script_helper	ALWAYS_EQsuppress_immortalization)
gc_collect)import_helper)threading_helper)is_wasiPy_DEBUGfoobarc                       \ rS rSrS rSrg)C   c                     g N selfs    :/opt/python-3.13.8/usr/lib/python3.13/test/test_weakref.pymethodC.method   s        r   N)__name__
__module____qualname____firstlineno__r   __static_attributes__r   r   r   r   r      s    r   r   c                       \ rS rSrSrS rSrg)Callable"   Nc                     Xl         g r   barr   xs     r   __call__Callable.__call__%   s    r   r"   )r   r   r   r   r#   r&   r   r   r   r   r   r   "   s    
Cr   r   c                      S n U $ )Nc                      g r   r   r   r   r   fcreate_function.<locals>.f*   s    Tr   r   )r*   s    r   create_functionr,   )   s
    Hr   c                  *    [        5       R                  $ r   )r   r   r   r   r   create_bound_methodr.   -   s    3::r   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)Object1   c                     Xl         g r   arg)r   r4   s     r   __init__Object.__init__2   s    r   c                      SU R                   -  $ )Nz<Object %r>r3   r   s    r   __repr__Object.__repr__4   s    txx''r   c                 j    [        U[        5      (       a  U R                  UR                  :H  $ [        $ r   
isinstancer0   r4   NotImplementedr   others     r   __eq__Object.__eq__6   s(    eV$$88uyy((r   c                 j    [        U[        5      (       a  U R                  UR                  :  $ [        $ r   r;   r>   s     r   __lt__Object.__lt__:   s(    eV$$88eii''r   c                 ,    [        U R                  5      $ r   )hashr4   r   s    r   __hash__Object.__hash__>   s    DHH~r   c                     g)N   r   r   s    r   some_methodObject.some_method@       r   c                     g)N   r   r   s    r   other_methodObject.other_methodB   rM   r   r3   N)r   r   r   r   r5   r8   r@   rC   rG   rK   rP   r   r   r   r   r0   r0   1   s%    (r   r0   c                       \ rS rSrS rSrg)RefCycleF   c                     X l         g r   cycler   s    r   r5   RefCycle.__init__G   s    
r   rV   Nr   r   r   r   r5   r   r   r   r   rS   rS   F   s    r   rS   c                        \ rS rSrS rS rSrg)TestBaseK   c                     SU l         g Nr   cbcalledr   s    r   setUpTestBase.setUpM   s	    r   c                 .    U =R                   S-  sl         g N   r_   )r   refs     r   callbackTestBase.callbackP   s    r   r_   N)r   r   r   r   ra   rg   r   r   r   r   r[   r[   K   s    r   r[   c              #   &  ^ ^#    SmU U4S jn[         R                  " 5          [        R                  " US9nUR	                  5          Sv   SmUR                  5          SSS5        g! SmUR                  5         f = f! , (       d  f       g= f7f)zJ
Ensure GC collections happen in a different thread, at a high frequency.
Fc                  ~   > T(       d5  [         R                  " T 5        [        R                  " 5         T(       d  M4  g g r   )timesleepgccollect)periodplease_stops   r   rn   "collect_in_thread.<locals>.collect[   s"    JJvJJL +r   )targetNT)r   
disable_gc	threadingThreadstartjoin)ro   rn   trp   s   `  @r   collect_in_threadry   T   sq     
 K
 
			G,			KFFH 
	 KFFH 
	s4   B%B 	A)B  	B)A==B  
B
Bc                   V   \ rS rSrS r\R                  S 5       rS rS r	\R                  S 5       r
S rS rS	 rS
 r\R                  S 5       rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S  r$S! r%S" r&S# r'S$ r(S% r)\*" 5       S& 5       r+S' r,S( r-\*" 5       S) 5       r.S* r/S+ r0S, r1S- r2S. r3S/ r4\*" 5       S0 5       r5S1 r6S2 r7S3 r8\9Rt                  " \;=(       a    \<S45      S5 5       r=S6 r>S7 r?S8 r@S9 rA\R                  S: 5       rBS;rCg<)=ReferencesTestCasej   c                     U R                  [        5        U R                  [        5        U R                  [        5        [        5       n[        R
                  " U5      n[        U5        A[        U5        g r   )check_basic_refr   r,   r.   weakrefrf   repr)r   owrs      r   test_basic_ref!ReferencesTestCase.test_basic_refl   sT    Q_-01 C[[^RRr   c                    [        5       n[        R                  " U5      nS[        S:X  a  SO[         R                  S-    [         R
                   S3nU R                  [        U5      U5        S n[        5         U R                  [        U5      S5         " S S5      nU" 5       n[        R                  " U5      nS[        S:X  a  SOUR                  S-    UR
                   S	3nU R                  [        U5      U5        g )
Nz <weakref at 0x[0-9a-fA-F]+; to '__main__ .' at 0x[0-9a-fA-F]+>z!<weakref at 0x[0-9a-fA-F]+; dead>c                   $    \ rS rSr\S 5       r Srg)2ReferencesTestCase.test_ref_repr.<locals>.WithName   c                     g)Ncustom_namer   r   s    r   r   ;ReferencesTestCase.test_ref_repr.<locals>.WithName.__name__   s    $r   r   N)r   r   r   r   propertyr   r   r   r   WithNamer      s    % %r   r   z%' at 0x[0-9a-fA-F]+ +\(custom_name\)>)	r   r   rf   r   r   r   assertRegexr   r   )r   objrf   regexr   obj2ref2s          r   test_ref_repr ReferencesTestCase.test_ref_reprz   s    ckk#"j0BallS6HI!..IY Z"# 	
 	cE*c=	@	% 	%
 z{{4 "j0Bh6I6IC6OP%%& '34 	 	dU+r   c                      " S S[         5      nU" SS9n[        R                  " U5      nU R                  S[	        U5      5        U R                  S[        U5      5        g )Nc                       \ rS rSrS rSrg)>ReferencesTestCase.test_repr_failure_gh99184.<locals>.MyConfig   c                 
    X   $ r   r   r$   s     r   __getattr__JReferencesTestCase.test_repr_failure_gh99184.<locals>.MyConfig.__getattr__   s	    wr   r   N)r   r   r   r   r   r   r   r   r   MyConfigr          r   r   rO   )offset)dictr   rf   assertInr   str)r   r   r   obj_weakrefs       r   test_repr_failure_gh99184,ReferencesTestCase.test_repr_failure_gh99184   sN    	t 	 a kk#&j${"34j#k"23r   c                     U R                  [        5        U R                  [        5        U R                  [        5        g r   )check_basic_callbackr   r,   r.   r   s    r   test_basic_callback&ReferencesTestCase.test_basic_callback   s-    !!!$!!/2!!"56r   c                 "   [         R                  " S5      nUR                  nU" 5       n[        R                  " U5      nU R                  U" 5       U5        AU R                  U" 5       5        U R                  U5        U R                  U5        g )N	_testcapi)	r   import_modulecreate_cfunctionr   rf   assertIsassertIsNoner~   r   )r   r   r   r*   r   s        r   test_cfunction!ReferencesTestCase.test_cfunction   st    !//<	$55[[^bdA"$-.!!"23r   c                 D   [        5       n[        R                  " XR                  5      n[        R                  " XR                  5      nA[	        5         U R                  U" 5       S5        U R                  U" 5       S5        U R                  U R                  SS5        g )Nz$expected reference to be invalidated   z-callback not called the right number of times)r   r   rf   rg   r   r   assertEqualr`   r   r   ref1r   s       r   test_multiple_callbacks*ReferencesTestCase.test_multiple_callbacks   su    C{{1mm,{{1mm,$&"HI$&"HID	Fr   c                     U 4S jn[        5       n[        R                  " X!5      U l        [        R                  " X!5      nAg )Nc                 $    UR                  5         g r   rf   )objectr   s     r   rg   DReferencesTestCase.test_multiple_selfref_callbacks.<locals>.callback   s    HHJr   )r   r   rf   )r   rg   cr   s       r   test_multiple_selfref_callbacks2ReferencesTestCase.test_multiple_selfref_callbacks   s4     #' 	C;;q+{{1'r   c                 `    [        5       nU R                  [        [        R                  US S9  g )N)rg   )r   assertRaises	TypeErrorr   rf   )r   r   s     r   test_constructor_kwargs*ReferencesTestCase.test_constructor_kwargs   s$    C)W[[!dCr   c                    [        5       nSUl        [        R                  " XR                  5      n[        R                  " XR                  5      nA[        5         S nU R                  [        XB5        U R                  [        XC5        [        R                  " [        5       5      n[        5         U R                  [        [        U5        U R                  U R                  S5        g )Nre   c                     U R                     g r   r"   )proxys    r   check0ReferencesTestCase.test_proxy_ref.<locals>.check   s	    IIr   r   )r   r#   r   r   rg   r   r   ReferenceErrorboolr   r`   )r   r   r   r   r   ref3s         r   test_proxy_ref!ReferencesTestCase.test_proxy_ref   s    C}}Q.}}Q.	 	.%6.%6}}QS!.$5*r   c                 B   [        5       n[        R                  " XR                  5      nS[        S:X  a  SO[         R
                  S-    [         R                   S3nU R                  [        U5      U5        S n[        5         U R                  [        U5      S5        g )Nz"<weakproxy at 0x[0-9a-fA-F]+; to 'r   r   r   r   z#<weakproxy at 0x[0-9a-fA-F]+; dead>)
r   r   r   rg   r   r   r   r   r   r   )r   r   rf   r   s       r   test_proxy_repr"ReferencesTestCase.test_proxy_repr   s    cmmC/"j0BallS6HI!..IY Z"# 	
 	cE*c?	Br   c                     U" 5       n[         R                  " U5      nU R                  U" 5       S5        U" 5       nU R                  X$S5        g )Nz,weak reference to live object should be livez-<ref>() should return original object if live)r   rf   assertIsNotNoner   )r   factoryr   rf   o2s        r   r~   "ReferencesTestCase.check_basic_ref   sE    Ikk!nSUC	EUaD	Fr   c                     SU l         U" 5       n[        R                  " X R                  5      nA[	        5         U R                  U R                   SS5        U R                  U" 5       S5        g )Nr   re   z(callback did not properly set 'cbcalled'z3ref2 should be dead after deleting object reference)r`   r   rf   rg   r   r   r   )r   r   r   rf   s       r   r   'ReferencesTestCase.check_basic_callback  sZ    Ikk!]]+?	A#%J	Lr   c                 .   [        5       n[        R                  " U5      n[        R                  " U5      n[        R                  " U5      nU R	                  X$S5        [        5       n[        R                  " U5      n[        R                  " U5      n[        R                  " U5      nU R	                  X$S5        U R                  [        R                  " U5      SS5        A[        5         U R                  [        R                  " U5      SS5        g )Nz1reference object w/out callback should be re-usedr   zwrong weak ref count for objectre   z4wrong weak ref count for object after deleting proxy)r   r   rf   r   r   r   getweakrefcountr   )r   r   r   r   r   s        r   test_ref_reuse!ReferencesTestCase.test_ref_reuse  s    C{{1~ a {{1~dH	J Ca {{1~{{1~dH	J003Q6	8003QK	Mr   c                     [        5       n[        R                  " U5      n[        R                  " U5      n[        R                  " U5      nU R	                  X$S5        g )Nz4proxy object w/out callback should have been re-used)r   r   r   rf   r   )r   r   proxy1rf   proxy2s        r   test_proxy_reuse#ReferencesTestCase.test_proxy_reuse$  sD    Cq!kk!nq!fK	Mr   c                    [        5       nU R                  U[        R                  " U5      5        [        R
                  " 5       n[        R                  " U5      nU R                  US5        UR                  S5        U R                  [        U5      S5        U R                  US5        SS/US S & U R                  [        U5      S5        U R                  [        U5      S5        U R                  SUS5        SUS'   U R                  US   S5        U R                  US   S5        [        R
                  " U5      n[        R                  " U5      nU R                  X55        [        R
                  " [        S	5      5      n[        R                  " U5      nU R                  US S  US S  5        U R                  USS  USS  5        U R                  US S US S 5        U R                  USS USS 5        g )
Nz(proxy for empty UserList should be false   re   z+proxy for non-empty UserList should be truer      z,proxy didn't support __contains__() properlyrO   
   )r   check_proxyr   r   collectionsUserListassertFalseappendr   len
assertTruer   range)r   r   LpL2p2L3p3s           r   test_basic_proxy#ReferencesTestCase.test_basic_proxy,  s   CGMM!,-  "MM!FG	Q#HI1v!Q#Q#aJK!1q!1q!!!!$]]2!!%),]]2A1&ABAB(BQBQ(Aa"Qq'*r   c                      " S S[         5      nU" 5       nU R                  S[        [        R                  " U5      5      5        U R                  [        [        R                  " U5      5      S5        g )Nc                        \ rS rSrS rS rSrg)0ReferencesTestCase.test_proxy_unicode.<locals>.CiJ  c                     g)Nstringr   r   s    r   __str__8ReferencesTestCase.test_proxy_unicode.<locals>.C.__str__K      r   c                     g)N   bytesr   r   s    r   	__bytes__:ReferencesTestCase.test_proxy_unicode.<locals>.C.__bytes__M  r  r   r   N)r   r   r   r   r   r  r   r   r   r   r   r   J  s      r   r   r  r  )r   r   dirr   r   r   bytes)r   r   instances      r   test_proxy_unicode%ReferencesTestCase.test_proxy_unicodeH  sQ    	  	 
 3k3w}}X'>#?@w}}X67Br   c                      " S S5      nU" 5       n[         R                  " U5      nU R                  [        R                  " U5      S5        g )Nc                       \ rS rSrS rSrg).ReferencesTestCase.test_proxy_index.<locals>.CiT  c                     gNr   r   r   s    r   	__index__8ReferencesTestCase.test_proxy_index.<locals>.C.__index__U      r   r   N)r   r   r   r   r  r   r   r   r   r   r  T      r   r   r   )r   r   r   operatorindexr   r   r   r   s       r   test_proxy_index#ReferencesTestCase.test_proxy_indexS  s<    	 	 CMM!*B/r   c                      " S S5      nU" 5       n[         R                  " U5      nU R                  US-  S5        US-  nU R                  US5        g )Nc                        \ rS rSrS rS rSrg),ReferencesTestCase.test_proxy_div.<locals>.Ci\  c                     gN*   r   r>   s     r   __floordiv__9ReferencesTestCase.test_proxy_div.<locals>.C.__floordiv__]  r  r   c                     g)N   r   r>   s     r   __ifloordiv__:ReferencesTestCase.test_proxy_div.<locals>.C.__ifloordiv___  r  r   r   N)r   r   r   r   r  r#  r   r   r   r   r   r  \  s    r   r   rO   r  r"  r   r   r   r  s       r   test_proxy_div!ReferencesTestCase.test_proxy_div[  sP    	 	
 CMM!a$	aBr   c                      " S S5      nU" 5       n[         R                  " U5      nU R                  US-  S5        U R                  SU-  S5        US-  nU R                  US5        g )Nc                   &    \ rS rSrS rS rS rSrg)/ReferencesTestCase.test_proxy_matmul.<locals>.Cih  c                     g)N  r   r>   s     r   
__matmul__:ReferencesTestCase.test_proxy_matmul.<locals>.C.__matmul__i      r   c                     g)N]r   r>   s     r   __rmatmul__;ReferencesTestCase.test_proxy_matmul.<locals>.C.__rmatmul__k  r/  r   c                     g)N1  r   r>   s     r   __imatmul__;ReferencesTestCase.test_proxy_matmul.<locals>.C.__imatmul__m  s    r   r   N)r   r   r   r   r-  r2  r6  r   r   r   r   r   r*  h  s    r   r   rO   r,  r1  r5  r%  r  s       r   test_proxy_matmul$ReferencesTestCase.test_proxy_matmulg  sd    	 	 CMM!Q%Q%	QC r   c                 B    U R                  [        R                  5        g r   )check_shared_without_callbackr   rf   r   s    r    test_shared_ref_without_callback3ReferencesTestCase.test_shared_ref_without_callback~  s    **7;;7r   c                 B    U R                  [        R                  5        g r   )r;  r   r   r   s    r   "test_shared_proxy_without_callback5ReferencesTestCase.test_shared_proxy_without_callback  s    **7==9r   c                 >   [        S5      nU" US 5      nU" US 5      nU R                  X4S5        AAU" U5      nU" US 5      nU R                  X4S5        AAU" U5      nU" U5      nU R                  X4S5        AAU" US 5      nU" U5      nU R                  X4S5        g )Nre   z%both callbacks were None in the C APIz&callbacks were NULL, None in the C APIz%both callbacks were NULL in the C APIz&callbacks were None, NULL in the C API)r0   r   )r   makerefr   p1r   s        r   r;  0ReferencesTestCase.check_shared_without_callback  s    1IQQbEFQZQbFGQZQZbEFQQZbFGr   c                    [        5       n[        R                  " U5      nU R                  X5        U R	                  [        U5      [        R                  S5        U" S5        U R                  UR                  SS5        U" SS9  U R                  UR                  SS5        U R                  [        U5        U R                  [        USSS5        g )	Nzproxy is not of callable typez	twinkies!z1call through proxy not passed through to originalzSplat.)r%   re   r   r   )r   r   r   r   r   typeCallableProxyTyper   r#   r   r   )r   r   r   s      r   test_callable_proxy&ReferencesTestCase.test_callable_proxy  s    J}}Q!d4j'";";4	6[H	JxH	J 	)T* 	)T1a3r   c                    SUl         U R                  UR                   SS5        SUl         U R                  UR                   SS5        U? U R                  [        US5      S5        SUl         U R                  UR                   SS5        SUl         U R                  UR                   SS5        U? U R                  [        US5      S	5        g )
Nre   z)proxy does not reflect attribute additionr   z-proxy does not reflect attribute modificationfooz(proxy does not reflect attribute removalz4object does not reflect attribute addition via proxyz8object does not reflect attribute modification via proxyz3object does not reflect attribute removal via proxy)rK  r   r   hasattr)r   r   r   s      r   r   ReferencesTestCase.check_proxy  s    A@	BAD	FE.?	A 	K	M	F	HIE*J	Lr   c                      " S S5      nU" 5       n[         R                  " U5      nUS	 U R                  UR                  S5        g )Nc                       \ rS rSrSrS rSrg)3ReferencesTestCase.test_proxy_deletion.<locals>.Fooi  Nc                     Xl         g r   result)r   accessors     r   __delitem__?ReferencesTestCase.test_proxy_deletion.<locals>.Foo.__delitem__  s    &r   rR  )r   r   r   r   rS  rU  r   r   r   r   FoorP    s    F'r   rW  r   )r   r   r   rS  )r   rW  gr*   s       r   test_proxy_deletion&ReferencesTestCase.test_proxy_deletion  s>    	' 	' EMM!aD1%r   c                      " S S[         5      nU" 5       nU R                  [        [        R                  " U5      5      [        U5      5        g )Nc                       \ rS rSrSrg)0ReferencesTestCase.test_proxy_bool.<locals>.Listi  r   Nr   r   r   r   r   r   r   r   Listr]    s    $r   r_  )listr   r   r   r   )r   r_  lysts      r   test_proxy_bool"ReferencesTestCase.test_proxy_bool  s3    4vgmmD12DJ?r   c                    ^ S m " U4S jS5      nU" 5       m[         R                  " T5      nU R                  [        5         SU;     S S S 5        g ! , (       d  f       g = f)Nc                   "   > \ rS rSrU 4S jrSrg)1ReferencesTestCase.test_proxy_iter.<locals>.MyObji  c                    > @[         $ r   )r=   )r   r   s    r   __iter__:ReferencesTestCase.test_proxy_iter.<locals>.MyObj.__iter__  s    %%r   r   Nr   r   r   r   rh  r   )r   s   r   MyObjrf    s    & &r   rk  blech)r   r   r   r   )r   rk  r   r   s      @r   test_proxy_iter"ReferencesTestCase.test_proxy_iter  sN     	& 	& gMM#y) qL	 *))s   A
A c                    ^^ / SQmU4S jnU" 5       m " U4S jS5      nU" 5       nU R                  [        U5      / SQ5        g )N)rJ   rO      c               3   &   >#    T  S h  vN   g  N7fr   r   )arrs   r   iterator_func9ReferencesTestCase.test_proxy_next.<locals>.iterator_func  s     NNs   c                   "   > \ rS rSrU 4S jrSrg):ReferencesTestCase.test_proxy_next.<locals>.IteratesWeaklyi  c                 0   > [         R                  " T5      $ r   r   r   )r   its    r   rh  CReferencesTestCase.test_proxy_next.<locals>.IteratesWeakly.__iter__  s    }}R((r   r   Nrj  )ry  s   r   IteratesWeaklyrv    s    ) )r   r{  )r   r`  )r   rs  r{  weak_itrr  ry  s       @@r   test_proxy_next"ReferencesTestCase.test_proxy_next  s>    	_	) 	) !" 	g	2r   c                    ^ S m " U4S jS5      nU" 5       nSnU R                  [        U5         [        U5        S S S 5        g ! , (       d  f       g = f)Nc                      gr^   r   r   r   r   <lambda>8ReferencesTestCase.test_proxy_bad_next.<locals>.<lambda>  s    !r   c                   "   > \ rS rSrU 4S jrSrg)1ReferencesTestCase.test_proxy_bad_next.<locals>.Ai  c                 0   > [         R                  " T5      $ r   rx  )r   not_an_iterators    r   rh  :ReferencesTestCase.test_proxy_bad_next.<locals>.A.__iter__  s    }}_55r   r   Nrj  )r  s   r   Ar    s    6 6r   r  z'Weakref proxy referenced a non-iterator)assertRaisesRegexr   r`  )r   r  amsgr  s       @r   test_proxy_bad_next&ReferencesTestCase.test_proxy_bad_next  sE     $	6 	6 C7##Is3G 433s   A
Ac           	           " S S5      nU" 5       nU R                  SR                  [        [        R                  " U5      5      5      S5        g )Nc                        \ rS rSrS rS rSrg)5ReferencesTestCase.test_proxy_reversed.<locals>.MyObji  c                     g)Nr   r   r   s    r   __len__=ReferencesTestCase.test_proxy_reversed.<locals>.MyObj.__len__      r   c                     [        S5      $ )Ncba)iterr   s    r   __reversed__BReferencesTestCase.test_proxy_reversed.<locals>.MyObj.__reversed__  s    E{"r   r   N)r   r   r   r   r  r  r   r   r   r   rk  r    s    #r   rk  r   r  )r   rw   reversedr   r   r   rk  r   s      r   test_proxy_reversed&ReferencesTestCase.test_proxy_reversed  s<    	# 	# g'--*<!=>Fr   c                     " S S5      nU" 5       nU R                  [        5         [        [        R                  " U5      5        S S S 5         " S S5      nU" 5       nU R                  [        5         [        [        R                  " U5      5        S S S 5        g ! , (       d  f       N]= f! , (       d  f       g = f)Nc                       \ rS rSrS rSrg)1ReferencesTestCase.test_proxy_hash.<locals>.MyObji  c                     gr  r   r   s    r   rG   :ReferencesTestCase.test_proxy_hash.<locals>.MyObj.__hash__  r  r   r   Nr   r   r   r   rG   r   r   r   r   rk  r    r  r   rk  c                       \ rS rSrSrSrg)r  i  Nr   r  r   r   r   rk  r    s    Hr   )r   r   rF   r   r   r  s      r   test_proxy_hash"ReferencesTestCase.test_proxy_hash  s    	 	 gy)s#$ *	 	 gy)s#$ *) *) *)s    B5 B/
B,/
B=c                 D   [        5       n[        R                  " U5      n[        R                  " XR                  5      nU R	                  [        R
                  " U5      SS5        [        R                  " U5      n[        R                  " XR                  5      nU R	                  [        R
                  " U5      SS5        AAAA[        5         U R	                  [        R
                  " U5      SS5        U R	                  [        R
                  " S5      SS5        g )Nr   z*got wrong number of weak reference objectsrJ   r   zAweak reference objects not unlinked from referent when discarded.re   z2got wrong number of weak reference objects for int)r   r   rf   rg   r   r   r   r   )r   r   r   r   r   r   s         r   test_getweakrefcount'ReferencesTestCase.test_getweakrefcount  s    C{{1~{{1mm,003QA	C q!q--0003QA	C $003Q1	2
 	003QI	Kr   c                    [        5       n[        R                  " XR                  5      n[        R                  " XR                  5      nA[	        5         U R                  [        R                  " U5      U/S5        [        5       n[        R                  " XR                  5      n[        R                  " XR                  5      nA[	        5         U R                  [        R                  " U5      U/S5        A[	        5         U R                  [        R                  " U5      / S5        U R                  [        R                  " S5      / S5        g )Nzlist of refs does not matchzlist of refs not clearedre   z#list of refs does not match for int)r   r   rf   rg   r   r   getweakrefsr   s       r   test_getweakrefs#ReferencesTestCase.test_getweakrefs3  s    C{{1mm,{{1mm,,,Q/$2	4 C{{1mm,{{1mm,,,Q/$2	4 ,,Q//	1 	,,Q/:	<r   c                      " S S[         5      nU" S5      n[        R                  " U5      nU R                  US-   S5        U R                  SU-   S5        g )Nc                       \ rS rSrSrg)6ReferencesTestCase.test_newstyle_number_ops.<locals>.FiN  r   Nr^  r   r   r   Fr  N      r   r  g       @g      ?g      @)floatr   r   r   )r   r  r*   r   s       r   test_newstyle_number_ops+ReferencesTestCase.test_newstyle_number_opsM  sM    	 	cFMM!S#&q#&r   c                    ^^^  " S S[         5      m0 mU4S jmUUU4S jn U" 5         U R                  S5         U" 5         U R                  S5        g ! T a     N"f = f! T a     g f = f)Nc                       \ rS rSrSrg)?ReferencesTestCase.test_callbacks_protected.<locals>.BogusErroriX  r   Nr^  r   r   r   
BogusErrorr  X  r  r   r  c                    > TU 	 g r   r   )kdatas    r   remove;ReferencesTestCase.test_callbacks_protected.<locals>.remove[  s
    Qr   c                  B   > S n S T[         R                  " U T5      '   Te)Nc                      g)Nr   r   r   r   r   r  RReferencesTestCase.test_callbacks_protected.<locals>.encapsulate.<locals>.<lambda>^  s    r   )r   rf   )r*   r  r  r  s    r   encapsulate@ReferencesTestCase.test_callbacks_protected.<locals>.encapsulate]  s#    A+/DQ'(r   zexception not properly restored)	Exceptionfail)r   r  r  r  r  s     @@@r   test_callbacks_protected+ReferencesTestCase.test_callbacks_protectedU  sw    	 				9M II78	9M II78  		  		s"   A A" AA"A+*A+c                   ^ SS K m " S S[        5      nU" 5       n[        R                  " UU4S j5      nAAU" 5       nU" 5       Ul        [        R                  " UR                  U4S j5      nU" 5       nXEl        AAg )Nr   c                       \ rS rSrSrg)0ReferencesTestCase.test_sf_bug_840829.<locals>.Ci{  r   Nr^  r   r   r   r   r  {  r  r   r   c                 &   > TR                   " 5       $ r   rn   ignorerm   s    r   r  7ReferencesTestCase.test_sf_bug_840829.<locals>.<lambda>  s    2::<r   c                 &   > TR                   " 5       $ r   r  r  s    r   r  r    s    bjjlr   )rm   r   r   rf   ic1)r   r   r   r   r  c2rm   s         @r   test_sf_bug_840829%ReferencesTestCase.test_sf_bug_840829n  so     		 	 C[[78 Ss[[:;S r   c                     SS K n " S S[        5      n " S S[        5      nU" 5       nX$l        [        R                  " X$R
                  5      Ul        AAAUR                  " 5         g )Nr   c                       \ rS rSrSrg)4ReferencesTestCase.test_callback_in_cycle.<locals>.Ji  r   Nr^  r   r   r   Jr    r  r   r  c                       \ rS rSrS rSrg)5ReferencesTestCase.test_callback_in_cycle.<locals>.IIi  c                     U R                     g r   )r  r   r  s     r   	acallback?ReferencesTestCase.test_callback_in_cycle.<locals>.II.acallback  s	    r   r   N)r   r   r   r   r  r   r   r   r   IIr    s    r   r  )rm   r   r  r   rf   r  r   rn   )r   rm   r  r  Is        r   test_callback_in_cycle)ReferencesTestCase.test_callback_in_cycle  sQ    	 		 	 D{{1kk*2 q"


r   c                     SS K n " S S5      nU" 5       U" 5       pCXDl        X4l        [        R                  " X4R
                  5      Ul        AAUR                  " 5         g )Nr   c                       \ rS rSrS rSrg)=ReferencesTestCase.test_callback_reachable_one_way.<locals>.Ci  c                 L    U R                     U R                    U R                    g r   mer  r   r  s     r   cb@ReferencesTestCase.test_callback_reachable_one_way.<locals>.C.cb      r   r   Nr   r   r   r   r  r   r   r   r   r   r        r   r   )rm   r  r  r   rf   r  r   rn   )r   rm   r   r  r  s        r   test_callback_reachable_one_way2ReferencesTestCase.test_callback_reachable_one_way  sH    	 	 acBB&


r   c                     SS K n " S S[        5      n " S S5      nU" 5       U" 5       pTXUl        XEl        [        R
                  " XER                  5      Ul        AAAAUR                  " 5         g )Nr   c                       \ rS rSrS rSrg)=ReferencesTestCase.test_callback_different_classes.<locals>.Ci  c                 L    U R                     U R                    U R                    g r   r  r  s     r   r  @ReferencesTestCase.test_callback_different_classes.<locals>.C.cb  r  r   r   Nr  r   r   r   r   r    r  r   r   c                       \ rS rSrSrg)=ReferencesTestCase.test_callback_different_classes.<locals>.Di  r   Nr^  r   r   r   Dr    r  r   r  )	rm   r   r  r  r   rf   r  r   rn   )r   rm   r   r  r  r  s         r   test_callback_different_classes2ReferencesTestCase.test_callback_different_classes  sX    	 		 	 acBB&Aq


r   c                 (  ^ SS K n/ m " U4S jS[        5      nU" S5      U" S5      pCXCl        X4l        [        R                  " XCR
                  5      Ul        [        R                  " X4R
                  5      Ul        U4S jn[        R                  " X%5      nAAAU R                  T/ 5        UR                  " 5         U R                  TS/5        U R                  U" 5       S 5        TS S 2	 UR                  " 5         U R                  T/ 5        g )Nr   c                   (   > \ rS rSrS rU 4S jrSrg)AReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.Ci  c                     Xl         g r   	attribute)r   values     r   r5   JReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C.__init__  s    !&r   c                 <   > TR                  U R                  5        g r   )r   r   r   r  alists     r   r  KReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C.acallback  s    TVV$r   r  N)r   r   r   r   r5   r  r   r  s   r   r   r    s    '% %r   r   re   r   c                 (   > TR                  S5        g )NC went awayr   r  r  s    r   C_went_awayKReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C_went_away  s    LL'r   r	  )	rm   r   r   r   rf   r  r   r   rn   )r   rm   r   r  r  r  r   r  s          @r   #test_callback_in_cycle_resurrection6ReferencesTestCase.test_callback_in_cycle_resurrection  s     	% 	% 1qtBB-B-	([[(A#



 	0t$!H


#r   c                 X  ^ SS K n/ mU4S jn " U4S jS[        5      nU" 5       U" 5       pTXTl        XEl        UR                  n[        R
                  " XV5      Ul        [        R
                  " XeR                  5      Ul        [        R
                  " Xb5      nU R                  U" 5       U5        AAAAU R                  T/ 5        UR                  " 5         U R                  TS/5        U R                  U" 5       S 5        TS S 2	 UR                  " 5         U R                  T/ 5        g )Nr   c                 (   > TR                  S5        g )Nsafe_callback calledr
  r  s    r   safe_callbackDReferencesTestCase.test_callbacks_on_callback.<locals>.safe_callback'  s    LL/0r   c                   "   > \ rS rSrU 4S jrSrg)8ReferencesTestCase.test_callbacks_on_callback.<locals>.Ci*  c                 (   > TR                  S5        g )Nz	cb calledr
  r  s     r   r  ;ReferencesTestCase.test_callbacks_on_callback.<locals>.C.cb+  s    [)r   r   Nr  r  s   r   r   r  *  s    * *r   r   r  )
rm   r   r?   r  r   rf   r   r   r   rn   )	r   rm   r  r   r   drg   external_wrr  s	           @r   test_callbacks_on_callback-ReferencesTestCase.test_callbacks_on_callback"  s     	1	* 	* sAC144{{1'{{8TT*kk(:kmX. aA#


!7 89-!H


#r   c                 B    U R                  [        R                  5        g r   )check_gc_during_creationr   rf   r   s    r   test_gc_during_ref_creation.ReferencesTestCase.test_gc_during_ref_creationH  s    %%gkk2r   c                 B    U R                  [        R                  5        g r   )r  r   r   r   s    r   test_gc_during_proxy_creation0ReferencesTestCase.test_gc_during_proxy_creationK  s    %%gmm4r   c                 v   [         R                  " 5       n[         R                  " SSS5        [         R                  " 5          " S S5      nS nU" 5       nU" 5       nXfl        U" U5      Ul         U" 5       n[        R                  " XT5        [         R                  " U6   g ! [         R                  " U6   f = f)Nre   c                       \ rS rSrSrg)6ReferencesTestCase.check_gc_during_creation.<locals>.AiR  r   Nr^  r   r   r   r  r&  R  r  r   r  c                      g r   r   )argss    r   rg   =ReferencesTestCase.check_gc_during_creation.<locals>.callbackU      r   )rm   get_thresholdset_thresholdrn   r  r   r   rf   )r   rB  
thresholdsr  rg   
referencedr  s          r   r  +ReferencesTestCase.check_gc_during_creationN  s    %%'

Aq!


	 		 S
Cz"	* AKK
- j)Bj)s   2B# #B8c                 0     " S S[         5      nU" 5       ng )Nc                       \ rS rSrS rSrg)>ReferencesTestCase.test_ref_created_during_del.<locals>.Targetil  c                 0    [         R                  " U 5      qg r   )r   rf   ref_from_delr   s    r   __del__FReferencesTestCase.test_ref_created_during_del.<locals>.Target.__del__m  s    &{{40r   r   Nr   r   r   r   r5  r   r   r   r   Targetr2  l  s    1r   r8  )r   )r   r8  ws      r   test_ref_created_during_del.ReferencesTestCase.test_ref_created_during_delg  s    
	1V 	1
 Hr   c           	          [         R                  " [        5      nU R                  [        UR
                  SSSSS5        [        R                  " 5         g r^   )r   rf   r  r   r   r5   rm   rn   )r   rs     r   	test_initReferencesTestCase.test_inits  s9     KK	")QZZAq!Q?


r   c                     " S S[         5      n/ n[        R                  " [        5        [        R                  " XR                  5      nS n[
        R                  " 5         U R                  U" 5       S 5        U R                  X#/5        g )Nc                       \ rS rSrSrg)*ReferencesTestCase.test_classes.<locals>.Ai~  r   Nr^  r   r   r   r  rB  ~  r  r   r  )r   r   rf   intr   rm   rn   r   )r   r  lr  s       r   test_classesReferencesTestCase.test_classes{  sa    	 	CKK88$


d#C r   c                    [        S5      n[        S5      n[        S5      n[        R                  " U5      n[        R                  " U5      n[        R                  " U5      n[        R                  " U5      nU R                  XE:H  5        U R	                  XE:g  5        U R	                  XF:H  5        U R                  XF:g  5        U R                  XG:H  5        U R	                  XG:g  5        U R	                  XA:H  5        U R                  XA:g  5        U R                  U[
        :H  5        U R	                  U[
        :g  5        AAA[        R                  " 5         XEU4 H  nU R                  U" 5       S 5        M     U R	                  XE:H  5        U R                  XE:g  5        U R	                  XF:H  5        U R                  XF:g  5        U R                  XG:H  XGL 5        U R                  XG:g  XGL5        g )Nre   r   )
r0   r   rf   r   r   r   rm   rn   r   r   )	r   r%   yzr  br   r  r=  s	            r   test_equality ReferencesTestCase.test_equality  s   1I1I1IKKNKKNKKNKKN 	    Y'i(q!


qAMM!#t$  	  (,r   c                    [         R                  [         R                  [         R                  [         R                  /n[        S5      n[        S5      n[        R                  " U5      n[        R                  " U5      nU H  nU R                  [        XdU5        M     AA[        R                  " 5         U H  nU R                  [        XdU5        M     g rd   )r  ltgtleger0   r   rf   r   r   rm   rn   )r   opsr%   rH  r  rJ  ops          r   test_ordering ReferencesTestCase.test_ordering  s    {{HKKhkkB1I1IKKNKKNBi2  q


Bi2 r   c                 |   [        S5      n[        S5      n[        R                  " U5      n[        R                  " U5      nU R                  [	        U5      [	        S5      5        AA[
        R                  " 5         U R                  [	        U5      [	        S5      5        U R                  [        [        U5        g r  )	r0   r   rf   r   rF   rm   rn   r   r   )r   r%   rH  r  rJ  s        r   test_hashingReferencesTestCase.test_hashing  s    2J2JKKNKKNa$r(+q


 	a$r(+)T1-r   zrequires deep stackc                      " S S5      n[         R                  " 5       nU" S 5      =p4[        S5       H  nU" U5      =X$'   nM     A[        R                  " 5         g )Nc                       \ rS rSrS rSrg)1ReferencesTestCase.test_trashcan_16602.<locals>.Ci  c                    ^ U(       d  g [         R                  " U 5      mU4S jn[         R                  " X5      U l        g )Nc                    > T" 5       ng r   r   )wparentr   wselfs     r   r  FReferencesTestCase.test_trashcan_16602.<locals>.C.__init__.<locals>.cb  s
    Ar   )r   rf   r^  )r   parentr  r_  s      @r   r5   :ReferencesTestCase.test_trashcan_16602.<locals>.C.__init__  s,    D) &{{66r   )r^  NrY   r   r   r   r   r[    s    7r   r   d   )r   WeakKeyDictionaryr   rm   rn   )r   r   r  rootr   ns         r   test_trashcan_16602&ReferencesTestCase.test_trashcan_16602  sQ    	7 	7 %%'T7sAtOAD1 


r   c                     [        S5      nS n[        R                  " X5      nU R                  UR                  U5        [        R                  " U5      nU R                  UR                  5        g )Nre   c                     g r   r   r   s    r   r  <ReferencesTestCase.test_callback_attribute.<locals>.<lambda>      tr   )r0   r   rf   r   __callback__r   )r   r%   rg   r   r   s        r   test_callback_attribute*ReferencesTestCase.test_callback_attribute  sS    1I#{{1'd''2{{1~$++,r   c                     [        S5      n[        R                  " XR                  5      nU R	                  UR
                  5        A[        R                  " 5         U R                  UR
                  5        g rd   )	r0   r   rf   rg   r   rm  r   r   r   )r   r%   rf   s      r   &test_callback_attribute_after_deletion9ReferencesTestCase.test_callback_attribute_after_deletion  sT    1Ikk!]]+S--.#**+r   c                     [        S5      nS n[        R                  " X5      nU R                  [        5         S Ul        S S S 5        g ! , (       d  f       g = f)Nre   c                     g r   r   r   s    r   r  @ReferencesTestCase.test_set_callback_attribute.<locals>.<lambda>  rl  r   c                     g r   r   r   s    r   r  ru    s    Dr   )r0   r   rf   r   AttributeErrorrm  )r   r%   rg   r   s       r   test_set_callback_attribute.ReferencesTestCase.test_set_callback_attribute  s@    1I#{{1'~. 0D /..s   	A
Ac                      " S S[         5      nU" S5      n[        R                  " US 5      nA[        R                  " 5         g )Nc                       \ rS rSrS rSrg);ReferencesTestCase.test_callback_gcs.<locals>.ObjectWithDeli  c                     g r   r   r   s    r   r5  CReferencesTestCase.test_callback_gcs.<locals>.ObjectWithDel.__del__  rl  r   r   Nr7  r   r   r   ObjectWithDelr|    s    #r   r  re   c                 ,    [         R                  " 5       $ r   )r   r   r   s    r   r  6ReferencesTestCase.test_callback_gcs.<locals>.<lambda>  s    '*<*<*>r   )r0   r   rf   r   r   )r   r  r%   r   s       r   test_callback_gcs$ReferencesTestCase.test_callback_gcs  s8    	$F 	$!{{1>?r   c                     [         R                  " S5      R                  5       n[        R                  " SU5      u  p#UR
                  R                  SS5      nU R                  US5        g )Na  
        import _testcapi
        import weakref

        class TestObj:
            pass

        def callback(obj):
            pass

        obj = TestObj()
        # The choice of 50 is arbitrary, but must be large enough to ensure
        # the allocation won't be serviced by the free list.
        wrs = [weakref.ref(obj, callback) for _ in range(50)]
        _testcapi.set_nomemory(0)
        del obj
        -casciibackslashreplacez*_Py_Dealloc: Deallocator of type 'TestObj')textwrapdedentstripr   run_python_until_enderrdecodeassertNotRegex)r   coderes_stderrs        r   test_no_memory_when_clearing/ReferencesTestCase.test_no_memory_when_clearing  s_          UW! 	" 33D$?);<F$PQr   )r`   rf   N)Dr   r   r   r   r   r   cpython_onlyr   r   r   r   r   r   r   r   r   r~   r   r   r   r   r	  r  r&  r8  r<  r?  r;  rH  r   rY  rb  rm  r}  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r"  r  r:  r>  rE  rK  rT  rW  unittestskipIfr
   r   rg  rn  rq  rx  r  r  r   r   r   r   r{   r{   j   s    , ,>	47
 	4 	4	F$D+$ B BF	LM.M+8	C0
 !.8:H$4*L*	&@(3G% K,<4'92&P &  &P08 ,$  ,$\$$L35*2
 
!  
!#-J3. __W)+@A B*-,1 R Rr   r{   c                   2    \ rS rSrS rS rS rS rS rSr	g)	SubclassableWeakrefTestCasei  c                 n    " S S[         R                  5      n[        S5      nU" USS9nU R                  U" 5       U5        U R	                  UR
                  5        U R                  UR                  S5        A[        5         U R                  U" 5       5        U R	                  UR
                  5        g )Nc                   8   ^  \ rS rSrSU 4S jjrU 4S jrSrU =r$ )=SubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRefi  c                 0   > X0l         [        TU ]	  X5        g r   )r  superr5   )r   obrg   r  	__class__s       r   r5   FSubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRef.__init__  s    "
 .r   c                 .   > SU l         [        TU ]	  5       $ NT)calledr  r&   )r   r  s    r   r&   FSubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRef.__call__"  s    "w'))r   )r  r  r  )r   r   r   r   r5   r&   r   __classcell__)r  s   @r   MyRefr    s    /* *r   r  rK     r  )
r   rf   r0   r   r   r  r   r  r   r   )r   r  r   mrs       r   test_subclass_refs.SubclassableWeakrefTestCase.test_subclass_refs  s    	*GKK 	* 5M1BbdA		"2&"$		"r   c                 z    " S S[         R                  5      n[        S5      nU" U5      n[         R                  " U5      nU R                  X45        U R	                  [         R
                  " U5      XC/5        U R	                  [         R                  " U5      S5        U" U5      nU R	                  [         R                  " U5      S5        [         R
                  " U5      nU R	                  [        U5      S5        U R                  XFS   5        U R                  X6SS  5        U R                  XVSS  5        g )Nc                       \ rS rSrSrg)XSubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refs.<locals>.MyRefi0  r   Nr^  r   r   r   r  r  0  r  r   r  r  r   r   r   re   )
r   rf   r0   assertIsNotr   r  r   r   r   r   )r   r  r   r1r2r3refss          r   -test_subclass_refs_dont_replace_standard_refsISubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refs/  s    	GKK 	2J1X[[^ ,,Q/":003Q71X003Q7""1%TA&bq'"bqr(#bqr(#r   c                     " S S[         R                  5      n[        S5      nU" U[        5      nU" U[        5      nU R                  X45        [         R                  " U5      nU R                  X55        U R                  XE5        g )Nc                       \ rS rSrSrg)USubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbacks.<locals>.MyRefiA  r   Nr^  r   r   r   r  r  A  r  r   r  r  )r   rf   r0   idr   r  r  r   )r   r  r   r  r  r  s         r   *test_subclass_refs_dont_conflate_callbacksFSubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbacks@  sg    	GKK 	2J1b\1c] ""1%bbr   c                 H    " S S[         R                  5      n[        S5      nU" US SS5      nU R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  5       S5        U R                  [        US5      5        g )Nc                   *    \ rS rSrSrS rS rS rSrg)HSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRefiL  slot1slot2c                 B    [         R                  R                  XU5      $ r   )r   rf   __new__)rF  r  rg   r  r  s        r   r  PSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.__new__N  s    {{**4X>>r   c                     X0l         X@l        g r   r  )r   r  rg   r  r  s        r   r5   QSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.__init__P  s    "
"
r   c                 4    U R                   U R                  -   $ r   r  r   s    r   methMSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.methS  s    zzDJJ..r   N)	r   r   r   r   	__slots__r  r5   r  r   r   r   r   r  r  L  s    (I?#/r   r  r  abcdefabcdef__dict__)	r   rf   r0   r   r  r  r  r   rL  )r   r  r   r=  s       r   test_subclass_refs_with_slots9SubclassableWeakrefTestCase.test_subclass_refs_with_slotsK  s    	/GKK 	/ 2J!T5%(%(%(8,J/0r   c                 :  ^   " S S[         R                  5      nU 4S jn[        5       nU" X25      nX4l        AAT R	                  T R
                  S5        [        5       nU" X25      nU" X25      nXTl        X5l        AAAT R	                  T R
                  S5        g)z3Confirm https://bugs.python.org/issue3100 is fixed.c                       \ rS rSrSrg)HSubclassableWeakrefTestCase.test_subclass_refs_with_cycle.<locals>.MyRefic  r   Nr^  r   r   r   r  r  c  r  r   r  c                 0   > T=R                   S-  sl         g rd   r_   )r9  r   s    r   rg   KSubclassableWeakrefTestCase.test_subclass_refs_with_cycle.<locals>.callbackh  s    MMQMr   r   N)r   rf   r   r   r   r`   r=  )r   r  rg   r   r  r  s   `     r   test_subclass_refs_with_cycle9SubclassableWeakrefTestCase.test_subclass_refs_with_cycle\  s    	GKK 	
	 C1* C11*r   r   N)
r   r   r   r   r  r  r  r  r  r   r   r   r   r  r    s    #$$"	 1"$+r   r  c                   h    \ rS rSrS rS rS rS rS rS r	\
R                  S 5       rS	 rS
 rSrg)WeakMethodTestCasei  c                 $     " S S[         5      nU$ )z3Return an Object subclass overriding `some_method`.c                       \ rS rSrS rSrg)'WeakMethodTestCase._subclass.<locals>.Ci  c                     g)Nrp  r   r   s    r   rK   3WeakMethodTestCase._subclass.<locals>.C.some_method  r  r   r   N)r   r   r   r   rK   r   r   r   r   r   r    s    r   r   )r0   )r   r   s     r   	_subclassWeakMethodTestCase._subclass  s    	 	 r   c                    [        S5      n[        R                  " UR                  5      nU R	                  U[        R
                  5        U R	                  U" 5       [        UR                  5      5        U R                  U" 5       R                  U5        U R                  U" 5       R                  UR                  R                  5        U R                  U" 5       " 5       S5        g )Nre   rJ   )r0   r   
WeakMethodrK   assertIsInstanceReferenceTyperF  r   __self____func__r   r   r   r=  s      r   
test_aliveWeakMethodTestCase.test_alive  s    1Iq}}-a!6!67ac4#67acllA&acllAMM$:$:;"r   c                     [        S5      n[        R                  " UR                  5      nA[        R
                  " 5         U R                  U" 5       S 5        g rd   )r0   r   r  rK   rm   rn   r   r  s      r   test_object_dead#WeakMethodTestCase.test_object_dead  s;    1Iq}}-


ac4 r   c                     U R                  5       nU" S5      n[        R                  " UR                  5      nU?[        R
                  " 5         U R                  U" 5       S 5        g rd   )r  r   r  rK   rm   rn   r   )r   r   r   r=  s       r   test_method_dead#WeakMethodTestCase.test_method_dead  sI    NNaDq}}-M


ac4 r   c                 T  ^ U R                  5       n/ mU4S jnU" S5      n[        R                  " UR                  U5      nA[        R
                  " 5         U R                  TU/5        [        R                  Ul        [        R
                  " 5         U R                  TU/5        g )Nc                 (   > TR                  U 5        g r   r
  r4   callss    r   r  =WeakMethodTestCase.test_callback_when_object_dead.<locals>.cb      LLr   re   )r  r   r  rK   rm   rn   r   r0   r   r   r  r   r=  r  s        @r   test_callback_when_object_dead1WeakMethodTestCase.test_callback_when_object_dead  s~    NN	aDq}}b1


$**


$r   c                 .  ^ U R                  5       n/ mU4S jnU" S5      n[        R                  " UR                  U5      nU?[        R
                  " 5         U R                  TU/5        A[        R
                  " 5         U R                  TU/5        g )Nc                 (   > TR                  U 5        g r   r
  r  s    r   r  =WeakMethodTestCase.test_callback_when_method_dead.<locals>.cb  r  r   re   )r  r   r  rK   rm   rn   r   r  s        @r   test_callback_when_method_dead1WeakMethodTestCase.test_callback_when_method_dead  sv    NN	aDq}}b1M


$


$r   c                     [        S5      nS n[        R                  " UR                  U5      n[        R                  " U5      nAU R                  U" 5       S 5        g )Nre   c                     g r   r   )r  s    r   r  -WeakMethodTestCase.test_no_cycles.<locals>.cb  r*  r   )r0   r   r  rK   rf   r   )r   r   r  r=  r   s        r   test_no_cycles!WeakMethodTestCase.test_no_cycles  sH     1I	q}}b1[[^bdD!r   c                 p  ^  U 4S jnU 4S jn[        S5      n[        S5      n[        R                  " UR                  5      n[        R                  " UR                  5      n[        R                  " UR                  5      n[        R                  " UR                  5      nU" XV5        U" Xx5        U" XW5        U" XX5        U" Xg5        U" Xh5        [        S5      n	[        R                  " U	R                  5      n
[        R                  " U	R                  5      nU" XZ5        U" X[5        U" Xj5        U" Xk5        U" XSR                  5        U" U[
        5        AAA	[        R                  " 5         XVXxX4nU H6  nU H-  nT R                  X:H  XL 5        T R                  X:g  XL5        M/     M8     g )Nc                 R   > TR                  X:H  5        TR                  X:g  5        g r   r   r   r  rJ  r   s     r   _eq-WeakMethodTestCase.test_equality.<locals>._eq  !    OOAF#QV$r   c                 R   > TR                  X:g  5        TR                  X:H  5        g r   r  r  s     r   _ne-WeakMethodTestCase.test_equality.<locals>._ne  r
  r   re   r   )	r0   r   r  rK   rP   r   rm   rn   r   )r   r  r  r%   rH  r  rJ  r   r  rI  er*   r  qr=  s   `              r   rK   WeakMethodTestCase.test_equality  sV   	%	% 1I1Iq}}-q}}-q~~.q~~.A	A	A	A	A	A	1Iq}}-q~~.A	A	A	A	A}}Ayq!


Q1A  0  4  r   c                    [        S5      n[        S5      n[        R                  " UR                  5      n[        R                  " UR                  5      n[        R                  " UR                  5      nU R                  [        U5      [        U5      5        [        U5      nAA[        R                  " 5         U R                  [        U5      U5        U R                  [        U5      U5        U R                  [        [        U5        g rd   )r0   r   r  rK   rP   r   rF   rm   rn   r   r   )r   r%   rH  r  rJ  r   has          r   rW  WeakMethodTestCase.test_hashing  s     1I1Iq}}-q}}-q~~.a$q'*!Wq


a"%a"%)T1-r   r   N)r   r   r   r   r  r  r  r  r  r  r   r  r  rK  rW  r   r   r   r   r  r    sE    #!!% %  " "'5R.r   r  c                   B   \ rS rSrSr\R                  " SS9(       a  \R                  (       a  SrOSrS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0\1Rd                  " 5       S/ 5       r3\1Rd                  " 5       S0 5       r4\1Rd                  " 5       S1 5       r5\Rl                  S2 5       r7S3 r8\1Rd                  " 5       S4 5       r9\1Rd                  " 5       \Rt                  " S55      S6 5       5       r;\1Rd                  " 5       S7 5       r<\1Rd                  " 5       \Rt                  " S55      S8 5       5       r=\Rl                  S9 5       r>S:r?g;)<MappingTestCasei  r   T)threadi  i c                   ^ Sn[        U5       Vs/ s H  n[        5       PM     nnU" U4S jU 5       5      nUR                  5       n [        U5        A[
        R                  " 5         [        U5      nA[
        R                  " 5         [        U5      n	U R                  US5        U R                  U	S5        g s  snf ! [         a     Nxf = f)N   c              3   4   >#    U  H  nT" U5      v   M     g 7fr   r   .0r   conss     r   	<genexpr>3MappingTestCase.check_len_cycles.<locals>.<genexpr>  s     /AQ   )r   re   r   )
r   rS   itemsnextStopIterationrm   rn   r   r   r   )
r   	dict_typer  Nr  r   dctry  n1n2s
     `       r   check_len_cycles MappingTestCase.check_len_cycles  s    %*1X.XX.///YY[	H 


X


Xb&!Q! /  		s   B<
C 
CCc                 F    U R                  [        R                  S 5        g )Nc                 
    U S4$ rd   r   r  s    r   r  <MappingTestCase.test_weak_keyed_len_cycles.<locals>.<lambda>+      Aq6r   )r(  r   rd  r   s    r   test_weak_keyed_len_cycles*MappingTestCase.test_weak_keyed_len_cycles*  s    g779IJr   c                 F    U R                  [        R                  S 5        g )Nc                 
    SU 4$ rd   r   r,  s    r   r  =MappingTestCase.test_weak_valued_len_cycles.<locals>.<lambda>.  s    aVr   )r(  r   WeakValueDictionaryr   s    r   test_weak_valued_len_cycles+MappingTestCase.test_weak_valued_len_cycles-  s    g99;KLr   c                 z  ^ U R                   " [        R                  /[        R                  " 5       Q76   [	        SS5       H  nSn[        R
                  " S5        [        R                  " X3U5        [	        U5       Vs/ s H  n[        5       PM     nnU" U4S jU 5       5      nAUR                  5       n [        U5        [        U5      n	A[        U5      n
U R                  U	S5        U R                  X5        U R                  U
S5        U R                  X5        M     g s  snf ! [         a     Nsf = f)Nre   rc  r  r   c              3   4   >#    U  H  nT" U5      v   M     g 7fr   r   r  s     r   r  1MappingTestCase.check_len_race.<locals>.<genexpr>8  s     3UDGGUr  )
addCleanuprm   r,  r+  r   rn   rS   r   r!  r"  r   assertGreaterEqualassertLessEqual)r   r#  r  thr$  r  r   r%  ry  r&  r'  s     `        r   check_len_raceMappingTestCase.check_len_race0  s   ((>2+;+;+=>3-BAJJqMRR().q2AXZE23U33CBR SBSB##B*  '##B*  ('   3 ! s   D(;D--
D:9D:c                 F    U R                  [        R                  S 5        g )Nc                 
    U S4$ rd   r   r,  s    r   r  :MappingTestCase.test_weak_keyed_len_race.<locals>.<lambda>I  s    !Qr   )r>  r   rd  r   s    r   test_weak_keyed_len_race(MappingTestCase.test_weak_keyed_len_raceH  s    G557GHr   c                 F    U R                  [        R                  S 5        g )Nc                 
    SU 4$ rd   r   r,  s    r   r  ;MappingTestCase.test_weak_valued_len_race.<locals>.<lambda>L  r.  r   )r>  r   r4  r   s    r   test_weak_valued_len_race)MappingTestCase.test_weak_valued_len_raceK  s    G779IJr   c                    U R                  5       u  pU HH  nU R                  [        R                  " U5      S5        U R	                  X1UR
                     S5        MJ     [        UR                  5       5      n[        UR                  5       R                  5       5      nUR                  5         UR                  5         U R                  XES5        AAU R                  [        U5      U R                  5        US	 [        5         U R                  [        U5      U R                  S-
  S5        AA[        5         U R                  [        U5      SS5        [        R                  " 5       nU R                  [        UR                   S5        [#        5       US'   [        5         U R                  [        UR                   S5        g )Nre   #wrong object returned by weak dict!z/cloning of weak-valued dictionary did not work!r   /deleting object did not cause dictionary updatez0deleting the values did not clear the dictionaryr   )make_weak_valued_dictr   r   r   r   r4   r`  r   copysortr   COUNTr   r4  r   KeyError__getitem__r   r   r   objectsr   items1items2s         r   test_weak_values MappingTestCase.test_weak_valuesN  sc    224AW44Q7;MM!!%%[>@  djjl#diik'')*F	HFTDJJ/AJTDJJNF	HQTAG	I **,(D$4$4a8#Q(D$4$4a8r   c                    U R                  5       u  pU HL  nU R                  [        R                  " U5      SSU-  5        U R	                  UR
                  X   S5        MN     UR                  5       nUR                  5       R                  5       nU R                  [        U5      [        U5      S5        AAU R                  [        U5      U R                  5        US	 [        5         U R                  [        U5      U R                  S-
  S5        AA[        5         U R                  [        U5      SS5        [        S5      nS	X'   U R                  X15        U R                  S
U5        g )Nre   z&wrong number of weak references to %r!rK  z.cloning of weak-keyed dictionary did not work!r   rL  z.deleting the keys did not clear the dictionaryr  z$What is the meaning of the universe?r    )make_weak_keyed_dictr   r   r   r   r4   r   rN  setr   rP  r   r0   r   assertNotInrS  s         r   test_weak_keysMappingTestCase.test_weak_keysn  s8   
 113AW44Q7AAEGMM!%%>@ 
 ""$Vc&kE	GFTDJJ/AJTTZZ!^F	HQTAE	G2J8aT"r   c                 `   U R                  5       u  pU R                  U5        UR                  5       nU R                  [	        U5      [	        U5      5        [        U5      nU H[  nU" 5       nU R                  Xa5        U R                  Xa5        U R                  UR                  X   5        UR                  U5        M]     U R                  [	        U5      S5        [        U5      nU R                  [	        [        UR                  5       5      5      [	        U5      5        UR                  5        H[  nU" 5       nU R                  Xa5        U R                  Xa5        U R                  UR                  X   5        UR                  U5        M]     U R                  [	        U5      S5        g r^   )	rZ  check_iterskeyrefsr   r   r`  r   r4   r  r   r   rT  r  objects2r   r  s          r   test_weak_keyed_iters%MappingTestCase.test_weak_keyed_iters  sE   113 ||~TCL1=BBMM"#MM"#RVVTX.OOB  	X* =T$,,.12CLA,,.BBMM"#MM"#RVVTX.OOB ! 	X*r   c                    U R                  5       u  pU R                  U5        UR                  5       nU R                  [	        U5      [	        U5      5        [        U5      nU Hk  nU" 5       nU R                  XaUR                     5        U R                  UR                  XR                     R                  5        UR                  U5        Mm     U R                  [	        U5      S5        [        U5      nU R                  [	        [        UR                  5       5      5      [	        U5      5        UR                  5        Hk  nU" 5       nU R                  XaUR                     5        U R                  UR                  XR                     R                  5        UR                  U5        Mm     U R                  [	        U5      S5        g r^   )	rM  r`  	valuerefsr   r   r`  r4   r  itervaluerefsrb  s          r   test_weak_valued_iters&MappingTestCase.test_weak_valued_iters  s\   224 ~~TCL1=BBRbff.RVVT&&\%5%56OOB	 
 	X* =T$"4"4"678#g,G$$&BBRbff.RVVT&&\%5%56OOB	 '
 	X*r   c                    [        UR                  5       5      nUR                  5        H  nUR                  U5        M     U R                  US5        [        UR	                  5       5      nU H  nUR                  U5        M     U R                  US5        [        UR	                  5       5      nUR	                  5        H  nUR                  U5        M     U R                  US5        [        UR                  5       5      nUR                  5        H  nUR                  U5        M     U R                  US5        g )Nzitems() did not touch all itemsz!__iter__() did not touch all keysz!iterkeys() did not touch all keysz%itervalues() did not touch all values)r`  r   r  r   keysvalues)r   r   r   itemrl  r  rm  vs           r   r`  MappingTestCase.check_iters  s    TZZ\"JJLDLL ! AB DIIK AKKN BC DIIK AKKN BC dkkm$AMM! <	>r   c                 F   [        U5      n[        [        X5      " 5       5      n[        U5        US	 [        R
                  " 5         U R                  [        [        U5      5      [        U5      [        U5      S-
  /5        AU R                  [        U5      US-
  5        g )Nre   )	r   r  getattrr!  rm   rn   r   r`  r   )r   r   rT  	iter_namerf  ry  s         r   "check_weak_destroy_while_iterating2MappingTestCase.check_weak_destroy_while_iterating  sw    I'$*,-RBK


c$r(mc'lCL14D%EFTAE*r   c                    U" 5        u  p4U R                  X15        S S S 5        U" 5        u  p4U R                  [        UR                  U5        S S S 5        U R                  WU5        U" 5        u  p4U R                  [        UR                  U5        S S S 5        U R                  X15        U" 5        u  p4XAU'   S S S 5        U R                  X   W5        [        R                  " U5      nU" 5        u  p4UR                  U5        S S S 5        U R                  X5        U" 5        u  p4UR                  5         S S S 5        U R                  [        U5      S5        g ! , (       d  f       GNJ= f! , (       d  f       GN)= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= fr^   )
r\  r   rQ  rU  popr   rN  updateclearr   )r   r   testcontextr  ro  ddicts         r   -check_weak_destroy_and_mutate_while_iterating=MappingTestCase.check_weak_destroy_and_mutate_while_iterating  s=    ]fqQ% ]fqh(8(8!< D!]fqh!4 !]fqG !$		$]fqKK %]fqJJL TA&# ]] ] ] ] ]sF   E$E10$F4F4F%(F6
E.1
F 
F
F"%
F36
Gc                    [        S5      nU" 5          [        U5      nUR                  [        UR	                  5       5      5        U R                  [        U5      US-
  5        X1U'   U R                  [        U5      U5        S S S 5        U" 5          U R                  [        U5      WS-
  5        UR                  5         U R                  [        U5      US-
  5        S S S 5        U" 5          U R                  [        U5      WS-
  5        U[        UR	                  5       5      	 U R                  [        U5      US-
  5        S S S 5        U" 5          U R                  [        U5      WS-
  5        UR                  5         U R                  [        U5      US-
  5        S S S 5        U" 5          UR                  5         U R                  [        U5      S5        S S S 5        U R                  [        U5      S5        g ! , (       d  f       GN= f! , (       d  f       GN:= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Np= f)	Ni@ re   r   r   rJ   rO   rp  r   )r0   r   rx  r!  rl  r   popitemrz  )r   r   r{  r   rf  s        r   &check_weak_del_and_len_while_iterating6MappingTestCase.check_weak_del_and_len_while_iterating   s    6N]D	AHHT$))+&'SYA.GSY*  ]SYA.LLNSYA.	 
 ]SYA.T$))+&'SYA.  ]SYA.LLNSYA.  ]JJLSY*  	TA&1 ] ]
 ] ] ]s?   A1HAH/AH%AH61,I
H
H"%
H36
I
Ic                   ^^ U R                  5       u  mmU R                  TTS5        U R                  TTS5        U R                  TTS5        U R                  TTS5        U R                  5       u  mm[        R                  UU4S j5       nU R	                  TU5        U R                  5       u  mmU R                  TU5        g )Nrl  r   rm  ra  c               3   :  >#     [        TR                  5       5      n [        U 5        TR                  5       R                  n[
        R                  " 5         [        U5      U4v   S n [
        R                  " 5         g ! S n [
        R                  " 5         f = f7fr   r  r   r!  rx  r4   rm   rn   r0   )ry  ro  r   rT  s     r   r{  KMappingTestCase.test_weak_keys_destroy_while_iterating.<locals>.testcontext)  si     	$**,'RKKM%%

Qil"

 

   BA"A? 'B?BB)rZ  ru  
contextlibcontextmanagerr}  r  r   r{  r   rT  s     @@r   &test_weak_keys_destroy_while_iterating6MappingTestCase.test_weak_keys_destroy_while_iterating!  s    113g//gvF//gwG//gxH//gyI113g		"	"
	 
#
	 	::4M 113g33D+Fr   c                   ^^ U R                  5       u  mmU R                  TTS5        U R                  TTS5        U R                  TTS5        U R                  TTS5        U R                  TTS5        U R                  5       u  mm[        R                  UU4S j5       nU R	                  TU5        U R                  5       u  mmU R                  TU5        g )Nrl  r   rm  rh  rg  c               3   :  >#     [        TR                  5       5      n [        U 5        TR                  5       R                  n[
        R                  " 5         U[        U5      4v   S n [
        R                  " 5         g ! S n [
        R                  " 5         f = f7fr   r  )ry  r  r   rT  s     r   r{  MMappingTestCase.test_weak_values_destroy_while_iterating.<locals>.testcontextD  si     	$**,'RKKM%%

l"

 

r  )rM  ru  r  r  r}  r  r  s     @@r   (test_weak_values_destroy_while_iterating8MappingTestCase.test_weak_values_destroy_while_iterating;  s    224g//gvF//gwG//gxH//gO//g{K224g		"	"
	 
#
	 	::4M224g33D+Fr   c                 r    [        S5      n[        R                  " US05      nU R                  X!   S5        g Nr   il  r0   r   rd  r   r   r   r   s      r   #test_make_weak_keyed_dict_from_dict3MappingTestCase.test_make_weak_keyed_dict_from_dictT  s1    1I((!C1#&r   c                     [        S5      n[        R                  " US05      n[        R                  " U5      nU R                  X!   S5        g r  r  r   r   r   dict2s       r   .test_make_weak_keyed_dict_from_weak_keyed_dict>MappingTestCase.test_make_weak_keyed_dict_from_weak_keyed_dictY  sA    1I((!C1))$/#&r   c                     [         R                  " 5       n[        [        [        [        U R                  5      5      5      nU H  nUR                  X'   M     X4$ r   )r   rd  r`  mapr0   r   rP  r4   r   r   rT  r   s       r   rZ  $MappingTestCase.make_weak_keyed_dict_  sG    ((*s65#456AeeDG }r   c                 t    [        S5      n[        R                  " SU05      nU R                  US   U5        g r  r0   r   r4  r   r  s      r   $test_make_weak_valued_dict_from_dict4MappingTestCase.test_make_weak_valued_dict_from_dictf  s3    1I**C73cA&r   c                     [        S5      n[        R                  " SU05      n[        R                  " U5      nU R                  US   U5        g r  r  r  s       r   0test_make_weak_valued_dict_from_weak_valued_dict@MappingTestCase.test_make_weak_valued_dict_from_weak_valued_dictk  sC    1I**C73++D1cA&r   c                    U R                  [        [        R                  R                  5        U R                  [        [        R                  0 0 5        U R                  [        [        R                  SS5        [        S5      nS HX  n[        R                  " S0 X!0D6nU R                  [        UR                  5       5      U/5        U R                  X2   U5        MZ     g )Nr   r   r   r   r?   iterable)	r   r   r   r4  r5   r0   r   r`  rl  )r   r   kwr  s       r   test_make_weak_valued_dict_misc/MappingTestCase.test_make_weak_valued_dict_miscq  s    )W%@%@%I%IJ)W%@%@"bI)W%@%@"bI1I5B++6rg6AT!&&(^bT2QUA& 6r   c                     [         R                  " 5       n[        [        [        [        U R                  5      5      5      nU H  nX1UR                  '   M     X4$ r   )r   r4  r`  r  r0   r   rP  r4   r  s       r   rM  %MappingTestCase.make_weak_valued_dict}  sG    **,s65#456AK }r   c                    U" 5       nX6U'   XVU'   U R                  [        U5      S5        UR                  5       u  pxU R                  [        U5      S5        XrL a  U R                  X5        OU R                  X5        UR                  5       u  pxU R                  [        U5      S5        XrL a  U R                  X5        g U R                  X5        g )Nr   re   r   )r   r   r  r   )	r   klasskey1value1key2value2weakdictr  ro  s	            r   check_popitemMappingTestCase.check_popitem  s    7X*!X*9MM!$MM!$!X*9MM!$MM!$r   c                 j    U R                  [        R                  S[        5       S[        5       5        g )Nr  r  )r  r   r4  r   r   s    r   test_weak_valued_dict_popitem-MappingTestCase.test_weak_valued_dict_popitem  s%    766!13	5r   c                 j    U R                  [        R                  [        5       S[        5       S5        g Nzvalue 1zvalue 2)r  r   rd  r   r   s    r   test_weak_keyed_dict_popitem,MappingTestCase.test_weak_keyed_dict_popitem  s%    7443	13		;r   c                    U R                  X4S5        U" 5       nUR                  X#5      nU R                  Xc5        U R                  X%5        U R                  UR	                  U5      U5        U R                  XR   U5        UR                  X$5      nU R                  Xc5        U R                  X%5        U R                  UR	                  U5      U5        U R                  XR   U5        g )Nz9invalid test -- value parameters must be distinct objects)r  
setdefaultr   r   get)r   r  keyr  r  r  r   s          r   check_setdefault MappingTestCase.check_setdefault  s    E	F 7,a c$hll3'0hmV,,a c$hll3'0hmV,r   c                 h    U R                  [        R                  S[        5       [        5       5        g )Nr  )r  r   r4  r   r   s    r    test_weak_valued_dict_setdefault0MappingTestCase.test_weak_valued_dict_setdefault  s#    g99#QS!#	/r   c                 X    U R                  [        R                  [        5       SS5        g r  )r  r   rd  r   r   s    r   test_weak_keyed_dict_setdefault/MappingTestCase.test_weak_keyed_dict_setdefault  s!    g77c9i	9r   c                    U" 5       nUR                  U5        U R                  [        U5      [        U5      5        UR                  5        HZ  nU R	                  XBS5        UR                  U5      nU R                  XSU   5        U R                  XSR                  U5      5        M\     UR                  5        HM  nU R	                  XCS5        X$   nU R                  XSU   5        U R                  XSR                  U5      5        MO     g )Nz(mysterious new key appeared in weak dictz%original key disappeared in weak dict)ry  r   r   rl  r   r  r   )r   r  r   r  r  ro  s         r   check_updateMappingTestCase.check_update  s    
 7XD	2AMM!#MNAMM!a[)MM!\\!_-	 !
 AMM!'NOAMM!a[)MM!\\!_-	 r   c           
         U R                  [        R                  S[        5       S[        5       [        5       [        5       05        U R	                  [
        [        R                  R                  5        [        R                  " 5       nU R	                  [
        UR                  0 0 5        U R	                  [
        UR                  SS5        U R                  [        UR                  5       5      / 5        [        S5      nS Hi  n[        R                  " 5       nUR                  " S0 X20D6  U R                  [        UR                  5       5      U/5        U R                  X   U5        Mk     g )Nre   r  r   r   r  )r  r   r4  r   r   r   ry  r   r`  rl  r0   )r   r  r   r  s       r   test_weak_valued_dict_update,MappingTestCase.test_weak_valued_dict_update  s   '55ac3QS!#6	8 	)W%@%@%G%GH''))QXXr26)QXXr26affh,1I5B++-AHHwT!&&(^bT2QUA&	 6r   c                    [        5       n[        5       n[        5       n[        R                  " SU05      n[        R                  " X!S.5      nUR                  5       nX2S.nSU4SU4/nXE-  n	U R	                  [        U	5      [        U5      [        U5      -  5        U R                  [        U	5      [        R                  5        XE-  nU R	                  XI5        XW-  n
U R	                  [        U
5      [        U5      U-  5        U R                  [        U
5      [        R                  5        XW-  nU R	                  XZ5        UR                  5       nX-  nU R	                  [        U5      [        U5      [        U5      -  5        U R                  [        U5      [        R                  5        Xv-  nU R	                  [        U5      U[        U5      -  5        U R                  [        U5      [        R                  5        AU R                  SU	5        U R                  SU
5        U R                  SU5        U R                  SU5        g )Nre   re   r   )re   r   rO   rp  r   )	r   r   r4  rN  r   r   r   rF  r\  )r   r  rJ  r   wvd1wvd2wvd3d1pairstmp1tmp2tmp3tmp4s                r    test_weak_valued_union_operators0MappingTestCase.test_weak_valued_union_operators  s   CCC**Aq62**q<8yy{\Q!Q {dT$Z$t*%<=d4j'"="=>$ydT$Z"_5d4j'"="=>
$yy{dT$Z$u+%=>d4j'"="=>ydR$t*_5d4j'"="=>D!D!D!D!r   c           	          U R                  [        R                  [        5       S[        5       S[        5       S05        g )Nre   r   r   )r  r   rd  r   r   s    r   test_weak_keyed_dict_update+MappingTestCase.test_weak_keyed_dict_update   s.    '33313132	4r   c                 .   [         R                  " 5       n[        S5      n[        S5      nSX'   SX'   U R                  [	        U5      S5        X	 U R                  [	        U5      S5        U R                  [        UR                  5       5      U/5        g )N12	somethingr   re   )r   rd  r0   r   r   r`  rl  r   r  o1r   s       r   test_weak_keyed_delitem'MappingTestCase.test_weak_keyed_delitem  sy    %%'C[C[Q#EQ#affh".r   c                    [        5       n[        5       n[        5       n[        R                  " USUS05      n[        R                  " USUS05      nUR                  5       nUSUS0nUS4US4/nXE-  n	U R	                  [        U	5      [        U5      [        U5      -  5        U R                  [        U	5      [        R                  5        XE-  nU R	                  XI5        XW-  n
U R	                  [        U
5      [        U5      U-  5        U R                  [        U
5      [        R                  5        XW-  nU R	                  XZ5        UR                  5       nX-  nU R	                  [        U5      [        U5      [        U5      -  5        U R                  [        U5      [        R                  5        Xv-  nU R	                  [        U5      U[        U5      -  5        U R                  [        U5      [        R                  5        AU R                  SU	R                  5       5        U R                  SU
R                  5       5        U R                  SUR                  5       5        U R                  SUR                  5       5        g )	Nre   r   r   rJ   56      )
r   r   rd  rN  r   r   r   rF  r\  rm  )r   r  r   o3wkd1wkd2wkd3r  r  r  r  r  r  s                r   test_weak_keyed_union_operators/MappingTestCase.test_weak_keyed_union_operators  s   SSS(("aQ8(("aQ8yy{#r3a2q'"{dT$Z$t*%<=d4j'";";<$ydT$Z"_5d4j'";";<
$yy{dT$Z$u+%=>d4j'";";<ydR$t*_5d4j'";";<DKKM*DKKM*DKKM*DKKM*r   c                 4   [         R                  " 5       n[        S5      n[        S5      nX!S'   X1S'   U R                  [	        U5      S5        US	 U R                  [	        U5      S5        U R                  [        UR                  5       5      SU4/5        g )Nr  r  r  zsomething elser   re   )r   r4  r0   r   r   r`  r   r  s       r   test_weak_valued_delitem(MappingTestCase.test_weak_valued_delitem4  s    '')C[C[+ 
Q#kNQ#aggi,<b+A*BCr   c                    [         R                  " 5       n[        S5      nU R                  [        UR
                  U5        U R                  [        UR                  U5        U R                  [        UR
                  S5        U R                  [        UR                  S5        U R                  [        UR                  SS5        g )Nr     )	r   rd  r0   r   rQ  rU  rR  r   __setitem__)r   r  r   s      r   test_weak_keyed_bad_delitem+MappingTestCase.test_weak_keyed_bad_delitem?  s    %%'3K 	(AMM15(AMM15 	)Q]]R8)Q]]R8)Q]]R<r   c                   ^^ [         R                  " 5       nSm " UU4S jS[        5      n[        S5       Vs/ s H
  o2" U5      PM     snmT H  nUR                  X'   M     A[        UR                  5       5      mTR                  5         SmSnT H
  nUS-  nX	 M     [        5         U R                  [        U5      S5        U R                  US5        g s  snf )	NFc                   0   > \ rS rSrS rS rU U4S jrSrg)<MappingTestCase.test_weak_keyed_cascading_deletes.<locals>.CiU  c                     Xl         g r   r  )r   r  s     r   r5   EMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__init__V  s    
r   c                 ,    [        U R                  5      $ r   )rF   r  r   s    r   rG   EMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__hash__X  s    DJJ''r   c                 J   > T(       a  TS	 U R                   UR                   :H  $ )Nrr  r  )r   r?   mutateobjss     r   r@   CMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__eq__Z  s"     RzzU[[00r   r  N)r   r   r   r   r5   rG   r@   r   )r  r  s   r   r   r  U  s    (1 1r   r   rJ   Tr   re   r   )r   rd  r   r   r  r`  rl  reverser   r   r   )r   r  r   r  r   countr  r  s         @@r   !test_weak_keyed_cascading_deletes1MappingTestCase.test_weak_keyed_cascading_deletesM  s    
 %%'
	1 
	1 
	1 $Ah'h!h'A77AD AFFH~ 	 AQJE  	Q#"1 (s   Cc                 d    [         R                  " 5       nU R                  [        U5      S5        g )Nz<WeakValueDictionary at 0x.*>)r   r4  r   r   r   r   s     r   test_make_weak_valued_dict_repr/MappingTestCase.test_make_weak_valued_dict_repr{  s%    **,d%DEr   c                 d    [         R                  " 5       nU R                  [        U5      S5        g )Nz<WeakKeyDictionary at 0x.*>)r   rd  r   r   r  s     r   test_make_weak_keyed_dict_repr.MappingTestCase.test_make_weak_keyed_dict_repr  s%    ((*d%BCr   c                    [         R                  " 5       n[        5          [        U R                  5       H0  nUR                  S[        5       5      nU R                  US 5        AM2     S S S 5        g ! , (       d  f       g = fr  )r   r4  ry   r   NUM_THREADED_ITERATIONSr  rS   r  r   r  r  r%   s       r   $test_threaded_weak_valued_setdefault4MappingTestCase.test_threaded_weak_valued_setdefault  s\    '') 4778LLXZ0  D) 9 !  s   A
A33
Bc                    [         R                  " 5       n[        5          [        U R                  5       H4  n[        5       US'   UR                  SS5      nU R                  US 5        M6     S S S 5        g ! , (       d  f       g = fr  )r   r4  ry   r   r  rS   rx  r  r  s       r   test_threaded_weak_valued_pop-MappingTestCase.test_threaded_weak_valued_pop  sa    '') 4778 
"EE"bM  D) 9 !  s   AA77
Bc                 
   [         R                  " 5       n[        5          [        SU R                  -  5       H.  n[        5       nX1S'   U R                  [        U5      S5        S nM0     S S S 5        g ! , (       d  f       g = f)Nr   r   re   )r   r4  ry   r   r  rS   r   r   )r   r  r  r   s       r   %test_threaded_weak_valued_consistency5MappingTestCase.test_threaded_weak_valued_consistency  se     '') 1t;;;<J"  Q+ = !  s   AA44
Bc                 @   [         R                  " 5       n[        R                  " 5          [	        5       US'   UR
                  S   n[	        5       nX1S'   [        R                  " 5         U R                  [        U5      S5        S S S 5        g ! , (       d  f       g = f)Nr   re   )
r   r4  r   rs   rS   r  rm   rn   r   r   )r   r  r   r   s       r   test_weak_valued_consistency,MappingTestCase.test_weak_valued_consistency  so     '')!JAbE B
AbEJJLSVQ' "!!s   AB
Bc                   ^ / n " S S5      n " S S5      nU4S jnS nU R                  U[        R                  [        R                  45        U" 5       n/ n	/ n
[	        S5       H:  nU" U5      U" U5      pU	R                  U5        U
R                  U5        XU'   AAM<     [        R                  " XhU4S9nU[        R                  L a  [        R                  " Xy4S9nO[        R                  " Xz4S9nUR                  5         UR                  5         UR                  5         UR                  5         U(       a  US	   eg )
Nc                       \ rS rSrS rSrg)?MappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyKeyi  c                     Xl         g r   ctrr   r&  s     r   r5   HMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyKey.__init__      r   r%  NrY   r   r   r   DummyKeyr#    r   r   r*  c                       \ rS rSrS rSrg)AMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyValuei  c                     Xl         g r   r%  r'  s     r   r5   JMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyValue.__init__  r)  r   r%  NrY   r   r   r   
DummyValuer,    r   r   r/  c                    >  TSL a  [         R                  " U 5      ng U R                  5       ng ! [         a  nUR                  U5         S nAg S nAff = fr  )rN  deepcopyr  r   )r  excr  exr1  s       r   	dict_copy@MappingTestCase.check_threaded_weak_dict_copy.<locals>.dict_copy  sF    t#a(AA 

2s   0 0 
AAAc                     SnU (       aa  [         R                  " S[        U 5      S-
  5      nUS-  nU R                  U5        US-  S:X  a  [        R
                  " 5         U (       a  M`  g g )Nr   re   i'  )randomrandintr   rx  rm   rn   )lstgc_ctrr  s      r   pop_and_collectFMappingTestCase.check_threaded_weak_dict_copy.<locals>.pop_and_collect  sR    FNN1c#hl3!
E>Q&JJL #r   ip )rr   r(  r   )
r   r   rd  r4  r   r   rt   ru   rv   rw   )r   type_r1  r2  r*  r/  r4  r;  r  rl  rm  r  r  ro  t_copy	t_collects     `             r   check_threaded_weak_dict_copy-MappingTestCase.check_threaded_weak_dict_copy  s    	 		 			! 	eg779T9TUVGuAA;
1qKKNMM!aD  !!SCG---!((gNI!((iPI a&L r   c                 D    U R                  [        R                  S5        g NFr@  r   rd  r   s    r    test_threaded_weak_key_dict_copy0MappingTestCase.test_threaded_weak_key_dict_copy  s     	**7+D+DeLr   cpuc                 D    U R                  [        R                  S5        g r  rD  r   s    r   $test_threaded_weak_key_dict_deepcopy4MappingTestCase.test_threaded_weak_key_dict_deepcopy  s    
 	**7+D+DdKr   c                 D    U R                  [        R                  S5        g rC  r@  r   r4  r   s    r   "test_threaded_weak_value_dict_copy2MappingTestCase.test_threaded_weak_value_dict_copy  s     	**7+F+FNr   c                 D    U R                  [        R                  S5        g r  rL  r   s    r   &test_threaded_weak_value_dict_deepcopy6MappingTestCase.test_threaded_weak_value_dict_deepcopy  s    
 	**7+F+FMr   c                 x    [         R                  " 5       nU R                  UR                  R                  5        g r   )r   r4  r   _remove__closure__)r   r  s     r   test_remove_closure#MappingTestCase.test_remove_closure  s(    '')!))//0r   r   N)@r   r   r   r   rP  r   check_sanitizerPy_GIL_DISABLEDr  r(  r/  r5  r>  rC  rH  rW  r]  rd  ri  r`  ru  r}  r  r  r  r  r  rZ  r  r  r  rM  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r	   requires_working_threadingr  r  r  r  r  r@  rE  requires_resourcerI  rM  rP  rU  r   r   r   r   r  r    s2   Ed+0G0G"&"( (KM)0IK9@#<+6+2>4+'2'BG4G2'
''
'
'%$5;-"/9.&'"#"J4	/#+J	D=,#\FD 002 3 002* 3* 002
 3
 ( ($;z 002M 3M
 002u%L & 3L
 002O 3O
 002u%N & 3N
 1 1r   r  )mapping_testsc                   f    \ rS rSrSr\" S5      \" S5      \" S5      S.r\R                  r	S r
Srg	)
WeakValueDictionaryTestCasei  z?Check that WeakValueDictionary conforms to the mapping protocolre   r   r   )r  r  key3c                 6    U R                   R                  5       $ r   )!_WeakValueDictionaryTestCase__refrN  r   s    r   
_reference&WeakValueDictionaryTestCase._reference      zz  r   r   N)r   r   r   r   __doc__r0   r`  r   r4  	type2testra  r   r   r   r   r]  r]    s-    I1IfQiq	BE++I!r   r]  c                   j    \ rS rSrSr\" S5      S\" S5      S\" S5      S0r\R                  r	S	 r
S
rg)WeakKeyDictionaryTestCasei  z=Check that WeakKeyDictionary conforms to the mapping protocolr  re   r  r   r^  r   c                 6    U R                   R                  5       $ r   )_WeakKeyDictionaryTestCase__refrN  r   s    r   ra  $WeakKeyDictionaryTestCase._reference  rc  r   r   N)r   r   r   r   rd  r0   ri  r   rd  re  ra  r   r   r   r   rg  rg    s3    GF^Avf~aBE))I!r   rg  c                   \    \ rS rSr " S S5      rS rS rS rS rS r	\
S	 5       rS
 rSrg)FinalizeTestCasei#  c                       \ rS rSrSrg)FinalizeTestCase.Ai%  r   Nr^  r   r   r   r  rn  %  s    r   r  c                 l    [         R                  R                  S:w  a  [        R                  " 5         g g )Ncpython)sysimplementationnamer   r   r   s    r   _collect_if_necessary&FinalizeTestCase._collect_if_necessary(  s'    ""i/  0r   c                   ^ U4S jnU R                  5       n/ m[        R                  " X!SSSS9nU R                  UR                  S5        U R                  UR                  5       X!SSS045        U R                  U" 5       S	5        U R                  U" 5       S 5        U R                  U" 5       S 5        U R                  UR                  5       S 5        U R                  UR                  5       S 5        U R                  UR                  S
5        U R                  TS	/5        / m[        R                  " X!SSS5      nU R                  UR                  5       X!S0 45        U R                  UR                  5       X!S0 45        U R                  U" 5       S 5        U R                  U" 5       S 5        U R                  UR                  5       S 5        U R                  UR                  5       S 5        U R                  UR                  S
5        U R                  T/ 5        / m[        R                  " X!SSSS9nAU R                  5         U R                  U" 5       S 5        U R                  U" 5       S 5        U R                  UR                  5       S 5        U R                  UR                  5       S 5        U R                  UR                  S
5        U R                  TS	/5        g )Nc                 >   > TR                  X-   U-   5        X-   U-   $ r   r
  )r%   rH  rI  r  s      r   add+FinalizeTestCase.test_finalize.<locals>.add.  s!    JJquqy!519r   C   +   Y   )rI  T)rz  r{  rI     F)rz  r{  r|  )r%   rH  rI  )r  r   finalizer   alivepeekdetachrt  )r   rx  r  r*   r  s       @r   test_finalizeFinalizeTestCase.test_finalize-  sV   	 FFHQRr2$'AGc"X#>?c"d#d#4(T*%(se$QRR0AJ#;<aj"%=>d#d#4(T*%(b!QrR26""$d#d#4(T*%(se$r   c           	        ^ U4S jnU R                  5       n/ m[        R                  " X!SSSSS9nU R                  UR	                  5       X!SSSS.45        U" 5         U R                  TSSSS.4/5        U R                  [        5         [        R                  " X!SS9  S S S 5        U R                  [        5         [        R                  " X!SS	9  S S S 5        U R                  [        [        R                  U5        U R                  [        [        R                  5        g ! , (       d  f       N= f! , (       d  f       Ni= f)
Nc                  *   > TR                  X45        g r   r
  )r(  kwargsr  s     r   fin-FinalizeTestCase.test_arg_errors.<locals>.finW  s    JJ~&r   re   r   r   rJ   )funcr   r  )r  r4   )r   r  r4   )r  r   r~  r   r  r   r   )r   r  r  r*   r  s       @r   test_arg_errors FinalizeTestCase.test_arg_errorsV  s    	' FFHQQq9AFQq4I#JK	1(=>?@y)Qa0 *y)!4 *)W%5%5q9)W%5%56 *)))s   D'?D8'
D58
Ec                    U R                  5       n/ n[        R                  " XR                  S5      n[        R                  " XR                  S5      n[        R                  " XR                  S5      n[        R                  " XR                  S5      n[        R                  " XR                  S5      nAAU R	                  UR
                  5        U R	                  UR
                  5        U R	                  UR
                  5        U R	                  UR                  5       5        U R                  UR
                  5        U" 5         UR                  S5        U" 5         U R                  UR
                  5        UR                  S5        U" 5         UR                  S5        AU R                  5         U R                  UR
                  5        UR                  S	5        U" 5         / S
QnU R                  X(5        g )Nf1f2f3f4f5r  Br   r  )r  r  r  r   r  r  r  r  )
r  r   r~  r   r   r  r  r   rt  r   )	r   r  r  r  r  r  r  r  expecteds	            r   
test_orderFinalizeTestCase.test_orderi  sc   FFHaT2aT2aT2aT2aT2 !!!		$"


3
"

3


3""$ 	"

3
?'r   c                   ^  " S S[         R                  5      nU R                  5       n/ mU4S jnU" X#5      n[         R                  " U5      n[         R                  " U5      nAAU R	                  U" 5       5        U R	                  U" 5       5        AU R                  5         U R                  U" 5       5        U R                  U" 5       5        U R                  TS/5        g )Nc                       \ rS rSrSrg)4FinalizeTestCase.test_all_freed.<locals>.MyFinalizeri  r   Nr^  r   r   r   MyFinalizerr    r  r   r  c                  (   > T R                  S5        g )N{   r
  )r  s   r   rg   1FinalizeTestCase.test_all_freed.<locals>.callback  s    JJsOr   r  )r   r~  r  rf   r   rt  r   r   )r   r  r  rg   r*   wr_callbackwr_fr  s          @r   test_all_freedFinalizeTestCase.test_all_freed  s    	'** 	 FFH	$kk(+{{1~a[]+TV$""$+-($&!se$r   c                   ^  U 4S jn[         R                  " T [        S[        5      n[         R                  " T [        S[        5      n[         R                  " T U5      n[         R                  " T [        S[        5      nSUl        g )Nc                  ^   > [         R                  " T[        S5      n [        S5        SS-    g )Ng1f3 errorre   r   )r   r~  print)r  clss    r   error,FinalizeTestCase.run_in_child.<locals>.error  s(     !!#ud3B*aCr   r  r  r  F)r   r~  r  _global_varatexit)r  r  r  r  r  r  s   `     r   run_in_childFinalizeTestCase.run_in_child  sg    	 c5$<c5$<c5)c5$< 	r   c                     Sn[         R                  " SU5      u  p#nUR                  S5      R                  5       nU R	                  U/ SQ5        U R                  SU;   5        g )NzNfrom test.test_weakref import FinalizeTestCase;FinalizeTestCase.run_in_child()r  r  )z	f4 foobarr  r  z	f1 foobars   ZeroDivisionError)r   assert_python_okr  
splitlinesr   r   )r   progrcoutr  s        r   test_atexitFinalizeTestCase.test_atexit  sY    2$55dDAjj!,,.JK,34r   r   N)r   r   r   r   r  rt  r  r  r  r  classmethodr  r  r   r   r   r   rl  rl  #  s@     !
'%R7&%(N%2 ! !&5r   rl  c                       \ rS rSrS rSrg)ModuleTestCasei  c                     S Hm  n[        [        U5      nUS:w  a  U R                  UR                  S5        U R                  UR                  U5        U R                  UR
                  U5        Mo     g )N)r  	ProxyTyperG  r  WeakSetrd  r4  r  r   )rs  r   r   r   r   r   )r   rs  r   s      r   
test_namesModuleTestCase.test_names  sb    ZD'4(Cy   ;S\\40S--t4Zr   r   N)r   r   r   r   r  r   r   r   r   r  r    s    5r   r  a   Doctest for examples in the library reference: weakref.rst

>>> from test.support import gc_collect
>>> import weakref
>>> class Dict(dict):
...     pass
...
>>> obj = Dict(red=1, green=2, blue=3)   # this object is weak referencable
>>> r = weakref.ref(obj)
>>> print(r() is obj)
True

>>> import weakref
>>> class Object:
...     pass
...
>>> o = Object()
>>> r = weakref.ref(o)
>>> o2 = r()
>>> o is o2
True
>>> del o, o2
>>> gc_collect()  # For PyPy or other GCs.
>>> print(r())
None

>>> import weakref
>>> class ExtendedRef(weakref.ref):
...     def __init__(self, ob, callback=None, **annotations):
...         super().__init__(ob, callback)
...         self.__counter = 0
...         for k, v in annotations.items():
...             setattr(self, k, v)
...     def __call__(self):
...         '''Return a pair containing the referent and the number of
...         times the reference has been called.
...         '''
...         ob = super().__call__()
...         if ob is not None:
...             self.__counter += 1
...             ob = (ob, self.__counter)
...         return ob
...
>>> class A:   # not in docs from here, just testing the ExtendedRef
...     pass
...
>>> a = A()
>>> r = ExtendedRef(a, foo=1, bar="baz")
>>> r.foo
1
>>> r.bar
'baz'
>>> r()[1]
1
>>> r()[1]
2
>>> r()[0] is a
True


>>> import weakref
>>> _id2obj_dict = weakref.WeakValueDictionary()
>>> def remember(obj):
...     oid = id(obj)
...     _id2obj_dict[oid] = obj
...     return oid
...
>>> def id2obj(oid):
...     return _id2obj_dict[oid]
...
>>> a = A()             # from here, just testing
>>> a_id = remember(a)
>>> id2obj(a_id) is a
True
>>> del a
>>> gc_collect()  # For PyPy or other GCs.
>>> try:
...     id2obj(a_id)
... except KeyError:
...     print('OK')
... else:
...     print('WeakValueDictionary error')
OK


libreftestc                 N    UR                  [        R                  " 5       5        U$ r   )addTestdoctestDocTestSuite)loadertestspatterns      r   
load_testsr  )	  s    	MM'&&()Lr   r   )g{Gzt?)3rm   rq  r  r  r   r   r  r  rN  rt   rk   r7  r  testr   test.supportr   r   r   r   r   r	   r
   r   r4  r  r   r   r,   r.   r0   rS   TestCaser[   r  ry   r{   r  r  r  r[  BasicTestMappingProtocolr]  rg  rl  r  r  __test__r  r   mainr   r   r   <module>r     ss   	 
             K K # & ) *   
  * 
x     *nR nRbe+( e+PF.** F.RC1h C1L !-"H"H !! F F !`5x(( `5F5X&& 5T
l :&
 zMMO r   