
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a´B  ã                   @   s  d dl mZmZ d dlmZ d dlZd dlZd dlZd dl	Z	d dl
T d dl
mZmZ dd„ ZG dd	„ d	ƒZG d
d„ dƒZdd„ ZeG dd„ dƒƒZeG dd„ deƒƒZdd„ ZG dd„ dƒZG dd„ deƒZdd„ ZG dd„ dƒZG dd„ deƒZG dd„ deƒZG d d!„ d!ƒZd"d#„ ZdS )$é    )ÚSequenceÚIterable)Útotal_orderingN)Ú*)Ú_get_object_tracebackÚ_get_tracesc                 C   s†   dD ]|}t | ƒdk r@|dkr@|r0d| |f   S d| |f   S t | ƒdk sT|dkrx|rhd| |f   S d	| |f   S | d
 } qd S )N)ÚBZKiBZMiBZGiBÚTiBéd   r   z%+.1f %sz%.1f %si (  r	   z%+.0f %sz%.0f %si   )Úabs)ÚsizeZsignZunit© r   ú0/opt/alt/python38/lib64/python3.8/tracemalloc.pyÚ_format_size   s    r   c                   @   sD   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )Ú	StatisticzS
    Statistic difference on memory allocations between two Snapshot instance.
    ©Ú	tracebackr   Úcountc                 C   s   || _ || _|| _d S ©Nr   )Úselfr   r   r   r   r   r   Ú__init__%   s    zStatistic.__init__c                 C   s   t | j| j| jfƒS r   )Úhashr   r   r   ©r   r   r   r   Ú__hash__*   s    zStatistic.__hash__c                 C   s$   | j |j ko"| j|jko"| j|jkS r   r   ©r   Úotherr   r   r   Ú__eq__-   s
    
ÿ
þzStatistic.__eq__c                 C   sB   d| j t| jdƒ| jf }| jr>| j| j }|dt|dƒ 7 }|S )Nz%s: size=%s, count=%iFú, average=%s)r   r   r   r   ©r   ÚtextZaverager   r   r   Ú__str__2   s    
þÿzStatistic.__str__c                 C   s   d| j | j| jf S )Nz)<Statistic traceback=%r size=%i count=%i>r   r   r   r   r   Ú__repr__<   s    ÿzStatistic.__repr__c                 C   s   | j | j| jfS r   )r   r   r   r   r   r   r   Ú	_sort_key@   s    zStatistic._sort_keyN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r   r   r    r!   r"   r   r   r   r   r      s   
r   c                   @   sD   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚStatisticDiffzd
    Statistic difference on memory allocations between an old and a new
    Snapshot instance.
    ©r   r   Ú	size_diffr   Ú
count_diffc                 C   s"   || _ || _|| _|| _|| _d S r   r*   )r   r   r   r+   r   r,   r   r   r   r   K   s
    zStatisticDiff.__init__c                 C   s   t | j| j| j| j| jfƒS r   )r   r   r   r+   r   r,   r   r   r   r   r   R   s     ÿzStatisticDiff.__hash__c                 C   s<   | j |j ko:| j|jko:| j|jko:| j|jko:| j|jkS r   r*   r   r   r   r   r   V   s    
ÿ
þ
ý
üzStatisticDiff.__eq__c                 C   sP   d| j t| jdƒt| jdƒ| j| jf }| jrL| j| j }|dt|dƒ 7 }|S )Nz %s: size=%s (%s), count=%i (%+i)FTr   )r   r   r   r+   r   r,   r   r   r   r   r    ]   s    

üÿzStatisticDiff.__str__c                 C   s   d| j | j| j| j| jf S )Nz9<StatisticDiff traceback=%r size=%i (%+i) count=%i (%+i)>r*   r   r   r   r   r!   i   s     ÿÿzStatisticDiff.__repr__c                 C   s    t | jƒ| jt | jƒ| j| jfS r   )r   r+   r   r,   r   r   r   r   r   r   r"   n   s
     þzStatisticDiff._sort_keyNr#   r   r   r   r   r)   D   s   r)   c                 C   sª   g }|  ¡ D ]d\}}|  |d ¡}|d k	rNt||j|j|j |j|j|j ƒ}nt||j|j|j|jƒ}| |¡ q|   ¡ D ]*\}}t|d|j d|j ƒ}| |¡ qz|S ©Nr   )ÚitemsÚpopr)   r   r   Úappend)Ú	old_groupÚ	new_groupÚ
statisticsr   ÚstatZpreviousr   r   r   Ú_compare_grouped_statst   s*     
 
