
    z%iF                     \   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
 d dl
mZmZ d Z G d d      Z G d	 d
      Zd Ze G d d             Ze G d de             Zd Z G d d      Z G d de      Zd Z G d d      Z G d de      Z G d de      Z G d d      Zd Zy)    )SequenceIterable)total_orderingN)*)_get_object_traceback_get_tracesc                     dD ]U  }t        |       dk  r|dk7  r|r	d| |fz  c S d| |fz  c S t        |       dk  s|dk(  r|r	d| |fz  c S d	| |fz  c S | d
z  } W y )N)BKiBMiBGiBTiBd   r
   z%+.1f %sz%.1f %si (  r   z%+.0f %sz%.0f %si   )abs)sizesignunits      ?/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/tracemalloc.py_format_sizer      s    1 t9s?ts{!T4L00 D$<//t9y DEM!T4L00 D$<//    c                   6    e Zd Z	 dZd Zd Zd Zd Zd Zd Z	y)		Statistic	tracebackr   countc                 .    || _         || _        || _        y Nr   )selfr   r   r   s       r   __init__zStatistic.__init__%   s    "	
r   c                 Z    t        | j                  | j                  | j                  f      S r   )hashr   r   r   r   s    r   __hash__zStatistic.__hash__*   s     T^^TYY

;<<r   c                     t        |t              st        S | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S r   )
isinstancer   NotImplementedr   r   r   r   others     r   __eq__zStatistic.__eq__-   sQ    %+!!%//1 .II+.JJ%++-	/r   c                     d| j                   t        | j                  d      | j                  fz  }| j                  r+| j                  | j                  z  }|dt        |d      z  z  }|S )Nz%s: size=%s, count=%iF, average=%s)r   r   r   r   r   textaverages      r   __str__zStatistic.__str__4   sc    'NN E2JJ   ::ii$**,GN\'5%AAADr   c                 N    d| j                   | j                  | j                  fz  S )Nz)<Statistic traceback=%r size=%i count=%i>r   r"   s    r   __repr__zStatistic.__repr__>   s%    ;>>499djj9: 	;r   c                 H    | j                   | j                  | j                  fS r   )r   r   r   r"   s    r   	_sort_keyzStatistic._sort_keyB   s    		4::t~~66r   N
__name__
__module____qualname__	__slots__r   r#   r)   r/   r1   r3    r   r   r   r      s,     /I
=/;7r   r   c                   6    e Zd Z	 dZd Zd Zd Zd Zd Zd Z	y)	StatisticDiffr   r   	size_diffr   
count_diffc                 J    || _         || _        || _        || _        || _        y r   r<   )r   r   r   r=   r   r>   s         r   r   zStatisticDiff.__init__M   s%    "	"
$r   c                     t        | j                  | j                  | j                  | j                  | j
                  f      S r   )r!   r   r   r=   r   r>   r"   s    r   r#   zStatisticDiff.__hash__T   s3    T^^TYYZZ2 3 	3r   c                 8   t        |t              st        S | j                  |j                  k(  xrj | j                  |j                  k(  xrO | j
                  |j
                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   )r%   r;   r&   r   r   r=   r   r>   r'   s     r   r)   zStatisticDiff.__eq__X   s    %/!!%//1 8II+8NNeoo58 JJ%++-8 OOu'7'77		9r   c                    d| j                   t        | j                  d      t        | j                  d      | j                  | j
                  fz  }| j                  r+| j                  | j                  z  }|dt        |d      z  z  }|S )Nz %s: size=%s (%s), count=%i (%+i)FTr+   )r   r   r   r=   r   r>   r,   s      r   r/   zStatisticDiff.__str__a   sx    2>>		515::??	$$ ::ii$**,GN\'5%AAADr   c                 z    d| j                   | j                  | j                  | j                  | j                  fz  S )Nz9<StatisticDiff traceback=%r size=%i (%+i) count=%i (%+i)>r<   r"   s    r   r1   zStatisticDiff.__repr__m   s4    K>>499dnn::t00 	1r   c                     t        | j                        | j                  t        | j                        | j                  | j
                  fS r   )r   r=   r   r>   r   r   r"   s    r   r3   zStatisticDiff._sort_keyr   s7    DNN#TYYDOO$djj  	 r   Nr4   r9   r   r   r;   r;   F   s-     JI%39
