python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
test_weakref.cpython-312.pyc

ΑeF)ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlm
Z
ddlmZmZddlmZddlmZdadZGddZGd	d
ZdZdZGd
dZGddZGddej6Zej:d)dZGddeZGddeZ Gddej6Z!GddeZ"ddlm#Z#Gdde#jHZ%Gdd e#jHZ&Gd!d"ej6Z'Gd#d$ej6Z(d%Z)d&e)iZ*d'Z+e,d(k(rejZyy)*N)support)
script_helper	ALWAYS_EQ)
gc_collect)threading_helperfoobarceZdZdZy)CcyNselfs E/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/test/test_weakref.pymethodzC.methodsN)__name__
__module____qualname__rr
rrr
r
s
rr
ceZdZdZdZy)CallableNc||_yrbarrxs  r__call__zCallable.__call__"s	r)rrrrrr
rrrrs
Crrcd}|S)Ncyrr
r
rrfzcreate_function.<locals>.f'rr
)r s rcreate_functionr"&s
Hrc*tjSr)r
rr
rrcreate_bound_methodr$*s3::rc6eZdZdZdZdZdZdZdZdZ	y)	Objectc||_yrarg)rr)s  r__init__zObject.__init__/s	rc d|jzS)Nz<Object %r>r(rs r__repr__zObject.__repr__1stxx''rc`t|tr|j|jk(StSr
isinstancer&r)NotImplementedrothers  r__eq__z
Object.__eq__3s%eV$88uyy((rc`t|tr|j|jkStSrr.r1s  r__lt__z
Object.__lt__7s%eV$88eii''rc,t|jSr)hashr)rs r__hash__zObject.__hash__;sDHH~rcy)Nr
rs rsome_methodzObject.some_method=rcy)Nr
rs rother_methodzObject.other_method?r<rN)
rrrr*r,r3r5r8r;r?r
rrr&r&.s%(rr&ceZdZdZy)RefCyclec||_yr)cyclers rr*zRefCycle.__init__Ds	
rNrrrr*r
rrrArACsrrAceZdZdZdZy)TestBasecd|_yNrcbcalledrs rsetUpzTestBase.setUpJs	
rc.|xjdz
c_yNrI)rrefs  rcallbackzTestBase.callbackMs


rN)rrrrKrPr
rrrFrFHsrrFc#Kdfd}tj5tj|}|j		dd|j	dddy#d|jwxYw#1swYyxYww)zR
    Ensure GC collections happen in a different thread, at a high frequency.
    Fcds-tjtjs,yyr)timesleepgccollect)periodplease_stopsrrVz"collect_in_thread.<locals>.collectXs JJvJJLr)targetNT)r
disable_gc	threadingThreadstartjoin)rWrVtrXs`  @rcollect_in_threadr`Qs{
K

			G,			K
FFHK
FFHs4B'B	A)
B 	B)A==BB	BcheZdZdZdZdZejdZdZ	dZ
dZdZd	Z
d
ZdZdZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#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/Z3d0Z4d1Z5d2Z6d3Z7d4Z8d5Z9y6)7ReferencesTestCasec|jt|jt|jtt}t	j
|}t
|~t
|yr)check_basic_refr
r"r$weakrefrOrepr)rowrs   rtest_basic_refz!ReferencesTestCase.test_basic_refisTQ_-01
C
[[^R
RrcGddt}|d}tj|}|jdt	||jdt|y)NceZdZdZy)>ReferencesTestCase.test_repr_failure_gh99184.<locals>.MyConfigc||Srr
rs  r__getattr__zJReferencesTestCase.test_repr_failure_gh99184.<locals>.MyConfig.__getattr__ysAwrN)rrrrnr
rrMyConfigrlx
rror>)offset)dictrerOassertInrfstr)rroobjobj_weakrefs    rtest_repr_failure_gh99184z,ReferencesTestCase.test_repr_failure_gh99184wsN	t	a kk#&

j${"34

j#k"23rc|jt|jt|jtyr)check_basic_callbackr
r"r$rs rtest_basic_callbackz&ReferencesTestCase.test_basic_callbacks-!!!$!!/2!!"56rcddl}|j}|}tj|}|j	||~|j||j
||j|yrH)	_testcapicreate_cfunctionrerOassertIsassertIsNonerdry)rr|r}r rhs     rtest_cfunctionz!ReferencesTestCase.test_cfunctionsg$55
[[^

bdA
"$-.!!"23rcDt}tj||j}tj||j}~t	|j|d|j|d|j
|jddy)Nz$expected reference to be invalidatedz-callback not called the right number of times)r
rerOrPrrassertEqualrJrrgref1ref2s    rtest_multiple_callbacksz*ReferencesTestCase.test_multiple_callbackssy
C{{1dmm,{{1dmm,
$&"HI$&"HID	Frc|fd}t}tj|||_tj||}~y)Nc$|jyrrO)objectrs  rrPzDReferencesTestCase.test_multiple_selfref_callbacks.<locals>.callbacksHHJr)r
rerO)rrPcrs    rtest_multiple_selfref_callbacksz2ReferencesTestCase.test_multiple_selfref_callbackss8#'	
C;;q(+{{1h'
rcft}|jttj|dy)N)rP)r
assertRaises	TypeErrorrerO)rrs  rtest_constructor_kwargsz*ReferencesTestCase.test_constructor_kwargss$
C)W[[!dCrct}d|_tj||j}tj||j}~td}|j
t|||j
t||tjt}t|j
tt||j|jdy)NrNc|jyrr)proxys rcheckz0ReferencesTestCase.test_proxy_ref.<locals>.checks	IIrr)r
rrerrPrrReferenceErrorboolrrJ)rrgrrrref3s      rtest_proxy_refz!ReferencesTestCase.test_proxy_refs
C}}Q

.}}Q

.
		
.%6.%6}}QS!.$5*rc|}tj|}|j|d|}|j||dy)Nz,weak reference to live object should be livez-<ref>() should return original object if live)rerOassertIsNotNoner~)rfactoryrgrOo2s     rrdz"ReferencesTestCase.check_basic_refsGIkk!nSUC	E
U

aD	Frcd|_|}tj||j}~t	|j|jdd|j
|dy)NrrNz(callback did not properly set 'cbcalled'z3ref2 should be dead after deleting object reference)rJrerOrPrrr)rrrgrOs    rryz'ReferencesTestCase.check_basic_callbacks\
Ikk!T]]+
?	A#%J	Lrc"t}tj|}tj|}tj|}|j	||dt}tj|}tj|}tj|}|j	||d|jtj|dd~t|jtj|ddy)Nz1reference object w/out callback should be re-usedrzwrong weak ref count for objectrNz4wrong weak ref count for object after deleting proxy)r
rerOrr~rgetweakrefcountr)rrgrrrs     rtest_ref_reusez!ReferencesTestCase.test_ref_reuses
C{{1~

a {{1~

dDH	J
C

a {{1~{{1~

dDH	J003Q6	8003QK	Mrct}tj|}tj|}tj|}|j	||dy)Nz4proxy object w/out callback should have been re-used)r
rerrOr~)rrgproxy1rOproxy2s     rtest_proxy_reusez#ReferencesTestCase.test_proxy_reusesF
Cq!kk!nq!

ffK	Mrct}|j|tj|t	j
}tj|}|j
|d|jd|jt|d|j|dddg|dd|jt|d|jt|d|jd|dd|d<|j|dd|j|ddt	j
|}tj|}|j||t	j
td	}tj|}|j|dd|dd|j|dd|dd|j|dd|dd|j|dd|ddy)
Nz(proxy for empty UserList should be falserNz+proxy for non-empty UserList should be truerz,proxy didn't support __contains__() properlyr>
)
r
check_proxyrercollectionsUserListassertFalseappendrlen
assertTruersrange)rrgLpL2p2L3p3s        rtest_basic_proxyz#ReferencesTestCase.test_basic_proxys
CGMM!,-  "MM!FG	Q#HI1v!Q#Q#

aJK!1q!1q!

!
!!
$
]]2
B

