
    YfO                         d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZ ej4                  d	k7  rd d
lmZ  G d d      Zy)    N)OrderedDictdefaultdict)
itemgetter)Path)AnyCallableDictListOptional)ScaleneLeakAnalysis)Filename
LineNumberScaleneStatistics)ScaleneAnalysiswin32)rdpc                      e Zd Zededefd       Zededefd       ZdZdZ	dZ
dZd!d
Zdee   dedefdZddddedededededeeegef   dededeeef   fdZ	 	 d"dedededeeegef   dedededeee      dededeeef   fd Zy	)#ScaleneJSON
size_in_mbreturnc                 Z    | dz  }|dz  }|dkD  r	| dz  ddS |dkD  r	| dz  ddS | ddS )z;Return a string corresponding to amount of memory consumed.i   r      3.3fz TBz GBz MB )r   	gigabytes	terabytess      T/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/scalene/scalene_json.pymemory_consumed_strzScaleneJSON.memory_consumed_str   s`     $&	%	q=!G+T2#66]!D($/s33 &c**    
time_in_msc                     | dz  }| dz  dz  }| dz  dz  }| dz  }| dz  dz  }| dz  dz  }|dkD  r|dd|dd|dd	S |dkD  r
|dd|dd	S |dkD  r|dd	S | dd
S )Ni6 i`  i  r   z.0fzh:zm:r   smsr   )r    hoursminutessecondshours_exactminutes_exactseconds_exacts          r   time_consumed_strzScaleneJSON.time_consumed_str!   s    g%'E1%$. 7*#g-6#e+t319!#&bs(;2mD=QQRSSq[#C(=*>a@@q[#D)++ &b))r      
   d   Nc                      d| _         d| _        y )N F)output_filegpu)selfs    r   __init__zScaleneJSON.__init__?   s     r   samplesmax_footprintc                    t        |      | j                  k  r|S t        |      d| j                  z  z  dz  }t        ||      }t        |      | j                  kD  r)t        t	        j
                  || j                              }|S )N      )epsilon)lenmax_sparkline_samplesr   sortedrandomsample)r2   r4   r5   r9   new_sampless        r   compress_sampleszScaleneJSON.compress_samplesF   s     w<4555N w<1t'A'A#ABaG'73{d888 k4+E+EFK r   F)profile_memoryforce_printfnamefname_printline_nolinestatsprofile_this_coderA   rB   c                x   |sB |||      s9i d|d|ddddddddddd	dd
ddddddddddddddddddg iS |j                   |   |   }	t        d|	      }	|j                  |   |   }
|j                  |   |   }|j                  |   |   }|j
                  r%|	dz  |j
                  z  }|
dz  |j
                  z  }nd}d}|j                  r|dz  |j                  z  }nd}|j                  |   |   }|j                  |   |   }|j                  |   |   }|j                  sdn||j                  z  }|sdn||z  }|dk(  r|j                  |   |   n|j                  |   |   |z  }|j                  |   |   }||kD  r|}||z   }|j                  |   |   j                         }|j                  |   |   j                         }|d|z
  z  }||z  }||z  }~|j                   |   |   }|j"                  r|d|j"                  z  z  }nd}| j%                  |j&                  |   |   |j(                        |j&                  |   |<   i d|d|d|d|d|d|d|d	|j                         d
|j+                         d|d|d|d|d|d|d|d|d|j&                  |   |   iS )z<Print at most one line of the profile (true == printed one).linenorF   n_core_utilizationr   n_cpu_percent_cn_cpu_percent_pythonn_sys_percentn_gpu_percentn_gpu_avg_memory_mbn_gpu_peak_memory_mb	n_peak_mbn_growth_mbn_avg_mb	n_mallocsn_malloc_mbn_usage_fractionn_python_fractionn_copy_mb_smemory_samplesr-   g      ?r   )cpu_samples_cmaxcpu_samples_pythongpu_samplesgpu_mem_samplestotal_cpu_samplestotal_gpu_samplesmemory_malloc_samplesmemory_malloc_countmemory_python_samplestotal_memory_malloc_samplesmemory_aggregate_footprintmemory_max_footprintcpu_utilizationmeancore_utilizationmemcpy_sampleselapsed_timer@   per_line_footprint_samplesr5   peak)r2   rC   rD   rE   rF   rG   rH   rA   rB   n_cpu_samples_cn_cpu_samples_pythonn_gpu_samplesn_gpu_mem_samplesrL   rM   rO   rV   rU   n_python_malloc_mbrW   rX   rT   rR   n_cpu_percentmean_cpu_utilmean_core_utilrN   n_copy_brY   s                                r   output_profile_linezScaleneJSON.output_profile_line]   s    #4UG#D' %a "1	
 '     &q ' Q q A Q q #A  $Q!" q#$ !"% ,  --e4W= a1$77>wG))%09!11%8A ""-3e6M6MMO$s*U-D-DD !  O#$ "")C/%2I2IIMM 11%8A--e4W=	"88?H 44 u@@@ 	 !A&8;&F 	 A~ ,,U3G<11%8AIM 	 ..u5g>	
 i H'*>> --e4W=BBD//6w?DDF%})<=-=(''.w7"kE4F4F&FGKK !!,,U3G<
 	((/	

g
D
 !.
 	

 #$8
 ]
 ]
 "#4#9#9#;
 #$5$:$:$<
 
 9
 
 
 ;
  0
   !2!
