o
    gF                     @   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 |rd| |f   S d| |f   S t | dk s*|dkr<|r4d| |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   A/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/tracemalloc.py_format_size   s   
r   c                   @   B   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__*      zStatistic.__hash__c                 C   s2   t |tstS | j|jko| j|jko| j|jkS r   )
isinstancer   NotImplementedr   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__4   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_keyB      zStatistic._sort_keyN
__name__
__module____qualname__	__slots__r   r   r    r$   r%   r&   r   r   r   r   r      s    
r   c                   @   r   )StatisticDiffr   r   	size_diffr   
count_diffc                 C   s"   || _ || _|| _|| _|| _d S r   r.   )r   r   r   r/   r   r0   r   r   r   r   M   s
   
zStatisticDiff.__init__c                 C   s   t | j| j| j| j| jfS r   )r   r   r   r/   r   r0   r   r   r   r   r   T   s   zStatisticDiff.__hash__c                 C   sJ   t |tst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/   r   r0   r   r   r   r   r    X   s   




zStatisticDiff.__eq__c                 C   sP   d| j t| jdt| jd| j| jf }| jr&| j| j }|dt|d 7 }|S )Nz %s: size=%s (%s), count=%i (%+i)FTr!   )r   r   r   r/   r   r0   r"   r   r   r   r$   a   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%   m   s
   zStatisticDiff.__repr__c                 C   s    t | j| jt | j| j| jfS r   )r   r/   r   r0   r   r   r   r   r   r   r&   r   s   zStatisticDiff._sort_keyNr(   r   r   r   r   r-   F   s    	r-   c                 C   s   g }|  D ]2\}}| |d }|d ur't||j|j|j |j|j|j }nt||j|j|j|j}|| q|   D ]\}}t|d|j d|j }|| q=|S Nr   )itemspopr-   r   r   append)	old_group	new_group
statisticsr   statZpreviousr   r   r   _compare_grouped_statsx   s"   r9   c                   @   sZ   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   
   || _ d S r   r;   r   framer   r   r   r         
zFrame.__init__c                 C   
   | j d S r1   r;   r   r   r   r   filename   r@   zFrame.filenamec                 C   rA   N   r;   r   r   r   r   lineno   r@   zFrame.linenoc                 C      t |tstS | j|jkS r   r   r:   r   r<   r   r   r   r   r          
zFrame.__eq__c                 C      t |tstS | j|jk S r   rG   r   r   r   r   __lt__   rH   zFrame.__lt__c                 C   
   t | jS r   )r   r<   r   r   r   r   r         
zFrame.__hash__c                 C      d| j | jf S )Nz%s:%srB   rE   r   r   r   r   r$      r'   zFrame.__str__c                 C   rM   )Nz<Frame filename=%r lineno=%r>rN   r   r   r   r   r%      r'   zFrame.__repr__N)r)   r*   r+   r,   r   propertyrB   rE   r    rJ   r   r$   r%   r   r   r   r   r:      s    

r:   c                   @   sr   e Zd Z	 dZdddZe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)_frames_total_nframeNc                 C   s"   t |  tt|| _|| _d S r   )r   r   tuplereversedrQ   rR   )r   framestotal_nframer   r   r   r      s   

