
    {-j-                     >   d Z ddlZddlmZ ddlmZmZmZ ddlZ	ddl
mZmZmZ ddlmZ ddlmZ ddlmZ dd	lm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"  ed           G d de#                      Z$ ed           G d de                      Z%dS )z(HPI (High Performance Inference) runner.    N)Path)ListSequenceUnion)	CACHE_DIRPaddleStaticRunnerPaddleStaticRunnerConfig)get_default_run_mode)sort_inputs)get_model_paths)logging)class_requires_depsrequire_hpip   )InferenceRunner   )$suggest_inference_backend_and_config)	HPIConfigOMConfigONNXRuntimeConfigOpenVINOConfigTensorRTConfigzultra-inferc                   $     e Zd Z fdZd Z xZS )MultiBackendInferc                 V    t                                                       || _        d S N)super__init__
ui_runtime)selfr   	__class__s     k/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddlex/inference/models/runners/hpi/runner.pyr   zMultiBackendInfer.__init__/   s$    $    c                 6    | j                             |          S r   )r   infer)r    xs     r"   __call__zMultiBackendInfer.__call__3   s    $$Q'''r#   )__name__
__module____qualname__r   r'   __classcell__r!   s   @r"   r   r   -   sG        % % % % %( ( ( ( ( ( (r#   r   c                        e Zd ZdZdeeef         dededdf fdZe	defd            Z
e	defd	            Ze	defd
            Zdeej                 deej                 fdZddZd Zd ZddZ xZS )	HPIRunnerzGHPI runner supporting multiple backends (Paddle, ONNX, TensorRT, etc.).	model_dirmodel_file_prefixconfigreturnNc                    t                       t                                                       t          |          | _        || _        || _        |                                 \  }}|dk    r#d| _        | 	                    |          | _
        d S d| _        |                     ||          t                    | _                                        }fdt          |          D             | _        d S )NpaddleTFc                 D    g | ]}                     |          j        S  )get_input_infoname).0ir   s     r"   
<listcomp>z&HPIRunner.__init__.<locals>.<listcomp>O   s7     ! ! !67
))!,,1! ! !r#   )r   r   r   r   
_model_dir_model_file_prefix_config_determine_backend_and_config_use_paddle_build_paddle_static_runner_paddle_runner_build_ui_runtimer   _multi_backend_infer
num_inputsrange_input_names)	r    r/   r0   r1   backendbackend_configrE   r   r!   s	          @r"   r   zHPIRunner.__init__;   s     	y//"3"&"D"D"F"Fh#D"&"B"B>"R"RD$D//HHJ(9*(E(ED%#..00J! ! ! !;@;L;L! ! !Dr#   c                     | j         S r   )r<   r    s    r"   r/   zHPIRunner.model_dirS   s
    r#   c                     | j         S r   )r=   rK   s    r"   r0   zHPIRunner.model_file_prefixW   s    &&r#   c                     | j         S r   )r>   rK   s    r"   r1   zHPIRunner.config[   s
    |r#   r&   c                 `   | j         r|                     |          S t          | j                  }t          |          |k    r#t	          d| dt          |           d          t          || j                  }d t          | j        |          D             }|                     |          S )Nz	Expected z inputs but got z insteadc                 >    i | ]\  }}|t          j        |          S r6   )npascontiguousarray)r9   r8   input_s      r"   
<dictcomp>z&HPIRunner.__call__.<locals>.<dictcomp>f   s9     
 
 
f "&v..
 
 
r#   )r@   rB   lenrG   
ValueErrorr   ziprD   )r    r&   rE   inputss       r"   r'   zHPIRunner.__call___   s     	*&&q)))*++
q66ZUUUSVVUUUVVV4,--
 
 #D$5q 9 9
 
 
 ((000r#   c                     d S r   r6   rK   s    r"   closezHPIRunner.closel   s    r#   c                    | j         j        rUt          | j        | j                  }t          | j         |          }|d         t          d|d                    |\  }}n+| j         j        }|t          d          | j         j        pi }|dk    re|sd}nJ|	                                dhk    rd}n.|d         t          | j         j        | j         j                  k    }|rt          j        d	           ||fS )
Nr   zCNo inference backend and configuration could be suggested. Reason: r   z[When automatic configuration is not used, the inference backend must be specified manually.r4   Trun_modeFzrThe Paddle Inference backend is selected with the default configuration. This may not provide optimal performance.)r>   auto_configr   r<   r=   r   RuntimeErrorrH   rI   keysr
   pdx_model_namedevice_typer   warning)r    model_pathsretrH   rI   is_default_configs         r"   r?   z'HPIRunner._determine_backend_and_configo   sA   <# 	?)$/4;RSSK6t|[QQC1v~"bZ]^_Z`bb   '*#G^^l*G"q   "\8>BNh! $(!!$$&&:,66$)!!$2:$>BVL/1IC C %! !  I   &&r#   c                    | j         j        | j         j        d|}d }| j         j        r'| j         j        j        r| j         j        j        j        }|L|                    d          |j        
|j        |d<   |                    d          |j        
|j        |d<   t          t          j                                                  fd|                                D             }t          j        |                              d          }t!          j        d           t!          j        d|           t%          | j         j        | j        | j        |	          S )
N)r`   	device_idtrt_dynamic_shapestrt_dynamic_shape_input_datac                 $    i | ]\  }}|v 	||S r6   r6   )r9   kv
valid_keyss      r"   rS   z9HPIRunner._build_paddle_static_runner.<locals>.<dictcomp>   s$    NNNDAqa:oo1aooor#   T)exclude_nonezUsing Paddle Inference backendzPaddle engine config: %s)r1   )r>   r`   rf   hpi_infobackend_configspaddle_infergetrg   rh   setr	   model_fieldsr^   itemsmodel_validate
model_dumpr   infor   r_   r<   r=   )r    rI   kwargspaddle_infofiltered_kwargsengine_configrl   s         @r"   rA   z%HPIRunner._build_paddle_static_runner   sw   <3/
 
 

 <  	MT\%:%J 	M,/?LK"