!
!%)
,
]]2
A1&ABAB(BQBQ(Aa"Qq'*rcGddt}|}|jdttj||jt
tj|dy)NceZdZdZdZy)0ReferencesTestCase.test_proxy_unicode.<locals>.Ccy)Nstringr
rs r__str__z8ReferencesTestCase.test_proxy_unicode.<locals>.C.__str__rcy)Nbytesr
rs r	__bytes__z:ReferencesTestCase.test_proxy_unicode.<locals>.C.__bytes__rrN)rrrrrr
rrr
rs
 
 rr
rr)rrsdirrerrbytes)rr
instances   rtest_proxy_unicodez%ReferencesTestCase.test_proxy_unicodesQ	 	 
3

k3w}}X'>#?@w}}X67BrcGdd}|}tj|}|jtj|dy)NceZdZdZy).ReferencesTestCase.test_proxy_index.<locals>.Ccy)Nrr
rs r	__index__z8ReferencesTestCase.test_proxy_index.<locals>.C.__index__"rN)rrrrr
rrr
r!
rr
r)rerroperatorindexrr
rgrs    rtest_proxy_indexz#ReferencesTestCase.test_proxy_index s<		
CMM!*B/rcGdd}|}tj|}|j|dzd|dz}|j|dy)NceZdZdZdZy),ReferencesTestCase.test_proxy_div.<locals>.CcyN*r
r1s  r__floordiv__z9ReferencesTestCase.test_proxy_div.<locals>.C.__floordiv__*rrcy)Nr
r1s  r
__ifloordiv__z:ReferencesTestCase.test_proxy_div.<locals>.C.__ifloordiv__,rrN)rrrrrr
rrr
r)s

rr
r>rrrerrrs    rtest_proxy_divz!ReferencesTestCase.test_proxy_div(sP		

CMM!a$	aBrcGdd}|}tj|}|j|dzd|jd|zd|dz}|j|dy)NceZdZdZdZdZy)/ReferencesTestCase.test_proxy_matmul.<locals>.Ccy)Nr
r1s  r
__matmul__z:ReferencesTestCase.test_proxy_matmul.<locals>.C.__matmul__6rcy)N]r
r1s  r__rmatmul__z;ReferencesTestCase.test_proxy_matmul.<locals>.C.__rmatmul__8rrcy)N1r
r1s  r__imatmul__z;ReferencesTestCase.test_proxy_matmul.<locals>.C.__imatmul__:srN)rrrrrrr
rrr
r5s


rr
r>rrrrrs    rtest_proxy_matmulz$ReferencesTestCase.test_proxy_matmul4sd		
CMM!Q%Q%	QC rcB|jtjyr)check_shared_without_callbackrerOrs r test_shared_ref_without_callbackz3ReferencesTestCase.test_shared_ref_without_callbackKs**7;;7rcB|jtjyr)rrerrs r"test_shared_proxy_without_callbackz5ReferencesTestCase.test_shared_proxy_without_callbackNs**7==9rcFtd}||d}||d}|j||d~~||}||d}|j||d~~||}||}|j||d~~||d}||}|j||dy)NrNz%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~)rmakerefrgp1rs     rrz0ReferencesTestCase.check_shared_without_callbackQs1I
Q

Q


b"EF
QZ
Q


b"FG
QZ
QZ

b"EF
Q

QZ

b"FGrct}tj|}|j|||j	t|tjd|d|j|jdd|d|j|jdd|jt||jt|dddy)	Nzproxy is not of callable typez	twinkies!z1call through proxy not passed through to originalzSplat.)rrNrr)rrerrr~typeCallableProxyTyperrrr)rrgrs   rtest_callable_proxyz&ReferencesTestCase.test_callable_proxycsJ}}QD!

d4j'";";4	6[H	JxH	J	
)T*	
)T1a3rcd|_|j|jddd|_|j|jdd|`|jt|ddd|_|j|jddd|_|j|jdd|`|jt|dd	y)
NrNz)proxy does not reflect attribute additionrz-proxy does not reflect attribute modificationfooz(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)rrrhasattr)rrgrs   rrzReferencesTestCase.check_proxyxsA@	BAD	F
E.?	A	K	M	F	HIE*J	LrcGdd}|}tj|}|d=|j|jdy)NceZdZdZdZy)3ReferencesTestCase.test_proxy_deletion.<locals>.FooNc||_yr)result)raccessors  r__delitem__z?ReferencesTestCase.test_proxy_deletion.<locals>.Foo.__delitem__s	&r)rrrrrr
rrFoorsF
'rrr)rerrr)rrgr s    rtest_proxy_deletionz&ReferencesTestCase.test_proxy_deletions>	'	'
EMM!
aD1%rcGddt}|}|jttj|t|y)NceZdZy)0ReferencesTestCase.test_proxy_bool.<locals>.ListNrrrr
rrListrsrr	)listrrrer)rr	lysts   rtest_proxy_boolz"ReferencesTestCase.test_proxy_bools34vgmmD12DJ?rcdGfdd}|tj}|jt5d|vdddy#1swYyxYw)NceZdZfdZy)1ReferencesTestCase.test_proxy_iter.<locals>.MyObjctSr)r0)rrus r__iter__z:ReferencesTestCase.test_proxy_iter.<locals>.MyObj.__iter__s%%rNrrrr)rusrMyObjrs
&rrblech)rerrr)rrrrus   @rtest_proxy_iterz"ReferencesTestCase.test_proxy_itersW	&	&gMM#


y
)	
qL				sAAcgdfd}|Gfdd}|}|jt|gdy)N)r:r>c3&KEd{y7wrr
)arrsr
iterator_funcz9ReferencesTestCase.test_proxy_next.<locals>.iterator_funcsNNsceZdZfdZy):ReferencesTestCase.test_proxy_next.<locals>.IteratesWeaklyc.tjSrrer)rits rrzCReferencesTestCase.test_proxy_next.<locals>.IteratesWeakly.__iter__s}}R((rNr)rsrIteratesWeaklyrs
)rr )rr
)rrr weak_itrrs    @@rtest_proxy_nextz"ReferencesTestCase.test_proxy_nexts>	
_	)	)!"	
g	2rcdGfdd}|}d}|jt|5t|dddy#1swYyxYw)NcyrHr
r
rr<lambda>z8ReferencesTestCase.test_proxy_bad_next.<locals>.<lambda>r!rceZdZfdZy)1ReferencesTestCase.test_proxy_bad_next.<locals>.Ac.tjSrr)rnot_an_iterators rrz:ReferencesTestCase.test_proxy_bad_next.<locals>.A.__iter__s}}_55rNr)r)srAr's
6rr*z'Weakref proxy referenced a non-iterator)assertRaisesRegexrr
)rr*amsgr)s    @rtest_proxy_bad_nextz&ReferencesTestCase.test_proxy_bad_nextsN$	6	6
C7

#
#Is
3	G			sAAc	Gdd}|}|jdjttj|dy)NceZdZdZdZy)5ReferencesTestCase.test_proxy_reversed.<locals>.MyObjcy)Nrr
rs r__len__z=ReferencesTestCase.test_proxy_reversed.<locals>.MyObj.__len__rctdS)Ncba)iterrs r__reversed__zBReferencesTestCase.test_proxy_reversed.<locals>.MyObj.__reversed__sE{"rN)rrrr3r8r
rrrr1s

#rrr6)rr^reversedrerrrrus   rtest_proxy_reversedz&ReferencesTestCase.test_proxy_reverseds<	#	#g'--*<!=>FrchGdd}|}|jt5ttj|dddGdd}|}|jt5ttj|dddy#1swYWxYw#1swYyxYw)NceZdZdZy)1ReferencesTestCase.test_proxy_hash.<locals>.MyObjcyrr
rs rr8z:ReferencesTestCase.test_proxy_hash.<locals>.MyObj.__hash__rrNrrrr8r
rrrr?rrrceZdZdZy)r?NrAr
rrrz1ReferencesTestCase.test_proxy_hash.<locals>.MyObjsHr)rrr7rerr;s   rtest_proxy_hashz"ReferencesTestCase.test_proxy_hashs		g


y
)	%s#$	%		g


