
    jV                        d dl Z 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 d dlm	Z	 d dl
Zd dlmZ ddlmZ ddlmZmZmZmZ dZg ad	ad
gZd ad ada G d d          Zd Zd Zd Zeser ed          Z dS  ed	          Z dS )    N)Path)GeneratorType)PrettyTable   )logging)INFER_BENCHMARKINFER_BENCHMARK_OUTPUT_DIR"INFER_BENCHMARK_USE_CACHE_FOR_READPIPELINE_BENCHMARK_entry_point_Finintial_predictorc                       e Zd Zd ZddZd Zd Zd Zd Zd	 Z	d
 Z
d Zed             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )	Benchmarkc                 Z    || _         i | _        d| _        g | _        g | _        g | _        d S NF)_enabled_elapses_warmup_detail_list_summary_list_operation_list)selfenableds     q/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddlex/inference/utils/benchmark.py__init__zBenchmark.__init__1   s5    !    NFc                       fd}|S )Nc                    
j         s| S 	| j        	t          | t                    rt	          | d          st
          | j        nt          |           st
          | 	 t          j	                  }t          j
                  d         }| d| nM# t
          t          f$ r9}t          j                    j        t          j        d|            Y d }~nd }~ww xY wot"          }|rat          j                  rt'          d           t)          j        d                    t)          j                  fd            }nSt.          r#t)          j                  	
fd	            }n)t0          r"t)          j                  	
fd
            }t          | t                    r	|| _        | S |S )N__call__   :z6Benchmark: failed to get source file and line number: zSWhen `is_read_operation` is `True`, the wrapped function should not be a generator.   )maxsizec                      t          d | D                       } d |                                D             } | i |}t          j        |          }|S )Nc              3   b   K   | ]*}t          |t                    rt          |          n|V  +d S N
isinstancelisttuple).0args     r   	<genexpr>zQBenchmark.timeit_with_options.<locals>._deco.<locals>._wrapper.<locals>.<genexpr>a   sL       ! !ILjd&;&;Dc


! ! ! ! ! !r   c                 b    i | ],\  }}|t          |t                    rt          |          n|-S  r'   r+   kvs      r   
<dictcomp>zRBenchmark.timeit_with_options.<locals>._deco.<locals>._wrapper.<locals>.<dictcomp>d   sG        Aq z!T':':A5888  r   )r*   itemscopydeepcopy)argskwargsoutputfuncs      r   _wrapperz>Benchmark.timeit_with_options.<locals>._deco.<locals>._wrapper_   s~      ! !PT! ! !  D $*LLNN  F "T42622F!]622F!Mr   c                      d }t           rt          d          |                    t           d          sda t	          j                    }	  | i |}|                    t           d          sda n$# |                    t           d          sda w xY wt          |t                    r                    ||          S 	                    t	          j                    |z
  |           |S )N@cNested calls detected: Check the timed modules and exclude nested calls to prevent double-counting.TF)
_is_measuring_timeRuntimeError
startswithENTRY_POINT_NAMEtimeperf_counterr(   r   watch_generator_update	r7   r8   operation_nameticr9   r:   locationnamer   s	        r   r;   z>Benchmark.timeit_with_options.<locals>._deco.<locals>._wrappero   s2    -1)=)=8)=)=- ". !F# #   .88<L9O9O9OPP 615."/11;%)T4%:6%:%:F#1#<#<@P=S=S=S#T#T ;5: 2 $2#<#<@P=S=S=S#T#T ;5: 2 : : : :%fm<< *#'#7#7#O#OO LL):)<)<s)BNSSS#)Ms   A: :!Bc                  V   t           dz  a t          dz  at          dk    rwt           d anht           d k    rXt          dt                              d          d          dt                              d          d          d d d	          t            dt           d d }t          j                    } | i |}t          |t                    r	                    ||          S 
                    t          j                    |z
  |           t          dz  a|S )Nr    r=   z:Multiple top-level function calls detected:
  Function 1: r   z
    Location: z
  Function 2: zx