1
 r   r;   c           	      2   g }|j                         D ]  \  }}| j                  |d       }|Rt        ||j                  |j                  |j                  z
  |j                  |j                  |j                  z
        }n7t        ||j                  |j                  |j                  |j                        }|j                  |        | j                         D ];  \  }}t        |d|j                   d|j                         }|j                  |       = |S Nr   )itemspopr;   r   r   append)	old_group	new_group
statisticsr   statpreviouss         r   _compare_grouped_statsrO   x   s    J$??, 
 	4==D1 !%DII,E!%TZZ(..-HJD !!%DII!%TZZ9D 	$
  %??,  	4YDII:q4::+F$  r   c                   V    e Zd Z	 dZd Zed        Zed        Zd Zd Z	d Z
d Zd	 Zy
)Frame_framec                     || _         y r   rR   r   frames     r   r   zFrame.__init__   s	    r   c                      | j                   d   S rF   rR   r"   s    r   filenamezFrame.filename       {{1~r   c                      | j                   d   S N   rR   r"   s    r   linenozFrame.lineno   rY   r   c                 `    t        |t              st        S | j                  |j                  k(  S r   r%   rQ   r&   rS   r'   s     r   r)   zFrame.__eq__   %    %'!!u||+,r   c                 `    t        |t              st        S | j                  |j                  k  S r   r_   r'   s     r   __lt__zFrame.__lt__   s%    %'!!ell*+r   c                 ,    t        | j                        S r   )r!   rS   r"   s    r   r#   zFrame.__hash__       DKK  r   c                 8    | j                   d| j                  S )N:rX   r]   r"   s    r   r/   zFrame.__str__   s    --55r   c                 <    d| j                   d| j                  dS )Nz<Frame filename=z lineno=>rg   r"   s    r   r1   zFrame.__repr__   s    26--MMr   N)r5   r6   r7   r8   r   propertyrX   r]   r)   rb   r#   r/   r1   r9   r   r   rQ   rQ      sU     I    -
,
!6Nr   rQ   c                   b    e Zd Z	 dZddZed        Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZddZy)	Traceback)_frames_total_nframeNc                 n    t        j                  |        t        t        |            | _        || _        y r   )r   r   tuplereversedrm   rn   )r   framestotal_nframes      r   r   zTraceback.__init__   s+    $
 Xf-.)r   c                     | j                   S r   )rn   r"   s    r   rs   zTraceback.total_nframe   s    !!!r   c                 ,    t        | j                        S r   )lenrm   r"   s    r   __len__zTraceback.__len__       4<<  r   c                     t        |t              rt        d | j                  |   D              S t	        | j                  |         S )Nc              3   2   K   | ]  }t        |        y wr   )rQ   .0traces     r   	<genexpr>z(Traceback.__getitem__.<locals>.<genexpr>        G%uG   )r%   slicerp   rm   rQ   r   indexs     r   __getitem__zTraceback.__getitem__   :    eU#G4<<3FGGGe,--r   c                 2    |j                   | j                  v S r   )rS   rm   rU   s     r   __contains__zTraceback.__contains__       ||t||++r   c                 ,    t        | j                        S r   )r!   rm   r"   s    r   r#   zTraceback.__hash__   s    DLL!!r   c                 `    t        |t              st        S | j                  |j                  k(  S r   r%   rl   r&   rm   r'   s     r   r)   zTraceback.__eq__   s%    %+!!-.r   c                 `    t        |t              st        S | j                  |j                  k  S r   r   r'   s     r   rb   zTraceback.__lt__   s%    %+!!u}},-r   c                     t        | d         S rF   )strr"   s    r   r/   zTraceback.__str__   s    47|r   c                 n    dt        |        }| j                  |dz  }|S |d| j                   dz  }|S )Nz<Traceback ri   z total_nframe=)rp   rn   rs   )r   ss     r   r1   zTraceback.__repr__   sO    %+'%HA  >$"3"3!4A66Ar   c                 R   g }||dkD  r| | d  }n| d | }n| }|rt        |      }|D ]|  }|j                  d|j                  d|j                         t	        j
                  |j                  |j                        j                         }|si|j                  d|z         ~ |S )Nr   z  File "z", line z    %s)rq   rI   rX   r]   	linecachegetlinestrip)r   limitmost_recent_firstlinesframe_slicerV   lines          r   formatzTraceback.format   s    qy"E67m"6ElK";/K  	.ELL!NNELL: ;$$U^^U\\BHHJDX_-	. r   r   )NF)r5   r6   r7   r8   r   rj   rs   rw   r   r   r#   r)   rb   r/   r1   r   r9   r   r   rl   rl      sT     -I* " "!.,"/
