
    d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
T 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dS )    )SequenceIterable)total_orderingN)*)_get_object_traceback_get_tracesc                     dD ]a}t          |           dk     r|dk    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  } bd S )N)BKiBMiBGiBTiBd   r
   z%+.1f %sz%.1f %si (  r   z%+.0f %sz%.0f %si   )abs)sizesignunits        /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/tracemalloc.py_format_sizer      s    1  t99s??ts{{ 0!T4L0000 D$<////t99y  DEMM 0!T4L0000 D$<////     c                   :    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	S )
	StatisticzS
    Statistic difference on memory allocations between two Snapshot instance.
    	tracebackr   countc                 0    || _         || _        || _        d S Nr   )selfr   r   r   s       r   __init__zStatistic.__init__%   s    "	


r   c                 D    t          | j        | j        | j        f          S r   )hashr   r   r   r   s    r   __hash__zStatistic.__hash__*   s    T^TY
;<<<r   c                     t          |t                    st          S | j        |j        k    o| j        |j        k    o| j        |j        k    S r   )
isinstancer   NotImplementedr   r   r   r   others     r   __eq__zStatistic.__eq__-   sM    %++ 	"!!%/1 .I+.J%+-	/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    'N E22J   : 	Bi$*,GN\'5%A%AAADr   c                 0    d| j         | j        | j        fz  S )Nz)<Statistic traceback=%r size=%i count=%i>r   r"   s    r   __repr__zStatistic.__repr__>   s    ;>49dj9: 	;r   c                 *    | 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____doc__	__slots__r   r#   r)   r/   r1   r3    r   r   r   r      s          /I  
= = =/ / /  ; ; ;7 7 7 7 7r   r   c                   :    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	S )
StatisticDiffzd
    Statistic difference on memory allocations between an old and a new
    Snapshot instance.
    r   r   	size_diffr   
count_diffc                 L    || _         || _        || _        || _        || _        d S 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   s.    T^TYZ2 3 3 	3r   c                     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   r?   r'   s     r   r)   zStatisticDiff.__eq__X   st    %// 	"!!%/1 8I+8Neo58 J%+-8 Ou'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   sw    2>	51155:?	$$ : 	Bi$*,GN\'5%A%AAADr   c                 H    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   s*    K>49dn:t00 	1r   c                 v    t          | j                  | j        t          | j                  | j        | j        fS r   )r   r>   r   r?   r   r   r"   s    r   r3   zStatisticDiff._sort_keyr   s3    DN##TYDO$$dj  	 r   Nr4   r:   r   r   r<   r<   F   s          JI% % %3 3 39 9 9
 
 
1 1 1
         r   r<   c           	         g }|                                 D ]\  }}|                     |d           }|8t          ||j        |j        |j        z
  |j        |j        |j        z
            }n't          ||j        |j        |j        |j                  }|                    |           |                                  D ]9\  }}t          |d|j         d|j                   }|                    |           :|S Nr   )itemspopr<   r   r   append)	old_group	new_group
statisticsr   statpreviouss         r   _compare_grouped_statsrP   x   s   J$??,, 
  
 	4==D11 !%DI,E!%TZ(.-HJ JDD !!%DI!%TZ9 9D 	$$??,,    	4YDI:q4:+FF$r   c                   f    e Zd ZdZdZd Zed             Zed             Zd Z	d Z
d Zd	 Zd
 ZdS )Framez
    Frame of a traceback.
    _framec                     || _         d S r   rS   r   frames     r   r   zFrame.__init__   s    r   c                     | j         d         S rG   rS   r"   s    r   filenamezFrame.filename       {1~r   c                     | j         d         S N   rS   r"   s    r   linenozFrame.lineno   rZ   r   c                 Z    t          |t                    st          S | j        |j        k    S r   r%   rR   r&   rT   r'   s     r   r)   zFrame.__eq__   )    %'' 	"!!u|+,r   c                 Z    t          |t                    st          S | j        |j        k     S r   r`   r'   s     r   __lt__zFrame.__lt__   s)    %'' 	"!!el*+r   c                 *    t          | j                  S r   )r!   rT   r"   s    r   r#   zFrame.__hash__       DK   r   c                 $    | j         d| j        S )N:rY   r^   r"   s    r   r/   zFrame.__str__   s    ---55r   c                 (    d| j         d| j        dS )Nz<Frame filename=z lineno=>rh   r"   s    r   r1   zFrame.__repr__   s     26---MMr   N)r5   r6   r7   r8   r9   r   propertyrY   r^   r)   rc   r#   r/   r1   r:   r   r   rR   rR      s          I     X   X- - -