Only one top-level function can be tracked at a time.
Please call 'benchmark.reset()' between top-level function calls.)_step_level	_top_funcr@   splitrC   rD   r(   r   watch_generator_simplerF   rG   s	        r   r;   z>Benchmark.timeit_with_options.<locals>._deco.<locals>._wrapper   ss    
!!Q;;(0/3,@,@h,@,@		!*.B.B.B.B!B!B&2%h5>__S5I5I!5L%h %h5>__S5I5I!5L%h %h 6:%h %h 6>	%h %h %h'" '" !" -2)N)NF)N)NT)N)NH)N)N"/11!%t!6v!6!6%fm<< (#'#>#>v~#V#VV LL):)<)<s)BNSSS"aKF%r   )r   __qualname__r(   typehasattr	TypeErrorr   callableinspectgetsourcefilegetsourcelinesOSErroruuiduuid4hexr   debugr
   isgeneratorfunctionr@   	functools	lru_cachewrapsr   r   )func_or_clssource_filesource_linee	use_cacher;   r:   rJ   is_read_operationrK   r   s         @@r   _decoz,Benchmark.timeit_with_options.<locals>._deco;   se   = #"" |"/+t,, #{J77 $#O"+,, $#O"%3D99%4T::1=)99K99w'   :<<+PQPP        *P.PI O&.t44 &m   8y*3777==&&
" 
" 
" 
" '&
" 
" # 9&_T*** * * * * * * +** ** ( !&_T**& & & & & & & +*&@ +t,,  '/$""s   #5B C#*/CC#r/   )r   rK   rh   ri   s   ``` r   timeit_with_optionszBenchmark.timeit_with_options9   s7    q	  q	  q	  q	  q	  q	  q	 f r   c                 <     |                                  |          S r&   )rj   )r   rc   s     r   timeitzBenchmark.timeit   s    )t''))+666r   c                 .    |                     d           S )N_)rA   )r   rK   s     r   _is_public_methodzBenchmark._is_public_method   s    ??3''''r   c                    |j                                         D ]k\  }}t          |          rW|                     |          rB|                    d          s-|t
          vr$t          |||                     |                     l|S )N__)__dict__r4   rV   ro   rA   PIPELINE_FUNC_BLACK_LISTsetattrrl   )r   clsrK   r:   s       r   time_methodszBenchmark.time_methods   s    ,,,.. 	6 	6JD$6**4006 --6  888T4;;t#4#4555
r   c                 ^     t          j                   fd            } |            S )Nc               3     K   	 	 t           rt          d                              t           d          sda t	          j                    } 	 t                    }                    t           d          sda n$#                     t           d          sda w xY w                    t	          j                    | z
             |V  n# t          $ r Y d S w xY w)NTr>   r=   F)	r?   r@   rA   rB   rC   rD   nextrF   StopIterationrI   item	generatorrK   r   s     r   wrapperz*Benchmark.watch_generator.<locals>.wrapper   s!     ) * B    ??.>+A+A+ABB 2-1*+--C7#I#2B/E/E/EFF 716.  $2B/E/E/EFF 716.6666LL!2!4!4s!:DAAAJJJJ$   EE!s*   AC A>  C >!B1C 
