
    dafF)                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZmZ d dlmZ d dlmZ dadZ G d d      Z G d	 d
      Zd Zd Z G d d      Z G d d      Z G d dej6                        Zej:                  d)d       Z G d de      Z G d de      Z  G d dej6                        Z! G d de      Z"d dlm#Z#  G d de#jH                        Z% G d d e#jH                        Z& G d! d"ej6                        Z' G d# d$ej6                        Z(d%Z)d&e)iZ*d' Z+e,d(k(  r ejZ                          yy)*    N)support)script_helper	ALWAYS_EQ)
gc_collect)threading_helperfoobarc                       e Zd Zd Zy)Cc                      y N selfs    ,/root/Python-3.12.4/Lib/test/test_weakref.pymethodzC.method   s        N)__name__
__module____qualname__r   r   r   r   r
   r
      s    r   r
   c                       e Zd ZdZd Zy)CallableNc                     || _         y r   barr   xs     r   __call__zCallable.__call__"   s	    r   )r   r   r   r   r   r   r   r   r   r      s    
Cr   r   c                      d } | S )Nc                       y r   r   r   r   r   fzcreate_function.<locals>.f'   s    Tr   r   )r    s    r   create_functionr!   &   s
    Hr   c                  *    t               j                  S r   )r
   r   r   r   r   create_bound_methodr#   *   s    3::r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	Objectc                     || _         y r   arg)r   r(   s     r   __init__zObject.__init__/   s	    r   c                      d| j                   z  S )Nz<Object %r>r'   r   s    r   __repr__zObject.__repr__1   s    txx''r   c                 `    t        |t              r| j                  |j                  k(  S t        S r   
isinstancer%   r(   NotImplementedr   others     r   __eq__zObject.__eq__3   s%    eV$88uyy((r   c                 `    t        |t              r| j                  |j                  k  S t        S r   r-   r0   s     r   __lt__zObject.__lt__7   s%    eV$88eii''r   c                 ,    t        | j                        S r   )hashr(   r   s    r   __hash__zObject.__hash__;   s    DHH~r   c                      y)N   r   r   s    r   some_methodzObject.some_method=       r   c                      y)N   r   r   s    r   other_methodzObject.other_method?   r;   r   N)
r   r   r   r)   r+   r2   r4   r7   r:   r>   r   r   r   r%   r%   .   s%    (r   r%   c                       e Zd Zd Zy)RefCyclec                     | | _         y r   )cycler   s    r   r)   zRefCycle.__init__D   s	    
r   Nr   r   r   r)   r   r   r   r@   r@   C   s    r   r@   c                       e Zd Zd Zd Zy)TestBasec                     d| _         y Nr   cbcalledr   s    r   setUpzTestBase.setUpJ   s	    r   c                 .    | xj                   dz  c_         y N   rH   )r   refs     r   callbackzTestBase.callbackM   s    r   N)r   r   r   rJ   rO   r   r   r   rE   rE   H   s    r   rE   c              #      K   d fd}t        j                         5  t        j                  |      }|j	                          	 d d|j                          	 ddd       y# d|j                          w xY w# 1 sw Y   yxY ww)zR
    Ensure GC collections happen in a different thread, at a high frequency.
    Fc                  d    s-t        j                          t        j                          s,y y r   )timesleepgccollect)periodplease_stops   r   rU   z"collect_in_thread.<locals>.collectX   s     JJvJJL r   )targetNT)r   
disable_gc	threadingThreadstartjoin)rV   rU   trW   s   `  @r   collect_in_threadr_   Q   s{     
 K
 
			 G,			KFFH  KFFH s4   B'B 	A)B  	B)A==B  B	Bc                   h   e Zd Zd Zd Zd Zej                  d        Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.d+ Z/d, Z0d- Z1d. Z2d/ Z3d0 Z4d1 Z5d2 Z6d3 Z7d4 Z8d5 Z9y6)7ReferencesTestCasec                     | j                  t               | j                  t               | j                  t               t               }t	        j
                  |      }t        |       ~t        |       y r   )check_basic_refr
   r!   r#   weakrefrN   repr)r   owrs      r   test_basic_refz!ReferencesTestCase.test_basic_refi   sT    Q_-01 C[[^RRr   c                      G d dt               } |d      }t        j                  |      }| j                  dt	        |             | j                  dt        |             y )Nc                       e Zd Zd Zy)>ReferencesTestCase.test_repr_failure_gh99184.<locals>.MyConfigc                     | |   S r   r   r   s     r   __getattr__zJReferencesTestCase.test_repr_failure_gh99184.<locals>.MyConfig.__getattr__y   s    Awr   N)r   r   r   rm   r   r   r   MyConfigrk   x       r   rn   r=   )offset)dictrd   rN   assertInre   str)r   rn   objobj_weakrefs       r   test_repr_failure_gh99184z,ReferencesTestCase.test_repr_failure_gh99184w   sN    	t 	 a kk#&j${"34j#k"23r   c                     | j                  t               | j                  t               | j                  t               y r   )check_basic_callbackr
   r!   r#   r   s    r   test_basic_callbackz&ReferencesTestCase.test_basic_callback   s-    !!!$!!/2!!"56r   c                     dd l }|j                  } |       }t        j                  |      }| j	                   |       |       ~| j                   |              | j                  |       | j                  |       y rG   )	_testcapicreate_cfunctionrd   rN   assertIsassertIsNonerc   rx   )r   r{   r|   r    rg   s        r   test_cfunctionz!ReferencesTestCase.test_cfunction   sg    $55[[^bdA"$-.!!"23r   c                 D   t               }t        j                  || j                        }t        j                  || j                        }~t	                | j                   |       d       | j                   |       d       | j                  | j                  dd       y )Nz$expected reference to be invalidated   z-callback not called the right number of times)r
   rd   rN   rO   r   r~   assertEqualrI   r   rf   ref1ref2s       r   test_multiple_callbacksz*ReferencesTestCase.test_multiple_callbacks   sy    C{{1dmm,{{1dmm,$&"HI$&"HID	Fr   c                     | fd}t               }t        j                  ||      | _        t        j                  ||      }~y )Nc                 $    |j                          y r   rN   )objectr   s     r   rO   zDReferencesTestCase.test_multiple_selfref_callbacks.<locals>.callback   s    HHJr   )r
   rd   rN   )r   rO   cr   s       r   test_multiple_selfref_callbacksz2ReferencesTestCase.test_multiple_selfref_callbacks   s8     #' 	C;;q(+{{1h'r   c                 f    t               }| j                  t        t        j                  |d        y )N)rO   )r
   assertRaises	TypeErrorrd   rN   )r   r   s     r   test_constructor_kwargsz*ReferencesTestCase.test_constructor_kwargs   s$    C)W[[!dCr   c                    t               }d|_        t        j                  || j                        }t        j                  || j                        }~t                d }| j                  t        ||       | j                  t        ||       t        j                  t                     }t                | j                  t        t        |       | j                  | j                  d       y )NrM   c                     | j                    y r   r   )proxys    r   checkz0ReferencesTestCase.test_proxy_ref.<locals>.check   s	    IIr   r   )r
   r   rd   r   rO   r   r   ReferenceErrorboolr   rI   )r   rf   r   r   r   ref3s         r   test_proxy_refz!ReferencesTestCase.test_proxy_ref   s    C}}Q.}}Q.	 	.%6.%6}}QS!.$5*r   c                      |       }t        j                  |      }| j                   |       d        |       }| j                  ||d       y )Nz,weak reference to live object should be livez-<ref>() should return original object if live)rd   rN   assertIsNotNoner}   )r   factoryrf   rN   o2s        r   rc   z"ReferencesTestCase.check_basic_ref   sG    Ikk!nSUC	EUaD	Fr   c                     d| _          |       }t        j                  || j                        }~t	                | j                  | j                   dd       | j                   |       d       y )Nr   rM   z(callback did not properly set 'cbcalled'z3ref2 should be dead after deleting object reference)rI   rd   rN   rO   r   r   r~   )r   r   rf   rN   s       r   rx   z'ReferencesTestCase.check_basic_callback   s\    Ikk!T]]+?	A#%J	Lr   c                 "   t               }t        j                  |      }t        j                  |      }t        j                  |      }| j	                  ||d       t               }t        j                  |      }t        j                  |      }t        j                  |      }| j	                  ||d       | j                  t        j                  |      dd       ~t                | j                  t        j                  |      dd       y )Nz1reference object w/out callback should be re-usedr   zwrong weak ref count for objectrM   z4wrong weak ref count for object after deleting proxy)r
   rd   rN   r   r}   r   getweakrefcountr   )r   rf   r   r   r   s        r   test_ref_reusez!ReferencesTestCase.test_ref_reuse   s    C{{1~ a {{1~dDH	J Ca {{1~{{1~dDH	J003Q6	8003QK	Mr   c                     t               }t        j                  |      }t        j                  |      }t        j                  |      }| j	                  ||d       y )Nz4proxy object w/out callback should have been re-used)r
   rd   r   rN   r}   )r   rf   proxy1rN   proxy2s        r   test_proxy_reusez#ReferencesTestCase.test_proxy_reuse   sF    Cq!kk!nq!ffK	Mr   c                    t               }| j                  |t        j                  |             t	        j
                         }t        j                  |      }| j                  |d       |j                  d       | j                  t        |      d       | j                  |d       ddg|d d  | j                  t        |      d       | j                  t        |      d       | j                  d|d       d|d<   | j                  |d   d       | j                  |d   d       t	        j
                  |      }t        j                  |      }| j                  ||       t	        j
                  t        d	            }t        j                  |      }| j                  |d d  |d d         | j                  |dd  |dd         | j                  |d d |d d        | j                  |dd |dd        y )
Nz(proxy for empty UserList should be false   rM   z+proxy for non-empty UserList should be truer      z,proxy didn't support __contains__() properlyr=   
   )r
   check_proxyrd   r   collectionsUserListassertFalseappendr   len