zTraceback.__init__c                 C      | j S r   )rR   r   r   r   r   rV         zTraceback.total_nframec                 C   rK   r   )lenrQ   r   r   r   r   __len__   rL   zTraceback.__len__c                 C   0   t |trtdd | j| D S t| j| S )Nc                 s       | ]}t |V  qd S r   )r:   .0tracer   r   r   	<genexpr>       z(Traceback.__getitem__.<locals>.<genexpr>)r   slicerS   rQ   r:   r   indexr   r   r   __getitem__      
zTraceback.__getitem__c                 C      |j | jv S r   )r<   rQ   r>   r   r   r   __contains__      zTraceback.__contains__c                 C   rK   r   )r   rQ   r   r   r   r   r      rL   zTraceback.__hash__c                 C   rF   r   r   rP   r   rQ   r   r   r   r   r       rH   zTraceback.__eq__c                 C   rI   r   rj   r   r   r   r   rJ      rH   zTraceback.__lt__c                 C   s   t | d S r1   )strr   r   r   r   r$      ri   zTraceback.__str__c                 C   s:   dt |  }| jd u r|d7 }|S |d| j d7 }|S )Nz<Traceback >z total_nframe=)rS   rR   rV   )r   sr   r   r   r%      s   
zTraceback.__repr__Fc                 C   s   g }|d ur|dkr| | d  }n	| d | }n| }|r!t |}|D ] }|d|j|jf  t|j|j }|rC|d|  q#|S )Nr   z  File "%s", line %sz    %s)rT   r4   rB   rE   	linecachegetlinestrip)r   limitZmost_recent_firstlinesZframe_slicer?   liner   r   r   format   s"   
zTraceback.formatr   )NF)r)   r*   r+   r,   r   rO   rV   rZ   re   rh   r   r    rJ   r$   r%   rt   r   r   r   r   rP      s    
	
rP   c                 C   s   	 t | }|d urt|S d S r   )r   rP   )objrU   r   r   r   get_object_traceback  s
   rv   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   r=   r   rx   r   r_   r   r   r   r     s   
zTrace.__init__c                 C   rA   r1   rx   r   r   r   r   domain  r@   zTrace.domainc                 C   rA   rC   rx   r   r   r   r   r     r@   z
Trace.sizec                 C   s   t | jdd   S )N   )rP   ry   r   r   r   r   r   #  s   zTrace.tracebackc                 C   rF   r   )r   rw   r   ry   r   r   r   r   r    '  rH   zTrace.__eq__c                 C   rK   r   )r   ry   r   r   r   r   r   ,  rL   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)r{   r   r   r   r   r   r   r   r%   2  s   zTrace.__repr__N)r)   r*   r+   r,   r   rO   r{   r   r   r    r   r$   r%   r   r   r   r   rw     s    


rw   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   8  s   

z_Traces.__init__c                 C   rK   r   )rY   r~   r   r   r   r   rZ   =  rL   z_Traces.__len__c                 C   r[   )Nc                 s   r\   r   )rw   r]   r   r   r   r`   B  ra   z&_Traces.__getitem__.<locals>.<genexpr>)r   rb   rS   r~   rw   rc   r   r   r   re   @  rf   z_Traces.__getitem__c                 C   rg   r   )ry   r~   rz   r   r   r   rh   F  ri   z_Traces.__contains__c                 C   rF   r   )r   r}   r   r~   r   r   r   r   r    I  rH   z_Traces.__eq__c                 C   s   dt |  S )Nz<Traces len=%s>)rY   r   r   r   r   r%   N  ri   z_Traces.__repr__N)	r)   r*   r+   r   rZ   re   rh   r    r%   r   r   r   r   r}   7  s    r}   c                 C   s&   t j| } | dr| d d } | S )Nz.pyc)ospathnormcaseendswith)rB   r   r   r   _normalize_filenameR  s   
r   c                   @   s   e Zd Zdd Zdd ZdS )
BaseFilterc                 C   r=   r   )	inclusive)r   r   r   r   r   r   Z  rL   zBaseFilter.__init__c                 C   s   t r   )NotImplementedErrorrz   r   r   r   _match]  s   zBaseFilter._matchN)r)   r*   r+   r   r   r   r   r   r   r   Y  s    r   c                       sL   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   r   r   _filename_patternrE   
all_framesr{   )r   r   filename_patternrE   r   r{   	__class__r   r   r   b  s   

zFilter.__init__c                 C   rW   r   )r   r   r   r   r   r   k  rX   zFilter.filename_patternc                 C   s2   t |}t|| jsdS | jd u rdS || jkS )NFT)r   fnmatchr   rE   r   rB   rE   r   r   r   _match_frame_implo  s   

zFilter._match_frame_implc                 C   s   |  ||| j A S r   )r   r   r   r   r   r   _match_framex  r   zFilter._match_framec                    sB    j rt fdd|D r jS  j S |d \}} ||S )Nc                 3   s     | ]\}}  ||V  qd S r   )r   )r^   rB   rE   r   r   r   r`   }  s    z*Filter._match_traceback.<locals>.<genexpr>r   )r   anyr   r   )r   r   rB   rE   r   r   r   _match_traceback{  s   zFilter._match_tracebackc                 C   sF   |\}}}}|  |}| jd ur!| jr|o|| jkS |p || jkS |S r   )r   r{   r   )r   r_   r{   r   r   rV   resr   r   r   r     s   

zFilter._match)NFN)r)   r*   r+   r   rO   r   r   r   r   r   __classcell__r   r   r   r   r   a  s    	
	r   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   )r   r   _domain)r   r   r{   r   r   r   r     s   
zDomainFilter.__init__c                 C   rW   r   )r   r   r   r   r   r{     rX   zDomainFilter.domainc                 C   s   |\}}}}|| j k| j A S r   )r{   r   )r   r_   r{   r   r   rV   r   r   r   r     s   zDomainFilter._match)r)   r*   r+   r   rO   r{   r   r   r   r   r   r   r     s
    
r   c                   @   sV   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   )r}   r   traceback_limit)r   r   r   r   r   r   r     s   