þ  þr5   c                   @   s\   e Zd ZdZdZdd„ Zedd„ ƒZedd„ ƒZd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚFramez
    Frame of a traceback.
    ©Ú_framec                 C   s
   || _ d S r   r7   ©r   Úframer   r   r   r   �   s    zFrame.__init__c                 C   s
   | j d S r-   r7   r   r   r   r   Úfilename“   s    zFrame.filenamec                 C   s
   | j d S ©Né   r7   r   r   r   r   Úlineno—   s    zFrame.linenoc                 C   s   | j |j kS r   r7   r   r   r   r   r   ›   s    zFrame.__eq__c                 C   s   | j |j k S r   r7   r   r   r   r   Ú__lt__ž   s    zFrame.__lt__c                 C   s
   t | jƒS r   )r   r8   r   r   r   r   r   ¡   s    zFrame.__hash__c                 C   s   d| j | jf S )Nz%s:%s©r;   r>   r   r   r   r   r    ¤   s    zFrame.__str__c                 C   s   d| j | jf S )Nz<Frame filename=%r lineno=%r>r@   r   r   r   r   r!   §   s    zFrame.__repr__N)r$   r%   r&   r'   r(   r   Úpropertyr;   r>   r   r?   r   r    r!   r   r   r   r   r6   ˆ   s   

r6   c                   @   sf   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zddd„ZdS )Ú	Tracebackz`
    Sequence of Frame instances sorted from the oldest frame
    to the most recent frame.
    ©Ú_framesc                 C   s   t  | ¡ tt|ƒƒ| _d S r   )r   r   ÚtupleÚreversedrD   )r   Úframesr   r   r   r   ³   s    
zTraceback.__init__c                 C   s
   t | jƒS r   )ÚlenrD   r   r   r   r   Ú__len__»   s    zTraceback.__len__c                 C   s4   t |tƒr"tdd„ | j| D ƒƒS t| j| ƒS d S )Nc                 s   s   | ]}t |ƒV  qd S r   )r6   ©Ú.0Útracer   r   r   Ú	<genexpr>À   s     z(Traceback.__getitem__.<locals>.<genexpr>)Ú
isinstanceÚslicerE   rD   r6   ©r   Úindexr   r   r   Ú__getitem__¾   s    
zTraceback.__getitem__c                 C   s   |j | jkS r   )r8   rD   r9   r   r   r   Ú__contains__Ä   s    zTraceback.__contains__c                 C   s
   t | jƒS r   )r   rD   r   r   r   r   r   Ç   s    zTraceback.__hash__c                 C   s   | j |j kS r   rC   r   r   r   r   r   Ê   s    zTraceback.__eq__c                 C   s   | j |j k S r   rC   r   r   r   r   r?   Í   s    zTraceback.__lt__c                 C   s   t | d ƒS r-   )Ústrr   r   r   r   r    Ð   s    zTraceback.__str__c                 C   s   dt | ƒf S )Nz<Traceback %r>)rE   r   r   r   r   r!   Ó   s    zTraceback.__repr__NFc                 C   sŒ   g }|d k	r2|dkr$| | d … }q6| d |… }n| }|rBt |ƒ}|D ]@}| d|j|jf ¡ t |j|j¡ ¡ }|rF| d| ¡ qF|S )Nr   z  File "%s", line %sz    %s)rF   r0   r;   r>   Ú	linecacheÚgetlineÚstrip)r   ÚlimitZmost_recent_firstÚlinesZframe_slicer:   Úliner   r   r   ÚformatÖ   s     
ÿzTraceback.format)NF)r$   r%   r&   r'   r(   r   rI   rR   rS   r   r   r?   r    r!   r[   r   r   r   r   rB   «   s   rB   c                 C   s    t | ƒ}|dk	rt|ƒS dS dS )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)r   rB   )ÚobjrG   r   r   r   Úget_object_tracebackë   s    r]   c                   @   s`   e Zd ZdZdZdd„ Zedd„ ƒZedd„ ƒZed	d
„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTracez"
    Trace of a memory block.
    ©Ú_tracec                 C   s
   || _ d S r   r_   ©r   rL   r   r   r   r      s    zTrace.__init__c                 C   s
   | j d S r-   r_   r   r   r   r   Údomain  s    zTrace.domainc                 C   s
   | j d S r<   r_   r   r   r   r   r   	  s    z