assertTruerr   range)r   rf   LpL2p2L3p3s           r   test_basic_proxyz#ReferencesTestCase.test_basic_proxy   s   CGMM!,-  "MM!FG	Q#HI1v!Q#Q#aJK!1q!1q!!!!$]]2B!!%),]]2A1&ABAB(BQBQ(Aa"Qq'*r   c                      G d dt               } |       }| j                  dt        t        j                  |                   | j                  t        t        j                  |            d       y )Nc                       e Zd Zd Zd Zy)0ReferencesTestCase.test_proxy_unicode.<locals>.Cc                      y)Nstringr   r   s    r   __str__z8ReferencesTestCase.test_proxy_unicode.<locals>.C.__str__      r   c                      y)N   bytesr   r   s    r   	__bytes__z:ReferencesTestCase.test_proxy_unicode.<locals>.C.__bytes__  r   r   N)r   r   r   r   r   r   r   r   r
   r     s      r   r
   r   r   )r   rr   dirrd   r   r   bytes)r   r
   instances      r   test_proxy_unicodez%ReferencesTestCase.test_proxy_unicode  sQ    	  	 
 3k3w}}X'>#?@w}}X67Br   c                      G d d      } |       }t        j                  |      }| j                  t        j                  |      d       y )Nc                       e Zd Zd Zy).ReferencesTestCase.test_proxy_index.<locals>.Cc                      y)Nr   r   r   s    r   	__index__z8ReferencesTestCase.test_proxy_index.<locals>.C.__index__"      r   N)r   r   r   r   r   r   r   r
   r   !      r   r
   r   )rd   r   r   operatorindexr   r
   rf   r   s       r   test_proxy_indexz#ReferencesTestCase.test_proxy_index   s<    	 	 CMM!*B/r   c                      G d d      } |       }t        j                  |      }| j                  |dz  d       |dz  }| j                  |d       y )Nc                       e Zd Zd Zd Zy),ReferencesTestCase.test_proxy_div.<locals>.Cc                      yN*   r   r0   s     r   __floordiv__z9ReferencesTestCase.test_proxy_div.<locals>.C.__floordiv__*  r   r   c                      y)N   r   r0   s     r   __ifloordiv__z:ReferencesTestCase.test_proxy_div.<locals>.C.__ifloordiv__,  r   r   N)r   r   r   r   r   r   r   r   r
   r   )  s    r   r
   r=   r   r   rd   r   r   r   s       r   test_proxy_divz!ReferencesTestCase.test_proxy_div(  sP    	 	
 CMM!a$	aBr   c                      G d d      } |       }t        j                  |      }| j                  |dz  d       | j                  d|z  d       |dz  }| j                  |d       y )Nc                       e Zd Zd Zd Zd Zy)/ReferencesTestCase.test_proxy_matmul.<locals>.Cc                      y)N  r   r0   s     r   
__matmul__z:ReferencesTestCase.test_proxy_matmul.<locals>.C.__matmul__6      r   c                      y)N]r   r0   s     r   __rmatmul__z;ReferencesTestCase.test_proxy_matmul.<locals>.C.__rmatmul__8  r   r   c                      y)N1  r   r0   s     r   __imatmul__z;ReferencesTestCase.test_proxy_matmul.<locals>.C.__imatmul__:  s    r   N)r   r   r   r   r   r   r   r   r   r
   r   5  s    r   r
   r=   r   r   r   r   r   s       r   test_proxy_matmulz$ReferencesTestCase.test_proxy_matmul4  sd    	 	 CMM!Q%Q%	QC r   c                 B    | j                  t        j                         y r   )check_shared_without_callbackrd   rN   r   s    r    test_shared_ref_without_callbackz3ReferencesTestCase.test_shared_ref_without_callbackK  s    **7;;7r   c                 B    | j                  t        j                         y r   )r   rd   r   r   s    r   "test_shared_proxy_without_callbackz5ReferencesTestCase.test_shared_proxy_without_callbackN  s    **7==9r   c                 F   t        d      } ||d       } ||d       }| j                  ||d       ~~ ||      } ||d       }| j                  ||d       ~~ ||      } ||      }| j                  ||d       ~~ ||d       } ||      }| j                  ||d       y )NrM   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)r%   r}   )r   makerefrf   p1r   s        r   r   z0ReferencesTestCase.check_shared_without_callbackQ  s    1IQQb"EFQZQb"FGQZQZb"EFQQZb"FGr   c                    t               }t        j                  |      }| j                  ||       | j	                  t        |      t        j                  d        |d       | j                  |j                  dd        |d       | j                  |j                  dd       | j                  t        |       | j                  t        |ddd       y )	Nzproxy is not of callable typez	twinkies!z1call through proxy not passed through to originalzSplat.)r   rM   r   r   )r   rd   r   r   r}   typeCallableProxyTyper   r   r   r   )r   rf   r   s      r   test_callable_proxyz&ReferencesTestCase.test_callable_proxyc  s    J}}QD!d4j'";";4	6[H	JxH	J 	)T* 	)T1a3r   c                    d|_         | j                  |j                   dd       d|_         | j                  |j                   dd       |` | j                  t        |d      d       d|_         | j                  |j                   dd       d|_         | j                  |j                   dd       |` | j                  t        |d      d	       y )
NrM   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)r   r   r   hasattr)r   rf   r   s      r   r   zReferencesTestCase.check_proxyx  s    A@	BAD	FE.?	A 	K	M	F	HIE*J	Lr   c                      G d d      } |       }t        j                  |      }|d= | j                  |j                  d       y )Nc                       e Zd ZdZd Zy)3ReferencesTestCase.test_proxy_deletion.<locals>.FooNc                     || _         y r   )result)r   accessors     r   __delitem__z?ReferencesTestCase.test_proxy_deletion.<locals>.Foo.__delitem__  s	    &r   )r   r   r   r   r   r   r   r   Foor     s    F'r   r  r   )rd   r   r   r   )r   r  gr    s       r   test_proxy_deletionz&ReferencesTestCase.test_proxy_deletion  s>    	' 	' EMM!aD1%r   c                      G d dt               } |       }| j                  t        t        j                  |            t        |             y )Nc                       e Zd Zy)0ReferencesTestCase.test_proxy_bool.<locals>.ListNr   r   r   r   r   r   Listr    s    r   r  )listr   r   rd   r   )r   r  lysts      r   test_proxy_boolz"ReferencesTestCase.test_proxy_bool  s3    4vgmmD12DJ?r   c                     d  G fdd      } |       t        j                        }| j                  t              5  d|v  d d d        y # 1 sw Y   y xY w)Nc                       e Zd Z fdZy)1ReferencesTestCase.test_proxy_iter.<locals>.MyObjc                     t         S r   )r/   )r   rt   s    r   __iter__z:ReferencesTestCase.test_proxy_iter.<locals>.MyObj.__iter__  s    %%r   Nr   r   r   r  )rt   s   r   MyObjr    s    &r   r  blech)rd   r   r   r   )r   r  r   rt   s      @r   test_proxy_iterz"ReferencesTestCase.test_proxy_iter  sW     	& 	& gMM#y) 	 qL		 	 	s   AAc                     g dfd} |        G fdd      } |       }| j                  t        |      g d       y )N)r9   r=      c               3   &   K    E d {    y 7 wr   r   )arrs   r   iterator_funcz9ReferencesTestCase.test_proxy_next.<locals>.iterator_func  s     NNs   c                       e Zd Z fdZy):ReferencesTestCase.test_proxy_next.<locals>.IteratesWeaklyc                 .    t        j                        S r   rd   r   )r   its    r   r  zCReferencesTestCase.test_proxy_next.<locals>.IteratesWeakly.__iter__  s    }}R((r   Nr  )r  s   r   IteratesWeaklyr    s    )r   r  )r   r	  )r   r  r  weak_itr  r  s       @@r   test_proxy_nextz"ReferencesTestCase.test_proxy_next  s>    	_	) 	) !" 	g	2r   c                     d  G fdd      } |       }d}| j                  t        |      5  t        |       d d d        y # 1 sw Y   y xY w)Nc                       yrG   r   r   r   r   <lambda>z8ReferencesTestCase.test_proxy_bad_next.<locals>.<lambda>      r   c                       e Zd Z fdZy)1ReferencesTestCase.test_proxy_bad_next.<locals>.Ac                 .    t        j                        S r   r  )r   not_an_iterators    r   r  z:ReferencesTestCase.test_proxy_bad_next.<locals>.A.__iter__  s    }}_55r   Nr  )r)  s   r   Ar'    s    6r   r*  z'Weakref proxy referenced a non-iterator)assertRaisesRegexr   r	  )r   r*  amsgr)  s       @r   test_proxy_bad_nextz&ReferencesTestCase.test_proxy_bad_next  sN     $	6 	6 C7##Is3 	G	 	 	s   AAc           	           G d d      } |       }| j                  dj                  t        t        j                  |                  d       y )Nc                       e Zd Zd Zd Zy)5ReferencesTestCase.test_proxy_reversed.<locals>.MyObjc                      y)Nr   r   r   s    r   __len__z=ReferencesTestCase.test_proxy_reversed.<locals>.MyObj.__len__      r   c                     t        d      S )Ncba)iterr   s    r   __reversed__zBReferencesTestCase.test_proxy_reversed.<locals>.MyObj.__reversed__  s    E{"r   N)r   r   r   r3  r8  r   r   r   r  r1    s    #r   r   r6  )r   r]   reversedrd   r   r   r  rt   s      r   test_proxy_reversedz&ReferencesTestCase.test_proxy_reversed  s<    	# 	# g'--*<!=>Fr   c                 h    G d d      } |       }| j                  t              5  t        t        j                  |             d d d         G d d      } |       }| j                  t              5  t        t        j                  |             d d d        y # 1 sw Y   WxY w# 1 sw Y   y xY w)Nc                       e Zd Zd Zy)1ReferencesTestCase.test_proxy_hash.<locals>.MyObjc                      yr   r   r   s    r   r7   z:ReferencesTestCase.test_proxy_hash.<locals>.MyObj.__hash__  r   r   Nr   r   r   r7   r   r   r   r  r?    r   r   r  c                       e Zd ZdZy)r?  NrA  r   r   r   r  z1ReferencesTestCase.test_proxy_hash.<locals>.MyObj  s    Hr   )r   r   r6   rd   r   r;  s      r   test_proxy_hashz"ReferencesTestCase.test_proxy_hash  s    	 	 gy) 	%s#$	%	 	 gy) 	%s#$	% 	%	% 	%	% 	%s   B4B(B%(B1c                 8   t               }t        j                  |      }t        j                  || j                        }| j	                  t        j
                  |      dd       t        j                  |      }t        j                  || j                        }| j	                  t        j
                  |      dd       ~~~~t                | j	                  t        j
                  |      dd       | j	                  t        j
                  d      dd       y )Nr   z*got wrong number of weak reference objectsr9   r   zAweak reference objects not unlinked from referent when discarded.rM   z2got wrong number of weak reference objects for int)r
   rd   rN   rO   r   r   r   r   )r   rf   r   r   r   r   s         r   test_getweakrefcountz'ReferencesTestCase.test_getweakrefcount  s    C{{1~{{1dmm,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                    t               }t        j                  || j                        }t        j                  || j                        }~t	                | j                  t        j                  |      |gd       t               }t        j                  || j                        }t        j                  || j                        }~t	                | j                  t        j                  |      |gd       ~t	                | j                  t        j                  |      g d       | j                  t        j                  d      g d       y )Nzlist of refs does not matchzlist of refs not clearedrM   z#list of refs does not match for int)r
   rd   rN   rO   r   r   getweakrefsr   s       r   test_getweakrefsz#ReferencesTestCase.test_getweakrefs   s   C{{1dmm,{{1dmm,,,Q/$2	4 C{{1dmm,{{1dmm,,,Q/$2	4 ,,Q//	1 	,,Q/:	<r   c                      G d dt               } |d      }t        j                  |      }| j                  |dz   d       | j                  d|z   d       y )Nc                       e Zd Zy)6ReferencesTestCase.test_newstyle_number_ops.<locals>.FNr  r   r   r   FrK        r   rL  g       @g      ?g      @)floatrd   r   r   )r   rL  r    r   s       r   test_newstyle_number_opsz+ReferencesTestCase.test_newstyle_number_ops  sM    	 	cFMM!S#&q#&r   c                      G d dt               i fdfd}	  |        | j                  d       	  |        | j                  d       y # $ r Y !w xY w# $ r Y y w xY w)Nc                       e Zd Zy)?ReferencesTestCase.test_callbacks_protected.<locals>.BogusErrorNr  r   r   r   
