
    YfSL                         d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZ d dlZd dlmZ  ede      Z ede      Z ede      Z ede      Z ed	      Z G d
 d      Zy)    Ndefaultdict)	AnyDefaultDictDictListNewTypeOptionalSetTupleTypeVar)RunningStatsAddressFilename
LineNumberByteCodeIndexTc            	       f   e Zd ZddZddZddZddZddZdefd	Z	g d
Z
dedej                  ddfdZedeeeeef   f   deeeeef   f   ddfd       Zedeeeeef   f   deeeeef   f   ddfd       Zedeeeeef   f   deeeeef   f   ddfd       Zdej                  ddfdZy)ScaleneStatisticsreturnNc                 >   d| _         d| _        d| _        t        d       | _        t        d       | _        t        d       | _        t        d       | _        t        d       | _        t        d       | _	        t        d       | _
        t        t              | _        t        t              | _        t        d       | _        t        d	       | _        t        d
       | _        t        d       | _        t        d       | _        t        d       | _        t)        d      t+        d      t-        d      f| _        t        d       | _        t        d       | _        t        d       | _        t        d       | _        t        d       | _        d| _        d| _        d| _        d| _         d| _!        d| _"        d| _#        d| _$        d | _%        g | _&        t        d       | _'        t        d       | _(        t        d       | _)        t        d       | _*        y )Nr   c                       t        t              S Nr   float     Z/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/scalene/scalene_statistics.py<lambda>z,ScaleneStatistics.__init__.<locals>.<lambda>1       E 2 r   c                       t        t              S r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>7   r    r   c                       t        t              S r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda><   r    r   c                       t        t              S r   r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>A       L 9 r   c                       t        t              S r   r$   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>F   r%   r   c                       t        t              S r   r$   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>K   r%   r   c                       t        t              S r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>V   r    r   c                       t        t              S r   r   intr   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>[       C 0 r   c                       t        t              S r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>`   r    r   c                       t        t              S r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>e   r    r   c                       t        t              S r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>j   r    r   c                       t        t              S r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>o   r    r    0x0c                       t        t              S r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>{   r    r   c                       t        t              S r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>   r    r   c                       t        t              S r   r*   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>   r,   r   c                       t        t              S r   r*   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>   r,   r   c                      t        d       S )Nc                       y)N)r   r   r   r   r   r   r   z>ScaleneStatistics.__init__.<locals>.<lambda>.<locals>.<lambda>   s    r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>   s    ,< = r           r:   r:   c                       t        t              S r   )r   listr   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>   s    D 1 r   c                      t        d       S )Nc                      t               S r   )setr   r   r   r   z>ScaleneStatistics.__init__.<locals>.<lambda>.<locals>.<lambda>   s    CE r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>   s    M : r   c                      t        d       S )Nc                      t        d      S )Nr1   )r   r   r   r   r   z>ScaleneStatistics.__init__.<locals>.<lambda>.<locals>.<lambda>   s
    HRL r   r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>   s    ,@ A r   c                      t        d      S )N   )r   r   r   r   r   z,ScaleneStatistics.__init__.<locals>.<lambda>   s
    JqM r   )+
start_timeelapsed_timealloc_samplesr   stackscpu_samples_pythoncpu_samples_cgpu_samplesgpu_mem_samplescpu_utilizationcore_utilizationr   cpu_samplesmalloc_samplesmemory_malloc_samplesmemory_malloc_countmemory_current_footprintmemory_max_footprintmemory_current_highwater_markmemory_aggregate_footprintr   r   r   last_malloc_triggeredmemory_python_samplesmemory_free_samplesmemory_free_countmemcpy_samples
leak_scoreallocation_velocitytotal_cpu_samplestotal_gpu_samplestotal_memory_malloc_samplestotal_memory_free_samplescurrent_footprintmax_footprintmax_footprint_python_fractionmax_footprint_locmemory_footprint_samplesper_line_footprint_samples	bytei_mapfunction_mapfirstline_mapselfs    r   __init__zScaleneStatistics.__init__    sX   !" $% #$ .9-> 23 	 23 	 23 	 9: 	 9: 	 9: 	
 3>e2D 6A5G
 23 	" 01 	  23 	% 23 	! 23 	* 23 	' RLqMENL
