
    9ikV                         S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
rS SKJr  SSKJr  SSKJrJrJrJr  Sr/ qS	qS
/rS qS qSq " S S5      rS rS r\(       d  \(       a  \" SS9rg\" S	S9rg)    N)Path)GeneratorType)PrettyTable   )logging)INFER_BENCHMARKINFER_BENCHMARK_OUTPUT_DIR"INFER_BENCHMARK_USE_CACHE_FOR_READPIPELINE_BENCHMARK_entry_point_Finintial_predictorc                       \ rS rSrS rSS jrS rS rS rS r	S	 r
S
 rS r\S 5       rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)	Benchmark0   c                 V    Xl         0 U l        SU l        / U l        / U l        / U l        g NF)_enabled_elapses_warmup_detail_list_summary_list_operation_list)selfenableds     a/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/paddlex/inference/utils/benchmark.py__init__Benchmark.__init__1   s-    !    Nc                    ^ ^^ UUU 4S jnU$ )Nc                   >^^ T
R                   (       d  U $ T	c  U R                  m	[        U [        5      (       a$  [	        U S5      (       d  [
        eU R                  mO[        U 5      (       d  [
        eU m [        R                  " T5      n[        R                  " T5      S   nU SU 3mT=(       a    ["        nU(       a`  [        R$                  " T5      (       a  ['        S5      e[(        R*                  " SS9" T5      m[(        R,                  " T5      U4S j5       nO[[.        (       a#  [(        R,                  " T5      UUU	U
4S	 j5       nO-[0        (       a"  [(        R,                  " T5      UUU	U
4S
 j5       n[        U [        5      (       a	  WU l        U $ W$ ! [
        [        4 aC  n[        R                  " 5       R                  m[        R                   " SU 35         S nAGN?S nAff = f)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            	         > [        S U  5       5      n UR                  5        VVs0 s H(  u  p#U[        U[        5      (       a  [        U5      OU_M*     nnnT" U 0 UD6n[        R
                  " U5      nU$ s  snnf )Nc              3   f   #    U  H'  n[        U[        5      (       a  [        U5      OUv   M)     g 7fN)
isinstancelisttuple).0args     r   	<genexpr>QBenchmark.timeit_with_options.<locals>._deco.<locals>._wrapper.<locals>.<genexpr>a   s)      !PTjd&;&;c
DPTs   /1)r+   itemsr)   r*   copydeepcopy)argskwargskvoutputfuncs        r   _wrapper>Benchmark.timeit_with_options.<locals>._deco.<locals>._wrapper_   s      !PT! D
 %+LLN$2DA z!T':':58A$2   "4262F!]]62F!Ms   /A9c                    > T ST 3n[         (       a  [        S5      eUR                  [         S35      (       d  Sq [        R
                  " 5       n T" U 0 UD6nUR                  [         S35      (       d  Sq [        U[        5      (       a  TR                  XB5      $ TR                  [        R
                  " 5       U-
  U5        U$ ! UR                  [         S35      (       d  Sq f f = f)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	r3   r4   operation_nameticr7   r8   locationnamer   s	        r   r9   r:   o   s     -168*)=--". !F#   .88<L;MQ9OPP15."//1;%)4%:6%:F#1#<#<@P?QQR=S#T#T5: 2%fm<<#'#7#7#OO LL):):)<s)BNS#)M $2#<#<@P?QQR=S#T#T5: 2 $Us   C "C-c                    > [         S-  q [        S-  q[        S:X  ab  [        c  T ST 3qOS[        T ST 3:w  aD  [        S[        R	                  S5      S    S[        R	                  S5      S    ST ST S3	5      e[          S[         ST ST 3n[
        R                  " 5       nT" U 0 UD6n[        U[        5      (       a  TR                  XB5      $ TR                  [
        R                  " 5       U-
  U5        [        S-  qU$ )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?   splitrB   rC   r)   r   watch_generator_simplerE   rF   s	        r   r9   r:      s+    
!!Q;(0/3fAhZ,@	!*az.B!B&2'55>__S5I!5L4M N55>__S5I!5L4M N559F ;55=J ?h	%h'" !" -27!F81TF!H:)N"//1!%t!6v!6%fm<<#'#>#>v#VV LL):):)<s)BN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_cacher9   r8   rI   is_read_operationrJ   r   s         @@r   _deco,Benchmark.timeit_with_options.<locals>._deco;   s   =="" |"//+t,,{J77#O"++,,#O"%33D9%44T:1=)]!K=9 *P.PI..t44&m  !**37=&
" '
" #?__T** +** ('__T*& +&@ +t,,'/$""y w' ::<++LQCP s   86F G2/8G--G2 )r   rJ   rg   rh   s   ``` r   timeit_with_optionsBenchmark.timeit_with_options9   s    q	 f r   c                 .    U R                  5       " U5      $ r(   )rk   )r   rb   s     r   timeitBenchmark.timeit   s    '')+66r   c                 .    UR                  S5      (       + $ )N_)r@   )r   rJ   s     r   _is_public_methodBenchmark._is_public_method   s    ??3'''r   c                    UR                   R                  5        Hn  u  p#[        U5      (       d  M  U R                  U5      (       d  M/  UR	                  S5      (       a  MG  U[
        ;  d  MS  [        XU R                  U5      5        Mp     U$ )N__)__dict__r0   rU   rr   r@   PIPELINE_FUNC_BLACK_LISTsetattrrn   )r   clsrJ   r8   s       r   time_methodsBenchmark.time_methods   sg    ,,,,.JD**400-- 884;;t#45 / 
r   c                 X   ^ ^^ [         R                  " T5      UUU 4S j5       nU" 5       $ )Nc               3     >#      [         (       a  [        S5      eTR                  [         S35      (       d  Sq [        R
                  " 5       n  [        T5      nTR                  [         S35      (       d  Sq TR                  [        R
                  " 5       U -
  T5        Uv   M  ! TR                  [         S35      (       d  Sq f f = f! [         a     g f = f7f)NTr=   r<   F)	r>   r?   r@   rA   rB   rC   nextrE   StopIterationrH   item	generatorrJ   r   s     r   wrapper*Benchmark.watch_generator.<locals>.wrapper   s      ))* B   ??.>-?q+ABB-1*++-C7#I#2B1C1/EFF16.LL!2!2!4s!:DAJ   $2B1C1/EFF16.  G % sB   CA
C B) AC 'C)"CC 
CCCCr_   ra   r   r   rJ   r   s   ``` r   rD   Benchmark.watch_generator   s(    		#	 
$	* yr   c                 X   ^ ^^ [         R                  " T5      UUU 4S j5       nU" 5       $ )Nc               3      >#      [         R                  " 5       n  [        T5      nTR	                  [         R                  " 5       U -
  T5        Uv   MO  ! [         a     Of = f[
        S-  qg ! [
        S-  qf = f7f)Nr"   )rB   rC   r~   r   rE   rM   r   s     r   r   1Benchmark.watch_generator_simple.<locals>.wrapper   sz     
++-C#I LL!2!2!4s!:DAJ  ) 
 !!s>   A=A/ A .A/ 
A"A/ !A""A/ %
A=/A::A=r   r   s   ``` r   rP    Benchmark.watch_generator_simple   s(    		#	 
$	 yr   c                 H    Sq SqS q0 U l        / U l        / U l        / U l        g Nr   )rL   rM   rN   r   r   r   r   r   s    r   resetBenchmark.reset   s2     	!r   c                     US-  nX R                   ;   a  U R                   U   R                  U5        g U/U R                   U'   g )Ni  )r   append)r   elapserJ   s      r   rE   Benchmark._update   s<    $== MM$&&v.#)(DMM$r   c                     U R                   $ r(   )r   r   s    r   logsBenchmark.logs   s    }}r   c                     SU l         g NTr   r   s    r   start_timingBenchmark.start_timing  s	    r   c                     SU l         g r   r   r   s    r   stop_timingBenchmark.stop_timing  s	    r   c                     SU l         g r   )r   r   s    r   start_warmupBenchmark.start_warmup	  s	    r   c                 2    SU l         U R                  5         g r   )r   r   r   s    r   stop_warmupBenchmark.stop_warmup  s    

r   c                    U R                   R                  5        VVs0 s H  u  p#X#_M	     nnnSSSS.nU H3  nUR                  [         S35      (       d  M"  UR	                  U5      n  O   [        W5      nX-  n	[        R                  " U5      US'   / n
/ nSnUR                  5        H  u  p[        U5      U:X  d   e[        R                  " U5      nUR                  S5      S   nUR                  S5      S   nSU;  a  SnU
R                  XU	UXU-  45        UR                  UU45        U[        ;   a  US	==   U-  ss'   S
nM  X\==   U-  ss'   M     US   US	   -   US
   -   US'   US   US   -
  US'   UUU	SUS   US   U-  4UUU	SUS	   US	   U-  4UUU	SUS
   US
   U-  4UUU	SUS   US   U-  4UUU	SUS   US   U-  4UUU	SUS   US   U-  4/nU
UU4$ s  snnf )Nr   )preprocessing	inferencepostprocessingr<   
end_to_endr   r"   r#   Unknownr   r   coreotherPreprocessing	InferencePostprocessingCoreOtherz
End-to-End)r   r0   r@   rA   poplennpmeanrO   r   _inference_operations)r   
batch_sizer5   r6   r   summarykeybase_predictor_time_listiters	instancesdetail_listoperation_listop_tagrJ   	time_listavgrG   rI   summary_lists                      r   gatherBenchmark.gather  s    "&!23!2!23$%AKC~~!1 2!455+/88C=(  ,-&	 "(@ A #zz|ODy>U***'')$C!ZZ_Q/Nzz#q)H("$I~s*DTU !!>8"<=!66$+$)3&!  ,& O$w{';;gFV>WW 	 #<076?B ((:5 $$z1  ()()J6 *,   :- %%
2S1
f L.88s 4s   G'c                    U R                  U5      u  p#nU R                  (       a  / SQn[        U5      nU Vs/ s H  owS S US   S US   S 4-   PM     nnUR                  U5        SR	                  [        [        U5      R                  S5      S   5      S5      n[        R                  " U5        [        R                  " U5        g S	S
/n	[        U	5      nUR                  U5        SR	                  [        [        U5      R                  S5      S   5      S5      n[        R                  " U5        [        R                  " U5        / SQn
[        U
5      nU Vs/ s H  owS S US   S US   S 4-   PM     nnUR                  U5        SR	                  [        [        U5      R                  S5      S   5      S5      n[        R                  " U5        [        R                  " U5        / SQn[        U5      nU Vs/ s H  owS S US   S US   S 4-   PM     nnUR                  U5        SR	                  [        [        U5      R                  S5      S   5      S5      n[        R                  " U5        [        R                  " U5        [        (       a  [        [        5      nUR                  SSS9  U
/UQn[        [        U5      S-  SSS9 n[        R                  " U5      nUR!                  U5        S S S 5        U/UQn[        [        U5      S-  SSS9 n[        R                  " U5      nUR!                  U5        S S S 5        g g s  snf s  snf s  snf ! , (       d  f       Nk= f! , (       d  f       g = f)N)Iters
Batch Size	InstancesTypeAvg Time Per Iter (ms)Avg Time Per Instance (ms)   z.8f   zWarmup Data
r    	OperationSource Code LocationOperation Info)r   r   r   r   r   r   Detail DataSummary DataTparentsexist_ok
detail.csvw newlinesummary.csv)r   r   r   add_rowscenterr   strrO   r   infor	   r   mkdiropencsvwriter	writerows)r   r   r   r   r   summary_headtableitable_titleoperation_headdetail_headsave_dircsv_datafiler   s                  r   collectBenchmark.collectw  s4   48KK
4K1><<L  -E@L@L1"1AaD:1Q4*66   NN<('..s3u:3C3CD3I!3L/MsSKLL%LL &N  /ENN>**11#c%j6F6Ft6LQ6O2PRUVKLL%LLK  ,EKVW;aRa5qtCjad3Z#AA;KWNN;''..s3u:3C3CD3I!3L/MsSKLL%LLL  -E@L@L1"1AaD:1Q4*66   NN<((//CJ4D4DT4J14M0NPSTKLL%LL)) :;td;'6+6$x.<7bIT ZZ-F$$X. J )8<8$x.=8#rJd ZZ-F$$X. KJ *g8 X JI
 KJs)   M!M!M&(M+*(M<+
M9<
N
c           	      x   / n/ n[        5       n/ nSnSnU R                  R                  5        H  u  px[        R                  " U5      n	UR                  S5      n
[        U
S   5      n[        U
S   5      nU
S   nU
S   nSU;  a  SnUR                  X45        [        X5      nUS:X  a  US-  nUnOS[        US-
  5      -  S	-   U-   nUR                  XXU	45        M     [        U5      nUR                  S
 S9  [        [        U5      U-  5      n[        U5       Hj  nUU   S   nUU   S   n[        R                  " [        U[        U5      U5       Vs/ s H  nUU   S   PM     sn5      U-  n	UR                  XU	/5        Ml     [        U5       Vs/ s H  nS/PM     nn[        U5       H  u  nnUS   nUS   nUS   nUS   n	XUS-
     S   :  a   UUS-
     R                  UUS-
     S   5        [        U5      U:  a0  UR                  [        U5      S-   0 /5        [        U5      U:  a  M0  XLS-
     S   R                  US 5      c  U	/XLS-
     S   U'   M  XLS-
     S   U   R                  U	5        M     / n[        [        U5      5       GH  nUU   S   nUU   S   nSn/ n[        UR                  5       5       HE  u  nu  px[        R                  " U5      U-  nUR                  UU-   S:X  a  UOSUU/5        UU-  nMG     US:  a  UR                  / SQ5        UR                  US[        R                  " UU   5      U-  /5        UR                  SSU/5        UR                  SS[        R                  " UU   5      U-  U-
  /5        UU-  nGM     UUU4$ s  snf s  snf )Nr   r<   r"      r   r#   r   z    z-> c                     U S   $ r   rj   )xs    r   <lambda>+Benchmark.gather_pipeline.<locals>.<lambda>  s    QqTr   )r   r   g        r   )r   r   r   Layerr   r   )setr   r0   r   sumrO   intaddmaxr   r*   sortr   range	enumerateget)r   	info_listr   r   r   	max_levelloop_numrJ   r   op_timepartssteplevelrG   rI   format_operation_namestep_numidxposrq   level_time_listr   new_summary_listr   op_dictops_all_timeop_info_listop_all_times                               r   gather_pipelineBenchmark.gather_pipeline  s   		#yy0ODffY'GJJsOEuQx=DaME"1XNQxH("$9:E-IzA(6%(.UQY(?%(G.(X%nWM'  1. n->*s9~01?CS>!$D$-cN1$5!27S^X2VW2V3Ys^A&2VW   WEF # ).i(89(81A3(89"9-IC7DGE!!WN1gG q)!,,	*11)C!G2DQ2GH l#e+##S%6%:B$?@ l#e+AI&q)--ndCK>EYQY'*>:QY'*>:AA'J! .$ s<()A OA&E"1oa(GLL*3GMMO*D&&d ffY/(:##a#glUD+$VW+ +E
 1u ''5 ''GRVVOA,>%?(%JK !''V\(BC ''"&&);"<x"G,"VW ,) *, ,n<<a X :s   N2
N7c                     U R                   (       a"  U R                  (       a  U R                  (       d$  U R                  5       u  U l        U l        U l         g g r(   )r   r   r   r  r   s    r   _initialize_pipeline_data#Benchmark._initialize_pipeline_data  sC    $$):):t?Q?Q$$& HDt143G @Rr   c                     U R                  5         U R                  5         U R                  5         U R                  5         g r(   )r  print_operation_infoprint_detail_dataprint_summary_datar   s    r   print_pipeline_dataBenchmark.print_pipeline_data#  s2    &&(!!# !r   c                 <   U R                  5         SS/n[        U5      nUR                  U R                  5        SR	                  [        [        U5      R                  S5      S   5      S5      n[        R                  " U5        [        R                  " U5        g )Nr   r   r   r   r   r   )
r  r   r   r   r   r   r   rO   r   r   )r   r   r   r   s       r   r  Benchmark.print_operation_info)  s|    &&("
 N+t++,&--c#e*2B2B42H2K.LcR[!Ur   c                 x   U R                  5         / SQn[        U5      nUR                  U R                  5        SR	                  [        [        U5      R                  S5      S   5      S5      nSUR                  S'   SUR                  S'   [        R                  " U5        [        R                  " U5        g )	NStepr   	Time (ms)r   r   r   r   lr   r$  )r  r   r   r   r   r   r   rO   alignr   r   )r   r   r   r   s       r   r  Benchmark.print_detail_data5  s    &&(

 K(t(()#**3s5z/?/?/Ea/H+I3O#&K #&K [!Ur   c                 x   U R                  5         / SQn[        U5      nUR                  U R                  5        SR	                  [        [        U5      R                  S5      S   5      S5      nSUR                  S'   SUR                  S'   [        R                  " U5        [        R                  " U5        g )	NLevelr   r$  r   r   r   r   r%  r   r$  )r  r   r   r   r   r   r   rO   r&  r   r   )r   r   r   r   s       r   r  Benchmark.print_summary_dataD  s    &&(

 L)t))*$++CE
0@0@0Fq0I,JCP#&K #&K [!Ur   c                    U R                  5         [        U5      nUR                  SSS9  / SQnU/U R                  Qn[	        [        U5      S-  SSS9 n[
        R                  " U5      nUR                  U5        S S S 5        / SQnU/U R                  Qn[	        [        U5      S	-  SSS9 n[
        R                  " U5      nUR                  U5        S S S 5        g ! , (       d  f       Ni= f! , (       d  f       g = f)
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_dataBenchmark.save_pipeline_dataS  s    &&(	?td3

  4$"3"34$x.</bATZZ%FX& B

 !64#5#56$x.=0#rBdZZ%FX& CB BA CBs   (C!0(C2!
C/2
D )r   r   r   r   r   r   r   )__name__
__module__rQ   __firstlineno__r   rk   rn   rr   rz   rD   rP   r   rE   propertyr   r   r   r   r   r   r   r  r  r  r  r  r  r.  __static_attributes__rj   r   r   r   r   0   s    "un7(	2&	"+  e9NK/ZW=r"
'r   r   c                      [         $ r(   r   rj   r   r   get_inference_operationsr7  m  s      r   c                     U q g r(   r6  )vals    r   set_inference_operationsr:  q  s    r   T)r   ) r1   r   r_   rV   rB   rZ   pathlibr   typesr   numpyr   prettytabler   utilsr   utils.flagsr   r	   r
   r   rA   r   r>   rw   rL   rM   rN   r   r7  r:  	benchmarkrj   r   r   <module>rB     s     
        #   #    01 		
	z' z'z! 
 ($'I%(Ir   