???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5dB                     @   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TiBd   r   z%+.1f %sz%.1f %si (  r	   z%+.0f %sz%.0f %si   )abs)sizeZsignZunit r   #/usr/lib64/python3.8/tracemalloc.py_format_size   s    r   c                   @   s@   e 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 )	Statistic	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__	__slots__r   r   r   r    r!   r"   r   r   r   r   r      s   
r   c                   @   s@   e 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 )StatisticDiff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*     
 
  r4   c                   @   sX   e 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 )Frame_framec                 C   s
   || _ d S r   r6   r   framer   r   r   r      s    zFrame.__init__c                 C   s
   | j d S r,   r6   r   r   r   r   filename   s    zFrame.filenamec                 C   s
   | j d S N   r6   r   r   r   r   lineno   s    zFrame.linenoc                 C   s   | j |j kS r   r6   r   r   r   r   r      s    zFrame.__eq__c                 C   s   | j |j k S r   r6   r   r   r   r   __lt__   s    zFrame.__lt__c                 C   s
   t | jS r   )r   r7   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   propertyr:   r=   r   r>   r   r    r!   r   r   r   r   r5      s   

r5   c                   @   sb   e 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 )	Traceback_framesc                 C   s   t |  tt|| _d S r   )r   r   tuplereversedrC   )r   framesr   r   r   r      s    
zTraceback.__init__c                 C   s
   t | jS r   )lenrC   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   )r5   .0tracer   r   r   	<genexpr>   s     z(Traceback.__getitem__.<locals>.<genexpr>)
isinstanceslicerD   rC   r5   r   indexr   r   r   __getitem__   s    
zTraceback.__getitem__c                 C   s   |j | jkS r   )r7   rC   r8   r   r   r   __contains__   s    zTraceback.__contains__c                 C   s
   t | jS r   )r   rC   r   r   r   r   r      s    zTraceback.__hash__c                 C   s   | j |j kS r   rB   r   r   r   r   r      s    zTraceback.__eq__c                 C   s   | j |j k S r   rB   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>)rD   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)rE   r/   r:   r=   	linecachegetlinestrip)r   limitZmost_recent_firstlinesZframe_slicer9   liner   r   r   format   s     
zTraceback.format)NF)r$   r%   r&   r'   r   rH   rQ   rR   r   r   r>   r    r!   rZ   r   r   r   r   rA      s   rA   c                 C   s    t | }|d k	rt|S d S d S r   )r   rA   )objrF   r   r   r   get_object_traceback   s    r\   c                   @   s\   e 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 )Trace_tracec                 C   s
   || _ d S r   r^   r   rK   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   )rA   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)ra   r   r   r   r   r   r   r   r!     s    zTrace.__repr__N)r$   r%   r&   r'   r   r@   ra   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   )rG   rd   r   r   r   r   rH   %  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]   rI   r   r   r   rL   *  s     z&_Traces.__getitem__.<locals>.<genexpr>)rM   rN   rD   rd   r]   rO   r   r   r   rQ   (  s    
z_Traces.__getitem__c                 C   s   |j | jkS r   )r_   rd   r`   r   r   r   rR   .  s    z_Traces.__contains__c                 C   s   | j |j kS r   )rd   r   r   r   r   r   1  s    z_Traces.__eq__c                 C   s   dt |  S )Nz<Traces len=%s>)rG   r   r   r   r   r!   4  s    z_Traces.__repr__N)	r$   r%   r&   r   rH   rQ   rR   r   r!   r   r   r   r   rc     s   rc   c                 C   s&   t j| } | dr"| d d } | S )Nz.pyc)ospathnormcaseendswith)r:   r   r   r   _normalize_filename8  s    
rk   c                   @   s   e Zd Zdd Zdd ZdS )
BaseFilterc                 C   s
   || _ d S r   )	inclusive)r   rm   r   r   r   r   @  s    zBaseFilter.__init__c                 C   s   t d S r   )NotImplementedErrorr`   r   r   r   _matchC  s    zBaseFilter._matchN)r$   r%   r&   r   ro   r   r   r   r   rl   ?  s   rl   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   rm   rk   _filename_patternr=   
all_framesra   )r   rm   filename_patternr=   rs   ra   	__class__r   r   r   H  s    
zFilter.__init__c                 C   s   | j S r   )rr   r   r   r   r   rt   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)rk   fnmatchrr   r=   r   r:   r=   r   r   r   _match_frame_implU  s    
zFilter._match_frame_implc                 C   s   |  ||| j A S r   )ry   rm   rx   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   )ry   )rJ   r:   r=   r   r   r   rL   c  s   z*Filter._match_traceback.<locals>.<genexpr>r   )rs   anyrm   rz   )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|   ra   rm   )r   rK   ra   r   r   resr   r   r   ro   l  s    


zFilter._match)NFN)r$   r%   r&   r   r@   rt   ry   rz   r|   ro   __classcell__r   r   ru   r   rp   G  s        	
	rp   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   )rq   r   _domain)r   rm   ra   ru   r   r   r   x  s    zDomainFilter.__init__c                 C   s   | j S r   )r   r   r   r   r   ra   |  s    zDomainFilter.domainc                 C   s   |\}}}|| j k| j A S r   )ra   rm   )r   rK   ra   r   r   r   r   r   ro     s    
zDomainFilter._match)r$   r%   r&   r   r@   ra   ro   r~   r   r   ru   r   r   w  s   
r   c                   @   sT   e 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 )Snapshotc                 C   s   t || _|| _d S r   )rc   re   traceback_limit)r   re   r   r   r   r   r     s    
zSnapshot.__init__c              	   C   s*   t |d}t| |tj W 5 Q R X d S )Nwb)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 )Nrb)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   ro   rJ   trace_filterrK   r   r   rL     s   z)Snapshot._filter_trace.<locals>.<genexpr>Fc                 3   s   | ]}|   V  qd S r   r   r   r   r   r   rL     s   T)r{   )r   include_filtersexclude_filtersrK   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 )Nz)filters must be a list of filters, not %sc                    s   g | ]}  |r|qS r   )r   rI   r   r   r   r   r   
<listcomp>  s    z*Snapshot.filter_traces.<locals>.<listcomp>)rM   r   	TypeErrortyper$   rm   r/   re   rd   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   )
ValueErrorre   rd   KeyErrorrA   r   r   r   )r   key_type
cumulativeZstatsZ
tracebacksrK   ra   r   Ztrace_tracebackr   rF   r3   r9   r   r   r   	_group_by  sZ    


zSnapshot._group_byFc                 C   s,   |  ||}t| }|jdtjd |S NT)reversekey)r   listvaluessortr   r"   )r   r   r   Zgroupedr2   r   r   r   r2     s    zSnapshot.statisticsc                 C   s6   |  ||}| ||}t||}|jdtjd |S r   )r   r4   r   r(   r"   )r   Zold_snapshotr   r   r1   r0   r2   r   r   r   
compare_to   s
    
zSnapshot.compare_toN)F)F)r$   r%   r&   r   r   staticmethodr   r   r   r   r2   r   r   r   r   r   r     s   
3

r   c                  C   s$   t  stdt } t }t| |S )NzLthe tracemalloc module must be tracing memory allocations to take a snapshot)
is_tracingRuntimeErrorr   Zget_traceback_limitr   )re   r   r   r   r   take_snapshot  s
    r   )Zcollections.abcr   r   	functoolsr   rw   rT   Zos.pathrg   r   Z_tracemallocr   r   r   r   r(   r4   r5   rA   r\   r]   rc   rk   rl   rp   r   r   r   r   r   r   r   <module>   s2   &0"?%0 	