BogusErrorrR  %  rM  r   rS  c                     | = y r   r   )kdatas    r   removez;ReferencesTestCase.test_callbacks_protected.<locals>.remove(  s
    Qr   c                  @    d } d t        j                  |       <   )Nc                       y)Nr   r   r   r   r   r$  zRReferencesTestCase.test_callbacks_protected.<locals>.encapsulate.<locals>.<lambda>+  r%  r   )rd   rN   )r    rS  rV  rW  s    r   encapsulatez@ReferencesTestCase.test_callbacks_protected.<locals>.encapsulate*  s#    A+/DQ'(r   zexception not properly restored)	Exceptionfail)r   rZ  rS  rV  rW  s     @@@r   test_callbacks_protectedz+ReferencesTestCase.test_callbacks_protected"  sw    	 				9M II78	9M II78  		  		s"   A A AAA'&A'c                     dd l  G d dt              } |       }t        j                  |fd      }~~ |       } |       |_        t        j                  |j                  fd      } |       }||_        ~~y )Nr   c                       e Zd Zy)0ReferencesTestCase.test_sf_bug_840829.<locals>.CNr  r   r   r   r
   r`  H  rM  r   r
   c                 &     j                          S r   rU   ignorerT   s    r   r$  z7ReferencesTestCase.test_sf_bug_840829.<locals>.<lambda>L  s    :2::< r   c                 &     j                          S r   rb  rc  s    r   r$  z7ReferencesTestCase.test_sf_bug_840829.<locals>.<lambda>T  s    jbjjl r   )rT   r   rd   rN   ic1)r   r
   r   rg   rg  c2rT   s         @r   test_sf_bug_840829z%ReferencesTestCase.test_sf_bug_840829;  sq     		 	 C[[78 Ss[[:;S r   c                     dd l } G d dt              } G d dt              } |       }||_        t        j                  ||j
                        |_        ~~~ |j                          y )Nr   c                       e Zd Zy)4ReferencesTestCase.test_callback_in_cycle.<locals>.JNr  r   r   r   Jrl  f  rM  r   rm  c                       e Zd Zd Zy)5ReferencesTestCase.test_callback_in_cycle.<locals>.IIc                     | j                    y r   )rm  r   rd  s     r   	acallbackz?ReferencesTestCase.test_callback_in_cycle.<locals>.II.acallbackj  s	    r   N)r   r   r   rr  r   r   r   IIro  i  s    r   rs  )rT   r   rm  rd   rN   rr  rg   rU   )r   rT   rm  rs  Is        r   test_callback_in_cyclez)ReferencesTestCase.test_callback_in_cyclec  sW    	 		 	 D{{1akk*2 q"

r   c                     dd l } G d d      } |        |       }}||_        ||_        t        j                  ||j
                        |_        ~~ |j                          y )Nr   c                       e Zd Zd Zy)=ReferencesTestCase.test_callback_reachable_one_way.<locals>.Cc                 L    | j                    | j                   | j                   y r   merg  rg   rq  s     r   cbz@ReferencesTestCase.test_callback_reachable_one_way.<locals>.C.cb      r   Nr   r   r   r|  r   r   r   r
   rx        r   r
   )rT   r{  rg  rd   rN   r|  rg   rU   )r   rT   r
   rg  rh  s        r   test_callback_reachable_one_wayz2ReferencesTestCase.test_callback_reachable_one_way  sR    	 	 acBB&

r   c                     dd l } G d dt              } G d d      } |        |       }}||_        ||_        t	        j
                  ||j                        |_        ~~~~ |j                          y )Nr   c                       e Zd Zd Zy)=ReferencesTestCase.test_callback_different_classes.<locals>.Cc                 L    | j                    | j                   | j                   y r   rz  rq  s     r   r|  z@ReferencesTestCase.test_callback_different_classes.<locals>.C.cb  r}  r   Nr~  r   r   r   r
   r    r  r   r
   c                       e Zd Zy)=ReferencesTestCase.test_callback_different_classes.<locals>.DNr  r   r   r   Dr    rM  r   r  )	rT   r   r{  rg  rd   rN   r|  rg   rU   )r   rT   r
   r  rg  rh  s         r   test_callback_different_classesz2ReferencesTestCase.test_callback_different_classes  sb    	 		 	 acBB&Aq

r   c                 *   dd l }g  G fddt              } |d       |d      }}||_        ||_        t        j                  ||j
                        |_        t        j                  ||j
                        |_        fd}t        j                  ||      }~~~| j                  g         |j                          | j                  dg       | j                   |       d        d d =  |j                          | j                  g        y )Nr   c                       e Zd Zd Z fdZy)AReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.Cc                     || _         y r   )	attribute)r   values     r   r)   zJReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C.__init__  s	    !&r   c                 <    j                  | j                         y r   )r   r   r   rd  alists     r   rr  zKReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C.acallback  s    TVV$r   N)r   r   r   r)   rr  r  s   r   r
   r    s    '%r   r
   rM   r   c                 (    j                  d       y )NC went awayr   rd  r  s    r   C_went_awayzKReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C_went_away  s    LL'r   r  )	rT   r   r   rd   rN   rr  rg   r   rU   )r   rT   r
   rg  rh  r  rg   r  s          @r   #test_callback_in_cycle_resurrectionz6ReferencesTestCase.test_callback_in_cycle_resurrection  s     	% 	% 1qtBB-B-	([[K(A#

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

#r   c                 Z   dd l }g fd} G fddt              } |        |       }}||_        ||_        |j                  }t	        j
                  ||      |_        t	        j
                  ||j                        |_        t	        j
                  ||      }| j                   |       |       ~~~~| j                  g         |j                          | j                  dg       | j                   |       d        d d =  |j                          | j                  g        y )Nr   c                 (    j                  d       y )Nsafe_callback calledr  r  s    r   safe_callbackzDReferencesTestCase.test_callbacks_on_callback.<locals>.safe_callback  s    LL/0r   c                       e Zd Z fdZy)8ReferencesTestCase.test_callbacks_on_callback.<locals>.Cc                 (    j                  d       y )Nz	cb calledr  r  s     r   r|  z;ReferencesTestCase.test_callbacks_on_callback.<locals>.C.cb  s    [)r   Nr~  r  s   r   r
   r    s    *r   r
   r  )
rT   r   r1   r|  rd   rN   rg   r}   r   rU   )	r   rT   r  r
   r   drO   external_wrr  s	           @r   test_callbacks_on_callbackz-ReferencesTestCase.test_callbacks_on_callback  s     	1	* 	* sAC144{{1h'{{8QTT*kk(M:kmX. aA#

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

#r   c                 B    | j                  t        j                         y r   )check_gc_during_creationrd   rN   r   s    r   test_gc_during_ref_creationz.ReferencesTestCase.test_gc_during_ref_creation  s    %%gkk2r   c                 B    | j                  t        j                         y r   )r  rd   r   r   s    r   test_gc_during_proxy_creationz0ReferencesTestCase.test_gc_during_proxy_creation  s    %%gmm4r   c                 n   t        j                         }t        j                  ddd       t        j                           G d d      }d } |       } |       }||_         ||      |_        	  |       }t        j                  ||       t        j                  |  y # t        j                  |  w xY w)NrM   c                       e Zd Zy)6ReferencesTestCase.check_gc_during_creation.<locals>.ANr  r   r   r   r*  r    rM  r   r*  c                       y r   r   )argss    r   rO   z=ReferencesTestCase.check_gc_during_creation.<locals>.callback       r   )rT   get_thresholdset_thresholdrU   r,  rg   rd   rN   )r   r   
thresholdsr*  rO   
referencedr,  s          r   r  z+ReferencesTestCase.check_gc_during_creation  s    %%'

Aq!


	 		 S
Cz"	* AKK
H- j)Bj)s   0B   B4c                 0     G d dt               } |       }y )Nc                       e Zd Zd Zy)>ReferencesTestCase.test_ref_created_during_del.<locals>.Targetc                 .    t        j                  |       ay r   )rd   rN   ref_from_delr   s    r   __del__zFReferencesTestCase.test_ref_created_during_del.<locals>.Target.__del__8  s    &{{40r   Nr   r   r   r  r   r   r   Targetr  7  s    1r   r  )r   )r   r  ws      r   test_ref_created_during_delz.ReferencesTestCase.test_ref_created_during_del2  s    
	1V 	1
 Hr   c           	          t        j                  t              }| j                  t        |j
                  ddddd       t        j                          y rG   )rd   rN   r[  r   r   r)   rT   rU   )r   rs     r   	test_initzReferencesTestCase.test_init>  s9     KK	")QZZAq!Q?


r   c                     G d dt               }g }t        j                  t               t        j                  ||j                        }d }t        j                          | j                   |       d        | j                  ||g       y )Nc                       e Zd Zy)*ReferencesTestCase.test_classes.<locals>.ANr  r   r   r   r*  r  H  rM  r   r*  )r   rd   rN   intr   rT   rU   r   )r   r*  lr,  s       r   test_classeszReferencesTestCase.test_classesF  se    	 	CKK188$


d#QC r   c                    t        d      }t        d      }t        d      }t        j                  |      }t        j                  |      }t        j                  |      }t        j                  |      }| j                  ||k(         | j	                  ||k7         | j	                  ||k(         | j                  ||k7         | j                  ||k(         | j	                  ||k7         | j	                  ||k(         | j                  ||k7         | j                  |t
        k(         | j	                  |t
        k7         ~~~t        j                          |||fD ]  }| j                   |       d         | j	                  ||k(         | j                  ||k7         | j	                  ||k(         | j                  ||k7         | j                  ||k(  ||u        | j                  ||k7  ||u       y )NrM   r   )
r%   rd   rN   r   r   r   rT   rU   r}   r   )	r   r   yzr,  br   r  r  s	            r   test_equalityz ReferencesTestCase.test_equalityR  s   1I1I1IKKNKKNKKNKKN 	Qa a QQa a QY'i(q!


Aq 	%AMM!#t$	% 	a Qa Qaa(a!,r   c                    t         j                  t         j                  t         j                  t         j                  g}t        d      }t        d      }t        j                  |      }t        j                  |      }|D ]  }| j                  t        |||        ~~t        j                          |D ]  }| j                  t        |||        y rL   )r   ltgtleger%   rd   rN   r   r   rT   rU   )r   opsr   r  r,  r  ops          r   test_orderingz ReferencesTestCase.test_orderingw  s    {{HKKhkkB1I1IKKNKKN 	3BiQ2	3 q


 	3BiQ2	3r   c                 v   t        d      }t        d      }t        j                  |      }t        j                  |      }| j                  t	        |      t	        d             ~~t        j                          | j                  t	        |      t	        d             | j                  t        t        |       y r   )	r%   rd   rN   r   r6   rT   rU   r   r   )r   r   r  r,  r  s        r   test_hashingzReferencesTestCase.test_hashing  s    2J2JKKNKKNa$r(+q


 	a$r(+)T1-r   c                      G d d      }t        j                         } |d       x}}t        d      D ]  } ||      x||<   } ~t        j                          y )Nc                       e Zd Zd Zy)1ReferencesTestCase.test_trashcan_16602.<locals>.Cc                 v    |sy t        j                  |       fd}t        j                  ||      | _        y )Nc                             }y r   r   )wparentrf   wselfs     r   r|  zFReferencesTestCase.test_trashcan_16602.<locals>.C.__init__.<locals>.cb  s
    Ar   )rd   rN   r  )r   parentr|  r  s      @r   r)   z:ReferencesTestCase.test_trashcan_16602.<locals>.C.__init__  s.    D) &{{626r   NrC   r   r   r   r
   r    s    7r   r
   d   )rd   WeakKeyDictionaryr   rT   rU   )r   r
   r  rootr   ns         r   test_trashcan_16602z&ReferencesTestCase.test_trashcan_16602  sZ    
	7 	7 %%'T7qs 	AtOAaD1	


r   c                     t        d      }d }t        j                  ||      }| j                  |j                  |       t        j                  |      }| j                  |j                         y )NrM   c                      y r   r   r   s    r   r$  z<ReferencesTestCase.test_callback_attribute.<locals>.<lambda>  r%  r   )r%   rd   rN   r}   __callback__r~   )r   r   rO   r   r   s        r   test_callback_attributez*ReferencesTestCase.test_callback_attribute  sU    1I#{{1h'd''2{{1~$++,r   c                     t        d      }t        j                  || j                        }| j	                  |j
                         ~t        j                          | j                  |j
                         y rL   )	r%   rd   rN   rO   r   r  r   r   r~   )r   r   rN   s      r   &test_callback_attribute_after_deletionz9ReferencesTestCase.test_callback_attribute_after_deletion  sV    1Ikk!T]]+S--.#**+r   c                     t        d      }d }t        j                  ||      }| j                  t              5  d |_        d d d        y # 1 sw Y   y xY w)NrM   c                      y r   r   r   s    r   r$  z@ReferencesTestCase.test_set_callback_attribute.<locals>.<lambda>  r%  r   c                      y r   r   r   s    r   r$  z@ReferencesTestCase.test_set_callback_attribute.<locals>.<lambda>  r%  r   )r%   rd   rN   r   AttributeErrorr  )r   r   rO   r   s       r   test_set_callback_attributez.ReferencesTestCase.test_set_callback_attribute  sK    1I#{{1h'~. 	1 0D	1 	1 	1s   	AAc                      G d dt               } |d      }t        j                  |d       }~t        j                          y )Nc                       e Zd Zd Zy);ReferencesTestCase.test_callback_gcs.<locals>.ObjectWithDelc                      y r   r   r   s    r   r  zCReferencesTestCase.test_callback_gcs.<locals>.ObjectWithDel.__del__  s    tr   Nr  r   r   r   ObjectWithDelr    s    #r   r  rM   c                 *    t        j                         S r   )r   r   r   s    r   r$  z6ReferencesTestCase.test_callback_gcs.<locals>.<lambda>  s    '*<*<*> r   )r%   rd   rN   r   r   )r   r  r   r   s       r   test_callback_gcsz$ReferencesTestCase.test_callback_gcs  s8    	$F 	$!{{1>?r   N):r   r   r   rh   rv   ry   r   cpython_onlyr   r   r   r   r   rc   rx   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r!  r.  r<  rC  rE  rH  rO  r]  ri  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   ra   ra   g   s1   	47
 	4 	4	F$D+$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.*-,1r   ra   c                   *    e Zd Zd Zd Zd Zd Zd Zy)SubclassableWeakrefTestCasec                 t    G d dt         j                        }t        d      } ||d      }| j                   |       |       | j	                  |j
                         | j                  |j                  d       ~t                | j                   |              | j	                  |j
                         y )Nc                   *     e Zd Zd fd	Z fdZ xZS )=SubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRefc                 4    || _         t        | 	  ||       y r   )r  superr)   )r   obrO   r  	__class__s       r   r)   zFSubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRef.__init__  s    "
 X.r   c                 .    d| _         t        | 	         S NT)calledr  r   )r   r  s    r   r   zFSubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRef.__call__  s    "w'))r   r   )r   r   r   r)   r   __classcell__)r  s   @r   MyRefr    s    /* *r   r  r      r  )
rd   rN   r%   r}   r   r  r   r  r   r~   )r   r  rf   mrs       r   test_subclass_refsz.SubclassableWeakrefTestCase.test_subclass_refs  s    	*GKK 	* 5M1BbdA		"2&"$		"r   c                 z    G d dt         j                        }t        d      } ||      }t        j                  |      }| j                  ||       | j	                  t        j
                  |      ||g       | j	                  t        j                  |      d        ||      }| j	                  t        j                  |      d       t        j
                  |      }| j	                  t        |      d       | j                  ||d          | j                  ||dd         | j                  ||dd         y )Nc                       e Zd Zy)XSubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refs.<locals>.MyRefNr  r   r   r   r  r    rM  r   r  r   r   r   r   rM   )
rd   rN   r%   assertIsNotr   rG  r   r   r}   rr   )r   r  rf   r1r2r3refss          r   -test_subclass_refs_dont_replace_standard_refszISubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refs  s    	GKK 	2J1X[[^R ,,Q/"b:003Q71X003Q7""1%TA&b$q'"b$qr(#b$qr(#r   c                     G d dt         j                        }t        d      } ||t              } ||t              }| j                  ||       t        j                  |      }| j                  ||       | j                  ||       y )Nc                       e Zd Zy)USubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbacks.<locals>.MyRefNr  r   r   r   r  r    rM  r   r  r   )rd   rN   r%   idrs   r	  rG  rr   )r   r  rf   r
  r  r  s         r   *test_subclass_refs_dont_conflate_callbackszFSubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbacks  sm    	GKK 	2J1b\1c]R ""1%b$b$r   c                 H    G d dt         j                        }t        d      } ||d dd      }| j                  |j                  d       | j                  |j
                  d       | j                  |j                         d       | j                  t        |d             y )Nc                   "    e Zd ZdZd Zd Zd Zy)HSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRefslot1slot2c                 D    t         j                  j                  | ||      S r   )rd   rN   __new__)r   r  rO   r  r  s        r   r  zPSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.__new__  s    {{**4X>>r   c                      || _         || _        y r   r  )r   r  rO   r  r  s        r   r)   zQSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.__init__   s    "
"
r   c                 4    | j                   | j                  z   S r   r  r   s    r   methzMSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.meth  s    zzDJJ..r   N)r   r   r   	__slots__r  r)   r  r   r   r   r  r    s    (I?#/r   r  r   abcdefabcdef__dict__)	rd   rN   r%   r   r  r  r  r   r   )r   r  rf   r  s       r   test_subclass_refs_with_slotsz9SubclassableWeakrefTestCase.test_subclass_refs_with_slots  s    	/GKK 	/ 2J!T5%(%(%(8,J/0r   c                 D     G d dt         j                        } fd}t               } |||      }||_        ~~ j	                   j
                  d       t               } |||      } |||      }||_        ||_        ~~~ j	                   j
                  d       y)z3Confirm https://bugs.python.org/issue3100 is fixed.c                       e Zd Zy)HSubclassableWeakrefTestCase.test_subclass_refs_with_cycle.<locals>.MyRefNr  r   r   r   r  r'    rM  r   r  c                 0    xj                   dz  c_         y rL   rH   )r  r   s    r   rO   zKSubclassableWeakrefTestCase.test_subclass_refs_with_cycle.<locals>.callback  s    MMQMr   r   N)rd   rN   r
   rf   r   rI   r  )r   r  rO   rf   r
  r  s   `     r   test_subclass_refs_with_cyclez9SubclassableWeakrefTestCase.test_subclass_refs_with_cycle  s    	GKK 	
	 C1h* C1h1h*r   N)r   r   r   r  r  r  r$  r)  r   r   r   r  r    s    #$$"	 1"$+r   r  c                   `    e Zd Zd Zd Zd Zd Zd Zd Ze	j                  d        Zd Zd	 Zy
)WeakMethodTestCasec                 $     G d dt               }|S )z3Return an Object subclass overriding `some_method`.c                       e Zd Zd Zy)'WeakMethodTestCase._subclass.<locals>.Cc                      y)Nr  r   r   s    r   r:   z3WeakMethodTestCase._subclass.<locals>.C.some_method8  r4  r   N)r   r   r   r:   r   r   r   r
   r.  7  s    r   r
   )r%   )r   r
   s     r   	_subclasszWeakMethodTestCase._subclass5  s    	 	 r   c                    t        d      }t        j                  |j                        }| j	                  |t        j
                         | j	                   |       t        |j                               | j                   |       j                  |       | j                   |       j                  |j                  j                         | j                    |              d       y )NrM   r9   )r%   rd   