, , ,
! ! !6 6 6N N N N Nr   rR   c                   l    e Zd 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dS )	Tracebackz`
    Sequence of Frame instances sorted from the oldest frame
    to the most recent frame.
    )_frames_total_nframeNc                 ~    t          j        |            t          t          |                    | _        || _        d S r   )r   r   tuplereversedrn   ro   )r   framestotal_nframes      r   r   zTraceback.__init__   s:    $
 Xf--..)r   c                     | j         S r   )ro   r"   s    r   rt   zTraceback.total_nframe   s    !!r   c                 *    t          | j                  S r   )lenrn   r"   s    r   __len__zTraceback.__len__       4<   r   c                     t          |t                    r$t          d | j        |         D                       S t	          | j        |                   S )Nc              3   4   K   | ]}t          |          V  d S r   )rR   .0traces     r   	<genexpr>z(Traceback.__getitem__.<locals>.<genexpr>   (      GG%uGGGGGGr   )r%   slicerq   rn   rR   r   indexs     r   __getitem__zTraceback.__getitem__   M    eU## 	.GG4<3FGGGGGGe,---r   c                     |j         | j        v S r   )rT   rn   rV   s     r   __contains__zTraceback.__contains__       |t|++r   c                 *    t          | j                  S r   )r!   rn   r"   s    r   r#   zTraceback.__hash__   s    DL!!!r   c                 Z    t          |t                    st          S | j        |j        k    S r   r%   rm   r&   rn   r'   s     r   r)   zTraceback.__eq__   s)    %++ 	"!!-.r   c                 Z    t          |t                    st          S | j        |j        k     S r   r   r'   s     r   rc   zTraceback.__lt__   s)    %++ 	"!!u},-r   c                 ,    t          | d                   S rG   )strr"   s    r   r/   zTraceback.__str__   s    47||r   c                 `    dt          |            }| j        |dz  }n|d| j         dz  }|S )Nz<Traceback rj   z total_nframe=)rq   ro   rt   )r   ss     r   r1   zTraceback.__repr__   sG    '%++''%HAA6$"36666Ar   Fc                 X   g }||dk    r| | d          }n| d |         }n| }|rt          |          }|D ]r}|                    d|j        d|j                   t	          j        |j        |j                                                  }|r|                    d|z             s|S )Nr   z  File "z", line z    %s)rr   rJ   rY   r^   	linecachegetlinestrip)r   limitmost_recent_firstlinesframe_slicerW   lines          r   formatzTraceback.format   s    qyy"E677m"6E6lK 	0";//K  	. 	.ELLL!NNNELL: ; ; ;$U^U\BBHHJJD .X_---r   r   )NF)r5   r6   r7   r8   r9   r   rk   rt   rx   r   r   r#   r)   rc   r/   r1   r   r:   r   r   rm   rm      s          -I* * * * " " X"! ! !. . ., , ," " "/ / /
. . .
         r   rm   c                 F    t          |           }|t          |          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   rm   )objrs   s     r   get_object_tracebackr     s*     #3''F   tr   c                   v    e Zd ZdZdZd Zed             Zed             Zed             Z	d Z
d Zd	 Zd
 ZdS )Tracez"
    Trace of a memory block.
    _tracec                     || _         d S r   r   r   r~   s     r   r   zTrace.__init__  s     r   c                     | j         d         S rG   r   r"   s    r   domainzTrace.domain  rZ   r   c                     | j         d         S r\   r   r"   s    r   r   z
Trace.size  rZ   r   c                 .    t          | j        dd           S )N   )rm   r   r"   s    r   r   zTrace.traceback#  s    $+abb/**r   c                 Z    t          |t                    st          S | j        |j        k    S r   )r%   r   r&   r   r'   s     r   r)   zTrace.__eq__'  ra   r   c                 *    t          | j                  S r   )r!   r   r"   s    r   r#   zTrace.__hash__,  re   r   c                 @    | j         dt          | j        d          S )Nz: F)r   r   r   r"   s    r   r/   zTrace.__str__/  s"    >>><	5+I+I+IJJr   c                 T    d| j         dt          | j        d          d| j        dS )Nz<Trace domain=z size=Fz, traceback=rj   )r   r   r   r   r"   s    r   r1   zTrace.__repr__2  s5     ;;;TY > > > >P 	Qr   N)r5   r6   r7   r8   r9   r   rk   r   r   r   r)   r#   r/   r1   r:   r   r   r   r     s          I  
   X   X + + X+- - -