CCr`   rb   r   r}   rK   r~   s   ``` r   rE   zBenchmark.watch_generator   sK    		#	#	 	 	 	 	 	 
$	#	* wyyr   c                 ^     t          j                   fd            } |            S )Nc               3   
  K   	 	 t          j                    } 	 t                    }n# t          $ r Y n3w xY w                    t          j                    | z
             |V  c	 t
          dz  ad S # t
          dz  aw xY w)NTr    )rC   rD   ry   rz   rF   rN   r{   s     r   r~   z1Benchmark.watch_generator_simple.<locals>.wrapper   s      
+--C#I(   LL!2!4!4s!:DAAAJJJ
  !!s&   A6 * A6 
7A6 72A6 6Br   r   s   ``` r   rQ   z Benchmark.watch_generator_simple   sK    		#	#	 	 	 	 	 	 
$	#	 wyyr   c                 J    da dad ai | _        g | _        g | _        g | _        d S Nr   )rM   rN   rO   r   r   r   r   r   s    r   resetzBenchmark.reset   s8     	!r   c                 |    |dz  }|| j         v r"| j         |                             |           d S |g| j         |<   d S )Ni  )r   append)r   elapserK   s      r   rF   zBenchmark._update   sM    $4=  M$&&v.....#)(DM$r   c                     | j         S r&   )r   r   s    r   logszBenchmark.logs   s
    }r   c                     d| _         d S NTr   r   s    r   start_timingzBenchmark.start_timing  s    r   c                     d| _         d S r   r   r   s    r   stop_timingzBenchmark.stop_timing  s    r   c                     d| _         d S r   )r   r   s    r   start_warmupzBenchmark.start_warmup	  s    r   c                 <    d| _         |                                  d S r   )r   r   r   s    r   stop_warmupzBenchmark.stop_warmup  s    

r   c                 `   d | j                                         D             }dddd}|D ]6}|                    t           d          r|                    |          } n7t          |          }||z  }t          j        |          |d<   g }g }	d}
|                                D ]\  }}t          |          |k    sJ t          j        |          }|                    d          d         }|                    d          d         }d|vrd	}|	                    |||||||z  f           |		                    ||f           |t          v r|d
xx         |z  cc<   d}
||
xx         |z  cc<   |d         |d
         z   |d         z   |d<   |d         |d         z
  |d<   |||d|d         |d         |z  f|||d|d
         |d
         |z  f|||d|d         |d         |z  f|||d|d         |d         |z  f|||d|d         |d         |z  f|||d|d         |d         |z  fg}|||	fS )Nc                     i | ]\  }}||	S r/   r/   r0   s      r   r3   z$Benchmark.gather.<locals>.<dictcomp>  s    333A1333r   r   )preprocessing	inferencepostprocessingr=   
end_to_endr   r    r!   Unknownr   r   coreotherPreprocessing	InferencePostprocessingCoreOtherz
End-to-End)r   r4   rA   rB   poplennpmeanrP   r   _inference_operations)r   
batch_sizer   summarykeybase_predictor_time_listiters	instancesdetail_listoperation_listop_tagrK   	time_listavgrH   rJ   summary_lists                    r   gatherzBenchmark.gather  s	    43!2!2333$%AKK 	 	C~~!144455 +/88C==( ,--J&	 "(@ A A #zz|| 	' 	'OD)y>>U****')$$C!ZZ__Q/Nzz#q)H(""$
I~sC*DTU   !!>8"<===!666$$$+$$$)3& O$w{';;gFV>WW 	 #<076?B ((:5 $$z1  ()()J6 *,   :- %%
2S1
f L.88r   c                 d   |                      |          \  }}}| j        rg d}t          |          }d |D             }|                    |           d                    t          t          |                              d          d                   d          }t          j	        |           t          j	        |           d S ddg}t          |          }|                    |           d	                    t          t          |                              d          d                   d          }t          j	        |           t          j	        |           g d
}	t          |	          }d |D             }|                    |           d                    t          t          |                              d          d                   d          }t          j	        |           t          j	        |           g d}t          |          }d |D             }|                    |           d                    t          t          |                              d          d                   d          }t          j	        |           t          j	        |           t          rt          t                    }
|
                    dd           |	g|}t          t          |
          dz  dd          5 }t          j        |          }|                    |           d d d            n# 1 swxY w Y   |g|}t          t          |
          dz  dd          5 }t          j        |          }|                    |           d d d            d S # 1 swxY w Y   d S d S )N)Iters