" ;#
$ e>>uEgN%
 	
r   programpidpython_alias_dirprogram_pathentrypoint_dirprogram_argsreduced_profilec                   0 |sj                  |       j                  sj                  sj                  si S t	        t        t	        j                  j                               t	        j                  j                               z   t	        j                  j                               z   t	        j                  j                               z               }|si S d}|	r`| j                  j                  j                        _        j                  d   dkD  r*dj                  d   z  j                  d   z  }ng _        t        j                   d|      }|r t#        d|j%                  d      z   dz         }j&                  j                         D ]P  }j&                  |   \  }}}}||j                  z  |j                  z  |j                  z  fj&                  |<   R g }j&                  j                         D ]5  }g }|j)                  |       |j+                  |j&                  |   f       7 i d|d	|d
|d|dj,                  dj.                  d|dj                  dj0                  dj2                  rj2                  d   nddj2                  rj2                  d   nddi d| j4                  d|	dj                  d|}g }t7        |fd      D ]j  0t#        0      0	 dj8                  0   z  j.                  z  }j<                  0   | j>                  k  r|| j@                  k  rZ|j+                  0       l |rjC                  ||       ddiS tE        |      dk(  ri S |D ]  00}t        j                   d|      }|r t#        d|j%                  d      z   dz         }tG        tH              }jJ                  0   D ]6  }jL                  0   |   }jN                  0   |   }|r	||z  ||<   2|||<   8 tQ        t7        |jS                         tU        d      d            }tW        jX                  ||0      }t7        |tU        d      d      }i }|D ]$  \  }}} || j.                  z  d|t[        |      <   & j                  sd}ndj8                  0   z  j                  z  }0}!	 t]        |!d d!"      5 }"|"j_                         }#ddd       d#je                  #      }$tg        jh                  |$      }%tg        jj                  |$      }&tg        jl                  |$      }'|g ||'d$|d   |<   to        |#d%      D ]  \  }(})|)jq                  d&d'      })|)jq                  d(d)      })|)jq                  d*d+      })| js                  0|tu        |(      |)||	d,-      }*|*sa|%|(   d   |*d.<   |%|(   d   |*d/<   |&|(   d   |*d0<   |&|(   d   |*d1<   |
r5tw        jv                  |*      }+|+d2= |+d3= ty        |+j{                               s|d   |   d4   j+                  |*        j}                  0      },d,}-t               }.|.t        |,j                  j                               z  }.|.t        |,j                  j                               z  }.|.t        |,j                  j                               z  }.|.t        |,j                  j                               z  }.ty        0fd5|.D              }-g |d   |   d6<   |-st7        |.fd7      D ]Y  }/|/0k(  r	| js                  |/|/tu        d      |/|,||	d-      }*|*s.j~                  |/   |*d3<   |d   |   d6   j+                  |*       [  |S # t:        $ r d}Y w xY w# 1 sw Y   xY w# t`        tb        f$ r Y 9w xY w)8zWrite the profile out.g        r+   r   g      Y@z_ipython-input-([0-9]+)-.*[]ry   r}   argsfilenamealloc_sampleselapsed_time_secgrowth_ratemax_footprint_mbmax_footprint_python_fractionmax_footprint_fnameNmax_footprint_linenofilesr1   memoryr4   stacksc                 (    j                   |     | fS N)cpu_samples)frG   s    r   <lambda>z-ScaleneJSON.output_profiles.<locals>.<lambda>L  s    U..q12A6 r   )keyr-   is_childT)r   reverse)
likelihoodvelocity_mb_srzutf-8)encodingr/   )percent_cpu_timelinesleaksimports)start&z\u0026<z\u003c>z\u003eF)rC   rD   rE   rF   rG   rH   rA   rB   start_region_lineend_region_linestart_outermost_loopend_outermost_looprF   rJ   r   c              3   (   K   | ]	  }|k7    y wr   r   ).0fnrC   s     r   	<genexpr>z.ScaleneJSON.output_profiles.<locals>.<genexpr>  s     "E22;"Es   	functionsc                 "    j                   |    S r   )firstline_map)krG   s    r   r   z-ScaleneJSON.output_profiles.<locals>.<lambda>  s    %"5"5a"8 r   )@merge_statsr`   re   total_memory_free_sampleslistsetr]   keysr[   memory_free_samplesrb   r@   memory_footprint_samplesr5   allocation_velocityrematchr   groupr   extendappendr   rl   r   max_footprint_locr1   r<   r   ZeroDivisionErrormalloc_samplesmalloc_thresholdcpu_percent_thresholdoutput_statsr:   r   float	bytei_maprf   rc   r   itemsr   r   compute_leaksstropen	readlinesFileNotFoundErrorOSErrorjoinr   find_regionsfind_outermost_loopget_native_imported_modules	enumeratereplacerx   r   copyanyvaluesbuild_function_statsr   )1r2   ry   rG   rz   rH   r{   r|   r}   r~   rA   r   all_instrumented_filesr   resultstkcountpython_timec_timer   stksthis_stkoutputreport_filesr   rD   avg_mallocsrE   rV   r   reported_leaksleak_linenoleak_likelihoodleak_velocity
full_fnamesource_file
code_linescode_strenclosing_regions
outer_loopr   rJ   rF   profile_lineprofile_line_copyfn_statsprint_fn_summaryall_samplesfn_namerC   s1     `                                             @r   output_profileszScaleneJSON.output_profiles   s    ./ ''5533 I15U--2245u**//123u0055789 u22779:;2
 &I-1-B-B..0C0C.E*
 ((+a///23//23  .0E* 7AsV\\!_4s:;G <<$$& 	HC8=S8I5UK!&!,u/F/F!F!'%*A*A!A!,u/F/F!F!HELL	H <<$$& 	7C"$HOOC KK5<<#456	7
"
w"
n"
 L"
 	"

 U00"
  2 2"
 ;"
  3 3"
 ,e.Q.Q"
 "&& $)#:#:1#="
 #&& %*$;$;A$>"
  R!"
" 488#"
$ n%"
& u55'"
( d)"
0 (*"6
 	'E UOE%''./(() ! $$U+d.C.CC$t'A'AA&-	'4 s$45 %%|!I! P	E  KXX;[IF&sV\\!_'<s'BC 4?u3EK ??51 7#>>uEgN11%8A+6+>K( ,7K(7 &{((*
1tLK (55UKE
 5jmTBENAF =o}"1%2U5G5G%G4s;/0 **#$  %++E22U5L5LL !
 J*cG< 9!,!6!6!8J9 wwz*H / < <X F(<<XFJ%AA(KG %5'"	,F7OK( !**A > "O ||C3||C3||C3#77 +&v.&7#1 %  8 	   8I99L!45 7H77L!23 <Ff;M<L!78 :DF9KA9NL!56&,0IIl,C)-f5-h7"#4#;#;#=>$7OK09@@NE"OH 11%8H$%K3x::??ABBK3x55::<==K3x==BBDEEK3x;;@@BCCK""E"EE8:F7OK(5%8  G %' #'#;#;%$+ !+1$&*;'5$( $< $L $161D1DW1MX.w4[AHH(-qP	d S % %#$ %Z9 9 &w/ s<   
^ ^9.^,?^9^)(^),^6	1^99__)r   N)TF)__name__
__module____qualname__staticmethodr   r   r   r*   r   r   memory_granularity_fractionr;   r3   r
   r   r@   r   r   r   r   boolr	   rx   intr   r   r   r   r   r   r   r      s   	+ 	+# 	+ 	+ *e * * *"   #%  Cy16	@  %!H
 H
 	H

 H
 H
 !H
 $Xz$:D$@AH
 H
 H
 
c3hH
h  $ %XX !X 	X
 $Xz$:D$@AX X X !X tCy)X X X 
c3hXr   r   )r   osr=   r   syscollectionsr   r   operatorr   pathlibr   typingr   r   r	   r
   r   scalene.scalene_leak_analysisr   scalene.scalene_statisticsr   r   r   scalene.scalene_analysisr   platformscalene.crdpr   r   r   r   r   <module>r     sJ     	  	 
 0   6 6 = N N 4<<7 k kr   