y
)	%s#$	%	%	%	%	%	%sB4B(B%(B1c8t}tj|}tj||j}|j	tj
|ddtj|}tj||j}|j	tj
|dd~~~~t|j	tj
|dd|j	tj
dddy)Nrz*got wrong number of weak reference objectsr:rzAweak reference objects not unlinked from referent when discarded.rNz2got wrong number of weak reference objects for int)r
rerOrPrrrr)rrgrrrrs      rtest_getweakrefcountz'ReferencesTestCase.test_getweakrefcounts
C{{1~{{1dmm,003QA	Cq!q$--0003QA	C
$003Q1	2
	
003QI	Krct}tj||j}tj||j}~t	|jtj||gdt}tj||j}tj||j}~t	|jtj||gd~t	|jtj|gd|jtjdgdy)Nzlist of refs does not matchzlist of refs not clearedrNz#list of refs does not match for int)r
rerOrPrrgetweakrefsrs    rtest_getweakrefsz#ReferencesTestCase.test_getweakrefss
C{{1dmm,{{1dmm,,,Q/$2	4
C{{1dmm,{{1dmm,,,Q/$2	4
,,Q//	1	
,,Q/:	<rcGddt}|d}tj|}|j|dzd|jd|zdy)NceZdZy)6ReferencesTestCase.test_newstyle_number_ops.<locals>.FNrr
rrFrKrrLg@g?g@)floatrerr)rrLr rs    rtest_newstyle_number_opsz+ReferencesTestCase.test_newstyle_number_opssM		
cFMM!S#&q#&rcGddtifdfd}	||jd	||jdy#$rY!wxYw#$rYywxYw)NceZdZy)?ReferencesTestCase.test_callbacks_protected.<locals>.BogusErrorNrr
rr
BogusErrorrR%rMrrSc|=yrr
)kdatas rremovez;ReferencesTestCase.test_callbacks_protected.<locals>.remove(s
Qrc@d}dtj|<)Ncy)Nr
r
r
rrr%zRReferencesTestCase.test_callbacks_protected.<locals>.encapsulate.<locals>.<lambda>+r!r)rerO)r rSrVrWs rencapsulatez@ReferencesTestCase.test_callbacks_protected.<locals>.encapsulate*s#A+/DQ'(rzexception not properly restored)	Exceptionfail)rrZrSrVrWs  @@@rtest_callbacks_protectedz+ReferencesTestCase.test_callbacks_protected"sw					9M
II78	9M
II78				s"AAAAA'&A'cddlGddt}|}tj|fd}~~|}||_tj|jfd}|}||_~~y)NrceZdZy)0ReferencesTestCase.test_sf_bug_840829.<locals>.CNrr
rrr
r`HrMrr
c&jSrrVignorerUs rr%z7ReferencesTestCase.test_sf_bug_840829.<locals>.<lambda>Ls:2::<rc&jSrrbrcs rr%z7ReferencesTestCase.test_sf_bug_840829.<locals>.<lambda>Tsjbjjlr)rUrrerOic1)rr
rrhrgc2rUs      @rtest_sf_bug_840829z%ReferencesTestCase.test_sf_bug_840829;sq			
C
[[7
8


Ss
[[:
;
S
rcddl}Gddt}Gddt}|}||_tj||j
|_~~~|jy)NrceZdZy)4ReferencesTestCase.test_callback_in_cycle.<locals>.JNrr
rrJrlfrMrrmceZdZdZy)5ReferencesTestCase.test_callback_in_cycle.<locals>.IIc|jyr)rmrrds  r	acallbackz?ReferencesTestCase.test_callback_in_cycle.<locals>.II.acallbackjs	rN)rrrrrr
rrIIrois
rrs)rUrrmrerOrrrhrV)rrUrmrsIs     rtest_callback_in_cyclez)ReferencesTestCase.test_callback_in_cyclecsW				
D{{1akk*2
q"

rcddl}Gdd}||}}||_||_tj||j
|_~~|jy)NrceZdZdZy)=ReferencesTestCase.test_callback_reachable_one_way.<locals>.CcL|j|j|jyrmergrhrqs  rcbz@ReferencesTestCase.test_callback_reachable_one_way.<locals>.C.cbrNrrrr|r
rrr
rx
rr
)rUr{rgrerOr|rhrV)rrUr
rgrhs     rtest_callback_reachable_one_wayz2ReferencesTestCase.test_callback_reachable_one_waysR		acBB&

rcddl}Gddt}Gdd}||}}||_||_t	j
||j|_~~~~|jy)NrceZdZdZy)=ReferencesTestCase.test_callback_different_classes.<locals>.CcL|j|j|jyrrzrqs  rr|z@ReferencesTestCase.test_callback_different_classes.<locals>.C.cbr}rNr~r
rrr
rrrr
ceZdZy)=ReferencesTestCase.test_callback_different_classes.<locals>.DNrr
rrDrrMrr)	rUrr{rgrerOr|rhrV)rrUr
rrgrhs      rtest_callback_different_classesz2ReferencesTestCase.test_callback_different_classessb				acBB&Aq

rc*ddl}gGfddt}|d|d}}||_||_tj||j
|_tj||j
|_fd}tj||}~~~|jg|j|jdg|j|ddd=|j|jgy)NrceZdZdZfdZy)AReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.Cc||_yr)	attribute)rvalues  rr*zJReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C.__init__s	!&rc<j|jyr)rrrrdalists  rrrzKReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C.acallbacksTVV$rN)rrrr*rrrsrr
rs

'
%rr
rNrc(jdy)NC went awayrrdrs rC_went_awayzKReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C_went_awaysLL'rr)	rUrrrerOrrrhrrV)rrUr
rgrhrrhrs       @r#test_callback_in_cycle_resurrectionz6ReferencesTestCase.test_callback_in_cycle_resurrections	%	%1qtBB-B-	(
[[K
(A#


	
0t$!H

#rcZddl}gfd}Gfddt}||}}||_||_|j}t	j
|||_t	j
||j|_t	j
||}|j||~~~~|jg|j|jdg|j|ddd=|j|jgy)Nrc(jdy)Nsafe_callback calledrrs r
safe_callbackzDReferencesTestCase.test_callbacks_on_callback.<locals>.safe_callbacksLL/0rceZdZfdZy)8ReferencesTestCase.test_callbacks_on_callback.<locals>.Cc(jdy)Nz	cb calledrrs  rr|z;ReferencesTestCase.test_callbacks_on_callback.<locals>.C.cbs[)rNr~rsrr
rs
*rr
r)
rUrr2r|rerOrhr~rrV)	rrUrr
rdrPexternal_wrrs	        @rtest_callbacks_on_callbackz-ReferencesTestCase.test_callbacks_on_callbacks	1	*	*sAC144{{1h'{{8QTT*kk(M:

kmX.
aA#

!7 89-!H

#rcB|jtjyr)check_gc_during_creationrerOrs rtest_gc_during_ref_creationz.ReferencesTestCase.test_gc_during_ref_creations%%gkk2rcB|jtjyr)rrerrs rtest_gc_during_proxy_creationz0ReferencesTestCase.test_gc_during_proxy_creations%%gmm4rcntj}tjdddtjGdd}d}|}|}||_|||_	|}t
j||tj|y#tj|wxYw)NrNceZdZy)6ReferencesTestCase.check_gc_during_creation.<locals>.ANrr
rrr*rrMrr*cyrr
)argss rrPz=ReferencesTestCase.check_gc_during_creation.<locals>.callback r)rU
get_threshold
set_thresholdrVr,rhrerO)rr
thresholdsr*rP
referencedr,s       rrz+ReferencesTestCase.check_gc_during_creations%%'

Aq!


			S

Cz"	*AKK
H-
j)Bj)s0B  B4c0Gddt}|}y)NceZdZdZy)>ReferencesTestCase.test_ref_created_during_del.<locals>.Targetc.tj|ayr)rerOref_from_delrs r__del__zFReferencesTestCase.test_ref_created_during_del.<locals>.Target.__del__8s&{{40rNrrrrr
rrTargetr7s
1rr)r)rrws   rtest_ref_created_during_delz.ReferencesTestCase.test_ref_created_during_del2s
	1V	1

Hrc	tjt}|jt|j
dddddt
jyrH)rerOr[rrr*rUrV)rrs  r	test_initzReferencesTestCase.test_init>s9
KK	")QZZAq!Q?


rcGddt}g}tjttj||j}d}tj|j|d|j||gy)NceZdZy)*ReferencesTestCase.test_classes.<locals>.ANrr
rrr*rHrMrr*)rrerOintrrUrVr)rr*lr,s    rtest_classeszReferencesTestCase.test_classesFse		CKK188$


d#QC rctd}td}td}tj|}tj|}tj|}tj|}|j||k(|j	||k7|j	||k(|j||k7|j||k(|j	||k7|j	||k(|j||k7|j|t
k(|j	|t
k7~~~t
j|||fD]}|j|d|j	||k(|j||k7|j	||k(|j||k7|j||k(||u|j||k7||uy)NrNr)
r&rerOrrrrUrVr~r)	rryzr,brrrs	         r
test_equalityz ReferencesTestCase.test_equalityRs1I1I1IKKNKKNKKNKKN	
Qa a QQa a QY'i(
q!


Aq	%AMM!#t$	%	
a Qa Qaa(a!,rctjtjtjtjg}td}td}t
j|}t
j|}|D]}|jt|||~~tj|D]}|jt|||yrM)rltgtleger&rerOrrrUrV)ropsrrr,rops       r
test_orderingz ReferencesTestCase.test_orderingws{{HKKhkkB1I1IKKNKKN	3BiQ2	3
q


	3BiQ2	3rcvtd}td}tj|}tj|}|jt	|t	d~~tj|jt	|t	d|jtt|yr)	r&rerOrr7rUrVrr)rrrr,rs     rtest_hashingzReferencesTestCase.test_hashings2J2JKKNKKNa$r(+
q


	
a$r(+)T1-rcGdd}tj}|dx}}tdD]}||x||<}~tjy)NceZdZdZy)1ReferencesTestCase.test_trashcan_16602.<locals>.Ccv|sytj|fd}tj|||_y)Nc}yrr
)wparentrgwselfs  rr|zFReferencesTestCase.test_trashcan_16602.<locals>.C.__init__.<locals>.cbs
Ar)rerOr)rparentr|rs   @rr*z:ReferencesTestCase.test_trashcan_16602.<locals>.C.__init__s.D) &{{626rNrDr
rrr
rs
7rr
d)reWeakKeyDictionaryrrUrV)rr
rrootrns      rtest_trashcan_16602z&ReferencesTestCase.test_trashcan_16602sZ
	7	7
%%'T7qs	AtOAaD1	


rctd}d}tj||}|j|j|tj|}|j|jy)NrNcyrr
rs rr%z<ReferencesTestCase.test_callback_attribute.<locals>.<lambda>r!r)r&rerOr~__callback__r)rrrPrrs     rtest_callback_attributez*ReferencesTestCase.test_callback_attributesU1I#{{1h'

d''2{{1~$++,rctd}tj||j}|j	|j
~t
j|j|j
yrM)	r&rerOrPrrrrr)rrrOs   r&test_callback_attribute_after_deletionz9ReferencesTestCase.test_callback_attribute_after_deletionsV1Ikk!T]]+S--.
#**+rctd}d}tj||}|jt5d|_dddy#1swYyxYw)NrNcyrr
rs rr%z@ReferencesTestCase.test_set_callback_attribute.<locals>.<lambda>r!rcyrr
rs rr%z@ReferencesTestCase.test_set_callback_attribute.<locals>.<lambda>r!r)r&rerOrAttributeErrorr)rrrPrs    rtest_set_callback_attributez.ReferencesTestCase.test_set_callback_attributesK1I#{{1h'


~
.	1 0D	1	1	1s	AAcGddt}|d}tj|d}~tjy)NceZdZdZy);ReferencesTestCase.test_callback_gcs.<locals>.ObjectWithDelcyrr
rs rrzCReferencesTestCase.test_callback_gcs.<locals>.ObjectWithDel.__del__r!rNrr
rr
ObjectWithDelrs#rrrNc*tjSr)rrrs rr%z6ReferencesTestCase.test_callback_gcs.<locals>.<lambda>s'*<*<*>r)r&rerOrr)rrrrs    rtest_callback_gcsz$ReferencesTestCase.test_callback_gcss8	$F	$!{{1>?
rN):rrrrirwrzrcpython_onlyrrrrrrdryrrrrrrrrrrrrrrrr"r.r<rCrErHrOr]rirurrrrrrrrrrrrrrrrrrr
rrrbrbgs1	47

	4	4	F$D+$F	LM.M+8	C0
 
!.8:H$4*L*	&@(
3
G% K,<4'92&P&P08,$\$$L35*2

!#-J
3
.*-,1rrbc*eZdZdZdZdZdZdZy)SubclassableWeakrefTestCasectGddtj}td}||d}|j|||j	|j
|j
|jd~t|j||j	|j
y)Nc*eZdZdfd	ZfdZxZS)=SubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRefc4||_t|	||yr)rsuperr*)robrPr	__class__s    rr*zFSubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRef.__init__s"
 X.rc.d|_t|	SNT)calledrr)rrs rrzFSubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRef.__call__s"w'))rr)rrrr*r
__classcell__)rs@rMyRefrs
/
*
*rrrr)
rerOr&r~rrrrrr)rrrgmrs    rtest_subclass_refsz.SubclassableWeakrefTestCase.test_subclass_refss	*GKK	*
5M
1B


bdA		"2&
"$		"rczGddtj}td}||}tj|}|j|||j	tj
|||g|j	tj|d||}|j	tj|dtj
|}|j	t|d|j||d|j||dd|j||ddy)NceZdZy)XSubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refs.<locals>.MyRefNrr
rrrrrMrrrrrrrN)
rerOr&assertIsNotrrGrrr~rs)rrrgr1r2r3refss       r-test_subclass_refs_dont_replace_standard_refszISubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refss	GKK	2J
1X
[[^R ,,Q/"b:003Q7
1X003Q7""1%TA&

b$q'"

b$qr(#

b$qr(#rcGddtj}td}||t}||t}|j||tj|}|j|||j||y)NceZdZy)USubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbacks.<locals>.MyRefNrr
rrrrrMrrr)rerOr&idrtr	rGrs)rrrgr
rr
s      r*test_subclass_refs_dont_conflate_callbackszFSubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbackssm	GKK	2J
1b\
1c]R ""1%

b$

b$rcHGddtj}td}||ddd}|j|jd|j|j
d|j|j
d|jt|dy)Nc"eZdZdZdZdZdZy)HSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRefslot1slot2cDtjj|||Sr)rerO__new__)rrrPrrs     rrzPSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.__new__s{{**4X>>rc ||_||_yrr)rrrPrrs     rr*zQSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.__init__s"
"
rc4|j|jzSrrrs rmethzMSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.methszzDJJ..rN)rrr	__slots__rr*rr
rrrrs(I
?
#
/rrrabcdefabcdef__dict__)	rerOr&rrrrrr)rrrgrs    rtest_subclass_refs_with_slotsz9SubclassableWeakrefTestCase.test_subclass_refs_with_slotss	/GKK	/
2J!T5%(%(%(8,J/0rcDGddtj}fd}t}|||}||_~~j	j
dt}|||}|||}||_||_~~~j	j
dy)z3Confirm https://bugs.python.org/issue3100 is fixed.ceZdZy)HSubclassableWeakrefTestCase.test_subclass_refs_with_cycle.<locals>.MyRefNrr
rrrr'rMrrc0xjdz
c_yrMrI)rrs rrPzKSubclassableWeakrefTestCase.test_subclass_refs_with_cycle.<locals>.callbacksMMQMrrN)rerOr
rgrrJr)rrrPrgr
rs`     rtest_subclass_refs_with_cyclez9SubclassableWeakrefTestCase.test_subclass_refs_with_cycles	GKK	
	