.
r   rl   c                 6    	 t        |       }|t        |      S y r   )r   rl   )objrr   s     r   get_object_tracebackr     s'     #3'F  r   c                   `    e Zd Z	 dZd Zed        Zed        Zed        Zd Z	d Z
d Zd	 Zy
)Trace_tracec                     || _         y r   r   r   r}   s     r   r   zTrace.__init__  s     r   c                      | j                   d   S rF   r   r"   s    r   domainzTrace.domain  rY   r   c                      | j                   d   S r[   r   r"   s    r   r   z
Trace.size  rY   r   c                 ,    t        | j                  dd   S )N   )rl   r   r"   s    r   r   zTrace.traceback#  s    $++ab/**r   c                 `    t        |t              st        S | j                  |j                  k(  S r   )r%   r   r&   r   r'   s     r   r)   zTrace.__eq__'  r`   r   c                 ,    t        | j                        S r   )r!   r   r"   s    r   r#   zTrace.__hash__,  rd   r   c                 L    | j                   dt        | j                  d      S )Nz: F)r   r   r   r"   s    r   r/   zTrace.__str__/  s    >><		5+IJJr   c                 j    d| j                   dt        | j                  d      d| j                  dS )Nz<Trace domain=z size=Fz, traceback=ri   )r   r   r   r   r"   s    r   r1   zTrace.__repr__2  s(    ;;TYY >P 	Qr   N)r5   r6   r7   r8   r   rj   r   r   r   r)   r#   r/   r1   r9   r   r   r   r     se     I
     + +-
!KQr   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)_Tracesc                 <    t        j                  |        || _        y r   )r   r   _traces)r   tracess     r   r   z_Traces.__init__8  s    $r   c                 ,    t        | j                        S r   )rv   r   r"   s    r   rw   z_Traces.__len__=  rx   r   c                     t        |t              rt        d | j                  |   D              S t	        | j                  |         S )Nc              3   2   K   | ]  }t        |        y wr   )r   r{   s     r   r~   z&_Traces.__getitem__.<locals>.<genexpr>B  r   r   )r%   r   rp   r   r   r   s     r   r   z_Traces.__getitem__@  r   r   c                 2    |j                   | j                  v S r   )r   r   r   s     r   r   z_Traces.__contains__F  r   r   c                 `    t        |t              st        S | j                  |j                  k(  S r   )r%   r   r&   r   r'   s     r   r)   z_Traces.__eq__I  s%    %)!!-.r   c                     dt        |       z  S )Nz<Traces len=%s>)rv   r"   s    r   r1   z_Traces.__repr__N  s     3t9,,r   N)	r5   r6   r7   r   rw   r   r   r)   r1   r9   r   r   r   r   7  s     
!.,/
-r   r   c                 p    t         j                  j                  |       } | j                  d      r| d d } | S )Nz.pyc)ospathnormcaseendswith)rX   s    r   _normalize_filenamer   R  s4    ww)H CR=Or   c                       e Zd Zd Zd Zy)
BaseFilterc                     || _         y r   )	inclusive)r   r   s     r   r   zBaseFilter.__init__Z  s	    "r   c                     t         r   )NotImplementedErrorr   s     r   _matchzBaseFilter._match]  s    !!r   N)r5   r6   r7   r   r   r9   r   r   r   r   Y  s    #"r   r   c                   J     e Zd Z	 d fd	Zed        Zd Zd Zd Zd Z	 xZ
S )Filterc                 |    t         |   |       || _        t        |      | _        || _        || _        || _        y r   )superr   r   r   _filename_patternr]   
all_framesr   )r   r   filename_patternr]   r   r   	__class__s         r   r   zFilter.__init__b  s:    #"!45E!F$r   c                     | j                   S r   )r   r"   s    r   r   zFilter.filename_patternk  s    %%%r   c                     t        |      }t        j                  || j                        sy| j                  y|| j                  k(  S )NFT)r   fnmatchr   r]   r   rX   r]   s      r   _match_frame_implzFilter._match_frame_implo  s?    &x0x)?)?@;;dkk)*r   c                 B    | j                  ||      | j                   z  S r   )r   r   r   s      r   _match_framezFilter._match_framex  s!    %%h7t~~;MNNr   c                       j                   r-t         fd|D              r j                  S  j                   S |d   \  }} j                  ||      S )Nc              3   H   K   | ]  \  }}j                  ||        y wr   )r   )r|   rX   r]   r   s      r   r~   z*Filter._match_traceback.<locals>.<genexpr>}  s*      6'x ))(F; 6s   "r   )r   anyr   r   )r   r   rX   r]   s   `   r   _match_tracebackzFilter._match_traceback{  sW    ?? 6+46 6~~% NN*+(|Hf$$Xv66r   c                     |\  }}}}| j                  |      }| j                  2| j                  r|xr || j                  k(  S |xs || j                  k7  S |S r   )r   r   r   )r   r}   r   r   r   rs   ress          r   r   zFilter._match  s^    05-i##I.;;"~~6$++ 565v45
r   )NFN)r5   r6   r7   r   rj   r   r   r   r   r   __classcell__r   s   @r   r   r   a  s4    7; & &+O	7r   r   c                   4     e Zd Z fdZed        Zd Z xZS )DomainFilterc                 2    t         |   |       || _        y r   )r   r   _domain)r   r   r   r   s      r   r   zDomainFilter.__init__  s    #r   c                     | j                   S r   )r   r"   s    r   r   zDomainFilter.domain  s    ||r   c                 J    |\  }}}}|| j                   k(  | j                   z  S r   )r   r   )r   r}   r   r   r   rs   s         r   r   zDomainFilter._match  s+    05-i$++%dnn*<==r   )r5   r6   r7   r   rj   r   r   r   r   s   @r   r   r     s!      >r   r   c                   L    e Zd Z	 d Zd Zed        Zd Zd Zd Z	d
dZ
d
dZy	)Snapshotc                 2    t        |      | _        || _        y r   )r   r   traceback_limit)r   r   r   s      r   r   zSnapshot.__init__  s     fo.r   c                     	 t        |d      5 }t        j                  | |t        j                         d d d        y # 1 sw Y   y xY w)Nwb)openpickledumpHIGHEST_PROTOCOL)r   rX   fps      r   r   zSnapshot.dump  s@    	 (D! 	;RKKb&"9"9:	; 	; 	;s	   &=Ac                 r    	 t        | d      5 }t        j                  |      cd d d        S # 1 sw Y   y xY w)Nrb)r   r   load)rX   r   s     r   r   zSnapshot.load  s5    	 (D! 	#R;;r?	# 	# 	#s   -6c                 b    |rt        fd|D              sy|rt        fd|D              ryy)Nc              3   @   K   | ]  }|j                          y wr   r   r|   trace_filterr}   s     r   r~   z)Snapshot._filter_trace.<locals>.<genexpr>  s$      <' $**51 <s   Fc              3   B   K   | ]  }|j                           y wr   r   r   s     r   r~   z)Snapshot._filter_trace.<locals>.<genexpr>  s'      8# $**511 8s   T)r   )r   include_filtersexclude_filtersr}   s      `r   _filter_tracezSnapshot._filter_trace  s<     <+:< < 8'68 8r   c                    	 t        |t              s!t        dt        |      j                  z        |rqg }g }|D ]1  }|j
                  r|j                  |       !|j                  |       3 | j                  j                  D cg c]  }| j                  |||      r| }}n$| j                  j                  j                         }t        || j                        S c c}w )Nz)filters must be a list of filters, not %s)r%   r   	TypeErrortyper5   r   rI   r   r   r   copyr   r   )r   filtersr   r   r   r}   