WeakMethodr:   assertIsInstanceReferenceTyper   r}   __self____func__r   r   rf   r  s      r   
test_alivezWeakMethodTestCase.test_alive<  s    1Iq}}-a!6!67ac4#67acllA&acllAMM$:$:;"r   c                     t        d      }t        j                  |j                        }~t	        j
                          | j                   |       d        y rL   )r%   rd   r2  r:   rT   rU   r}   r7  s      r   test_object_deadz#WeakMethodTestCase.test_object_deadE  s;    1Iq}}-


ac4 r   c                     | j                         } |d      }t        j                  |j                        }|`t	        j
                          | j                   |       d        y rL   )r0  rd   r2  r:   rT   rU   r}   )r   r
   rf   r  s       r   test_method_deadz#WeakMethodTestCase.test_method_deadL  sI    NNaDq}}-M


ac4 r   c                 L   | j                         }g fd} |d      }t        j                  |j                  |      }~t	        j
                          | j                  |g       t        j                  |_        t	        j
                          | j                  |g       y )Nc                 (    j                  |        y r   r  r(   callss    r   r|  z=WeakMethodTestCase.test_callback_when_object_dead.<locals>.cbX      LLr   rM   )r0  rd   r2  r:   rT   rU   r   r%   r   r
   r|  rf   r  r@  s        @r   test_callback_when_object_deadz1WeakMethodTestCase.test_callback_when_object_deadT  s~    NN	aDq}}b1


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


$r   c                 &   | j                         }g fd} |d      }t        j                  |j                  |      }|`t	        j
                          | j                  |g       ~t	        j
                          | j                  |g       y )Nc                 (    j                  |        y r   r  r?  s    r   r|  z=WeakMethodTestCase.test_callback_when_method_dead.<locals>.cbh  rA  r   rM   )r0  rd   r2  r:   rT   rU   r   rB  s        @r   test_callback_when_method_deadz1WeakMethodTestCase.test_callback_when_method_deadd  sv    NN	aDq}}b1M