C
1h

*
C
1h

1h

*rN)rrrrrrr$r)r
rrrrs#$$"	 1"$+rrc`eZdZdZdZdZdZdZdZe	jdZdZd	Z
y
)WeakMethodTestCasec$Gddt}|S)z3Return an Object subclass overriding `some_method`.ceZdZdZy)'WeakMethodTestCase._subclass.<locals>.Ccy)Nrr
rs rr;z3WeakMethodTestCase._subclass.<locals>.C.some_method8r4rN)rrrr;r
rrr
r.7s
rr
)r&)rr
s  r	_subclasszWeakMethodTestCase._subclass5s		rctd}tj|j}|j	|tj
|j	|t
|j|j|j||j|j|jj|j|dy)NrNr:)r&re
WeakMethodr;assertIsInstance
ReferenceTyperr~__self____func__rrrgrs   r
test_alivezWeakMethodTestCase.test_alive<s1Iq}}-a!6!67ac4

#67

acllA&

acllAMM$:$:;"rctd}tj|j}~t	j
|j
|dyrM)r&rer2r;rUrVr~r7s   rtest_object_deadz#WeakMethodTestCase.test_object_deadEs;1Iq}}-





ac4 rc|j}|d}tj|j}|`t	j
|j
|dyrM)r0rer2r;rUrVr~)rr
rgrs    rtest_method_deadz#WeakMethodTestCase.test_method_deadLsINN
aDq}}-
M




ac4 rcL|j}gfd}|d}tj|j|}~t	j
|j
|gtj|_t	j
|j
|gy)Nc(j|yrrr)callss rr|z=WeakMethodTestCase.test_callback_when_object_dead.<locals>.cbXLLrrN)r0rer2r;rUrVrr&rr
r|rgrr@s     @rtest_callback_when_object_deadz1WeakMethodTestCase.test_callback_when_object_deadTs~NN	
aDq}}b1



$**



$rc&|j}gfd}|d}tj|j|}|`t	j
|j
|g~t	j
|j
|gy)Nc(j|yrrr?s rr|z=WeakMethodTestCase.test_callback_when_method_dead.<locals>.cbhrArrN)r0rer2r;rUrVrrBs     @rtest_callback_when_method_deadz1WeakMethodTestCase.test_callback_when_method_deaddsvNN	
aDq}}b1
M