/0082>/:/M+,

9::B<H  < 56 1>CCEEFF
NNNNFLLNNNNN0?
 

*$*
'
' 	 	5666/???!L'O# 	
 
 
 	
r#   c           
      	   ddl m}m}m} |
 |            }| j        j        dk    r"|                    | j        j        pd           nk| j        j        dk    r"|                    | j        j        pd           n9| j        j        dk    r)t          dt          | j        j                             t          | j        | j                  }|dv r
d|vr| j        j        rd	|vrt          d
          t          j        d           	 t#          j        dddt'          | j                  dt'          | j                  gddd           n/# t"          j        $ r}t          d|j                   |d }~ww xY wt          | j        | j                  }d|v sJ nt          d          |                    t'          |d                   d|j                   nh|dk    rCd|vrt          d          |                    t'          |d                   d|j                   nt3          dt          |                     |dk    rDt5          j        |          }|                                 |                    |j                   n)|dk    rDt?          j        |          }|                                  |                    |j                   n|dk    r|!                    dd          r`|!                    d          Kd }	| j        j"        r'| j        j"        j#        r| j        j"        j#        j$        }	|	|	j%        i |d|	j%        i}tM          j        |          }|'                                 | j        tP          z  dz  }
|
)                    dd           t'          |
dz            |j*        _+        |j,        dk    rd|j*        _-        |j.        st          d           |j%        rt_          |j*        j+                  0                                s3|j%        1                                D ]\  }} |j*        j2        |g|R   nct          j        d!           nN|dk    r)tg          j        |          }|4                                 nt3          dt          |                     t          j        d"|           t          j        d#|            ||          S )$Nr   )ModelFormatRuntimeRuntimeOptiongpunpucpuzUnsupported device type )openvinoonnxruntimetensorrtonnxr4   zPaddlePaddle model requiredz:Automatically converting PaddlePaddle model to ONNX formatpaddlexz--paddle2onnxz--paddle_model_dirz--onnx_model_dirT)capture_outputchecktextz(PaddlePaddle-to-ONNX conversion failed:
zONNX model required omzOM model requiredzUnsupported inference backend r   r   r   use_dynamic_shapesdynamic_shapes)parentsexist_okztrt_serialized.trtfp16z:TensorRT static shape inference is currently not supportedz5TensorRT dynamic shapes will be loaded from the file.zInference backend: %szInference backend config: %s)5ultra_inferr}   r~   r   r>   r`   use_gpurf   
use_ascendr]   reprr   r<   r0   auto_paddle2onnxr   rw   
subprocessrunstrCalledProcessErrorstderrset_model_pathONNXOMrU   r   ru   use_openvino_backendset_cpu_thread_numcpu_num_threadsr   use_ort_backendrq   rn   ro   r   r   r   use_trt_backendr   mkdir
trt_optionserialize_file	precisionenable_fp16r   r   existsrt   	set_shaper   use_om_backend)r    rH   rI   	ui_optionr}   r~   r   rb   etrt_info	cache_dirr8   shapess                r"   rC   zHPIRunner._build_ui_runtime   s   CCCCCCCCCC%I<#u,,dl49::::\%..  !7!<1====\%..K40H+I+IKK   &dot7MNN===[((<0 >{22*+HIIILT  !" ) / 4 #DO 4 4 2 #DO 4 4 ,0"&!%     &8 ! ! !*RRR  !! #2)?# #K "[00000&'<===$$SV)<%=%=r;CSTTTT__;&&"#6777$$ST):%;%;RPPPPMd7mmMMNNNj  +:>JJN**,,,(()GHHHH%%.=nMMN%%'''(()GHHHH
""""#7>>"&&'788@<( NT\-B-R N#|4DMH'H,C,O&(&((*A& &N ,:>JJN%%''')3j@IOOD4O88825iBV6V2W2WI /'61137	$0!4 "P   ,8I0?@@GGII (6(E(K(K(M(M F Ff6	,6tEfEEEEEF LO   __%4^DDN$$&&&&Md7mmMMNNN,g6663^DDDwy!!!s   AE E:E55E:)r2   Nr   )r(   r)   r*   __doc__r   r   r   r   r   propertyr/   r0   r1   r   rP   ndarrayr   r'   rY   r?   rA   rC   r+   r,   s   @r"   r.   r.   7   sg       QQd#  	
 
     0 4    X '3 ' ' ' X' 	    X1(2:. 14
3C 1 1 1 1   ' ' '@"
 "
 "
Hi" i" i" i" i" i" i" i"r#   r.   )&r   r   pathlibr   typingr   r   r   numpyrP   .paddlex.inference.models.runners.paddle_staticr   r   r	   5paddlex.inference.models.runners.paddle_static.configr
   &paddlex.inference.models.runners.utilsr   *paddlex.inference.models.utils.model_pathsr   paddlex.utilsr   paddlex.utils.depsr   r   inference_runnerr   rH   r   r1   r   r   r   r   r   objectr   r.   r6   r#   r"   <module>r      s   / .           ( ( ( ( ( ( ( ( ( (             
 W V V V V V > > > > > > F F F F F F ! ! ! ! ! ! @ @ @ @ @ @ @ @ . . . . . . 9 9 9 9 9 9              ]##( ( ( ( ( ( ( $#( ]##d" d" d" d" d" d" d" $#d" d" d"r#   