$


$r   c                     t        d      }d }t        j                  |j                  |      }t        j                  |      }~| j                   |       d        y )NrM   c                      y r   r   )_s    r   r|  z-WeakMethodTestCase.test_no_cycles.<locals>.cbx  r  r   )r%   rd   r2  r:   rN   r}   )r   rf   r|  r  rg   s        r   test_no_cyclesz!WeakMethodTestCase.test_no_cyclest  sH     1I	q}}b1[[^bdD!r   c                 z     fd} fd}t        d      }t        d      }t        j                  |j                        }t        j                  |j                        }t        j                  |j                        }t        j                  |j                        } |||        |||        |||        |||        |||        |||       t        d      }	t        j                  |	j                        }
t        j                  |	j                        } |||
        |||        |||
        |||        |||j                          ||t
               ~~~	t        j                          |||||
|f}|D ]7  }|D ]0  } j                  ||k(  ||u         j                  ||k7  ||u       2 9 y )Nc                 V    j                  | |k(         j                  | |k7         y r   r   r   r,  r  r   s     r   _eqz-WeakMethodTestCase.test_equality.<locals>._eq  %    OOAF#Q!V$r   c                 V    j                  | |k7         j                  | |k(         y r   rM  rN  s     r   _nez-WeakMethodTestCase.test_equality.<locals>._ne  rP  r   rM   r   )	r%   rd   r2  r:   r>   r   rT   rU   r   )r   rO  rR  r   r  r,  r  r   r  r  er    r  qr  s   `              r   r  z WeakMethodTestCase.test_equality  s   	%	% 1I1Iq}}-q}}-q~~.q~~.Aq	Aq	Aq	Aq	Aq	Aq	1Iq}}-q~~.Aq	Aq	Aq	Aq	Aq}}Ayq!


!Q1a 	5A 5  aa0  a!45	5r   c                    t        d      }t        d      }t        j                  |j                        }t        j                  |j                        }t        j                  |j                        }| j                  t        |      t        |             t        |      }~~t        j                          | j                  t        |      |       | j                  t        |      |       | j                  t        t        |       y rL   )r%   rd   r2  r:   r>   r   r6   rT   rU   r   r   )r   r   r  r,  r  r   has          r   r  zWeakMethodTestCase.test_hashing  s     1I1Iq}}-q}}-q~~.a$q'*!Wq