$



$rctd}d}tj|j|}tj|}~|j|dy)NrNcyrr
)_s rr|z-WeakMethodTestCase.test_no_cycles.<locals>.cbxrr)r&rer2r;rOr~)rrgr|rrhs     rtest_no_cyclesz!WeakMethodTestCase.test_no_cyclestsH
1I	q}}b1
[[^


bdD!rczfd}fd}td}td}tj|j}tj|j}tj|j}tj|j}||||||||||||||||||td}	tj|	j}
tj|	j}|||
||||||
||||||j||t
~~~	t
j|||||
|f}|D]7}
|D]0}j|
|k(|
|uj|
|k7|
|u29y)NcVj||k(j||k7yrrrr,rrs  r_eqz-WeakMethodTestCase.test_equality.<locals>._eq%OOAF#Q!V$rcVj||k7j||k(yrrMrNs  r_nez-WeakMethodTestCase.test_equality.<locals>._nerPrrNr)	r&rer2r;r?rrUrVr)rrOrRrrr,rrrrer r
qrs`              rrz WeakMethodTestCase.test_equalitys	%	%
1I1Iq}}-q}}-q~~.q~~.Aq	Aq	Aq	Aq	Aq	Aq	1Iq}}-q~~.Aq	Aq	Aq	Aq	Aq}}Ay
q!


!Q1a	5A
5  aa0  a!4
5	5rctd}td}tj|j}tj|j}tj|j}|jt
|t
|t
|}~~tj|jt
|||jt
|||jtt|yrM)r&rer2r;r?rr7rUrVrr)rrrr,rrhas       rrzWeakMethodTestCase.test_hashings
1I1Iq}}-q}}-q~~.a$q'*
!W
q


a"%a"%)T1-rN)rrrr0r8r:r<rCrFrrrJrrr
rrr+r+3sE#!!% % 
""'5R.rr+ceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+e,jZd*Z.e,jZd+Z/e,jZd,Z0d-Z1e,jZd.Z2e,jZe3jhd/d0Z5e,jZd1Z6e,jZe3jhd/d2Z7e3jpd3Z9y4)5MappingTestCasercd}t|Dcgc]}t}}|fd|D}|j}	t|~tjt|}~tjt|}	|j|d|j|	dycc}w#t$rYuwxYw)Nc3.K|]}|ywrr
.0rgconss  r	<genexpr>z3MappingTestCase.check_len_cycles.<locals>.<genexpr>s/AQ/)rrNr)
rrAitemsnext
StopIterationrUrVrrsr)
r	dict_typer^Nrfradctrn1n2s
  `       rcheck_len_cyclesz MappingTestCase.check_len_cycless%*1X...///
YY[	H




X



X

b&!Q!/		sB6B;;	CCcF|jtjdy)Nc
|dfSrMr
rUs rr%z<MappingTestCase.test_weak_keyed_len_cycles.<locals>.<lambda>
Aq6r)rirerrs rtest_weak_keyed_len_cyclesz*MappingTestCase.test_weak_keyed_len_cyclessg779IJrcF|jtjdy)Nc
d|fSrMr
rls rr%z=MappingTestCase.test_weak_valued_len_cycles.<locals>.<lambda>s
aVr)rireWeakValueDictionaryrs rtest_weak_valued_len_cyclesz+MappingTestCase.test_weak_valued_len_cyclessg99;KLrcl|jtjgtjt	ddD]}d}tj
dtj|||t	|Dcgc]}t
}}|fd|D}~|j}	t|t|}	~t|}
|j|	d|j|	||j|
d|j|
|	ycc}w#t$rYrwxYw)NrNrrZrc3.K|]}|ywrr
r\s  rr_z1MappingTestCase.check_len_race.<locals>.<genexpr>s3DG3r`)
addCleanuprUrrrrVrArarbrcrassertGreaterEqualassertLessEqual)rrdr^threrfrarfrrgrhs  `        rcheck_len_racezMappingTestCase.check_len_races((>2+;+;+=>3-	)BAJJqMRR().q2AXZ2E23U33CB
RSBSB##B*  Q'##B*  R('	)3!

s?D"5D''	D32D3cF|jtjdy)Nc
|dfSrMr
rls rr%z:MappingTestCase.test_weak_keyed_len_race.<locals>.<lambda>s
!Qr)ryrerrs rtest_weak_keyed_len_racez(MappingTestCase.test_weak_keyed_len_racesG557GHrcF|jtjdy)Nc
d|fSrMr
rls rr%z;MappingTestCase.test_weak_valued_len_race.<locals>.<lambda>rmr)ryrerqrs rtest_weak_valued_len_racez)MappingTestCase.test_weak_valued_len_racesG779IJrc|j\}}|D]G}|jtj|d|j	|||j
dIt
|j}t
|jj}|j|j|j||d~~|jt||j|d=t|jt||jdz
d~~t|jt|ddtj}|jt|j dt#|d<t|jt|j dy)NrN#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_dictrrerr~r)r
racopysortrCOUNTrrqrKeyError__getitem__r
rrrobjectsrgitems1items2s      rtest_weak_valuesz MappingTestCase.test_weak_valuessp224
g	@AW44Q7;MM!T!%%[>
@	@djjl#diik'')*

F	HFTDJJ/AJTDJJNF	HQTAG	I**,(D$4$4a8#Q(D$4$4a8rc|j\}}|D]K}|jtj|dd|z|j	|j
||dM|j
}|jj
}|jt|t|d~~|jt||j|d=t|jt||jdz
d~~t|jt|ddtd}d	||<|j|||jd
|y)NrNz&wrong number of weak references to %r!rz.cloning of weak-keyed dictionary did not work!rrz.deleting the keys did not clear the dictionaryrz$What is the meaning of the universe?")make_weak_keyed_dictrrerr~r)rarsetrrrr&rsassertNotInrs      rtest_weak_keyszMappingTestCase.test_weak_keyssG
113
g	@AW44Q7AAE
GMM!%%a>
@	@
""$Vc&kE	GFTDJJ/AJTTZZ!^F	HQTAE	G2J8Q

