mò &U²Ic@sedkZdkZdkZdkZdkZdklZdfd„ƒYZdfd„ƒYZd„Z d„Z d„Z d ei fd „ƒYZ d e fd „ƒYZd ei fd„ƒYZdfd„ƒYZde fd„ƒYZdklZdeifd„ƒYZdeifd„ƒYZdZhde() should return original object if live(tfactoryRRRRRR to2(RR)RRR*((RRns  cCs`d|_|ƒ}ti||iƒ}~|i|idjdƒ|i|ƒdjdƒdS(Niis(callback did not properly set 'cbcalled's3ref2 should be dead after deleting object reference( RRR)RRRRRR (RR)RR((RRws  cCsÝtƒ}ti|ƒ}ti|ƒ}ti|ƒ}|i||jdƒtƒ}ti|ƒ}ti|ƒ}ti|ƒ}|i||jdƒ|iti |ƒdjdƒ~|iti |ƒdjdƒdS(Ns1reference object w/out callback should be re-usediswrong weak ref count for objectis4wrong weak ref count for object after deleting proxy( RRRRRR#RRRtgetweakrefcount(RRRRR#((Rttest_ref_reuses"  cCsPtƒ}ti|ƒ}ti|ƒ}ti|ƒ}|i||jdƒdS(Ns4proxy object w/out callback should have been re-used( RRRR#tproxy1Rtproxy2RR(RR.R-RR((Rttest_proxy_reuse—s  cCs·tƒ}|i|ti|ƒƒtiƒ}ti|ƒ}|i |dƒ|i dƒ|i t |ƒdƒ|i |dƒddg|(|i t |ƒdƒ|i t |ƒdƒ|i d|jdƒd|d<|i |ddƒ|i |ddƒti|ƒ}ti|ƒ}|i ||ƒtitd ƒƒ}ti|ƒ}|i ||ƒ|i |d|dƒ|i |d |d ƒ|i |dd!|dd!ƒdS( Ns(proxy for empty UserList should be falsei is+proxy for non-empty UserList should be trueiis,proxy didn't support __contains__() properlyii (RRRt check_proxyRR#tUserListtLtptfailIftappendt assertEqualtlent failUnlesstL2tp2trangetL3tp3(RR:R=R3R2RR9R<((Rttest_basic_proxyŸs2     cCs|itiƒdS(N(Rtcheck_shared_without_callbackRR(R((Rt test_shared_ref_without_callbackÄscCs|itiƒdS(N(RR?RR#(R((Rt"test_shared_proxy_without_callbackÇscCsætdƒ}||dƒ}||dƒ}|i||jdƒ~~||ƒ}||dƒ}|i||jdƒ~~||ƒ}||ƒ}|i||jdƒ~~||dƒ}||ƒ}|i||jdƒdS(Nis%both callbacks were None in the C APIs&callbacks were NULL, None in the C APIs%both callbacks were NULL in the C APIs&callbacks were None, NULL in the C API(tObjectRtmakerefR tp1R:RR(RRCR:RDR((RR?Ês      cCs½tƒ}ti|ƒ}|i||ƒ|it|ƒti jdƒ|dƒ|i|i djdƒ|ddƒ|i|i djdƒ|i t |ƒ|i t |dddƒdS( Nsproxy is not of callable types twinkies!s1call through proxy not passed through to originalRsSplat.iii( RRRR#RRR0RttypetCallableProxyTypeRR%t TypeError(RRR((Rttest_callable_proxyÜs   cCsÌd|_|i|idjdƒd|_|i|idjdƒ|`|it|dƒ dƒd|_|i|idjdƒd|_|i|idjdƒ|`|it|dƒ d ƒdS( Nis)proxy does not reflect attribute additionis-proxy does not reflect attribute modificationtfoos(proxy does not reflect attribute removals4object does not reflect attribute addition via proxys8object does not reflect attribute modification via proxys3object does not reflect attribute removal via proxy(RRIRRR#thasattr(RRR#((RR0ñs$    cCsIdfd„ƒY}|ƒ}ti|ƒ}|d=|i|idƒdS(NtFoocBstZdZd„ZRS(NcCs ||_dS(N(taccessorRtresult(RRL((Rt __delitem__ s(RRR RMRN(((RRK si(RKtgRR#R RR6RM(RRKROR ((Rttest_proxy_deletions  cCsHdtfd„ƒY}|ƒ}|itti|ƒƒt|ƒƒdS(NtListcBstZRS(N(RR(((RRQs(tlistRQtlystRR6R'RR#(RRQRS((Rttest_proxy_bools cCsÝtƒ}ti|ƒ}ti||iƒ}|iti |ƒdjdƒti |ƒ}ti ||iƒ}|iti |ƒdjdƒ~~~~|iti |ƒdjdƒ|iti dƒdjdƒdS(Nis*got wrong number of weak reference objectsiisAweak reference objects not unlinked from referent when discarded.is2got wrong number of weak reference objects for int( RRRRRRRRRR+R#R-R.(RR.R-RRR((Rttest_getweakrefcounts  cCsõtƒ}ti||iƒ}ti||iƒ}~|iti |ƒ|gjdƒtƒ}ti||iƒ}ti||iƒ}~|iti |ƒ|gjdƒ~|iti |ƒgjdƒ|iti dƒgjdƒdS(Nslist of refs does not matchslist of refs not clearedis#list of refs does not match for int( RRRRRRRRRt getweakrefs(RRRR((Rttest_getweakrefs-s"  cCscdtfd„ƒY}|dƒ}ti|ƒ}|i|ddjƒ|id|djƒdS(NtFcBstZRS(N(RR(((RRXEsf2.0f1.0f3.0(tfloatRXR RR#R3RR(RRXR R3((Rttest_newstyle_number_opsDs  c sšdtfd„ƒY‰h‰‡d†‰‡‡‡d†}y |ƒWnˆj onX|idƒy |ƒWnˆj onX|idƒdS(Nt BogusErrorcBstZRS(N(RR(((RR[Oscs ˆ|=dS(N(tdatatk(R](R\(RtremoveRscs)d„}dˆti|ˆƒ<ˆ‚dS(NcCsfS(N((((RtUs(R R R\RRR^R[(R (R[R^R\(Rt encapsulateTs sexception not properly restored(t ExceptionR[R\R^R`Rtfail(RR[R\R^R`((R[R\R^Rttest_callbacks_protectedLs    cs’dk‰dtfd„ƒY}|ƒ}ti|‡d†ƒ}~~|ƒ}|ƒ|_ti|i‡d†ƒ}|ƒ}||_~~dS(NRcBstZRS(N(RR(((RRrscs ˆiƒS(N(tgctcollect(tignore(Rd(RR_vscs ˆiƒS(N(RdRe(Rf(Rd(RR_~s( RdR RR!RRRtc1titc2(RR!RRdRRiRg((RdRttest_sf_bug_840829es       cCsvdk}dtfd„ƒY}dtfd„ƒY}|ƒ}||_ti||iƒ|_~~~|i ƒdS(NtJcBstZRS(N(RR(((RRkstIIcBstZd„ZRS(NcCs |idS(N(RRk(RRf((Rt acallback”s(RRRm(((RRl“s( RdR RkRltIRRRmRRe(RRnRkRlRd((Rttest_callback_in_cycle_1s    cCssdk}dtfd„ƒY}dfd„ƒY}|ƒ}||_ti||iƒ|_~~~|i ƒdS(NRkcBstZRS(N(RR(((RRkÄsRlcBstZd„ZRS(NcCs |idS(N(RRk(RRf((RRmÈs(RRRm(((RRlÇs( RdR RkRlRnRRRmRRe(RRnRkRlRd((Rttest_callback_in_cycle_2µs    cCsmdk}dfd„ƒY}|ƒ|ƒ}}||_||_ti||iƒ|_~~|i ƒdS(NRcBstZd„ZRS(NcCs|i|i|idS(N(RtmeRgR(RRf((RtcbÜs(RRRr(((RRÛs( RdRRgRiRqRRRrRRe(RRRdRiRg((Rttest_callback_in_cycle_3Òs   cCs‰dk}dtfd„ƒY}dfd„ƒY}|ƒ|ƒ}}||_||_ti||i ƒ|_ ~~~~|i ƒdS(NRcBstZd„ZRS(NcCs|i|i|idS(N(RRqRgR(RRf((RRrõs(RRRr(((RRôstDcBstZRS(N(RR(((RRtús( RdR RRtRgRiRqRRRrRRe(RRRtRdRiRg((Rttest_callback_in_cycle_4ês    cs dk}g‰dtf‡d†ƒY}|dƒ|dƒ}}||_||_ti||i ƒ|_ ti||i ƒ|_ ‡d†}ti||ƒ}~~~|i ˆgƒ|iƒ|i ˆdgƒ|i |ƒdƒˆ2|iƒ|i ˆgƒdS(NRcstZd„Z‡d†ZRS(NcCs ||_dS(N(tvalueRt attribute(RRv((Rt__init__scsˆi|iƒdS(N(talistR5RR!(RRf(Ry(RRms(RRRxRm((Ry(RRs iicsˆidƒdS(Ns C went away(RyR5(Rf(Ry(Rt C_went_away ss C went away(RdRyR RRgRiR!RRRmRRzRR6ReR (RRRyRdRRzRiRg((RyRt#test_callback_in_cycle_resurrections$       c s%dk}g‰‡d†}dtf‡d†ƒY}|ƒ|ƒ}}||_||_|i}t i ||ƒ|_ t i ||iƒ|_ t i ||ƒ}|i|ƒ|jƒ~~~~|iˆgƒ|iƒ|iˆdgƒ|i|ƒdƒˆ2|iƒ|iˆgƒdS(NcsˆidƒdS(Nssafe_callback called(RyR5(Rf(Ry(Rt safe_callback9sRcstZ‡d†ZRS(NcsˆidƒdS(Ns cb called(RyR5(RRf(Ry(RRr=s(RRRr((Ry(RR<sssafe_callback called(RdRyR|R RR!tdtotherRrRRRRt external_wrRRR6ReR ( RRR}RyR!RRdRR|((RyRttest_callbacks_on_callback4s(        cCs|itiƒdS(N(Rtcheck_gc_during_creationRR(R((Rttest_gc_during_ref_creationZscCs|itiƒdS(N(RRRR#(R((Rttest_gc_during_proxy_creation]scCs¡tiƒ}tidddƒtiƒdfd„ƒY}d„}|ƒ}|ƒ}||_||ƒ|_ z|ƒ}t i ||ƒWdti|ŒXdS(NitAcBstZRS(N(RR(((RR„dscGsdS(N((targs((RRgs( Rdt get_thresholdt thresholdst set_thresholdReR„Rt referencedtaRCRRR(RRCR„RŠR‰RR‡((RR`s       (!RRRRRR"R(RRR,R/R>R@RAR?RHR0RPRTRURWRZRcRjRoRpRsRuR{R€R‚RƒR(((RR*s>       %           ( (    . &  tSubclassableWeakrefTestCasecBs,tZd„Zd„Zd„Zd„ZRS(Ncs dtif‡d†ƒY‰tdƒ}ˆ|ddƒ}|i|ƒ|jƒ|i|iƒ|i |i dƒ~|i|ƒdjƒ|i|iƒdS(NtMyRefcs&tZdd‡d†Z‡d†ZRS(Ni*cs&||_tˆ|ƒi||ƒdS(N(RvRtsuperRŒRxtobR(RRŽRRv(RŒ(RRx~s cst|_tˆ|ƒiƒS(N(tTrueRtcalledRRŒR (R(RŒ(RR s (RRR RxR ((RŒ(RRŒ}sRIRvi( RRRŒRBRtmrRRRR6RvR (RRRŒR‘((RŒRttest_subclass_refs|s cCsdtifd„ƒY}tdƒ}||ƒ}ti|ƒ}|i||j ƒ|i ti |ƒ||gƒ|i ti |ƒdƒ||ƒ}|i ti |ƒdƒti |ƒ}|i t|ƒdƒ|i||djƒ|i||djƒ|i||djƒdS(NRŒcBstZRS(N(RR(((RRŒŽsi*iiii(RRRŒRBRtr1tr2RRR6RVR+tr3trefsR7(RR“R”R•RRŒR–((Rt-test_subclass_refs_dont_replace_standard_refss   cCsdtifd„ƒY}tdƒ}||tƒ}||tƒ}|i ||j ƒti |ƒ}|i ||jƒ|i ||jƒdS(NRŒcBstZRS(N(RR(((RRŒŸsi*( RRRŒRBRtidR“tstrR”RRRVR–(RR“R”RRŒR–((Rt*test_subclass_refs_dont_conflate_callbacksžs cCsdtifd„ƒY}tdƒ}||dddƒ}|i|i dƒ|i|i dƒ|i|i ƒdƒ|i t |dƒƒdS(NRŒcBs)tZdZd„Zd„Zd„ZRS(Ntslot1tslot2cCstii|||ƒS(N(RRt__new__RERŽR(RERŽRR›Rœ((RR¬scCs||_||_dS(N(R›RRœ(RRŽRR›Rœ((RRx®s cCs|i|iS(N(RR›Rœ(R((Rtmeth±s(sslot1sslot2(RRt __slots__RRxRž(((RRŒªs  i*tabctdeftabcdeft__dict__(RRRŒRBRR trRR6R›RœRžR4RJ(RRR¤RŒ((Rttest_subclass_refs_with_slots©s (RRR’R—RšR¥(((RR‹zs   RBcBstZd„Zd„ZRS(NcCs ||_dS(N(targR(RR¦((RRx¼scCs d|iS(Ns (RR¦(R((Rt__repr__¾s(RRRxR§(((RRB»s tMappingTestCasecBsÔtZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(Ni cCsb|iƒ\}}xN|D]F}|iti|ƒdjd|ƒ|i|||ijdƒqW|i ƒ}|i ƒi ƒ}|i ƒ|i ƒ|i||jdƒ~~|it|ƒ|ijƒ|d=|it|ƒ|idjdƒ~~|it|ƒdjdƒtiƒ}|it|idƒtƒ|d<|it|idƒdS( Nis&wrong number of weak references to %r!s#wrong object returned by weak dict!s/cloning of weak-valued dictionary did not work!is/deleting object did not cause dictionary updates0deleting the values did not clear the dictionaryi(Rtmake_weak_valued_dicttdicttobjectsRRRR+R¦titemstitems1tcopytitems2tsortR7tCOUNTtWeakValueDictionaryR%tKeyErrort __getitem__R(RR¯RR­R«Rª((Rttest_weak_valuesÆs2       cCsX|iƒ\}}xN|D]F}|iti|ƒdjd|ƒ|i|i||jdƒqW|i ƒ}|i ƒi ƒ}|it |ƒt |ƒjdƒ~~|it|ƒ|ijƒ|d=|it|ƒ|idjdƒ~~|it|ƒdjdƒtdƒ}d ||<|i|i|ƒƒ|i|id ƒ ƒdS( Nis&wrong number of weak references to %r!s#wrong object returned by weak dict!s.cloning of weak-keyed dictionary did not work!is/deleting object did not cause dictionary updates.deleting the keys did not clear the dictionaryi*s$What is the meaning of the universe?i"(Rtmake_weak_keyed_dictRªR«RRRR+R¦R¬R­R®R¯tsetR7R±RBthas_key(RR¯RR­R«Rª((Rttest_weak_keysäs.     cCs#|iƒ\}}|i|ƒdS(N(RR¶RªR«t check_iters(RR«Rª((Rttest_weak_keyed_itersscCs#|iƒ\}}|i|ƒdS(N(RR©RªR«Rº(RR«Rª((Rttest_weak_valued_itersscCs.|iƒ}x!|iƒD]}|i|ƒqW|it|ƒdjdƒ|iƒ}x|D]}|i|ƒq_W|it|ƒdjdƒ|iƒ}x!|i ƒD]}|i|ƒq«W|it|ƒdjdƒ|i ƒ}x!|i ƒD]}|i|ƒq÷W|it|ƒdjdƒdS(Nis#iteritems() did not touch all itemss!__iter__() did not touch all keyss!iterkeys() did not touch all keyss%itervalues() did not touch all values(RªR¬t iteritemstitemR^RRR7tkeysR]titerkeystvaluest itervaluestv(RRªR¿R¬R¾RÃRÁR]((RRºs*       cCs?tdƒ}tih|d<ƒ}|i||djƒdS(Niil(RBRRtWeakKeyDictionaryRªRR(RRªR((Rt#test_make_weak_keyed_dict_from_dict"s cCsNtdƒ}tih|d<ƒ}ti|ƒ}|i||djƒdS(Niil(RBRRRÄRªtdict2RR(RRÆRRª((Rt.test_make_weak_keyed_dict_from_weak_keyed_dict's cCsLtiƒ}ttt|iƒƒ}x|D]}|i |||itihdtƒ<dtƒ<tƒtƒ<ƒdS(NiRŠ(RRÚRR²R(R((Rttest_weak_valued_dict_updateƒs cCs;|itihtƒd<tƒd<tƒd<ƒdS(Niii(RRÚRRÄR(R((Rttest_weak_keyed_dict_update‡s cCs‘tiƒ}tdƒ}tdƒ}d||>> 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 >>> print r() None >>> import weakref >>> class ExtendedRef(weakref.ref): ... def __init__(self, ob, callback=None, **annotations): ... super(ExtendedRef, self).__init__(ob, callback) ... self.__counter = 0 ... for k, v in annotations.iteritems(): ... 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(ExtendedRef, self).__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 >>> try: ... id2obj(a_id) ... except KeyError: ... print 'OK' ... else: ... print 'WeakValueDictionary error' OK t libreftestcCs.tittttƒtitit ƒdS(N( t test_supportt run_unittestRR¨RïRõt run_doctesttsystmodulesR(((Rt test_mainAs  t__main__(RdRûtunittestR1RttestRøRRR R RtTestCaseRRR‹RBR¨t mapping_teststBasicTestMappingProtocolRïRõR÷t__test__RýR(RøRR÷RÿRdR RBRR1RýRïRRûRRR‹RRõRR¨R R((Rt?s4          ÿÿRAÿ S