Batch Size	InstancesTypeAvg Time Per Iter (ms)Avg Time Per Instance (ms)c                 L    g | ]!}|d d         |d         d|d         dfz   "S N   z.8f   r/   r+   is     r   
<listcomp>z%Benchmark.collect.<locals>.<listcomp>  G       ;<"1"AaD1Q466  r   zWarmup Data
r    	OperationSource Code LocationOperation Info)r   r   r   r   r   r   c                 L    g | ]!}|d d         |d         d|d         dfz   "S r   r/   r   s     r   r   z%Benchmark.collect.<locals>.<listcomp>  s:    WWWa1RaR5qtMMad==#AAWWWr   Detail Datac                 L    g | ]!}|d d         |d         d|d         dfz   "S r   r/   r   s     r   r   z%Benchmark.collect.<locals>.<listcomp>  r   r   Summary DataTparentsexist_ok
detail.csvw newlinesummary.csv)r   r   r   add_rowscenterr   strrP   r   infor	   r   mkdiropencsvwriter	writerows)r   r   r   r   r   summary_headtabletable_titleoperation_headdetail_headsave_dircsv_datafiler   s                 r   collectzBenchmark.collectw  s)   48KK
4K4K1\>< H	/  L  --E @L  L NN<((('..s3u::3C3CD3I3I!3L/M/MsSSKL%%%L &N  //ENN>****11#c%jj6F6Ft6L6LQ6O2P2PRUVVKL%%%L  K  ,,EWW;WWWKNN;''''..s3u::3C3CD3I3I!3L/M/MsSSKL%%%L  L  --E @L  L NN<((((//CJJ4D4DT4J4J14M0N0NPSTTKL%%%L) / :;;td;;;'6+6$x..<7bIII /T Z--F$$X.../ / / / / / / / / / / / / / / )8<8$x..=8#rJJJ /d Z--F$$X.../ / / / / / / / / / / / / / / / / // /s$   *L::L>L>,*N##N'*N'c           
         g g }t                      }g }d}d}| j                                        D ]\  }}t          j        |          }|                    d          }	t          |	d                   }
t          |	d                   }|	d         }|	d         }d|vrd}|                    ||f           t          ||          }|dk    r|dz  }|}ndt          |dz
            z  d	z   |z   }	                    |
||||f           t          |          }                    d
            t          t                    |z            }t          |          D ]u}|         d         }
|         d         }t          j        fdt          |t                    |          D                       |z  }|	                    |
||g           vd t          |          D             }t                    D ]\  }}|d         }
|d         }|d         }|d         }||dz
           d         k    r-||dz
           	                    |dz
           d                    t          |          |k     r:|	                    t          |          dz   i g           t          |          |k     :||dz
           d                             |d           |g||dz
           d         |<   ||dz
           d         |         	                    |           g }t          t          |                    D ]/}||         d         }||         d         }d}g }t          |                                          D ]G\  }\  }}t          j        |          |z  }|	                    ||z   dk    r|nd||g           ||z  }H|dk    r|	                    g d           |	                    |dt          j        ||                   |z  g           |	                    dd|g           |	                    ddt          j        ||                   |z  |z
  g           ||z  }1|||fS )Nr   r=   r       r   r!   r   z    z-> c                     | d         S r   r/   )xs    r   <lambda>z+Benchmark.gather_pipeline.<locals>.<lambda>  s
    QqT r   )r   c                 ,    g | ]}|         d          S )r   r/   )r+   pos	info_lists     r   r   z-Benchmark.gather_pipeline.<locals>.<listcomp>  s"    WWW3Ys^A&WWWr   c                     g | ]}d gS )r   r/   )r+   rn   s     r   r   z-Benchmark.gather_pipeline.<locals>.<listcomp>  s    9991A3999r   r   g        r   )r   r   r   Layerr   r   )setr   r4   r   sumrP   intaddmaxr   r)   sortr   range	enumerateget)r   r   r   r   	max_levelloop_numrK   r   op_timepartssteplevelrH   rJ   format_operation_namestep_numidxlevel_time_listr   new_summary_listr   op_dictops_all_timeop_info_listop_all_timer   s                            @r   gather_pipelinezBenchmark.gather_pipeline  s   		#y00 	 	OD)fY''GJJsOOEuQx==DaMME"1XNQxH(""$9:::E9--IzzA(6%%(.UQY(?%(G.(X%un.CWM    n-->>***s9~~011?? 		G 		GCS>!$D$-cN1$5!WWWW%S^^X2V2VWWW    &;WEFFFF99i(8(8999"9-- 	K 	KIC7DGE!!WN1gG yq)!,,,	*11)C!G2DQ2GHHH l##e++##S%6%6%:B$?@@@ l##e++EAI&q)--ndCCK>EYUQY'*>::UQY'*>:AA'JJJJs<(()) 	- 	-A OA&E"1oa(GLL*3GMMOO*D*D , ,&&dI fY//(:##a#gllUUD+$VWWW+1uu ''555 ''GRVOA,>%?%?(%JK   !''V\(BCCC ''"&);"<"<x"G,"VW   ,,n<<r   c                     | j         r| j        r| j        s)|                                 \  | _        | _        | _         d S d S r&   )r   r   r   r  r   s    r   _initialize_pipeline_dataz#Benchmark._initialize_pipeline_data  sU    $ 	): 	t?Q 	$$&& HDt143G3G3G	 	r   c                     |                                   |                                  |                                  |                                  d S r&   )r  print_operation_infoprint_detail_dataprint_summary_datar   s    r   print_pipeline_datazBenchmark.print_pipeline_data#  sP    &&(((!!###   !!!!!r   c                 j   |                                   ddg}t          |          }|                    | j                   d                    t          t          |                              d          d                   d          }t          j	        |           t          j	        |           d S )Nr   r   r   r   r   r   )
r  r   r   r   r   r   r   rP   r   r   )r   r   r   r   s       r   r  zBenchmark.print_operation_info)  s    &&((("
 N++t+,,,&--c#e**2B2B42H2H2K.L.LcRR[!!!Ur   c                    |                                   g d}t          |          }|                    | j                   d                    t          t          |                              d          d                   d          }d|j        d<   d|j        d<   t          j
        |           t          j
        |           d S )	NStepr   	Time (ms)r   r   r   r   lr   r  )r  r   r   r   r   r   r   rP   alignr   r   )r   r   r   r   s       r   r  zBenchmark.print_detail_data5  s    &&(((
 
 

 K((t()))#**3s5zz/?/?/E/Ea/H+I+I3OO#&K #&K [!!!Ur   c                    |                                   g d}t          |          }|                    | j                   d                    t          t          |                              d          d                   d          }d|j        d<   d|j        d<   t          j
        |           t          j
        |           d S )	NLevelr   r  r   r   r   r   r  r   r  )r  r   r   r   r   r   r   rP   r  r   r   )r   r   r   r   s       r   r  zBenchmark.print_summary_dataD  s    &&(((
 
 

 L))t)***$++CE

0@0@0F0Fq0I,J,JCPP#&K #&K [!!!Ur   c                 @   |                                   t          |          }|                    dd           g d}|g| j        }t	          t          |          dz  dd          5 }t          j        |          }|                    |           d d d            n# 1 swxY w Y   g d}|g| j        }t	          t          |          d	z  dd          5 }t          j        |          }|                    |           d d d            d S # 1 swxY w Y   d S )
NTr   r  r   r   r   r   r  r   )	r  r   r   r   r   r   r   r   r   )r   	save_pathr   r   r   r   r   r   s           r   save_pipeline_datazBenchmark.save_pipeline_dataS  s   &&(((	??td333
 
 

  4$"34$x..</bAAA 	'TZ%%FX&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'
 
 

 !64#56$x..=0#rBBB 	'dZ%%FX&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's$   +*B!!B%(B%*DDDr   )__name__
__module__rR   r   rj   rl   ro   rv   rE   rQ   r   rF   propertyr   r   r   r   r   r   r   r  r  r  r  r  r  r  r/   r   r   r   r   0   s       " " "u u u un7 7 7( ( (	 	 	  2  &	" 	" 	"+ + +   X        e9 e9 e9NK/ K/ K/ZW= W= W=r  " " "
 
 
    ' ' ' ' 'r   r   c                      t           S r&   r   r/   r   r   get_inference_operationsr%  m  s      r   c                 
    | a d S r&   r$  )vals    r   set_inference_operationsr(  q  s    r   c                  :    t                               |            d S r&   )r   extend)opss    r   add_inference_operationsr,  v  s      %%%%%r   T)r   )!r5   r   r`   rW   rC   r[   pathlibr   typesr   numpyr   prettytabler   utilsr   utils.flagsr   r	   r
   r   rB   r   r?   rs   rM   rN   rO   r   r%  r(  r,  	benchmarkr/   r   r   <module>r4     s    



                        # # # # # #                  #    01 		
	z' z' z' z' z' z' z' z'z! ! !     
& & &  )( )	$'''III	%(((IIIr   