Trace.sizec                 C   s   t | jd ƒS )Né   )rB   r`   r   r   r   r   r     s    zTrace.tracebackc                 C   s   | j |j kS r   r_   r   r   r   r   r     s    zTrace.__eq__c                 C   s
   t | jƒS r   )r   r`   r   r   r   r   r     s    zTrace.__hash__c                 C   s   d| j t| jdƒf S )Nz%s: %sF)r   r   r   r   r   r   r   r      s    zTrace.__str__c                 C   s   d| j t| jdƒ| jf S )Nz'<Trace domain=%s size=%s, traceback=%r>F)rb   r   r   r   r   r   r   r   r!     s    ÿzTrace.__repr__N)r$   r%   r&   r'   r(   r   rA   rb   r   r   r   r   r    r!   r   r   r   r   r^   ú   s   


r^   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú_Tracesc                 C   s   t  | ¡ || _d S r   )r   r   Ú_traces)r   Útracesr   r   r   r      s    
z_Traces.__init__c                 C   s
   t | jƒS r   )rH   re   r   r   r   r   rI   %  s    z_Traces.__len__c                 C   s4   t |tƒr"tdd„ | j| D ƒƒS t| j| ƒS d S )Nc                 s   s   | ]}t |ƒV  qd S r   )r^   rJ   r   r   r   rM   *  s     z&_Traces.__getitem__.<locals>.<genexpr>)rN   rO   rE   re   r^   rP   r   r   r   rR   (  s    