new_tracess          r   filter_traceszSnapshot.filter_traces  s    	
 '8,G"7m445 6 6 O O ' 9))#**<8#**<8	9
 .2[[-@-@ 8E!//0?057   8J 8
 ,,113J
D$8$8998s   C c                 &   |dvrt        d|      |r|dvrt        d|z        i }i }|sZ| j                  j                  D ]?  }|\  }}}}		 ||   }
	 ||
   }|xj
                  |z  c_        |xj                  dz  c_        A |S | j                  j                  D ]F  }|\  }}}}	|D ]8  }	 ||   }
	 ||
   }|xj
                  |z  c_        |xj                  dz  c_        : H |S # t        $ r1 |dk(  r|}n|dk(  r|d d }n|d   d   dff}t	        |      }
|
||<   Y w xY w# t        $ r t        |
|d      ||
<   Y w xY w# t        $ r$ |dk(  r|f}n|d   dff}t	        |      }
|
||<   Y w xY w# t        $ r t        |
|d      ||
<   Y w xY w)	N)r   rX   r]   zunknown key_type: )r]   rX   z/cumulative mode cannot by used with key type %rr   r]   r\   r   )
ValueErrorr   r   KeyErrorrl   r   r   r   )r   key_type
cumulativestats
tracebacksr}   r   r   trace_tracebackrs   r   rr   rM   rV   s                 r   	_group_byzSnapshot._group_by  s    >>xABB(*@@ 02:; < < 
,, E>C;o|
< *? ;IE +DII%IJJ!OJ!EN % ,, I>C;o|, IE6$.u$5	I$Y/		T)	