aT"rcf|j\}}|j||j}|jt	|t	|t|}|D]]}|}|j
|||j
|||j|j|||j|_|jt	|dt|}|jt	t|jt	||jD]]}|}|j
|||j
|||j|j|||j|_|jt	|dyrH)	rcheck_iterskeyrefsrrr
rsr)rWrrrrr
objects2rhrs       rtest_weak_keyed_itersz%MappingTestCase.test_weak_keyed_iters6s]113
g||~TCL1=	 BBMM"d#MM"d#RVVT"X.OOB	 	
X*=T$,,.12CLA,,.	 BBMM"d#MM"d#RVVT"X.OOB	 	
X*rc|j\}}|j||j}|jt	|t	|t|}|D]l}|}|j|||j|j|j||jj|j|n|jt	|dt|}|jt	t|jt	||jD]l}|}|j|||j|j|j||jj|j|n|jt	|dyrH)	rr	valuerefsrrr
r)rW
itervaluerefsrs       rtest_weak_valued_itersz&MappingTestCase.test_weak_valued_itersQsp224
g~~TCL1=	 BBRbff.RVVT"&&\%5%56OOB		 
	
X*=T$"4"4"678#g,G$$&	 BBRbff.RVVT"&&\%5%56OOB		 
	
X*rcpt|j}|jD]}|j||j|dt|j	}|D]}|j||j|dt|j	}|j	D]}|j||j|dt|j}|jD]}|j||j|dy)Nzitems() did not touch all itemsz!__iter__() did not touch all keysz!iterkeys() did not touch all keysz%itervalues() did not touch all values)r
rarWrkeysvalues)rrrraitemrrUrvs        rrzMappingTestCase.check_itersjs
TZZ\"JJL	DLL	 ABDIIK 	AKKN	BCDIIK 	AKKN	BCdkkm$	AMM!	<	>rcFt|}tt||}t||d=t	j
|j
tt|t|t|dz
g~|jt||dz
y)NrN)	rr7getattrrbrUrVrsr
r)rrrr	iter_namerrs      r"check_weak_destroy_while_iteratingz2MappingTestCase.check_weak_destroy_while_iteratings|I
*'$	*,
-RBK




c$r(mc'lCL14D%EFTAE*rcf|5\}}|j||ddd|5\}}|jt|j|ddd|j||5\}}|jt|j|ddd|j|||5\}}|||<ddd|j||t
j|}|5\}}|j|ddd|j|||5\}}|jddd|jt|dy#1swYMxYw#1swY&xYw#1swYxYw#1swYxYw#1swYxYw#1swYcxYwrH)
rrrrpoprrupdateclearr)rrrtestcontextrUrddicts      r-check_weak_destroy_and_mutate_while_iteratingz=MappingTestCase.check_weak_destroy_and_mutate_while_iteratings]	&fq!Q%	&
]	=fq!h(8(8!<	=D!
]	5fq!h!4	5D!
]	fq!DG	a!$		$
]	fq!KK	u%
]	fq!JJL	TA&#	&	&	=	=	5	5						sFE)%E63%F9	F;F1F')E36FFFF$'F0ctd}|5t|}|jt|j	|jt||dz
|||<|jt||ddd|5|jt|dz
|j
|jt||dz
ddd|5|jt|dz
|t|j	=|jt||dz
ddd|5|jt|dz
|j
|jt||dz
ddd|5|j|jt|dddd|jt|dy#1swYxYw#1swY0xYw#1swYxYw#1swYxYw#1swYWxYw)	Ni@rNrrr:r>rr)r&rrrbrrpopitemr)rrrrrgrs     r&check_weak_del_and_len_while_iteratingz6MappingTestCase.check_weak_del_and_len_while_iteratings
6N
]	+D	AHHT$))+&'SYA.DGSY*
	+]	/SYA.LLNSYA.		/
]	/SYA.T$))+&'SYA.	/]	/SYA.LLNSYA.	/]	+JJLSY*	+	
TA&1	+	+	/	/
	/	/	/	/	+	+s?A2HA
H0AHA
H(2,H4HHH%(H14H=c|j\|jd|jd|jd|jd|j\tjfd}|j	||j\|j|y)Nrrarrc34K	tj}t|jj}tjt||fd}tjy#d}tjwxYwwrr7rarbrr)rUrVr&)rrrrrs  rrzKMappingTestCase.test_weak_keys_destroy_while_iterating.<locals>.testcontextsj	
$**,'RKKM%%

Qil"



BA!A=&B=BB)rr
contextlibcontextmanagerrrrrrrrs  @@r&test_weak_keys_destroy_while_iteratingz6MappingTestCase.test_weak_keys_destroy_while_iteratings113
g//gvF//gwG//gxH//gyI113
g		"	"
	
#
		
::4M113
g33D+Frc|j\|jd|jd|jd|jd|jd|j\tjfd}|j	||j\|j|y)Nrrarrrc34K	tj}t|jj}tj|t|fd}tjy#d}tjwxYwwrr)rrUrrrs  rrzMMappingTestCase.test_weak_values_destroy_while_iterating.<locals>.testcontextsj	
$**,'RKKM%%

l"



r)rrrrrrrs  @@r(test_weak_values_destroy_while_iteratingz8MappingTestCase.test_weak_values_destroy_while_iteratings224
g//gvF//gwG//gxH//gO//g{K224
g		"	"
	
#
		
::4M224
g33D+Frcrtd}tj|di}|j||dyNrilr&rerrrrgrrs   r#test_make_weak_keyed_dict_from_dictz3MappingTestCase.test_make_weak_keyed_dict_from_dicts31I((!C1a#&rctd}tj|di}tj|}|j||dyrrrrgrrdict2s    r.test_make_weak_keyed_dict_from_weak_keyed_dictz>MappingTestCase.test_make_weak_keyed_dict_from_weak_keyed_dictsC1I((!C1))$/a#&rctj}tttt|j}|D]}|j||<||fSr)rerr
mapr&rrr)rrrrrgs    rrz$MappingTestCase.make_weak_keyed_dict	sP((*s65#456	AeeDG	W}rcrtd}tjd|i}|j|d|yrr&rerqrrs   r$test_make_weak_valued_dict_from_dictz4MappingTestCase.test_make_weak_valued_dict_from_dicts31I**C73cA&rctd}tjd|i}tj|}|j|d|yrrrs    r0test_make_weak_valued_dict_from_weak_valued_dictz@MappingTestCase.test_make_weak_valued_dict_from_weak_valued_dictsC1I**C73++D1cA&rc|jttjj|jttjii|jttjddtd}dD]X}tjdi||i}|j
t|j|g|j
|||Zy)Nr
rrrrr2iterable)	rrrerqr*r&rr
r)rrgkwrs    rtest_make_weak_valued_dict_miscz/MappingTestCase.test_make_weak_valued_dict_miscs)W%@%@%I%IJ)W%@%@"bI)W%@%@"bI1I5	'B++6r1g6AT!&&(^bT2QrUA&	'rctj}tttt|j}|D]}|||j<||fSr)rerqr
rr&rrr)rs    rrz%MappingTestCase.make_weak_valued_dict'sP**,s65#456	ADK	W}rc|}|||<|||<|jt|d|j\}}|jt|d||ur|j||n|j|||j\}}|jt|d||ur|j||y|j||y)NrrNr)rrrr~)	rklasskey1value1key2value2weakdictrUrs	         r
check_popitemzMappingTestCase.check_popitem.s7X*!1X*9MM!V$MM!V$!1X*9MM!V$MM!V$rcj|jtjdtdty)Nrr)rrerqr
rs rtest_weak_valued_dict_popitemz-MappingTestCase.test_weak_valued_dict_popitem@s%766!13	5rcj|jtjtdtdyNzvalue 1zvalue 2)rrerr
rs rtest_weak_keyed_dict_popitemz,MappingTestCase.test_weak_keyed_dict_popitemDs%7443	13		;rc|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~rsget)rrkeyrrrrgs       rcheck_setdefaultz MappingTestCase.check_setdefaultHsE	F7V,