" 23 	" 23 	  01 	 01 	 => 	 9C  ), ), 36( 14& ), %(56*HL;=%
 12 	' :; 	 AB 	 :E!:
r   c                    d| _         d| _        d| _        | j                  j	                          | j
                  j	                          | j                  j	                          | j                  j	                          | j                  j	                          | j                  j	                          | j                  j	                          | j                  j	                          | j                  j	                          | j                  j	                          | j                  j	                          | j                  j	                          | j                   j	                          | j"                  j	                          | j$                  j	                          | j&                  j	                          | j(                  j	                          | j*                  j	                          d| _        d| _        d| _        d| _        d| _        | j6                  j	                          t9        d      t;        d      t=        d      f| _        d| _         | jB                  j	                          | jD                  j	                          y)z1Reset all statistics except for memory footprint.r   r:   r1   r2   r9   N)#rD   rE   rF   rG   clearrH   rI   rL   rM   rN   rJ   rO   rP   rQ   rR   rS   rT   rU   rW   rX   rY   rZ   r]   r^   r_   r`   ra   r[   r   r   r   rV   r\   rf   rg   rj   s    r   rn   zScaleneStatistics.clear   s   %%'  """$##%  !!#""((*  &&(%%++-!!'')**002''--/""((*  &&($$&!!#!$!$+.(),&!$RLqMEN&
"
 $. ''--/r   c                     | j                          d| _        d| _        d| _        | j                  j                          y)zClear all statistics.r   N)rn   ra   rb   rd   rf   rj   s    r   	clear_allzScaleneStatistics.clear_all   s5    

!"!%''--/r   c                 6    t        j                          | _        y)zStart the timer.N)timerD   rj   s    r   start_clockzScaleneStatistics.start_clock   s    ))+r   c                     | j                   dkD  r4| xj                  t        j                         | j                   z
  z  c_        d| _         y)zStop the timer.r   N)rD   rE   rr   rj   s    r   
stop_clockzScaleneStatistics.stop_clock   s5    ??Qt!>>r   filenamec                    t               }| j                  |_        | j                  |_        | j                  |_        | j                  |_        t        d      }| j                  |_        | j                  |_        | j                  |   D ]J  }| j                  |   |   }|dk(  r|j                  |   |xx   | j                  |   |   z  cc<   |j                  |   |xx   | j                  |   |   z  cc<   |j                  |   |xx   | j                  |   |   z  cc<   |j                  |   |xx   | j                  |   |   z  cc<   |j                  |   |xx   | j                  |   |   z  cc<   |j                  |   |xx   | j                  |   |   z  cc<   |j                  |   |xx   | j                  |   |   z  cc<   |j                  |   |xx   | j                  |   |   z  cc<   |j                   |   |xx   | j                   |   |   z  cc<   |j"                  |   |xx   | j"                  |   |   z  cc<   |j$                  |   |xx   | j$                  |   |   z  cc<   |j&                  |   |xx   | j&                  |   |   z  cc<   | j(                  |   |   D ],  }|j(                  |   |   j+                  t-        |             . |j.                  |   |xx   | j.                  |   |   z  cc<   |j0                  |   |   d   | j0                  |   |   d   z   |j0                  |   |   d   | j0                  |   |   d   z   f|j0                  |   |<   t3        |j4                  |   |   | j4                  |   |         |j4                  |   |<   |j6                  |   |xx   | j6                  |   |   z  cc<   M |S )z0Produce aggregated statistics for each function.rC   z<module>r   )r   rE   r]   r^   r_   r   rh   ri   rI   rH   rJ   rK   rL   rM   rf   rQ   rY   rP   rW   rX   rg   addr   rZ   r[   maxrS   rU   )rk   rv   fn_statsfirst_line_noline_nofn_nameindexs          r   build_function_statsz&ScaleneStatistics.build_function_stats   s   $& $ 1 1%)%;%;"%)%;%;"/3/O/O,"1 $ 1 1!%!3!3((2 ;	DG''1':G*$""7+##H-g67  ''0((27;<    )-8D<L<L== 8 $$W-%%h/89  $$W-%%h/89  %%g.&&x09:  //800:7CD  ((1))(3G<=  &&w/''1':;  **73++H5g>?  **73++H5g>?  ((1))(3G<=  1': ""7+M:>>!%( ##G,$$X.w78  ##G,];A>//(+G4Q78##G,];A>//(+G4Q78;H(7 EH--g6}E))(3G<EH))'2=A //800:7CD s;	Dx r   )rb   rd   ra   rE   rF   rG   r]   rI   rH   rg   rN   rL   rM   rP   rW   rX   rZ   rS   rf   r`   r_   re   rh   ri   rJ   r^   rQ   rY   piddir_namec           
      L   t         j                  D cg c]  }t        | |       }}t        j                  j                  |d| dt        t        j                                      }t        |d      5 }t        j                  ||       ddd       yc c}w # 1 sw Y   yxY w)z@Output statistics for a particular process to a given directory.scalene-wbN)r   payload_contentsgetattrospathjoinstrgetpidopencloudpickledump)rk   r   r   npayloadout_filenameout_files          r   output_statszScaleneStatistics.output_stats`  s     '8&H&H