a"%a"%)T1-r   N)r   r   r   r0  r8  r:  r<  rC  rF  r   r  rJ  r  r  r   r   r   r+  r+  3  sE    #!!% %  " "'5R.r   r+  c                      e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+ e,jZ                         d*        Z. e,jZ                         d+        Z/ e,jZ                         d,        Z0d- Z1 e,jZ                         d.        Z2 e,jZ                          e3jh                  d/      d0               Z5 e,jZ                         d1        Z6 e,jZ                          e3jh                  d/      d2               Z7e3jp                  d3        Z9y4)5MappingTestCaser   c                    d}t        |      D cg c]  }t                }} |fd|D              }|j                         }	 t        |       ~t        j                          t        |      }~t        j                          t        |      }	| j                  |d       | j                  |	d       y c c}w # t        $ r Y uw xY w)N   c              3   .   K   | ]  } |        y wr   r   .0rf   conss     r   	<genexpr>z3MappingTestCase.check_len_cycles.<locals>.<genexpr>  s     /AQ/   )r   rM   r   )
r   r@   itemsnextStopIterationrT   rU   r   rr   r   )
r   	dict_typer^  Nrf  ra  dctr  n1n2s
     `       r   check_len_cyclesz MappingTestCase.check_len_cycles  s    %*1X...///YY[	H 


X


Xb&!Q! /  		s   B6B; ;	CCc                 F    | j                  t        j                  d        y )Nc                 
    | dfS rL   r   rU  s    r   r$  z<MappingTestCase.test_weak_keyed_len_cycles.<locals>.<lambda>  
    Aq6 r   )ri  rd   r  r   s    r   test_weak_keyed_len_cyclesz*MappingTestCase.test_weak_keyed_len_cycles  s    g779IJr   c                 F    | j                  t        j                  d        y )Nc                 
    d| fS rL   r   rl  s    r   r$  z=MappingTestCase.test_weak_valued_len_cycles.<locals>.<lambda>  s
    aV r   )ri  rd   WeakValueDictionaryr   s    r   test_weak_valued_len_cyclesz+MappingTestCase.test_weak_valued_len_cycles  s    g99;KLr   c                 l    | j                   t        j                  gt        j                           t	        dd      D ]  }d}t        j
                  d       t        j                  |||       t	        |      D cg c]  }t                }} |fd|D              }~|j                         }	 t        |       t        |      }	~t        |      }
| j                  |	d       | j                  |	|       | j                  |
d       | j                  |
|	        y c c}w # t        $ r Y rw xY w)NrM   r  rZ  r   c              3   .   K   | ]  } |        y wr   r   r\  s     r   r_  z1MappingTestCase.check_len_race.<locals>.<genexpr>  s     3DG3r`  )
addCleanuprT   r  r  r   rU   r@   ra  rb  rc  r   assertGreaterEqualassertLessEqual)r   rd  r^  thre  rf  ra  rf  r  rg  rh  s     `        r   check_len_racezMappingTestCase.check_len_race  s   ((>2+;+;+=>3- 	)BAJJqMRR().q2AXZ2E23U33CBR SBSB##B*  Q'##B*  R('	) 3 ! s   ?D"5D''	D32D3c                 F    | j                  t        j                  d        y )Nc                 
    | dfS rL   r   rl  s    r   r$  z:MappingTestCase.test_weak_keyed_len_race.<locals>.<lambda>  s
    !Q r   )ry  rd   r  r   s    r   test_weak_keyed_len_racez(MappingTestCase.test_weak_keyed_len_race  s    G557GHr   c                 F    | j                  t        j                  d        y )Nc                 
    d| fS rL   r   rl  s    r   r$  z;MappingTestCase.test_weak_valued_len_race.<locals>.<lambda>  rm  r   )ry  rd   rq  r   s    r   test_weak_valued_len_racez)MappingTestCase.test_weak_valued_len_race  s    G779IJr   c                    | j                         \  }}|D ]G  }| j                  t        j                  |      d       | j	                  |||j
                     d       I t        |j                               }t        |j                         j                               }|j                          |j                          | j                  ||d       ~~| j                  t        |      | j                         |d= t                | j                  t        |      | j                  dz
  d       ~~t                | j                  t        |      dd       t        j                         }| j                  t        |j                   d       t#               |d<   t                | j                  t        |j                   d       y )NrM   #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   rd   r   r}   r(   r	  ra  copysortr   COUNTr   rq  r   KeyError__getitem__r
   r   rq   objectsrf   items1items2s         r   test_weak_valuesz MappingTestCase.test_weak_values  sp    224g 	@AW44Q7;MM!T!%%[>@	@ 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                    | j                         \  }}|D ]K  }| j                  t        j                  |      dd|z         | j	                  |j
                  ||   d       M |j                         }|j                         j                         }| j                  t        |      t        |      d       ~~| j                  t        |      | j                         |d= t                | j                  t        |      | j                  dz
  d       ~~t                | j                  t        |      dd       t        d      }d	||<   | j                  ||       | j                  d
|       y )NrM   z&wrong number of weak references to %r!r  z.cloning of weak-keyed dictionary did not work!r   r  z.deleting the keys did not clear the dictionaryr   z$What is the meaning of the universe?"   )make_weak_keyed_dictr   rd   r   r}   r(   ra  r  setr   r  r   r%   rr   assertNotInr  s         r   test_weak_keyszMappingTestCase.test_weak_keys  sG   
 113g 	@AW44Q7AAEGMM!%%a>@	@
 ""$Vc&kE	GFTDJJ/AJTTZZ!^F	HQTAE	G2J8QaT"r   c                 f   | j                         \  }}| j                  |       |j                         }| j                  t	        |      t	        |             t        |      }|D ]]  } |       }| j                  ||       | j                  ||       | j                  |j                  ||          |j                  |       _ | j                  t	        |      d       t        |      }| j                  t	        t        |j                                     t	        |             |j                         D ]]  } |       }| j                  ||       | j                  ||       | j                  |j                  ||          |j                  |       _ | j                  t	        |      d       y rG   )	r  check_iterskeyrefsr   r   r	  rr   r(   rW  r   rq   r  r  objects2rg   r  s          r   test_weak_keyed_itersz%MappingTestCase.test_weak_keyed_iters6  s]   113g ||~TCL1= 	 BBMM"d#MM"d#RVVT"X.OOB	  	X* =T$,,.12CLA,,. 	 BBMM"d#MM"d#RVVT"X.OOB	  	X*r   c                    | j                         \  }}| j                  |       |j                         }| j                  t	        |      t	        |             t        |      }|D ]l  } |       }| j                  |||j                            | j                  |j                  ||j                     j                         |j                  |       n | j                  t	        |      d       t        |      }| j                  t	        t        |j                                     t	        |             |j                         D ]l  } |       }| j                  |||j                            | j                  |j                  ||j                     j                         |j                  |       n | j                  t	        |      d       y rG   )	r  r  	valuerefsr   r   r	  r(   rW  itervaluerefsr  s          r   test_weak_valued_itersz&MappingTestCase.test_weak_valued_itersQ  sp   224g ~~TCL1= 	 BBRbff.RVVT"&&\%5%56OOB		 
 	X* =T$"4"4"678#g,G$$& 	 BBRbff.RVVT"&&\%5%56OOB		 
 	X*r   c                 p   t        |j                               }|j                         D ]  }|j                  |        | j                  |d       t        |j	                               }|D ]  }|j                  |        | j                  |d       t        |j	                               }|j	                         D ]  }|j                  |        | j                  |d       t        |j                               }|j                         D ]  }|j                  |        | j                  |d       y )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	  ra  rW  r   keysvalues)r   rq   ra  itemr  rU  r  vs           r   r  zMappingTestCase.check_itersj  s
   TZZ\"JJL 	DLL	 AB DIIK  	AKKN	BC DIIK  	AKKN	BC dkkm$ 	AMM!	<	>r   c                 F   t        |      }t         t        ||                   }t        |       |d= t	        j
                          | j                  t        t        |            t        |      t        |      dz
  g       ~| j                  t        |      |dz
         y )NrM   )	r   r7  getattrrb  rT   rU   rr   r	  r   )r   rq   r  	iter_namer  r  s         r   "check_weak_destroy_while_iteratingz2MappingTestCase.check_weak_destroy_while_iterating  s|    I*'$	*,-RBK


c$r(mc'lCL14D%EFTAE*r   c                 f    |       5 \  }}| j                  ||       d d d         |       5 \  }}| j                  t        |j                  |       d d d        | j                  |        |       5 \  }}| j                  t        |j                  |       d d d        | j                  ||        |       5 \  }}|||<   d d d        | j                  ||          t        j                  |      } |       5 \  }}|j                  |       d d d        | j                  ||        |       5 \  }}|j                          d d d        | j                  t        |      d       y # 1 sw Y   MxY w# 1 sw Y   &xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   cxY wrG   )
r  r   r  r   popr   r  updateclearr   )r   rq   testcontextrU  r  ddicts         r   -check_weak_destroy_and_mutate_while_iteratingz=MappingTestCase.check_weak_destroy_and_mutate_while_iterating  s    ] 	&fq!Q%	&] 	=fq!h(8(8!<	=D!] 	5fq!h!4	5D!] 	fq!DG	a!$		$] 	fq!KK	u%] 	fq!JJL	TA&#	& 	&	= 	=	5 	5	 		 		 	sF   E)%E63%F9	F;F1F')E36F FFF$'F0c                    t        d      } |       5  t        |      }|j                  t        |j	                                      | j                  t        |      |dz
         |||<   | j                  t        |      |       d d d         |       5  | j                  t        |      dz
         |j                          | j                  t        |      |dz
         d d d         |       5  | j                  t        |      dz
         |t        |j	                               = | j                  t        |      |dz
         d d d         |       5  | j                  t        |      dz
         |j                          | j                  t        |      |dz
         d d d         |       5  |j                          | j                  t        |      d       d d d        | j                  t        |      d       y # 1 sw Y   xY w# 1 sw Y   0xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w)	Ni@ rM   r   r   r9   r=   r  r   )r%   r   r  rb  r  r   popitemr  )r   rq   r  rf   r  s        r   &check_weak_del_and_len_while_iteratingz6MappingTestCase.check_weak_del_and_len_while_iterating  s    6N] 	+D	AHHT$))+&'SYA.D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?   A2HAH0AHAH(2,H4HHH%(H14H=c                    | j                         \  | j                  d       | j                  d       | j                  d       | j                  d       | j                         \  t        j                  fd       }| j	                  |       | j                         \  | j                  |       y )Nr  ra  r  r  c               3   4  K   	 t        j                               } t        |        j                         j                  }t        j                          t        |      |f d } t        j                          y # d } t        j                          w xY wwr   r7  ra  rb  r  r(   rT   rU   r%   )r  r  rq   r  s     r   r  zKMappingTestCase.test_weak_keys_destroy_while_iterating.<locals>.testcontext  sj     	$**,'RKKM%%

Qil"

 

   BA!A= &B=BB)r  r  
contextlibcontextmanagerr  r  r   r  rq   r  s     @@r   &test_weak_keys_destroy_while_iteratingz6MappingTestCase.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                    | j                         \  | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                         \  t        j                  fd       }| j	                  |       | j                         \  | j                  |       y )Nr  ra  r  r  r  c               3   4  K   	 t        j                               } t        |        j                         j                  }t        j                          |t        |      f d } t        j                          y # d } t        j                          w xY wwr   r  )r  rU  rq   r  s     r   r  zMMappingTestCase.test_weak_values_destroy_while_iterating.<locals>.testcontext  sj     	$**,'RKKM%%

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

 

r  )r  r  r  r  r  r  r  s     @@r   (test_weak_values_destroy_while_iteratingz8MappingTestCase.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    t        d      }t        j                  |di      }| j                  ||   d       y Nr   il  r%   rd   r  r   r   rf   rq   s      r   #test_make_weak_keyed_dict_from_dictz3MappingTestCase.test_make_weak_keyed_dict_from_dict  s3    1I((!C1a#&r   c                     t        d      }t        j                  |di      }t        j                  |      }| j                  ||   d       y r  r  r   rf   rq   dict2s       r   .test_make_weak_keyed_dict_from_weak_keyed_dictz>MappingTestCase.test_make_weak_keyed_dict_from_weak_keyed_dict  sC    1I((!C1))$/a#&r   c                     t        j                         }t        t        t        t        | j                                    }|D ]  }|j                  ||<    ||fS r   )rd   r  r	  mapr%   r   r  r(   r   rq   r  rf   s       r   r  z$MappingTestCase.make_weak_keyed_dict	  sP    ((*s65#456 	AeeDG	W}r   c                 r    t        d      }t        j                  d|i      }| j                  |d   |       y r  r%   rd   rq  r   r  s      r   $test_make_weak_valued_dict_from_dictz4MappingTestCase.test_make_weak_valued_dict_from_dict  s3    1I**C73cA&r   c                     t        d      }t        j                  d|i      }t        j                  |      }| j                  |d   |       y r  r  r  s       r   0test_make_weak_valued_dict_from_weak_valued_dictz@MappingTestCase.test_make_weak_valued_dict_from_weak_valued_dict  sC    1I**C73++D1cA&r   c                    | j                  t        t        j                  j                         | j                  t        t        j                  i i        | j                  t        t        j                  dd       t        d      }dD ]X  }t        j                  di ||i}| j                  t        |j                               |g       | j                  ||   |       Z y )Nr   r   r   rq   r1   iterable)	r   r   rd   rq  r)   r%   r   r	  r  )r   rf   kwr  s       r   test_make_weak_valued_dict_miscz/MappingTestCase.test_make_weak_valued_dict_misc  s    )W%@%@%I%IJ)W%@%@"bI)W%@%@"bI1I5 	'B++6r1g6AT!&&(^bT2QrUA&	'r   c                     t        j                         }t        t        t        t        | j                                    }|D ]  }|||j                  <    ||fS r   )rd   rq  r	  r  r%   r   r  r(   r  s       r   r  z%MappingTestCase.make_weak_valued_dict'  sP    **,s65#456 	ADK	W}r   c                     |       }|||<   |||<   | j                  t        |      d       |j                         \  }}| j                  t        |      d       ||u r| j                  ||       n| j                  ||       |j                         \  }}| j                  t        |      d       ||u r| j                  ||       y | j                  ||       y )Nr   rM   r   )r   r   r  r}   )	r   klasskey1value1key2value2weakdictrU  r  s	            r   check_popitemzMappingTestCase.check_popitem.  s    7X*!1X*9MM!V$MM!V$!1X*9MM!V$MM!V$r   c                 j    | j                  t        j                  dt               dt                      y )Nr  r  )r  rd   rq  r
   r   s    r   test_weak_valued_dict_popitemz-MappingTestCase.test_weak_valued_dict_popitem@  s%    766!13	5r   c                 j    | j                  t        j                  t               dt               d       y Nzvalue 1zvalue 2)r  rd   r  r
   r   s    r   test_weak_keyed_dict_popitemz,MappingTestCase.test_weak_keyed_dict_popitemD  s%    7443	13		;r   c                    | j                  ||d        |       }|j                  ||      }| j                  ||       | j                  ||       | j                  |j	                  |      |       | j                  ||   |       |j                  ||      }| j                  ||       | j                  ||       | j                  |j	                  |      |       | j                  ||   |       y )Nz9invalid test -- value parameters must be distinct objects)r	  
setdefaultr}   rr   get)r   r  keyr  r  r  rf   s          r   check_setdefaultz MappingTestCase.check_setdefaultH  s    E	F 7V,a c8$hll3'0hsmV,V,a c8$hll3'0hsmV,r   c                 h    | j                  t        j                  dt               t                      y )Nr  )r  rd   rq  r
   r   s    r    test_weak_valued_dict_setdefaultz0MappingTestCase.test_weak_valued_dict_setdefaultY  s#    g99#QS!#	/r   c                 X    | j                  t        j                  t               dd       y r  )r  rd   r  r
   r   s    r   test_weak_keyed_dict_setdefaultz/MappingTestCase.test_weak_keyed_dict_setdefault]  s!    g77c9i	9r   c                      |       }|j                  |       | j                  t        |      t        |             |j                         D ]\  }| j	                  ||d       |j                  |      }| j                  |||          | j                  ||j                  |             ^ |j                         D ]P  }| j	                  ||d       ||   }| j                  |||          | j                  ||j                  |             R y )Nz(mysterious new key appeared in weak dictz%original key disappeared in weak dict)r  r   r   r  rr   r  r}   )r   r  rq   r  rU  r  s         r   check_updatezMappingTestCase.check_updatea  s    
 7XD	2 	.AMM!T#MNAMM!Xa[)MM!X\\!_-		.
  	.AMM!X'NOQAMM!Xa[)MM!X\\!_-		.r   c           
         | j                  t        j                  dt               dt               t               t               i       | j	                  t
        t        j                  j                         t        j                         }| j	                  t
        |j                  i i        | j	                  t
        |j                  dd       | j                  t        |j                               g        t        d      }dD ]i  }t        j                         } |j                  di ||i | j                  t        |j                               |g       | j                  ||   |       k y )NrM   r,  r   r   r  )r  rd   rq  r
   r   r   r  r   r	  r  r%   )r   r  rf   r  s       r   test_weak_valued_dict_updatez,MappingTestCase.test_weak_valued_dict_updatet  s   '55ac3QS!#6	8 	)W%@%@%G%GH''))QXXr26)QXXr26affh,1I5 	'B++-AAHHAwT!&&(^bT2QrUA&		'r   c                    t               }t               }t               }t        j                  d|i      }t        j                  ||d      }|j                         }||d}d|fd|fg}||z  }	| j	                  t        |	      t        |      t        |      z         | j                  t        |	      t        j                         ||z  }| j	                  ||	       ||z  }
| j	                  t        |
      t        |      |z         | j                  t        |
      t        j                         ||z  }| j	                  ||
       |j                         }||z  }| j	                  t        |      t        |      t        |      z         | j                  t        |      t        j                         ||z  }| j	                  t        |      |t        |      z         | j                  t        |      t        j                         ~| j                  d|	       | j                  d|
       | j                  d|       | j                  d|       y )NrM   rM   r   )rM   r   r=   r  r   )	r
   rd   rq  r  r   rq   r}   r   r  )r   r,  r  r   wvd1wvd2wvd3d1pairstmp1tmp2tmp3tmp4s                r    test_weak_valued_union_operatorsz0MappingTestCase.test_weak_valued_union_operators  s   CCC**Aq62**qQ<8yy{q\Q!Q d{dT$Z$t*%<=d4j'"="=>t$bydT$Z"_5d4j'"="=>
t$yy{dT$Z$u+%=>d4j'"="=>DydR$t*_5d4j'"="=>D!D!D!D!r   c           	          | j                  t        j                  t               dt               dt               di       y )NrM   r   r   )r  rd   r  r
   r   s    r   test_weak_keyed_dict_updatez+MappingTestCase.test_weak_keyed_dict_update  s.    '33313132	4r   c                 2   t        j                         }t        d      }t        d      }d||<   d||<   | j                  t	        |      d       ||= | j                  t	        |      d       | j                  t        |j                               |g       y )N12	somethingr   rM   )rd   r  r%   r   r   r	  r  r   r  o1r   s       r   test_weak_keyed_delitemz'MappingTestCase.test_weak_keyed_delitem  s    %%'C[C[""Q#bEQ#affh".r   c                 *   t               }t               }t               }t        j                  |d|di      }t        j                  |d|di      }|j                         }|d|di}|df|dfg}||z  }	| j	                  t        |	      t        |      t        |      z         | j                  t        |	      t        j                         ||z  }| j	                  ||	       ||z  }
| j	                  t        |
      t        |      |z         | j                  t        |
      t        j                         ||z  }| j	                  ||
       |j                         }||z  }| j	                  t        |      t        |      t        |      z         | j                  t        |      t        j                         ||z  }| j	                  t        |      |t        |      z         | j                  t        |      t        j                         ~| j                  d|	j                                | j                  d|
j                                | j                  d|j                                | j                  d|j                                y )	NrM   r   r   r9   56      )
r
   rd   r  r  r   rq   r}   r   r  r  )r   r  r   o3wkd1wkd2wkd3r  r  r  r  r  r  s                r   test_weak_keyed_union_operatorsz/MappingTestCase.test_weak_keyed_union_operators  s   SSS(("aQ8(("aQ8yy{#r3a2q'"d{dT$Z$t*%<=d4j'";";<t$bydT$Z"_5d4j'";";<
t$yy{dT$Z$u+%=>d4j'";";<DydR$t*_5d4j'";";<DKKM*DKKM*DKKM*DKKM*r   c                 6   t        j                         }t        d      }t        d      }||d<   ||d<   | j                  t	        |      d       |d= | j                  t	        |      d       | j                  t        |j                               d|fg       y )Nr  r  r  zsomething elser   rM   )rd   rq  r%   r   r   r	  ra  r   s       r   test_weak_valued_delitemz(MappingTestCase.test_weak_valued_delitem  s    '')C[C[+ 
Q#kNQ#aggi,<b+A*BCr   c                    t        j                         }t        d      }| j                  t        |j
                  |       | j                  t        |j                  |       | j                  t        |j
                  d       | j                  t        |j                  d       | j                  t        |j                  dd       y )Nr     )	rd   r  r%   r   r  r   r  r   __setitem__)r   r  rf   s      r   test_weak_keyed_bad_delitemz+MappingTestCase.test_weak_keyed_bad_delitem  s    %%'3K 	(AMM15(AMM15 	)Q]]R8)Q]]R8)Q]]R<r   c                    t        j                         }d G fddt              }t        d      D cg c]
  } ||       c}D ]  }|j                  ||<    ~t        |j                               j                          dd}D ]
  }|dz  }||=  t                | j                  t        |      d       | j                  |d       y c c}w )	NFc                   &    e Zd Zd Zd Z fdZy)<MappingTestCase.test_weak_keyed_cascading_deletes.<locals>.Cc                     || _         y r   r  )r   rf  s     r   r)   zEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__init__   s	    
r   c                 ,    t        | j                        S r   )r6   r  r   s    r   r7   zEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__hash__  s    DJJ''r   c                 @    rd= | j                   |j                   k(  S )Nr  r  )r   r1   mutateobjss     r   r2   zCMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__eq__  s"     RzzU[[00r   N)r   r   r   r)   r7   r2   )r  r  s   r   r
   r    s    (1r   r
   r9   Tr   rM   r   )rd   r  r   r   r  r	  r  reverser   r   r   )r   r  r
   rf  rf   countr  r  s         @@r   !test_weak_keyed_cascading_deletesz1MappingTestCase.test_weak_keyed_cascading_deletes  s    
 %%'
	1 
	1 $Ah'!' 	A77AaD	AFFH~ 	  	AQJE!	 	Q#"1 (s   Cc                 b    t        j                         }| j                  t        |      d       y )Nz<WeakValueDictionary at 0x.*>)rd   rq  assertRegexre   r   rq   s     r   test_make_weak_valued_dict_reprz/MappingTestCase.test_make_weak_valued_dict_repr%  s%    **,d%DEr   c                 b    t        j                         }| j                  t        |      d       y )Nz<WeakKeyDictionary at 0x.*>)rd   r  r  re   r   s     r   test_make_weak_keyed_dict_reprz.MappingTestCase.test_make_weak_keyed_dict_repr)  s%    ((*d%BCr   c                     t        j                         }t               5  t        d      D ]/  }|j	                  dt                     }| j                  |d        ~1 	 d d d        y # 1 sw Y   y xY wNi r   )rd   rq  r_   r   r  r@   r	  r   r  rf  r   s       r   $test_threaded_weak_valued_setdefaultz4MappingTestCase.test_threaded_weak_valued_setdefault-  sc    '')  	6] LLXZ0  D)	 	 	s   >A''A0c                     t        j                         }t               5  t        d      D ]3  }t	               |d<   |j                  dd      }| j                  |d        5 	 d d d        y # 1 sw Y   y xY wr%  )rd   rq  r_   r   r@   r  r	  r&  s       r   test_threaded_weak_valued_popz-MappingTestCase.test_threaded_weak_valued_pop6  sh    '')  	*6] * 
"EE"bM  D)*	* 	* 	*s   AA++A4c                     t        j                         }t               5  t        d      D ].  }t	               }||d<   | j                  t        |      d       d }0 	 d d d        y # 1 sw Y   y xY w)Ni@ r   rM   )rd   rq  r_   r   r@   r   r   )r   r  rf  rf   s       r   %test_threaded_weak_valued_consistencyz5MappingTestCase.test_threaded_weak_valued_consistency?  si     '')  	6] J"  Q+	 	 	s   =A&&A/c                    g } G d d      } G d d      }fd}d }| j                  |t        j                  t        j                  f        |       }g }	g }
t	        d      D ];  } ||       ||      }}|	j                  |       |
j                  |       |||<   ~~= t        j                  |||f      }|t        j                  u rt        j                  ||	f      }nt        j                  ||
f      }|j                          |j                          |j                          |j                          |r|d	   y )
Nc                       e Zd Zd Zy)?MappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyKeyc                     || _         y r   ctrr   r1  s     r   r)   zHMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyKey.__init__R  	    r   NrC   r   r   r   DummyKeyr.  Q  ro   r   r4  c                       e Zd Zd Zy)AMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyValuec                     || _         y r   r0  r2  s     r   r)   zJMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyValue.__init__V  r3  r   NrC   r   r   r   
DummyValuer6  U  ro   r   r8  c                     	 du rt        j                  |       }y | j                         }y # t        $ r}|j                  |       Y d }~y d }~ww xY wr  )r  deepcopyr[  r   )r  excrI  exr:  s       r   	dict_copyz@MappingTestCase.check_threaded_weak_dict_copy.<locals>.dict_copyY  sF    t#a(AA 

2s   . . 	AAAc                     d}| rXt        j                  dt        |       dz
        }|dz  }| j                  |       |dz  dk(  rt	        j
                          | rWy y )Nr   rM   i'  )randomrandintr   r  rT   rU   )lstgc_ctrrf  s      r   pop_and_collectzFMappingTestCase.check_threaded_weak_dict_copy.<locals>.pop_and_collectb  sP    FNN1c#hl3!
E>Q&JJL r   ip )rX   r  r   )
rr   rd   r  rq  r   r   rZ   r[   r\   r]   )r   type_r:  r;  r4  r8  r=  rC  r  r  r  rf  rU  r  t_copy	t_collects     `             r   check_threaded_weak_dict_copyz-MappingTestCase.check_threaded_weak_dict_copyL  s+    	 		 			! 	eg779T9TUVGu 	AA;
1qAKKNMM!AaD	 !!!SCG---!((tgNI!((viPI a&L r   c                 D    | j                  t        j                  d       y NFrG  rd   r  r   s    r    test_threaded_weak_key_dict_copyz0MappingTestCase.test_threaded_weak_key_dict_copy  s     	**7+D+DeLr   cpuc                 D    | j                  t        j                  d       y r  rJ  r   s    r   $test_threaded_weak_key_dict_deepcopyz4MappingTestCase.test_threaded_weak_key_dict_deepcopy  s    
 	**7+D+DdKr   c                 D    | j                  t        j                  d       y rI  rG  rd   rq  r   s    r   "test_threaded_weak_value_dict_copyz2MappingTestCase.test_threaded_weak_value_dict_copy  s     	**7+F+FNr   c                 D    | j                  t        j                  d       y r  rP  r   s    r   &test_threaded_weak_value_dict_deepcopyz6MappingTestCase.test_threaded_weak_value_dict_deepcopy  s    
 	**7+F+FMr   c                 v    t        j                         }| j                  |j                  j                         y r   )rd   rq  r~   _remove__closure__)r   r  s     r   test_remove_closurez#MappingTestCase.test_remove_closure  s(    '')!))//0r   N):r   r   r   r  ri  rn  rr  ry  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r#  r   requires_working_threadingr'  r)  r+  rG  rK  r   requires_resourcerN  rQ  rS  r  rW  r   r   r   rX  rX    s   E (KM)0IK9@#<+6+2>4+'2'BG4G2'
''
'
'%$5;-"/9.&'"#"J4	/#+J	D=,#\FD 1002 3 1002* 3* 1002
 3
;z 1002M 3M
 1002Wu%L & 3L
 1002O 3O
 1002Wu%N & 3N
 1 1r   rX  )mapping_testsc                   ^    e Zd ZdZ ed       ed       ed      dZej                  Zd Z	y)WeakValueDictionaryTestCasez?Check that WeakValueDictionary conforms to the mapping protocolrM   r   r   )r  r  key3c                 6    | j                   j                         S r   )!_WeakValueDictionaryTestCase__refr  r   s    r   
