ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ ;Pc@sdfdYZdefdYZdefdYZdefdYZdfd YZd Zed ad S( tHorizoncBseZdZdZRS(cCs||_|j|_|jj|_|j|_|jjjj|_|jj|_t|j|jdgdi|j |jd|jj |j |j j |jj|j|_dS(Ni(((tmodt _hiding_tag_tretsetthvt_roottsystexc_infotisotstrt__dict__theaptentertgctcollecttheapycRt hv_horizon(tselfR((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt__init__s   '  cCs1|j|jj|jj|jj}|S(N(RRtnewsRR RR (Rtr((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRs-(t__name__t __module__RR(((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRs t ClearCallbackcBs eZdZdZdZRS(tcallbackcCs ||_dS(N(R(RR((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRscCs(|jdk r|j|ndGHdS(Ns No callback(RtNone(Rtwr((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt__call__s(R(RRt __slots__RR(((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRs t Gchook_typecBseZdZdZRS(txt __weakref__tcbcCs ||_dS(N(R(tg((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyR#s(RRR (RRRR(((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyR!stObservationListcBseZdZdZRS(RcCstj||||_dS(N(tlistRR(Rtiterablet hiding_tag((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyR(s(R(RRRR(((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyR"&st _GLUECLAMP_c BseZd@ZdAZdBZeZeZdZgZ dCZ dZ dZ dZ dZdZdZdZdZdZdZdZdZd Zd!Zd"Zd#Zd$Zd%Zd&Zd'Zd(Zd)Z d*Z!d+Z"d,Z#d-Z$d.Z%d/Z&dd0Z'dd1Z(d2Z)d3Z*d4Z+d5Z,dDedDdDdDd6Z.dDed7Z/d8Z0d9Z1dEd:Z2d;Z3d<Z4d=Z5d>Z6d?Z7RS(Fs_parent.ImpSet:immnodesets_parent.ImpSet:immnodeset_unions_parent.ImpSet:mutnodesets_parent.ImpSet:NodeSets_parent.UniSet:nodeset_adapts_parent.UniSet:retsets_parent.Use:idsets_parent.Use:isos_parent.Use:Types_root:gcs _root:typestis_rg_update_alltreferrers_lockt_is_clear_drg_enabledRttargettis_hiding_calling_interpreteritimdomt referrers_gccCs |jS(N(t mutnodeset(R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt_get__clear_hookSscCs|j}yt|d}Wntk r:|jn_X|}|dkr]|jn<|jjj|dkrdGH|j|d|j _ ndS(Niis-GC hook object was referred to from somebody!( t _clear_hookR#t IndexErrort clear_setupRRRt getrefcounttclear_callbackR R(RtchRtc((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt clear_checkVs      cCs6|jjx|jD] }|qW|jdS(N(R0tcleart clear_methodsR2(RRtm((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyR4es  cCs]|j}|j|j}|j|j}||_|j|jjj ||dS(N( R0R8t gchook_typeRR4R taddRtweakreftref(RR5R6R ((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyR2ls     cCsgS(N((R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt_get_clear_methodstscCs|jj||jdS(N(R9tappendR7(RR:((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pytclear_register_methodwscs/jfd}j|S(Ncs#jrjrjndS(N(t is_sortedR)R8((tdrgR(sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt clear_drg~s (t nodegraphRA(RRD((RCRsC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt_get_dict_ownership|s  cCstS(N(R(R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt_get_gchook_typescCs|j|jjjjS(N(RR*Rtmodulestitems(R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt_get_heapdef_modulesscCsWg}xD|jD]9\}}yt|d}Wn qnX|j|qWt|S(Nt _NyHeapDefs_(theapdef_modulestgetattrR@ttuple(RtheapdefstnR:thd((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt _get_heapdefsscCs |jjS(N(t_parentR(R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt _get_heapyctcCs"|jd|jd|j}|S(NRR+(tnew_hvRR+(RR((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt_get_hvs cCs |jS(N(R.(R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt _get_noreferRUcCsgS(N((R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt_get_referrers_targetsRUcCs |j}|j|j|S(N(RERAt _clear_rg(Rtrg((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt_get_rgs cCs=|jr dS|j}|jr9|j|jjndS(N(R(R[RBR8tnorefer(RR[((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRZs    cCsdS(Ni((R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt_get_referrers_lockRUcCs |jjS(N(Rt RootState(R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt _get_rootRUcCs|jjjS(N(RStTarget(R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt _get_targetRUcCs|j||j_dS(N(tclear_retainersRtroot(RRd((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyt _set_roots cCsA|jd7_z|j|||SWd|jd8_XdS(Ni(R(tupdate_referrers(RtXtf((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pytcall_with_referrerss  cCs|jj|jjdS(s3G.clear_retainers() Clear the retainer graph V.rg. N(R[R8R](R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRcs cCs|j|fdS(sdominos(X) -> idset Return the dominos of a set of objects X. The dominos of X is the set of objects that are dominated by X, which is the objects that will become deallocated, directly or indirectly, when the objects in X are deallocated.i(t dominos_tuple(RRg((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pytdominossc Csg|D]}|j|^q}|jj}|j|jg}|j|}|||}tg|D]/}|j|||||||B^qkS(scV.dominos_tuple(X) -> tuple of idsets Return a tuple of dominos for the tuple of sets of objects X.(t nodeset_adaptRt reachablet immnodesetRdtimmnodeset_unionRNR( RRgRtD_tTtStDtWtDi((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRjs " cCs|j|fdS(sdomisize(X) -> int Return the dominated size of a set of objects X. The dominated size of X is the total size of memory that will become deallocated, directly or indirectly, when the objects in X are deallocated. See also: indisize.i(tdomisize_tuple(RRg((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pytdomisizescCs/tg|j|D]}|j|^qS(sk"V.domisize_tuple(X) -> tuple of ints Return a tuple of dominated sizes for the tuple of sets of objects X.(RNRjtindisize(RRgt dominos_i((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRvscCs|jjrd|j_n|jjdk r4|Sddl}y ddWn+|j\}}}|jjj}nXd|_|j ~~~||j_z |}Wdd|j_X|S(Niii( RR+Rt limitframeRRttb_frametf_backtlast_tracebackt exc_clear(RtfuncRttypetvaluet tracebackRztretval((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyR s$         cs_j}jfdjjjj|jgS(Ncs@jj}jjjj|dS(N(R8R;R<RR=R>(RR6(R RthoR(sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyR s  (R;R.R<RR=R>(RRR6((R RRRsC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pytgchooks   cCs|jj|jj|jj}|jj}|j||jd}|j|td}|j||jj j d}|j||jj j d}|j |}~~|r||j|jj|jj|jj|j|jjg|j}n|S(Ns!=(R Rt get_objectsRtcli_typetselectR;RRttypest FrameTypeR=t ReferenceTypeRtidsetRtHeapViewR_ROt reachable_xRntobservation_containers(RtrmatobjstcliR((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pytheapgs"    cCs|jj|jj|jj}|j|j|jtB}|r||j|jj|jj |j j |j |jj g|j |gO}n|j ||}|j|}x'||ks||O}|j|}qW~~|j}|S(N(R RRtTypeR;RRRRR_RORRnRt referentstbyclass(RRRtexcludeR>((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pytheapu8s&       csts]datjjjg}tj|jtj|jnjj j fdS(sAV.heap() -> idset Return the set of objects in the visible heap. icsjjjS(N(RRR ((R(sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pytis( theap_one_time_initializedtreprRRR RtshpathstrpR RR (RR((RsC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyR Xs cCs |j|S(N(R(R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pythorizonlscCsM|j|j|}|jj|j|jg|}|j||@S(simdom(X) -> idset Return the immediate dominators of a set of objects X. The immediate dominators is a subset of the referrers. It includes only those referrers that are reachable directly, avoiding any other referrer.(Rlt referrersRRRnRdR(RRgtpredtvisit((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyR,os$cCs|jj|j|S(sindisize(X) -> int Return the sum of the individual sizes of the set of objects X. The individual size of an object is the size of memory that is allocated directly in the object, not including any externally visible subobjects. See also: domisize.(Rt indisize_sumRl(RRg((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRxxscCs|dkr|j}n|dkr0|j}n|dkrH|j}n|jj||}||_||_|j||j |j j j |j |j j j |j |j j j|S(N(RRORdR;RRRR+tregister_hidden_exact_typetregister__hiding_tag__typeRStUniSettKindtIdentitySetMultitIdentitySetSingleton(RRR+RORdR;R((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRVs         cCs%|jj||}|j|_|S(N(Rt NodeGraphR(RR$t is_mappingtng((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyREs cCsy |j|jjj|SWntk r3nXy#|j|jjj|SWntk rjnXy#|j|jjj|SWn$tk rtdt|nXdS(NsNo object found at address %s( RnRt static_typestobj_att ValueErrorR RR thex(Rtaddr((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRs  # # cCs|jj}|jj}|j||jd|j|td|j||jjj d}|j g|D]'}t |dd|j krr|^qr}~~~|S(Ns<=R(R RRRRtNodeSetR"RSRRRnRMRR(RRRRR((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRs(= cCst||jS(N(R"R(RR$((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pytobservation_listscCs"|j|jj|j|S(ssV.referents(X) -> idset Return the set of objects that are directly referred to by any of the objects in the set X.(RRtrelimgRl(RRg((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRsc CsL|j|}|jr|j|jjkr|jj|pU|jj||js|jjddl }|j |j j |j||jj }|j|O_qn[|j|}||j8}|jj|sx9|jD].}|}|dk r||jjO}qqW||jj O}|jj|j j|j||jj|j||B|jjBO_|j|jj 8_|j||j}|jj|sdGHdGH|j||jj GHddlm}m}|nd}n|jj|}|j|dg}|j|}|S(siV.referrers(X) -> idset Return the set of objects that directly refer to any of the objects in the set X.iNsupdate_referrers failedsY - domain of rg:(tpmt set_trace(RlR'RdRR_R[t domain_coversR]R8R RRtupdate_referrers_completelyt get_domainR.treferrers_targetsRtsettnodesRft get_rangeRtpdbRRRRnR( RRgR taddnoreftYtwtttRR((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRsF           cCs;t|j|}|j|jj||j|S(sV.referrers_gc(X) -> idset Return the set of objects that directly refer to any of the objects in the set X. This differs from referrers in that it uses the gc module's view of the referrers. This is more or less valid depending on viewpoint. (RNRlRR t get_referrersR(RRg((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyR-s cs;fd}jjj||}jj|dS(Ncsjj|dS(N(Rtremove(R(R(sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRs(RR=R>RR@(RRRR((RsC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pytreferrers_add_targetscCs|j|dS(sV.update_referrers(X) Update the view V from the set X. X must be adaptable to NodeSet. V.rg is updated so that in addition to its previos mapping, it will also contain mappings for the elements of X to their referrers, from them to their referrers and so on. N(R(RRg((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyRfs( s_parent.ImpSet:immnodesets_parent.ImpSet:immnodeset_unions_parent.ImpSet:mutnodesets_parent.ImpSet:NodeSets_parent.UniSet:nodeset_adapts_parent.UniSet:retsets_parent.Use:idsets_parent.Use:isos_parent.Use:Types_root:gcs _root:types(R'R(R)(RR*R+(R,R-N((8RRt _imports_t _chgable_t _setable_tFalseR+R'R)Rt_uniset_exportsR/R7R4R2R?RARFRGRJRRRTRWRXRYR\RZR^R`RbReRiRcRkRjRwRvR RRRR RR,RxRRVRERRRRRR-RRf(((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyR&,s                        &        5 cCsddl}ddl}ddl}ddl}ddl}x_|jjD]N}|dkrdqLnx3|jjD]"}t |t rtt |qtqtWqLWx6t t gt t dgD]}t |qWdS(Ni(( Rtguppy.heapy.heapyctguppy.sets.setscRR=RHtvaluesRR t isinstanceRtdirtiter(RtguppyRR=RR((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pytprime_builtin_typess      +iN( RtobjectRRR#R"R&RR(((sC/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/View.pyts