zSnapshot.__init__c                 C   sB   	 t |d}t| |tj W d    d S 1 sw   Y  d S )Nwb)openpickledumpHIGHEST_PROTOCOL)r   rB   fpr   r   r   r     s   "zSnapshot.dumpc                 C   s:   	 t | d}t|W  d    S 1 sw   Y  d S )Nrb)r   r   load)rB   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   r   r^   trace_filterr_   r   r   r`     s    z)Snapshot._filter_trace.<locals>.<genexpr>Fc                 3   s    | ]	}|   V  qd S r   r   r   r   r   r   r`     s    T)r   )r   include_filtersexclude_filtersr_   r   r   r   _filter_trace  s   zSnapshot._filter_tracec                    s   	 t |tstdt|j |r6g g  |D ]}|jr"| 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   r]   r   r   r   r   r   
<listcomp>  s    
z*Snapshot.filter_traces.<locals>.<listcomp>)r   r   	TypeErrortyper)   r   r4   r   r~   copyr   r   )r   filtersr   Z
new_tracesr   r   r   filter_traces  s   
zSnapshot.filter_tracesc              
   C   s  |dvrt d|f |r|dvrt d| i }i }|s| jjD ]`}|\}}}}	z|| }
W n, ty[   |dkr=|}n|dkrH|d d }n	|d d dff}t|}
|
||< Y nw z||
 }| j|7  _| jd7  _W q! ty   t|
|d||
< Y q!w |S | jjD ]Y}|\}}}}	|D ]N}z|| }
W n  ty   |dkr|f}n|d dff}t|}
|
||< Y nw z||
 }| j|7  _| jd7  _W q ty   t|
|d||
< Y qw q|S )	N)r   rB   rE   zunknown key_type: %r)rE   rB   z/cumulative mode cannot by used with key type %rr   rE   rD   r   )
ValueErrorr   r~   KeyErrorrP   r   r   r   )r   key_type
cumulativeZstatsZ
tracebacksr_   r{   r   Ztrace_tracebackrV   r   rU   r8   r?   r   r   r   	_group_by  sf   	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groupedr7   r   r   r   r7     s
   zSnapshot.statisticsc                 C   s8   	 |  ||}| ||}t||}|jdtjd |S r   )r   r9   r   r-   r&   )r   Zold_snapshotr   r   r6   r5   r7   r   r   r   
compare_to  s   
zSnapshot.compare_toN)F)r)   r*   r+   r   r   staticmethodr   r   r   r   r7   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   )r   r   r   r   r   take_snapshot'  s   
r   )collections.abcr   r   	functoolsr   r   rn   Zos.pathr   r   Z_tracemallocr   r   r   r   r-   r9   r:   rP   rv   rw   r}   r   r   r   r   r   r   r   r   r   r   <module>   s4    (2&M'0 	