!"GD!
 

 ww||uAc"))+&6%78
 ,% 	0Wh/	0 	0
	0 	0s   B5BB#destsrcc                 V    |D ]$  }||   D ]  }||   |   }| |   |xx   |z  cc<    & y)z9Increment single-line dest samples by their value in src.Nr   )r   r   rv   linenovs        r   increment_per_line_samplesz,ScaleneStatistics.increment_per_line_samplesm  sH      	,Hh- ,M&)Xv&!+&,	,r   c                 R    |D ]"  }||   D ]  }| |   |xx   ||   |   z  cc<    $ y)zIncrement CPU utilization.Nr   r   r   rv   r   s       r   increment_cpu_utilizationz+ScaleneStatistics.increment_cpu_utilizationx  G      	@Hh- @Xv&#h-*??&@	@r   c                 R    |D ]"  }||   D ]  }| |   |xx   ||   |   z  cc<    $ y)zIncrement core utilization.Nr   r   s       r   increment_core_utilizationz,ScaleneStatistics.increment_core_utilization  r   r   the_dir_namec           	         t        j                  |      }t        |j                  t        j
                  j                  dd                  D ]  }t        j
                  j                  |      dk(  r't        |d      5 }t        j                  |      }	 |j                         }t               }t        t        j                        D ]  \  }}	t!        ||	||           |j"                  | j"                  kD  r"|j"                  | _        |j$                  | _        t'        | j(                  |j(                        | _        | j+                  | j,                  |j,                         | j/                  | j0                  |j0                         t'        | j2                  |j2                        | _        | xj4                  |j4                  z  c_        | j6                  j9                  |j6                         | xj:                  |j:                  z  c_        | xj<                  |j<                  z  c_        | j?                  | j@                  |j@                         | j?                  | jB                  |jB                         | j?                  | jD                  |jD                         | j?                  | jF                  |jF                         | j?                  | jH                  |jH                         | jH                  D ]9  }
| jH                  |
   D ]%  }| jH                  |
   |   jK                  d        ' ; | j?                  | jL                  |jL                         | j?                  | jN                  |jN                         | j?                  | jP                  |jP                         | j?                  | jR                  |jR                         | j?                  | jT                  |jT                         |jV                  D ]~  }
|jV                  |
   D ]j  }|jV                  |
   |   }| jV                  |
   |xx   |z  cc<   t'        | jX                  |
   |   |jX                  |
   |         | jX                  |
   |<   l  |jZ                  D ]&  }
| jZ                  |
xx   |jZ                  |
   z  cc<   ( | xj\                  |j\                  z  c_.        | xj^                  |j^                  z  c_/        | xj`                  |j`                  z  c_0        | j`                  jK                  d        |jb                  je                         D ]A  \  }}|| jb                  v r| jb                  |   j9                  |       3|| jb                  |<   C | jf                  j9                  |jf                         ddd       t	        jh                  |        y# t        $ r Y ddd       w xY w# 1 sw Y   :xY w)	z*Merge all statistics in a given directory.z**zscalene*r   rbNc                     | d   S Nr   r   xs    r   r   z/ScaleneStatistics.merge_stats.<locals>.<lambda>  s
    !A$ r   )keyc                     | d   S r   r   r   s    r   r   z/ScaleneStatistics.merge_stats.<locals>.<lambda>  s
    1 r   )5pathlibPathr<   globr   r   r   getsizer   pickle	UnpicklerloadEOFErrorr   	enumerater   setattrrb   rd   ry   ra   r   rL   r   rM   rE   rF   rG   updater]   r^   r   rI   rH   rJ   rZ   rf   sortrQ   rP   rW   rX   rY   rg   rS   rN   r`   r_   re   rh   itemsri   remove)rk   r   the_dirffile	unpicklervaluer   ir   rv   r   r   kvals                  r   merge_statszScaleneStatistics.merge_stats  sE   ,,|,gll277<<j#ABC ]	Awwq!Q&a X;$",,T2	%NN,E &'%&7&H&HI ,DAqAq%(+,??T%7%77)*D&-.-@-@D*),**A,?,?*& ..((!*;*; //))1+=+= %((9(91>>$J!""aoo5"""188,&&!*=*==&&&!*=*==&//&& //++Q-A-A //$$amm //'')9)9 //3300 !% ? ? H"&"A"A("K 77A&INN . O 
 //,,a.C.C //..0G0G //..0G0G //,,a.C.C //**A,?,? !" H"#++h"7 KK1&9x08A=8FI 55h?G228<VDG11(;FC !" JH$$X.!--2II.J..!2M2MM.00110 --1K1KK- --22~2Fnn224 3FAsD---))!,33C8/2))!,	3
 ""))!//:qX;r IIaL{]	   X; X;	X; X;s1   W2W(TW2	W/#W2.W//W22W;	)r   N)__name__
__module____qualname__rl   rn   rp   rs   ru   r   r   r   r+   r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   r      sx   [
z$R0&FX FP@0 0w|| 0 0 ,8T*a-001,(DQ//0, 
, , @8T*l":;;<@(D\!9::;@ 
@ @ @8T*l":;;<@(D\!9::;@ 
@ @` ` `r   r   )r   r   r   rr   collectionsr   typingr   r   r   r   r	   r
   r   r   r   r   scalene.runningstatsr   r   r   r   r+   r   r   r   r   r   r   r   <module>r      sp    	    #
 
 
  -
)S
!:s#\3'
-CLO Or   