a 

c8$

hll3'0

hsmV,V,

a 

c8$

hll3'0

hsmV,rch|jtjdtty)Nr)rrerqr
rs r test_weak_valued_dict_setdefaultz0MappingTestCase.test_weak_valued_dict_setdefaultYs#g99#QS!#	/rcX|jtjtddyr)rrerr
rs rtest_weak_keyed_dict_setdefaultz/MappingTestCase.test_weak_keyed_dict_setdefault]s!g77c9i	9rc |}|j||jt|t||jD]\}|j	||d|j|}|j
||||j
||j|^|jD]P}|j	||d||}|j
||||j
||j|Ry)Nz(mysterious new key appeared in weak dictz%original key disappeared in weak dict)rrrrrsrr~)rrrrrrUrs      rcheck_updatezMappingTestCase.check_updateas
7XD	2	.AMM!T#MNAMM!Xa[)MM!X\\!_-		.
	.AMM!X'NOQAMM!Xa[)MM!X\\!_-		.rc
|jtjdtdttti|j	t
tjjtj}|j	t
|jii|j	t
|jdd|jt|jgtd}dD]i}tj}|jdi||i|jt|j|g|j|||ky)NrNr,r
rr)rrerqr
rrrrr
rr&)rrrgrs    rtest_weak_valued_dict_updatez,MappingTestCase.test_weak_valued_dict_updatets'55ac3QS!#6	8	
)W%@%@%G%GH''))QXXr26)QXXr26affh,1I5	'B++-AAHHAwT!&&(^bT2QrUA&		'rct}t}t}tjd|i}tj||d}|j}||d}d|fd|fg}||z}	|j	t|	t|t|z|j
t|	tj||z}|j	||	||z}
|j	t|
t||z|j
t|
tj||z}|j	||
|j}||z}|j	t|t|t|z|j
t|tj||z}|j	t||t|z|j
t|tj~|jd|	|jd|
|jd||jd|y)NrNrNr)rNrr>rr)	r
rerqrrrrr~rr)
rr,rrwvd1wvd2wvd3d1pairstmp1tmp2tmp3tmp4s
             r test_weak_valued_union_operatorsz0MappingTestCase.test_weak_valued_union_operatorss
C
C
C**Aq62**qQ<8yy{q\Q!Q d{dT$Z$t*%<=

d4j'"="=>t$bydT$Z"_5

d4j'"="=>
t$yy{
dT$Z$u+%=>

d4j'"="=>DydR$t*_5

d4j'"="=>
D!D!D!D!rc	|jtjtdtdtdiy)NrNrr)rrerr
rs rtest_weak_keyed_dict_updatez+MappingTestCase.test_weak_keyed_dict_updates.'33313132	4rc2tj}td}td}d||<d||<|jt	|d||=|jt	|d|jt|j
|gy)N12	somethingrrN)rerr&rrr
rrro1rs    rtest_weak_keyed_delitemz'MappingTestCase.test_weak_keyed_delitems%%'
C[
C[""Q#
bEQ#affh".rc*t}t}t}tj|d|di}tj|d|di}|j}|d|di}|df|dfg}||z}	|j	t|	t|t|z|j
t|	tj||z}|j	||	||z}
|j	t|
t||z|j
t|
tj||z}|j	||
|j}||z}|j	t|t|t|z|j
t|tj||z}|j	t||t|z|j
t|tj~|jd|	j|jd|
j|jd|j|jd|jy)	NrNrrr:56)
r
rerrrrrr~rrr)
rrro3wkd1wkd2wkd3rrrrrrs
             rtest_weak_keyed_union_operatorsz/MappingTestCase.test_weak_keyed_union_operatorss
S
S
S(("aQ8(("aQ8yy{#r3
a2q'"d{dT$Z$t*%<=

d4j'";";<t$bydT$Z"_5

d4j'";";<
t$yy{
dT$Z$u+%=>

d4j'";";<DydR$t*_5

d4j'";";<DKKM*DKKM*DKKM*DKKM*rc6tj}td}td}||d<||d<|jt	|d|d=|jt	|d|jt|j
d|fgy)Nrrrzsomething elserrN)rerqr&rrr
rars    rtest_weak_valued_delitemz(MappingTestCase.test_weak_valued_delitems'')
C[
C[+ 
Q#
kNQ#aggi,<b+A*BCrctj}td}|jt|j
||jt|j||jt|j
d|jt|jd|jt|jddy)Nr
)	rerr&rrrrr__setitem__)rrrgs   rtest_weak_keyed_bad_delitemz+MappingTestCase.test_weak_keyed_bad_delitems%%'3K	
(AMM15(AMM15	
)Q]]R8)Q]]R8)Q]]R<rctj}dGfddt}tdDcgc]
}||c}D]}|j||<~t|j
jdd}D]
}|dz
}||=t|jt|d|j|dycc}w)	NFc&eZdZdZdZfdZy)<MappingTestCase.test_weak_keyed_cascading_deletes.<locals>.Cc||_yrr)rrfs  rr*zEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__init__s	
rc,t|jSr)r7rrs rr8zEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__hash__sDJJ''rc@rd=|j|jk(S)Nrr)rr2mutateobjss  rr3zCMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__eq__s"RzzU[[00rN)rrrr*r8r3)rrsrr
rs

(
1rr
r:TrrNr)rerrrrr
rreverserrr)rrr
rfrgcountrrs      @@r!test_weak_keyed_cascading_deletesz1MappingTestCase.test_weak_keyed_cascading_deletess

%%'
	1
	1$Ah'!'	A77AaD	
AFFH~	
	AQJE!		Q#"1(sCcbtj}|jt|dy)Nz<WeakValueDictionary at 0x.*>)rerqassertRegexrfrrrs  rtest_make_weak_valued_dict_reprz/MappingTestCase.test_make_weak_valued_dict_repr%s%**,d%DErcbtj}|jt|dy)Nz<WeakKeyDictionary at 0x.*>)rerrrfr s  rtest_make_weak_keyed_dict_reprz.MappingTestCase.test_make_weak_keyed_dict_repr)s%((*d%BCrctj}t5tdD]/}|j	dt}|j
|d~1	dddy#1swYyxYwNir)rerqr`rrrAr	rrrfrs    r$test_threaded_weak_valued_setdefaultz4MappingTestCase.test_threaded_weak_valued_setdefault-sc'')

 	6]
LLXZ0  D)
			s>A''A0ctj}t5tdD]3}t	|d<|jdd}|j
|d5	dddy#1swYyxYwr%)rerqr`rrArr	r&s    rtest_threaded_weak_valued_popz-MappingTestCase.test_threaded_weak_valued_pop6sh'')

 	*6]
* 
"EE"bM  D)
*	*	*	*sAA++A4ctj}t5tdD].}t	}||d<|jt
|dd}0	dddy#1swYyxYw)Ni@
rrN)rerqr`rrArr)rrrfrgs    r%test_threaded_weak_valued_consistencyz5MappingTestCase.test_threaded_weak_valued_consistency?si
'')

 	6]
J"  Q+
			s=A&&A/cg}Gdd}Gdd}fd}d}|j|tjtjf|}g}	g}
t	dD];}||||}
}|	j||
j|
|
||<~~
=t
j|||f}|tjurt
j||	f}nt
j||
f}|j|j|j|j|r|d	y)
NceZdZdZy)?MappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyKeyc||_yrctrrr1s  rr*zHMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyKey.__init__R	rNrDr
rrDummyKeyr.Qrprr4ceZdZdZy)AMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyValuec||_yrr0r2s  rr*zJMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyValue.__init__Vr3rNrDr
rr
DummyValuer6Urprr8c	durtj|}y|j}y#t$r}|j|Yd}~yd}~wwxYwr)rdeepcopyr[r)rexcrIexr:s    r	dict_copyz@MappingTestCase.check_threaded_weak_dict_copy.<locals>.dict_copyYsF
t#

a(AA


2
s..	AA

Acd}|rXtjdt|dz
}|dz
}|j||dzdk(rt	j
|rWyy)NrrNi')randomrandintrrrUrV)lstgc_ctrrfs   rpop_and_collectzFMappingTestCase.check_threaded_weak_dict_copy.<locals>.pop_and_collectbsPFNN1c#hl3!
E>Q&JJLrip)rYrr)
rsrerrqrrr[r\r]r^)rtype_r:r;r4r8r=rCrrrrfrUrt_copy	t_collects  `             rcheck_threaded_weak_dict_copyz-MappingTestCase.check_threaded_weak_dict_copyLs+						!	


