
    i                         d dl Z d dlZd dlZd dlmZ d dlmZ dej                  ddej                  fdZ	 G d d      Z
d Zd	 Zd
 Zd Zy)    Nwraps)gTc                 "      fd}|S )Nc                 :     t                fd       }|S )Nc                     t              r        t        j                  t              t	        j
                         }rFxrB j                  
d	j                  	j                  t        |       d d t        |      d d        
}d}	  	| i |}t	        j
                         |z
  }r	|kD  r}d}xrQ j                  |d||	j                  	j                  t        |       d d t        |      d d t        |      d d 	       |S # t        $ rn 
}t	        j
                         |z
  }r	|kD  r}d}xrD j                  |d||	j                  	j                  t        |       d d t        |      d d         w xY w)	NzProfiler Start %s.%s(*%s, **%s)    z:alarmz-Profiler Finish%s (%.3f) %s.%s(*%s, **%s): %si,  i  z,Profiler Exception%s (%.3f) %s.%s(*%s, **%s))
callablelogging	getLogger__name__timeperf_counterlog
__module__repr	Exception)argskwargst0local_level	alarm_msgresultdurationalarm_levelalarm_thresholdflevel	log_startloggers          ./cmf/cmf_profile.pyinnerz(timeit.<locals>.decorator.<locals>.inner   s    ~ **84""$B T6::<LL!**d4j#.>VTc@RT  KID+F+,,.3"x/'A"-K (I i6::!PR[]eLL!**d4j#.>VTc@RTXY_T`afbfTgi  	#,,.3"x/'A"-K (I T6::!OQZ\dLL!**d4j#.>VTc@RT 	s   B D A7Fr   )r   r#   r   r   r   r    r!   s   ` r"   	decoratorztimeit.<locals>.decorator
   s&    	q#	 #	 
#	H      )r    r   r!   r   r   r$   s   ````` r"   timeitr'   	   s    & &N r%   c                        e Zd ZddZd Zd Zy)ProfilerDataCtxNc                 .    || _         || _        d | _        y N)nametagr   )selfr,   r-   s      r"   __init__zProfilerDataCtx.__init__5   s    	r%   c                 6    t        j                          | _        y r+   )r   r   )r.   s    r"   	__enter__zProfilerDataCtx.__enter__:   s    ))+r%   c                    t        t        dd       }|vt        t        j                         | j                  z
  dz  d      }|j                  | j                  g       }|j                  | j                  r|| j                  gn|       y y )Nprofiler_datai     )	getattrr   roundr   r   
setdefaultr,   appendr-   )r.   exc_typeexc_valexc_tbr3   duration_msr   s          r"   __exit__zProfilerDataCtx.__exit__=   sn    ?D9$tww!6 <a@K**499b9CJJ$((TXX.L %r%   r+   )r   r   __qualname__r/   r1   r=   r&   r%   r"   r)   r)   4   s    
Mr%   r)   c                 .     t                fd       }|S )u   
    Декоратор для функций и методов, записывает в лог время и количество выполнений.
    c                      t        j                   dj                         5   | i |cd d d        S # 1 sw Y   y xY w)N:)r)   r   r>   )r   r   funcs     r"   r#   z profiler_data_log.<locals>.innerI   sD    0$2C2C1DEF 	)((	) 	) 	)s	   8Ar   )rB   r#   s   ` r"   profiler_data_logrC   E   s"     4[) ) Lr%   c                 b     t        j                         dt                fd       }|S )NFc                     sKdj                          	  | i |j                          j                  j                   d       dS  | i |S # j                          j                  j                   d       dw xY w)NT.statsF)enabledisable
dump_statsr   )r   r   rB   
is_runningprofilers     r"   wrapperz(profiler_recursive_func.<locals>.wrapperT   s     JOO#T,V,  "##t}}oV$<="
(((	   "##t}}oV$<="
s   A 2B	)cProfileProfiler   )rB   rL   rJ   rK   s   ` @@r"   profiler_recursive_funcrO   P   s3    !HJ
4[) ) Nr%   c                 .     t                fd       }|S )Nc                      t        j                         }|j                          	  | i ||j                          |j	                  j
                   d       S # |j                          |j	                  j
                   d       w xY w)NrF   )rM   rN   rG   rH   rI   r   )r   r   rK   rB   s      r"   rL   zprofiler_func.<locals>.wrapperh   s{    ##%	:((4==/ 89 4==/ 89s   A 0Br   rB   rL   s   ` r"   profiler_funcrS   g   s     
4[: : Nr%   c                 .     t                fd       }|S )Nc            	         t        j                         }	  | i |t        j                         }t        dj                   d||z
  dd       S # t        j                         }t        dj                   d||z
  dd       w xY w)Nz
profiler: z took z.6fz seconds)r   r   printr   )r   r   startendrB   s       r"   rL   zsimple_timeit.<locals>.wrapperv   s    !!#	O((##%CJt}}oVC%K3DHMN ##%CJt}}oVC%K3DHMNs   A 6B	r   rR   s   ` r"   simple_timeitrY   u   s"    
4[O O Nr%   )rM   r   r   	functoolsr   flaskr   DEBUGWARNINGr'   r)   rC   rO   rS   rY   r&   r%   r"   <module>r^      sR         tT_f_n_n (VM M".
r%   