grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a XC?hFã@sddlmZmZddlmZddlZddlZddlZddl Z ddl Tddl m Z m Z dd„Z Gdd „d ƒZGd d „d ƒZd d „ZeGdd„dƒƒZeGdd„deƒƒZdd„ZGdd„dƒZGdd„deƒZdd„ZGdd„dƒZGdd„deƒZGdd„deƒZGd d!„d!ƒZd"d#„ZdS)$é)ÚSequenceÚIterable)Útotal_orderingN)Ú*)Ú_get_object_tracebackÚ _get_tracescCs†dD]|}t|ƒdkr@|dkr@|r0d||fSd||fSt|ƒdksT|dkrx|rhd||fSd ||fS|d }qdS) N)ÚBZKiBZMiBZGiBÚTiBédrz%+.1f %sz%.1f %si(r z%+.0f %sz%.0f %si)Úabs)ÚsizeZsignZunit©r ú0/opt/alt/python39/lib64/python3.9/tracemalloc.pyÚ _format_size src@sDeZdZdZdZdd„Zdd„Zdd„Zd d „Zd d „Z d d„Z dS)Ú StatisticzS Statistic difference on memory allocations between two Snapshot instance. ©Ú tracebackr ÚcountcCs||_||_||_dS©Nr)Úselfrr rr r rÚ__init__%szStatistic.__init__cCst|j|j|jfƒSr)Úhashrr r©rr r rÚ__hash__*szStatistic.__hash__cCs2t|tƒstS|j|jko0|j|jko0|j|jkSr)Ú isinstancerÚNotImplementedrr r©rÚotherr r rÚ__eq__-s   ÿ þzStatistic.__eq__cCsBd|jt|jdƒ|jf}|jr>|j|j}|dt|dƒ7}|S)Nz%s: size=%s, count=%iFú , average=%s)rrr r©rÚtextZaverager r rÚ__str__4s þÿ zStatistic.__str__cCsd|j|j|jfS)Nz)rrr r rÚ__repr__>sÿzStatistic.__repr__cCs|j|j|jfSr)r rrrr r rÚ _sort_keyBszStatistic._sort_keyN© Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú __slots__rrrr"r#r$r r r rrs rc@sDeZdZdZdZdd„Zdd„Zdd„Zd d „Zd d „Z d d„Z dS)Ú StatisticDiffzd Statistic difference on memory allocations between an old and a new Snapshot instance. ©rr Ú size_diffrÚ count_diffcCs"||_||_||_||_||_dSrr,)rrr r-rr.r r rrMs zStatisticDiff.__init__cCst|j|j|j|j|jfƒSr)rrr r-rr.rr r rrTsÿzStatisticDiff.__hash__cCsJt|tƒstS|j|jkoH|j|jkoH|j|jkoH|j|jkoH|j|jkSr)rr+rrr r-rr.rr r rrXs   ÿ þ ý üzStatisticDiff.__eq__cCsPd|jt|jdƒt|jdƒ|j|jf}|jrL|j|j}|dt|dƒ7}|S)Nz %s: size=%s (%s), count=%i (%+i)FTr)rrr r-rr.r r r rr"as  üÿ zStatisticDiff.__str__cCsd|j|j|j|j|jfS)Nz9r,rr r rr#ms  ÿÿzStatisticDiff.__repr__cCs t|jƒ|jt|jƒ|j|jfSr)r r-r r.rrrr r rr$rs  þzStatisticDiff._sort_keyNr%r r r rr+Fs  r+cCsªg}| ¡D]d\}}| |d¡}|durNt||j|j|j|j|j|jƒ}nt||j|j|j|jƒ}| |¡q | ¡D]*\}}t|d|j d|j ƒ}| |¡qz|S©Nr)ÚitemsÚpopr+r rÚappend)Ú old_groupÚ new_groupÚ statisticsrÚstatZpreviousr r rÚ_compare_grouped_statsxs" þþ  r7c@s\eZdZdZdZdd„Zedd„ƒZedd„ƒZd d „Z d d „Z d d„Z dd„Z dd„Z dS)ÚFramez Frame of a traceback. ©Ú_framecCs ||_dSrr9©rÚframer r rr“szFrame.__init__cCs |jdSr/r9rr r rÚfilename—szFrame.filenamecCs |jdS©Nér9rr r rÚlineno›sz Frame.linenocCst|tƒstS|j|jkSr©rr8rr:rr r rrŸs z Frame.__eq__cCst|tƒstS|j|jkSrrArr r rÚ__lt__¤s z Frame.__lt__cCs t|jƒSr)rr:rr r rr©szFrame.__hash__cCsd|j|jfS)Nz%s:%s©r=r@rr r rr"¬sz Frame.__str__cCsd|j|jfS)NzrCrr r rr#¯szFrame.__repr__N)r&r'r(r)r*rÚpropertyr=r@rrBrr"r#r r r rr8Œs  r8c@steZdZdZdZddd„Zedd„ƒZdd „Zd d „Z d d „Z dd„Z dd„Z dd„Z dd„Zdd„Zddd„ZdS)Ú Tracebackz` Sequence of Frame instances sorted from the oldest frame to the most recent frame. )Ú_framesÚ _total_nframeNcCs"t |¡tt|ƒƒ|_||_dSr)rrÚtupleÚreversedrFrG)rÚframesÚ total_nframer r rr»s zTraceback.__init__cCs|jSr)rGrr r rrKÄszTraceback.total_nframecCs t|jƒSr)ÚlenrFrr r rÚ__len__ÈszTraceback.__len__cCs4t|tƒr"tdd„|j|DƒƒSt|j|ƒSdS)Ncss|]}t|ƒVqdSr)r8©Ú.0Útracer r rÚ Íóz(Traceback.__getitem__..)rÚslicerHrFr8©rÚindexr r rÚ __getitem__Ës zTraceback.__getitem__cCs |j|jvSr)r:rFr;r r rÚ __contains__ÑszTraceback.__contains__cCs t|jƒSr)rrFrr r rrÔszTraceback.__hash__cCst|tƒstS|j|jkSr©rrErrFrr r rr×s zTraceback.__eq__cCst|tƒstS|j|jkSrrXrr r rrBÜs zTraceback.__lt__cCs t|dƒSr/)Ústrrr r rr"ászTraceback.__str__cCs8dt|ƒ›�}|jdur"|d7}n|d|j›d�7}|S)Nz z total_nframe=)rHrGrK)rÚsr r rr#äs   zTraceback.__repr__FcCsŒg}|dur2|dkr$|| d…}q6|d|…}n|}|rBt|ƒ}|D]@}| d|j|jf¡t |j|j¡ ¡}|rF| d|¡qF|S)Nrz File "%s", line %sz %s)rIr2r=r@Ú linecacheÚgetlineÚstrip)rÚlimitZmost_recent_firstÚlinesZ frame_slicer<Úliner r rÚformatìs  ÿzTraceback.format)N)NF)r&r'r(r)r*rrDrKrMrVrWrrrBr"r#rbr r r rrE³s  rEcCs t|ƒ}|durt|ƒSdSdS)zé Get the traceback where the Python object *obj* was allocated. Return a Traceback instance. Return None if the tracemalloc module is not tracing memory allocations or did not trace the allocation of the object. N)rrE)ÚobjrJr r rÚget_object_tracebacksrdc@s`eZdZdZdZdd„Zedd„ƒZedd„ƒZed d „ƒZ d d „Z d d„Z dd„Z dd„Z dS)ÚTracez" Trace of a memory block. ©Ú_tracecCs ||_dSrrf©rrPr r rrszTrace.__init__cCs |jdSr/rfrr r rÚdomainsz Trace.domaincCs |jdSr>rfrr r rr sz Trace.sizecCst|jdd…ŽS)Né)rErgrr r rr#szTrace.tracebackcCst|tƒstS|j|jkSr)rrerrgrr r rr's z Trace.__eq__cCs t|jƒSr)rrgrr r rr,szTrace.__hash__cCsd|jt|jdƒfS)Nz%s: %sF)rrr rr r rr"/sz Trace.__str__cCsd|jt|jdƒ|jfS)Nz'F)rirr rrr r rr#2sÿzTrace.__repr__N)r&r'r(r)r*rrDrir rrrr"r#r r r rres   rec@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)Ú_TracescCst |¡||_dSr)rrÚ_traces)rÚtracesr r rr8s z_Traces.__init__cCs t|jƒSr)rLrlrr r rrM=sz_Traces.__len__cCs4t|tƒr"tdd„|j|DƒƒSt|j|ƒSdS)Ncss|]}t|ƒVqdSr)rerNr r rrQBrRz&_Traces.__getitem__..)rrSrHrlrerTr r rrV@s z_Traces.__getitem__cCs |j|jvSr)rgrlrhr r rrWFsz_Traces.__contains__cCst|tƒstS|j|jkSr)rrkrrlrr r rrIs z_Traces.__eq__cCs dt|ƒS)Nz)rLrr r rr#Nsz_Traces.__repr__N) r&r'r(rrMrVrWrr#r r r rrk7s rkcCs&tj |¡}| d¡r"|dd…}|S)Nz.pycéÿÿÿÿ)ÚosÚpathÚnormcaseÚendswith)r=r r rÚ_normalize_filenameRs   rsc@seZdZdd„Zdd„ZdS)Ú BaseFiltercCs ||_dSr)Ú inclusive)rrur r rrZszBaseFilter.__init__cCst‚dSr)ÚNotImplementedErrorrhr r rÚ_match]szBaseFilter._matchN)r&r'r(rrwr r r rrtYsrtcsJeZdZd‡fdd„ Zedd„ƒZdd„Zd d „Zd d „Zd d„Z ‡Z S)ÚFilterNFcs2tƒ |¡||_t|ƒ|_||_||_||_dSr)ÚsuperrrursÚ_filename_patternr@Ú all_framesri)rruÚfilename_patternr@r{ri©Ú __class__r rrbs   zFilter.__init__cCs|jSr)rzrr r rr|kszFilter.filename_patterncCs6t|ƒ}t ||j¡sdS|jdur(dS||jkSdS)NFT)rsÚfnmatchrzr@©rr=r@r r rÚ_match_frame_implos  zFilter._match_frame_implcCs| ||¡|j ASr)r�rur€r r rÚ _match_framexszFilter._match_framecsHˆjr,t‡fdd„|Dƒƒr"ˆjSˆj Sn|d\}}ˆ ||¡SdS)Nc3s|]\}}ˆ ||¡VqdSr)r�)rOr=r@rr rrQ}sÿz*Filter._match_traceback..r)r{Úanyrur‚)rrr=r@r rrÚ_match_traceback{s ÿ  zFilter._match_tracebackcCsF|\}}}}| |¡}|jdurB|jr4|o2||jkS|p@||jkS|Sr)r„riru)rrPrir rrKÚresr r rrw†s   z Filter._match)NFN) r&r'r(rrDr|r�r‚r„rwÚ __classcell__r r r}rrxasÿ    rxcs0eZdZ‡fdd„Zedd„ƒZdd„Z‡ZS)Ú DomainFiltercstƒ |¡||_dSr)ryrÚ_domain)rrurir}r rr’s zDomainFilter.__init__cCs|jSr)rˆrr r rri–szDomainFilter.domaincCs|\}}}}||jk|j ASr)riru)rrPrir rrKr r rrwšs zDomainFilter._match)r&r'r(rrDrirwr†r r r}rr‡‘s  r‡c@sXeZdZdZdd„Zdd„Zedd„ƒZdd „Zd d „Z d d „Z ddd„Z ddd„Z dS)ÚSnapshotzB Snapshot of traces of memory blocks allocated by Python. cCst|ƒ|_||_dSr)rkrmÚtraceback_limit)rrmrŠr r rr¤s zSnapshot.__init__cCs>t|dƒ� }t ||tj¡Wdƒn1s00YdS)z1 Write the snapshot into a file. ÚwbN)ÚopenÚpickleÚdumpZHIGHEST_PROTOCOL)rr=Úfpr r rrŽªs z Snapshot.dumpcCs8t|dƒ�}t |¡WdƒS1s*0YdS)z. Load a snapshot from a file. ÚrbN)rŒr�Úload)r=r�r r rr‘±s z Snapshot.loadcs@|rt‡fdd„|DƒƒsdS|r.Fc3s|]}| ˆ¡ VqdSrr’r“r•r rrQ¿sÿT)rƒ)rÚinclude_filtersÚexclude_filtersrPr r•rÚ _filter_trace¹s ÿ ÿzSnapshot._filter_tracecs‚t|tƒstdt|ƒjƒ‚|rjg‰g‰|D] }|jrBˆ |¡q,ˆ |¡q,‡‡‡fdd„ˆjjDƒ}n ˆjj  ¡}t |ˆj ƒS)zð Create a new Snapshot instance with a filtered traces sequence, filters is a list of Filter or DomainFilter instances. If filters is an empty list, return a new Snapshot instance with a copy of the traces. z)filters must be a list of filters, not %scsg|]}ˆ ˆˆ|¡r|‘qSr )r˜rN©r—r–rr rÚ Õs þÿz*Snapshot.filter_traces..) rrÚ TypeErrorÚtyper&rur2rmrlÚcopyr‰rŠ)rÚfiltersr”Z new_tracesr r™rÚ filter_tracesÄs ÿ   zSnapshot.filter_tracesc CsØ|dvrtd|fƒ‚|r.|dvr.td|ƒ‚i}i}|�s |jjD]Ä}|\}}}} z ||} WnXty¸|dkr||} n(|dkr’|dd…} n|dddff} t| ƒ} | ||<Yn0z(|| } | j|7_| jd7_WqDt�yt| |dƒ|| <YqD0qDnÈ|jjD]¾}|\}}}} |D]¦} z || } WnDt�y||dk�rZ| f} n| ddff} t| ƒ} | || <Yn0z(|| } | j|7_| jd7_Wn$t�yÊt| |dƒ|| <Yn0�q(�q|S) N)rr=r@zunknown key_type: %r)r@r=z/cumulative mode cannot by used with key type %rrr@r?r)Ú ValueErrorrmrlÚKeyErrorrEr rr)rÚkey_typeÚ cumulativeZstatsZ tracebacksrPrir Ztrace_tracebackrKrrJr6r<r r rÚ _group_byÝsZ ÿ        zSnapshot._group_byFcCs,| ||¡}t| ¡ƒ}|jdtjd�|S)zd Group statistics by key_type. Return a sorted list of Statistic instances. T©ÚreverseÚkey)r¤ÚlistÚvaluesÚsortrr$)rr¢r£Zgroupedr5r r rr5s  zSnapshot.statisticscCs6| ||¡}| ||¡}t||ƒ}|jdtjd�|S)z­ Compute the differences with an old snapshot old_snapshot. Get statistics as a sorted list of StatisticDiff instances, grouped by group_by. Tr¥)r¤r7rªr+r$)rZ old_snapshotr¢r£r4r3r5r r rÚ compare_tos    zSnapshot.compare_toN)F)F) r&r'r(r)rrŽÚ staticmethodr‘r˜rŸr¤r5r«r r r rr‰Ÿs  3 r‰cCs$tƒstdƒ‚tƒ}tƒ}t||ƒS)zI Take a snapshot of traces of memory blocks allocated by Python. zLthe tracemalloc module must be tracing memory allocations to take a snapshot)Ú is_tracingÚ RuntimeErrorrZget_traceback_limitr‰)rmrŠr r rÚ take_snapshot's r¯)Úcollections.abcrrÚ functoolsrrr\Zos.pathror�Z _tracemallocrrrrr+r7r8rErdrerkrsrtrxr‡r‰r¯r r r rÚs2 (2&M'0