eg779T9TUVGu	AA;
1
qAKKNMM!AaD
	!!!SCG---!((tgNI!((viPI
a&LrcD|jtjdyNFrGrerrs r test_threaded_weak_key_dict_copyz0MappingTestCase.test_threaded_weak_key_dict_copys	
**7+D+DeLrcpucD|jtjdyrrJrs r$test_threaded_weak_key_dict_deepcopyz4MappingTestCase.test_threaded_weak_key_dict_deepcopys
	
**7+D+DdKrcD|jtjdyrIrGrerqrs r"test_threaded_weak_value_dict_copyz2MappingTestCase.test_threaded_weak_value_dict_copys	
**7+F+FNrcD|jtjdyrrPrs r&test_threaded_weak_value_dict_deepcopyz6MappingTestCase.test_threaded_weak_value_dict_deepcopys
	
**7+F+FMrcvtj}|j|jjyr)rerqr_remove__closure__)rrs  rtest_remove_closurez#MappingTestCase.test_remove_closures('')!))//0rN):rrrrrirnrrryr|rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr!r#rrequires_working_threadingr'r)r+rGrKrrequires_resourcerNrQrSrrWr
rrrXrXsE (KM)0IK9@#<+6+2>4+'2'BG4G2'
''
'
'%$5;-"/9.&'"#"J4	/#+J	D=,#\FD100231002*3*1002
3
;z1002M3M
1002Wu%L&3L
1002O3O
1002Wu%N&3N

11rrX)
mapping_testsc^eZdZdZedededdZejZdZ	y)WeakValueDictionaryTestCasez?Check that WeakValueDictionary conforms to the mapping protocolrNrr)rrkey3c6|jjSr)!_WeakValueDictionaryTestCase__refrrs r
_referencez&WeakValueDictionaryTestCase._referencezz  rN)
rrr__doc__r&r_rerq	type2testr`r
rrr\r\s-I1IfQiq	BE++I!rr\cbeZdZdZeddeddeddiZejZdZ	y	)
WeakKeyDictionaryTestCasez=Check that WeakKeyDictionary conforms to the mapping protocolrrNrrr]rc6|jjSr)_WeakKeyDictionaryTestCase__refrrs rr`z$WeakKeyDictionaryTestCase._referencerarN)
rrrrbr&rgrerrcr`r
rrreres3G
F^Avf~aBE))I!rrecTeZdZGddZdZdZdZdZdZe	dZ
d	Zy
)FinalizeTestCaseceZdZy)FinalizeTestCase.ANrr
rrr*rksrr*chtjjdk7rtjyy)Ncpython)sysimplementationnamerrrs r_collect_if_necessaryz&FinalizeTestCase._collect_if_necessarys'""i/ 0rcfd}|j}gtj||ddd}|j|jd|j|j||dddif|j|d	|j|d|j|d|j|jd|j|j
d|j|jd
|jd	ggtj||ddd}|j|j||dif|j|j
||dif|j|d|j|d|j|jd|j|j
d|j|jd
|jggtj||ddd}~|j|j|d|j|d|j|jd|j|j
d|j|jd
|jd	gy)
NcBj||z|z||z|zSrr)rrrress   raddz+FinalizeTestCase.test_finalize.<locals>.adds%JJq1uqy!q519rC+Y)rT)rvrwrF)rvrwrx)rrr)r*refinalizeralivepeekdetachrq)rrur,r rts    @r
test_finalizezFinalizeTestCase.test_finalizesb	
FFHQRr2$'AsGc"X#>?c"d#d#4(T*%(se$QRR0AsJ#;<aj"%=>d#d#4(T*%(b!QrR26
""$d#d#4(T*%(se$rc	fd}|j}gtj||dddd}|j|j	||ddddf||jddddfg|jt5tj||dddd|jt5tj||d	ddd|jttj||jttjy#1swYxYw#1swY_xYw)
Nc,j||fyrr)rkwargsrts  rfinz-FinalizeTestCase.test_arg_errors.<locals>.finsJJf~&rrNrrr:)funcrur)rr))rurr))r*rerzrr|rr)rrr,r rts    @rtest_arg_errorsz FinalizeTestCase.test_arg_errorss	'
FFHQQq9AsFQq4I#JK	1(=>?@


y
)	1QSa0	1


y
)	5!4	5)W%5%5q9)W%5%56	1	1	5	5sD0D<0D9<Ec|j}g}tj||jd}tj||jd}tj||jd}tj||jd}tj||jd}~~|j	|j
|j	|j
|j	|j
|j	|j
|j|j
||jd||j|j
|jd||jd~|j|j|j
|jd	|gd
}|j||y)Nf1f2f3f4f5r*Br
r)r*rrr
rrrr)
r*rerzrrr{r}rrqr)	rr,rtrrrrrexpecteds	         r
test_orderzFinalizeTestCase.test_ordersoFFH


aT
2


aT
2


aT
2


aT
2


aT
2
!!!		$"


3
"

3


3
""$	
"

3
?h'rcGddtj}|j}gfd}|||}tj|}tj|}~~|j	||j	|~|j|j
||j
||jdgy)NceZdZy)4FinalizeTestCase.test_all_freed.<locals>.MyFinalizerNrr
rrMyFinalizerr)rMrrc(jdy)N{r)rtsrrPz1FinalizeTestCase.test_all_freed.<locals>.callback.sJJsOrr)rerzr*rOrrqrr)rrr,rPr wr_callbackwr_frts       @rtest_all_freedzFinalizeTestCase.test_all_freed's	'**	
FFH	8$kk(+{{1~a[]+TV$
""$+-($&!se$rcpfd}tjtdt}tjtdt}tj|}tjtdt}|jdk(sJd|_|jdk(sJ|jdk(sJy)Nc\tjtd}tdddzy)Ng1f3 errorrNr)rerzprint)rclss rerrorz,FinalizeTestCase.run_in_child.<locals>.errorBs(!!#ud3B*
aCrrrrTF)rerzr_global_varatexit)rrrrrrs`     rrun_in_childzFinalizeTestCase.run_in_child@s	

c5$
<


c5$
<


c5
)


c5$
<yyD  	yyD  yyD   rcd}tjd|\}}}|jdj}|j	|gd|jd|vy)NzNfrom test.test_weakref import FinalizeTestCase;FinalizeTestCase.run_in_child()z-cascii)z	f4 foobarrrz	f1 foobarsZeroDivisionError)rassert_python_okdecode
splitlinesrr)rprogrcouterrs     rtest_atexitzFinalizeTestCase.test_atexitTs[2$55dDACjj!,,.JK,34rN)rrrr*rqr~rrrclassmethodrrr
rrriris@

!
'%R7&%(N%2!!&5rriceZdZdZy)ModuleTestCasecdD]k}tt|}|dk7r|j|jd|j|j||j|j
|my)N)r4	ProxyTyperr2WeakSetrrqrre)rrerrrr)rrprus   r
test_nameszModuleTestCase.test_names^sfZ	5D'4(Cy   ;S\\40S--t4
	5rN)rrrrr
rrrr]s5rra 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


libreftestcL|jtj|Sr)addTestdoctestDocTestSuite)loadertestspatterns   r
load_testsrs	MM'&&()Lr__main__)g-C6?).rUrnrunittestrrerrrr[rSr?testrtest.supportrrrrrrr
rr"r$r&rATestCaserFrr`rbrr+rXrZBasicTestMappingProtocolr\rerirr__test__rrmainr
rr<module>rsg	

1#)


*
x  *a
a
He+(e+PF.**F.Rj1hj1Z!-"H"H!!
 F F!`5x((`5F5X&&5T
l
:&
zHMMOr