_referencez&WeakValueDictionaryTestCase._reference      zz  r   N)
r   r   r   __doc__r%   r_  rd   rq  	type2testr`  r   r   r   r\  r\    s-    I1IfQiq	BE++I!r   r\  c                   b    e Zd ZdZ ed      d ed      d ed      diZej                  Zd Z	y	)
WeakKeyDictionaryTestCasez=Check that WeakKeyDictionary conforms to the mapping protocolr  rM   r  r   r]  r   c                 6    | j                   j                         S r   )_WeakKeyDictionaryTestCase__refr  r   s    r   r`  z$WeakKeyDictionaryTestCase._reference  ra  r   N)
r   r   r   rb  r%   rg  rd   r  rc  r`  r   r   r   re  re    s3    GF^Avf~aBE))I!r   re  c                   T    e Zd Z G d d      Zd Zd Zd Zd Zd Ze	d        Z
d	 Zy
)FinalizeTestCasec                       e Zd Zy)FinalizeTestCase.ANr  r   r   r   r*  rk    s    r   r*  c                 h    t         j                  j                  dk7  rt        j                          y y )Ncpython)sysimplementationnamer   r   r   s    r   _collect_if_necessaryz&FinalizeTestCase._collect_if_necessary  s'    ""i/  0r   c                    fd}| j                         }g t        j                  ||ddd      }| j                  |j                  d       | j                  |j                         ||dddif       | j                   |       d	       | j                   |       d        | j                   |       d        | j                  |j                         d        | j                  |j                         d        | j                  |j                  d
       | j                  d	g       g t        j                  ||ddd      }| j                  |j                         ||di f       | j                  |j                         ||di f       | j                   |       d        | j                   |       d        | j                  |j                         d        | j                  |j                         d        | j                  |j                  d
       | j                  g        g t        j                  ||ddd      }~| j                          | j                   |       d        | j                   |       d        | j                  |j                         d        | j                  |j                         d        | j                  |j                  d
       | j                  d	g       y )Nc                 B    j                  | |z   |z          | |z   |z   S r   r  )r   r  r  ress      r   addz+FinalizeTestCase.test_finalize.<locals>.add  s%    JJq1uqy!q519r   C   +   Y   )r  T)rv  rw  r     F)rv  rw  rx  )r   r  r  )r*  rd   finalizer   alivepeekdetachrq  )r   ru  r,  r    rt  s       @r   test_finalizezFinalizeTestCase.test_finalize  sb   	 FFHQRr2$'AsGc"X#>?c"d#d#4(T*%(se$QRR0AsJ#;<aj"%=>d#d#4(T*%(b!QrR26""$d#d#4(T*%(se$r   c           	         fd}| j                         }g t        j                  ||dddd      }| j                  |j	                         ||ddddf        |        | j                  ddddfg       | j                  t              5  t        j                  ||d       d d d        | j                  t              5  t        j                  ||d	       d d d        | j                  t        t        j                  |       | j                  t        t        j                         y # 1 sw Y   xY w# 1 sw Y   _xY w)
Nc                  ,    j                  | |f       y r   r  )r  kwargsrt  s     r   finz-FinalizeTestCase.test_arg_errors.<locals>.fin  s    JJf~&r   rM   r   r   r9   )funcrt   r  )r  r(   )rt   r  r(   )r*  rd   rz  r   r|  r   r   )r   r  r,  r    rt  s       @r   test_arg_errorsz FinalizeTestCase.test_arg_errors  s   	' FFHQQq9AsFQq4I#JK	1(=>?@y) 	1QSa0	1y) 	5!4	5)W%5%5q9)W%5%56	1 	1	5 	5s   D0D<0D9<Ec                    | j                         }g }t        j                  ||j                  d      }t        j                  ||j                  d      }t        j                  ||j                  d      }t        j                  ||j                  d      }t        j                  ||j                  d      }~~| j	                  |j
                         | j	                  |j
                         | j	                  |j
                         | j	                  |j                                | j                  |j
                          |        |j                  d        |        | j                  |j
                         |j                  d        |        |j                  d       ~| j                          | j                  |j
                         |j                  d	        |        g d
}| j                  ||       y )Nf1f2f3f4f5r*  Br
   r  )r*  r  r  r
   r  r  r  r  )
r*  rd   rz  r   r   r{  r}  r   rq  r   )	r   r,  rt  r  r  r  r  r  expecteds	            r   
test_orderzFinalizeTestCase.test_order   so   FFHaT2aT2aT2aT2aT2 !!!		$"


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

3


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

3
?h'r   c                     G d dt         j                        }| j                         }g fd} |||      }t        j                  |      }t        j                  |      }~~| j	                   |              | j	                   |              ~| j                          | j                   |              | j                   |              | j                  dg       y )Nc                       e Zd Zy)4FinalizeTestCase.test_all_freed.<locals>.MyFinalizerNr  r   r   r   MyFinalizerr  )  rM  r   r  c                  (     j                  d       y )N{   r  )rt  s   r   rO   z1FinalizeTestCase.test_all_freed.<locals>.callback.  s    JJsOr   r  )rd   rz  r*  rN   r   rq  r~   r   )r   r  r,  rO   r    wr_callbackwr_frt  s          @r   test_all_freedzFinalizeTestCase.test_all_freed'  s    	'** 	 FFH	8$kk(+{{1~a[]+TV$""$+-($&!se$r   c                 p     fd}t        j                   t        dt              }t        j                   t        dt              }t        j                   |      }t        j                   t        dt              }|j                  dk(  sJ d|_        |j                  dk(  sJ |j                  dk(  sJ y )Nc                  \    t        j                  t        d      } t        d       ddz   y )Ng1f3 errorrM   r   )rd   rz  print)r  clss    r   errorz,FinalizeTestCase.run_in_child.<locals>.errorB  s(     !!#ud3B*aCr   r  r  r  TF)rd   rz  r  _global_varatexit)r  r  r  r  r  r  s   `     r   run_in_childzFinalizeTestCase.run_in_child@  s    	 c5$<c5$<c5)c5$<yyD   	yyD   yyD   r   c                     d}t        j                  d|      \  }}}|j                  d      j                         }| j	                  |g d       | j                  d|v        y )NzNfrom test.test_weakref import FinalizeTestCase;FinalizeTestCase.run_in_child()z-cascii)z	f4 foobarr  r  z	f1 foobars   ZeroDivisionError)r   assert_python_okdecode
splitlinesr   r   )r   progrcouterrs        r   test_atexitzFinalizeTestCase.test_atexitT  s[    2$55dDACjj!,,.JK,34r   N)r   r   r   r*  rq  r~  r  r  r  classmethodr  r  r   r   r   ri  ri    s@     !
'%R7&%(N%2 ! !&5r   ri  c                       e Zd Zd Zy)ModuleTestCasec                     dD ]k  }t        t        |      }|dk7  r| j                  |j                  d       | j                  |j                  |       | j                  |j
                  |       m y )N)r4  	ProxyTyper   r2  WeakSetr  rq  r  rd   )r  rd   r   r   r   r   )r   rp  rt   s      r   
test_nameszModuleTestCase.test_names^  sf    Z 	5D'4(Cy   ;S\\40S--t4	5r   N)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                 L    |j                  t        j                                |S r   )addTestdoctestDocTestSuite)loadertestspatterns      r   
load_testsr    s    	MM'&&()Lr   __main__)g-C6?).rT   rn  r  unittestr   rd   r   r  r  rZ   rR   r?  testr   test.supportr   r   r   r   r  r  r
   r   r!   r#   r%   r@   TestCaserE   r  r_   ra   r  r+  rX  rZ  BasicTestMappingProtocolr\  re  ri  r  r  __test__r  r   mainr   r   r   <module>r     sg   	 
            1 # )   
  * 
x     *a aHe+( e+PF.** F.Rj1h j1Z !-"H"H !! F F !`5x(( `5F5X&& 5T
l :&
 zHMMO r   