! ! !K K KQ Q Q Q Qr   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )_Tracesc                 <    t          j        |            || _        d S r   )r   r   _traces)r   tracess     r   r   z_Traces.__init__8  s    $r   c                 *    t          | j                  S r   )rw   r   r"   s    r   rx   z_Traces.__len__=  ry   r   c                     t          |t                    r$t          d | j        |         D                       S t	          | j        |                   S )Nc              3   4   K   | ]}t          |          V  d S r   )r   r|   s     r   r   z&_Traces.__getitem__.<locals>.<genexpr>B  r   r   )r%   r   rq   r   r   r   s     r   r   z_Traces.__getitem__@  r   r   c                     |j         | j        v S r   )r   r   r   s     r   r   z_Traces.__contains__F  r   r   c                 Z    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>)rw   r"   s    r   r1   z_Traces.__repr__N  s     3t99,,r   N)	r5   r6   r7   r   rx   r   r   r)   r1   r:   r   r   r   r   7  sn          
! ! !. . ., , ,/ / /
- - - - -r   r   c                     t           j                            |           } |                     d          r
| d d         } | S )Nz.pyc)ospathnormcaseendswith)rY   s    r   _normalize_filenamer   R  s?    w))H   !CRC=Or   c                       e Zd Zd Zd ZdS )
BaseFilterc                     || _         d S 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   r:   r   r   r   r   Y  s2        # # #" " " " "r   r   c                   P     e Zd Z	 d	 fd	Zed             Zd Zd Zd Zd Z	 xZ
S )
FilterNFc                     t                                          |           || _        t          |          | _        || _        || _        || _        d S r   )superr   r   r   _filename_patternr^   
all_framesr   )r   r   filename_patternr^   r   r   	__class__s         r   r   zFilter.__init__b  sL    ###"!45E!F!F$r   c                     | j         S r   )r   r"   s    r   r   zFilter.filename_patternk  s    %%r   c                     t          |          }t          j        || j                  sdS | j        dS || j        k    S )NFT)r   fnmatchr   r^   r   rY   r^   s      r   _match_frame_implzFilter._match_frame_implo  sE    &x00x)?@@ 	5;4dk)*r   c                 @    |                      ||          | j         z  S r   )r   r   r   s      r   _match_framezFilter._match_framex  s"    %%h77t~;MNNr   c                       j         r*t           fd|D                       r j        S  j         S |d         \  }}                     ||          S )Nc              3   J   K   | ]\  }}                     ||          V  d S r   )r   )r}   rY   r^   r   s      r   r   z*Filter._match_traceback.<locals>.<genexpr>}  sK       6 6'x ))(F;; 6 6 6 6 6 6r   r   )r   anyr   r   )r   r   rY   r^   s   `   r   _match_tracebackzFilter._match_traceback{  s|    ? 	7 6 6 6 6+46 6 6 6 6 ,~% N*+(|Hf$$Xv666r   c                     |\  }}}}|                      |          }| j        !| j        r|o
|| j        k    S |p
|| j        k    S |S r   )r   r   r   )r   r~   r   r   r   rt   ress          r   r   zFilter._match  s^    05-i##I..;"~ 66$+ 565v45
r   )NFN)r5   r6   r7   r   rk   r   r   r   r   r   __classcell__r   s   @r   r   r   a  s        7;      & & X&+ + +O O O	7 	7 	7      r   r   c                   :     e Zd Z fdZed             Zd Z xZS )DomainFilterc                 X    t                                          |           || _        d S 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                 8    |\  }}}}|| j         k    | j         z  S r   )r   r   )r   r~   r   r   r   rt   s         r   r   zDomainFilter._match  s'    05-i$+%dn*<==r   )r5   r6   r7   r   rk   r   r   r   r   s   @r   r   r     sb               X> > > > > > >r   r   c                   V    e Zd ZdZd Zd Zed             Zd Zd Z	d Z
dd	Zdd
ZdS )SnapshotzB
    Snapshot of traces of memory blocks allocated by Python.
    c                 <    t          |          | _        || _        d S r   )r   r   traceback_limit)r   r   r   s      r   r   zSnapshot.__init__  s     foo.r   c                     t          |d          5 }t          j        | |t          j                   ddd           dS # 1 swxY w Y   dS )z1
        Write the snapshot into a file.
        wbN)openpickledumpHIGHEST_PROTOCOL)r   rY   fps      r   r   zSnapshot.dump  s     (D!! 	;RKb&"9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   !?AAc                 ~    t          | d          5 }t          j        |          cddd           S # 1 swxY w Y   dS )z.
        Load a snapshot from a file.
        rbN)r   r   load)rY   r   s     r   r   zSnapshot.load  s    
 (D!! 	#R;r??	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   266c                     |rt          fd|D                       sdS |rt          fd|D                       rdS dS )Nc              3   B   K   | ]}|                               V  d S r   r   r}   trace_filterr~   s     r   r   z)Snapshot._filter_trace.<locals>.<genexpr>  sE       < <' $**511 < < < < < <r   Fc              3   D   K   | ]}|                                V  d S r   r   r   s     r   r   z)Snapshot._filter_trace.<locals>.<genexpr>  sH       8 8# $**5111 8 8 8 8 8 8r   T)r   )r   include_filtersexclude_filtersr~   s      `r   _filter_tracezSnapshot._filter_trace  s     	 < < < <+:< < < < < u 	 8 8 8 8'68 8 8 8 8 utr   c                     t          |t                    s$t          dt          |          j        z            |rVg g |D ]4}|j        r                    |                               |           5 f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                 B    g | ]}                     |          |S r:   )r   )r}   r~   r   r   r   s     r   
<listcomp>z*Snapshot.filter_traces.<locals>.<listcomp>  sE     8 8 8E!//0?057 78% 8 8 8r   )r%   r   	TypeErrortyper5   r   rJ   r   r   copyr   r   )r   filtersr   
new_tracesr   r   s   `   @@r   filter_traceszSnapshot.filter_traces  s     '8,, 	6G"7mm45 6 6 6 	4 O O ' 9 9) 9#**<8888#**<88888 8 8 8 8 8T[-@ 8 8 8JJ
 ,1133J
D$8999r   c                 >   |dvrt          d|          |r|dvrt          d|z            i }i }|s| j        j        D ]}|\  }}}}		 ||         }
nO# t          $ rB |dk    r|}n"|dk    r|d d         }n|d         d         dff}t	          |          }
|
||<   Y nw xY w	 ||
         }|xj        |z  c_        |xj        dz  c_        # t          $ r t          |
|d          ||
<   Y w xY wn| j        j        D ]}|\  }}}}	|D ]}	 ||         }
n9# t          $ r, |dk    r|f}n|d         dff}t	          |          }
|
||<   Y nw xY w	 ||
         }|xj        |z  c_        |xj        dz  c_        o# t          $ r t          |
|d          ||
<   Y w xY w|S )	N)r   rY   r^   zunknown key_type: )r^   rY   z/cumulative mode cannot by used with key type %rr   r^   r]   r   )
ValueErrorr   r   KeyErrorrm   r   r   r   )r   key_type
cumulativestats
tracebacksr~   r   r   trace_tracebackrt   r   rs   rN   rW   s                 r   	_group_byzSnapshot._group_by  s   >>>*xxABBB 	<(*@@@ 02:; < < < 
 '	I, E E>C;o|
< *? ;II < < <;..!0!X--!0!!4#21#5a#8!"<!> )& 1 1I2;J///<E +DII%IIJJ!OJJJ E E E'0D!'D'DE)$$$E#E* , I I>C;o|, I IE6$.u$5		# 6 6 6#x//&+XFF',Qxm%5F$-f$5$5	,5
5)))6I$Y/		T)		

a


# I I I+4Ya+H+Hi(((II  sI   AA	B B $(CC.-C.D3E
E(E88FFFc                     |                      ||          }t          |                                          }|                    dt          j                   |S )zd
        Group statistics by key_type. Return a sorted list of Statistic
        instances.
        Treversekey)r  listvaluessortr   r3   )r   r  r  groupedrM   s        r   rM   zSnapshot.statistics  sM    
 ..:66'..**++
)*=>>>r   c                     |                      ||          }|                     ||          }t          ||          }|                    dt          j                   |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  rP   r  r<   r3   )r   old_snapshotr  r  rL   rK   rM   s          r   
compare_tozSnapshot.compare_to  sZ     NN8Z88	 **8Z@@	+IyAA
-*ABBBr   N)F)r5   r6   r7   r8   r   r   staticmethodr   r   r  r  rM   r  r:   r   r   r   r     s         / / /; ; ; # # \#	 	 	: : :21 1 1f   
 
 
 
 
 
r   r   c                      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   get_traceback_limitr   )r   r   s     r   take_snapshotr  '  sK     << = < = = 	=]]F)++OFO,,,r   )collections.abcr   r   	functoolsr   r   r   os.pathr   r   _tracemallocr   r   r   r   r<   rP   rR   rm   r   r   r   r   r   r   r   r   r  r:   r   r   <module>r!     s   . . . . . . . . $ $ $ $ $ $            ; ; ; ; ; ; ; ;  "%7 %7 %7 %7 %7 %7 %7 %7P/  /  /  /  /  /  /  / d  ( #N #N #N #N #N #N #N #NL J J J J J J J JZ  $Q $Q $Q $Q $Q $Q $Q $QN- - - - -h - - -6  " " " " " " " "- - - - -Z - - -`> > > > >: > > >E E E E E E E EP	- 	- 	- 	- 	-r   