z_Traces.__getitem__c                 C   s   |j | jkS r   )r`   re   ra   r   r   r   rS   .  s    z_Traces.__contains__c                 C   s   | j |j kS r   )re   r   r   r   r   r   1  s    z_Traces.__eq__c                 C   s   dt | ƒ S )Nz<Traces len=%s>)rH   r   r   r   r   r!   4  s    z_Traces.__repr__N)	r$   r%   r&   r   rI   rR   rS   r   r!   r   r   r   r   rd     s   rd   c                 C   s&   t j | ¡} |  d¡r"| d d… } | S )Nz.pycéÿÿÿÿ)ÚosÚpathÚnormcaseÚendswith)r;   r   r   r   Ú_normalize_filename8  s    
rl   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
BaseFilterc                 C   s
   || _ d S r   )Ú	inclusive)r   rn   r   r   r   r   @  s    zBaseFilter.__init__c                 C   s   t ‚d S r   )ÚNotImplementedErrorra   r   r   r   Ú_matchC  s    zBaseFilter._matchN)r$   r%   r&   r   rp   r   r   r   r   rm   ?  s   rm   c                       sJ   e Zd Zd‡ fdd„	Zedd„ ƒZdd„ Zd	d
„ Zdd„ Zdd„ Z	‡  Z
S )ÚFilterNFc                    s2   t ƒ  |¡ || _t|ƒ| _|| _|| _|| _d S r   )Úsuperr   rn   rl   Ú_filename_patternr>   Ú
all_framesrb   )r   rn   Úfilename_patternr>   rt   rb   ©Ú	__class__r   r   r   H  s    
zFilter.__init__c                 C   s   | j S r   )rs   r   r   r   r   ru   Q  s    zFilter.filename_patternc                 C   s6   t |ƒ}t || j¡sdS | jd kr(dS || jkS d S )NFT)rl   Úfnmatchrs   r>   ©r   r;   r>   r   r   r   Ú_match_frame_implU  s    
zFilter._match_frame_implc                 C   s   |   ||¡| j A S r   )rz   rn   ry   r   r   r   Ú_match_frame^  s    zFilter._match_framec                    sH   ˆ j r,t‡ fdd„|D ƒƒr"ˆ jS ˆ j S n|d \}}ˆ  ||¡S d S )Nc                 3   s   | ]\}}ˆ   ||¡V  qd S r   )rz   )rK   r;   r>   r   r   r   rM   c  s   ÿz*Filter._match_traceback.<locals>.<genexpr>r   )rt   Úanyrn   r{   )r   r   r;   r>   r   r   r   Ú_match_tracebacka  s    ÿ
zFilter._match_tracebackc                 C   sD   |\}}}|   |¡}| jd k	r@| jr2|o0|| jkS |p>|| jkS |S r   )r}   rb   rn   )r   rL   rb   r   r   Úresr   r   r   rp   l  s    


zFilter._match)NFN)r$   r%   r&   r   rA   ru   rz   r{   r}   rp   Ú__classcell__r   r   rv   r   rq   G  s        ÿ	
	rq   c                       s0   e Zd Z‡ fdd„Zedd„ ƒZdd„ Z‡  ZS )ÚDomainFilterc                    s   t ƒ  |¡ || _d S r   )rr   r   Ú_domain)r   rn   rb   rv   r   r   r   x  s    zDomainFilter.__init__c                 C   s   | j S r   )r�   r   r   r   r   rb   |  s    zDomainFilter.domainc                 C   s   |\}}}|| j k| j A S r   )rb   rn   )r   rL   rb   r   r   r   r   r   rp   €  s    
zDomainFilter._match)r$   r%   r&   r   rA   rb   rp   r   r   r   rv   r   r€   w  s   
r€   c                   @   sX   e Zd ZdZdd„ Zdd„ Zedd„ ƒZdd	„ Zd
d„ Z	dd„ Z
ddd„Zddd„ZdS )ÚSnapshotzB
    Snapshot of traces of memory blocks allocated by Python.
    c                 C   s   t |ƒ| _|| _d S r   )rd   rf   Útraceback_limit)r   rf   rƒ   r   r   r   r   Š  s    
zSnapshot.__init__c              	   C   s*   t |dƒ�}t | |tj¡ W 5 Q R X dS )z1
        Write the snapshot into a file.
        ÚwbN)ÚopenÚpickleÚdumpZHIGHEST_PROTOCOL)r   r;   Úfpr   r   r   r‡   �  s    zSnapshot.dumpc              
   C   s,   t | dƒ�}t |¡W  5 Q R £ S Q R X dS )z.
        Load a snapshot from a file.
        ÚrbN)r…   r†   Úload)r;   rˆ   r   r   r   rŠ   —  s    zSnapshot.loadc                    s@   |rt ‡ fdd„|D ƒƒsdS |r<t ‡ fdd„|D ƒƒr<dS dS )Nc                 3   s   | ]}|  ˆ ¡V  qd S r   ©rp   ©rK   Útrace_filter©rL   r   r   rM   ¡  s   ÿz)Snapshot._filter_trace.<locals>.<genexpr>Fc                 3   s   | ]}|  ˆ ¡ V  qd S r   r‹   rŒ   rŽ   r   r   rM   ¥  s   ÿT)r|   )r   Úinclude_filtersÚexclude_filtersrL   r   rŽ   r   Ú_filter_traceŸ  s    ÿÿzSnapshot._filter_tracec                    s‚   t |tƒstdt|ƒj ƒ‚|rjg ‰g ‰ |D ] }|jrBˆ |¡ q,ˆ  |¡ q,‡ ‡‡fdd„ˆjjD ƒ}nˆjj 	¡ }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 %sc                    s   g | ]}ˆ  ˆˆ |¡r|‘qS r   )r‘   rJ   ©r�   r�   r   r   r   Ú
<listcomp>»  s    þÿz*Snapshot.filter_traces.<locals>.<listcomp>)rN   r   Ú	TypeErrorÚtyper$   rn   r0   rf   re   Úcopyr‚   rƒ   )r   Úfiltersr�   Z
new_tracesr   r’   r   Úfilter_tracesª  s    
ÿzSnapshot.filter_tracesc              
   C   sÜ  |dkrt d|f ƒ‚|r.|dkr.t d| ƒ‚i }i }|�s| jjD ]Æ}|\}}}z|| }	W nZ tk
r¸   |dkr||}
n(|dkr’|d d… }
n|d d dff}
t|
ƒ}	|	||< Y nX z(||	 }| j|7  _| jd7  _W qD tk
�r   t|	|dƒ||	< Y qDX qDnÊ| jjD ]À}|\}}}|D ]ª}z|| }	W nF tk
�r~   |dk�r\|f}
n|d dff}
t|
ƒ}	|	||< Y nX z(||	 }| j|7  _| jd7  _W n& tk
�rÎ   t|	|dƒ||	< Y nX �q(�q|S )	N)r   r;   r>   zunknown key_type: %r)r>   r;   z/cumulative mode cannot by used with key type %rr   r>   r=   r   )Ú
ValueErrorrf   re   ÚKeyErrorrB   r   r   r   )r   Úkey_typeÚ
cumulativeZstatsZ
tracebacksrL   rb   r   Ztrace_tracebackr   rG   r4   r:   r   r   r   Ú	_group_byÃ  sZ    ÿ


zSnapshot._group_byFc                 C   s,   |   ||¡}t| ¡ ƒ}|jdtjd� |S )zd
        Group statistics by key_type. Return a sorted list of Statistic
        instances.
        T©ÚreverseÚkey)r�   ÚlistÚvaluesÚsortr   r"   )r   r›   rœ   Zgroupedr3   r   r   r   r3   ö  s    zSnapshot.statisticsc                 C   s6   |   ||¡}|  ||¡}t||ƒ}|jdtjd� |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�   r5   r£   r)   r"   )r   Zold_snapshotr›   rœ   r2   r1   r3   r   r   r   Ú
compare_to   s
    
zSnapshot.compare_toN)F)F)r$   r%   r&   r'   r   r‡   ÚstaticmethodrŠ   r‘   r˜   r�   r3   r¤   r   r   r   r   r‚   …  s   
3

r‚   c                  C   s$   t ƒ stdƒ‚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ÚRuntimeErrorr   Zget_traceback_limitr‚   )rf   rƒ   r   r   r   Útake_snapshot  s
    r¨   )Zcollections.abcr   r   Ú	functoolsr   rx   rU   Zos.pathrh   r†   Z_tracemallocr   r   r   r   r)   r5   r6   rB   r]   r^   rd   rl   rm   rq   r€   r‚   r¨   r   r   r   r   Ú<module>   s2   &0"?%0 	