a
II$ G   <;.!0!X-!0!!4#21#5a#8!"<!> )& 1I2;J/<   E'0D!'DE)$E $ 6#x/&+XF',Qxm%5F$-f$5	,5
5)6 $ I+4Ya+Hi(IsH   C(/D%-E3/E4(7D"!D"%E E*E10E14FFc                     	 | j                  ||      }t        |j                               }|j                  dt        j
                         |S NT)reversekey)r	  listvaluessortr   r3   )r   r  r  groupedrL   s        r   rL   zSnapshot.statistics  sF    	 ..:6'..*+
)*=*=>r   c                     	 | j                  ||      }|j                  ||      }t        ||      }|j                  dt        j                         |S r  )r	  rO   r  r;   r3   )r   old_snapshotr  r  rK   rJ   rL   s          r   
compare_tozSnapshot.compare_to  sS    	
 NN8Z8	 **8Z@	+IyA
-*A*ABr   N)F)r5   r6   r7   r   r   staticmethodr   r   r   r	  rL   r  r9   r   r   r   r     s?    /; # #	:21f
r   r   c                  n    	 t               st        d      t               } t               }t	        | |      S )NzLthe tracemalloc module must be tracing memory allocations to take a snapshot)
is_tracingRuntimeErrorr   get_traceback_limitr   )r   r   s     r   take_snapshotr  '  s<     < < = 	=]F)+OFO,,r   )collections.abcr   r   	functoolsr   r   r   os.pathr   r   _tracemallocr   r   r   r   r;   rO   rQ   rl   r   r   r   r   r   r   r   r   r  r9   r   r   <module>r     s    . $      ;"%7 %7P/  / d( #N #N #NL J J JZ$Q $QN-h -6" "-Z -`>: >E EP	-r   