o
    0ÎjMf  ã                   @   sH  d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
m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 dd
lmZ ddlmZ ddlmZmZmZmZ ddl m!Z!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z) dZ*G dd„ deƒZ+de,dedefdd„Z-dd„ Z.dd„ Z/dd„ Z0G d d!„ d!ƒZ1ed"ƒG d#d$„ d$e$ƒƒZ2dS )%zPaddle Inference runner.é    )ÚPathLike)ÚPath)ÚAnyÚDictÚListÚOptionalÚSequenceÚUnionN)Ú	BaseModelÚ
ConfigDict)Úsort_inputs)Úget_model_paths)Úlogging)Úclass_requires_deps)Úcheck_supported_device_type)ÚDEBUGÚDISABLE_MKLDNN_MODEL_BLÚDISABLE_TRT_MODEL_BLÚUSE_PIR_TRT)Úimport_paddleÚimport_paddle_moduleé   )ÚInferenceRunneré   )ÚDISABLE_TRT_HALF_OPS_CONFIGÚMKLDNN_BLOCKLISTÚTRT_BLOCKLISTÚPaddlePredictorOptionz.cachec                   @   sH  e Zd ZU dZeddZdZee e	d< dZ
ee e	d< dZee e	d< dZee e	d< dZeee  e	d	< dZee e	d
< dZee e	d< dZeeeef  e	d< dZee e	d< dZee e	d< dZee e	d< dZeeeeee  f  e	d< dZeeeeee  f  e	d< dZee e	d< dZee e	d< dZee e	d< dS )ÚPaddleStaticRunnerConfigz*Engine config for paddle_static inference.Zforbid)ÚextraNÚrun_modeÚdevice_typeÚ	device_idÚcpu_threadsÚdelete_passÚenable_new_irÚenable_cinnÚtrt_cfg_settingÚtrt_use_dynamic_shapesÚtrt_collect_shape_range_infoÚ#trt_discard_cached_shape_range_infoÚtrt_dynamic_shapesÚtrt_dynamic_shape_input_dataÚtrt_shape_range_info_pathÚtrt_allow_rebuild_at_runtimeÚmkldnn_cache_capacity)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Zmodel_configr    r   ÚstrÚ__annotations__r!   r"   Úintr#   r$   r   r%   Úboolr&   r'   r   r   r(   r)   r*   r+   r,   Úfloatr-   r.   r/   © r9   r9   úv/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddlex/inference/models/runners/paddle_static/runner.pyr   0   s&   
 
  r   Ú
model_nameÚengine_configÚreturnc                 C   sF   t ƒ }|pi  ¡ D ]\}}t||ƒrt|||ƒ q	| | ¡ |j ¡ S )zIResolve engine config with defaults. Returns dict for PaddleStaticRunner.)r   ÚitemsÚhasattrÚsetattrZsetdefault_by_model_nameZ_cfgÚcopy)r;   r<   ÚppÚkÚvr9   r9   r:   Ú#resolve_paddle_static_engine_configG   s   
€

rE   c                 C   sŒ   t ƒ }| |jjjkrtjS | |jjjkrtjS | |jjjkr!tj	S | |jjj
kr+tjS | |jjjkr5tjS | |jjjkr?tjS td| › ƒ‚)NzUnsupported data type: )r   Z	inferenceZDataTypeZFLOAT64ÚnpZfloat64ZFLOAT32Zfloat32ZINT64Zint64ZINT32Zint32ZUINT8Zuint8ZINT8Zint8Ú	TypeError)Zpd_dtypeÚpaddler9   r9   r:   Ú_pd_dtype_to_np_dtypeU   s   rI   c                 C   sü  t dƒ}|pi }| | |¡}| d|¡ | |¡ | ¡  | d¡ | |¡}| ¡ }	|D ]}
|
|	vr=tdt	|
ƒ› dƒ‚q-|	D ]}
|
|vrPtdt	|
ƒ› dƒ‚q@|D ]}
|
|	vrctdt	|
ƒ› dƒ‚qSi i i }}}| 
¡ D ]d\}
}| |
¡}t| ¡ ƒ}|\}}}|
|v r¹tj||
 d	 |d
 |¡||
< tj||
 d |d
 |¡||
< tj||
 d |d
 |¡||
< qptj||d
||
< tj||d
||
< tj||d
||
< qp||||fD ]}| 
¡ D ]\}
}| |
¡}| |j¡ | |¡ qá| ¡  qÛ~d S )Núpaddle.inferenceéd   Úmatmul_add_act_fuse_passúInvalid input name ú found in `dynamic_shapes`úInput name ú not found in `dynamic_shapes`ú$ found in `dynamic_shape_input_data`r   ©Údtyper   r   )r   ÚConfigÚenable_use_gpuZcollect_shape_range_infoÚdisable_glog_infor$   Úcreate_predictorÚget_input_namesÚ
ValueErrorÚreprr>   Úget_input_handlerI   ÚtyperF   ÚarrayÚreshapeÚonesÚshapeÚcopy_from_cpuÚrun)Ú
model_fileZmodel_paramsZgpu_idZshape_range_info_pathÚdynamic_shapesÚdynamic_shape_input_dataÚpaddle_inferenceÚconfigÚ	predictorÚinput_namesÚnameZmin_arrsZopt_arrsZmax_arrsÚcandidate_shapesÚhandlerS   Ú	min_shapeÚ	opt_shapeÚ	max_shapeZarrsZarrr9   r9   r:   Ú_collect_trt_shape_range_infoh   sp   


ÿÿÿÿÿ

ÿþÿþÿþ

rp   c                    sÖ  t dƒ‰t dƒ}|j}|j}	|j}
‡‡fdd„}‡ ‡fdd„}|p"i }|||ƒ}| ¡ }|D ]}||vr>tdt|ƒ› dƒ‚q.|D ]}||vrQtd	t|ƒ› d
ƒ‚qA|D ]}||vrdtdt|ƒ› dƒ‚qTg }| ¡ D ]d\}}| |¡}t	| 
¡ ƒ}|\}}}||v r®tj|| d |d |¡}tj|| d |d |¡}tj|| d |d |¡}ntj||d}tj||d}tj||d}||||fƒ}| |¡ qk|	|d‰|ƒ  t|ƒˆ_t| d¡ƒ}|
|ˆƒ d S )NrJ   zpaddle.tensorrt.exportc                     sB   ˆ D ]} t ˆ| ƒsJ dtˆƒ› d| › dƒ‚tˆ| ˆ |  ƒ qd S )NúThe `z` don't have the attribute `ú`!)r?   r\   r@   )Ú	attr_name)r'   Ú
trt_configr9   r:   Ú_set_trt_config·   s   ÿþüz%_convert_trt.<locals>._set_trt_configc                    s:   ˆ  t| ƒt|ƒ¡}| dˆ ¡ | ¡  | ¡  ˆ |¡S )NrK   )rT   r4   rU   Údisable_mkldnnrV   rW   )rc   Úparams_filerg   )r"   rf   r9   r:   Ú_get_predictor¾   s
   
z$_convert_trt.<locals>._get_predictorrM   rN   rO   rP   rQ   r   rR   r   r   )ZinputsÚ )r   ÚInputÚTensorRTConfigÚconvertrX   rY   rZ   r>   r[   rI   r\   rF   r]   r^   r_   Úappendr4   Zsave_model_dirÚwith_suffix)r'   Zpp_model_fileZpp_params_fileÚtrt_save_pathr"   rd   re   Zpaddle_tensorrt_exportrz   r{   r|   ru   rx   rh   ri   rj   Z
trt_inputsrk   rl   rS   rm   rn   ro   Zmin_arrZopt_arrZmax_arrZ	trt_inputZpp_model_pathr9   )r"   rf   r'   rt   r:   Ú_convert_trt¨   sf   	
ÿÿÿÿÿ

ÿÿÿ

r€   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚPaddleRunnerChainLegacyz&Legacy Paddle Inference chain wrapper.c                 C   sn   || _ | j  ¡ }g | _g | _|D ]}| j  |¡}| j |¡ q| j  ¡ }|D ]}| j  |¡}| j |¡ q&d S ©N)rh   rX   Úinput_handlesÚoutput_handlesr[   r}   Zget_output_namesZget_output_handle)Úselfrh   ri   Z
input_nameÚinput_handleZoutput_namesZoutput_nameZoutput_handler9   r9   r:   Ú__init__ø   s   

þz PaddleRunnerChainLegacy.__init__c                 C   sJ   t || jƒD ]\}}| |j¡ | |¡ q| j ¡  dd„ | jD ƒ}|S )Nc                 S   s   g | ]}|  ¡ ‘qS r9   )Zcopy_to_cpu)Ú.0Úor9   r9   r:   Ú
<listcomp>
  s    z4PaddleRunnerChainLegacy.__call__.<locals>.<listcomp>)Úziprƒ   r^   r`   ra   rh   rb   r„   )r…   ÚxZinput_r†   Zoutputsr9   r9   r:   Ú__call__  s   
z PaddleRunnerChainLegacy.__call__N)r0   r1   r2   r3   r‡   r   r9   r9   r9   r:   r   õ   s    r   Zpaddlepaddlec                
       s†   e Zd ZdZdedeeef dedeeef ddf
‡ fdd	„Z	d
e
ej deej fdd„Zddd„Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚPaddleStaticRunnerz<Paddle static graph inference runner (Paddle Inference API).r;   Ú	model_dirÚmodel_file_prefixrg   r=   Nc                    sF   t ƒ  ¡  || _t|ƒ| _|| _t||ƒ| _|  ¡ | _	t
| j	ƒ| _d S r‚   )Úsuperr‡   Ú_model_namer   r   r   rE   Ú_configÚ_createrh   r   Úinfer)r…   r;   r   r   rg   ©Ú	__class__r9   r:   r‡     s   


zPaddleStaticRunner.__init__rŒ   c                 C   s^   | j  ¡ }t|ƒt|ƒkrtdt|ƒ› dt|ƒ› ƒ‚t||ƒ}tttj|ƒƒ}|  	|¡}|S )Nz/The number of inputs does not match the model: z vs )
rh   rX   ÚlenrY   r   ÚlistÚmaprF   Zascontiguousarrayr•   )r…   rŒ   ÚnamesÚpredr9   r9   r:   r   !  s   
ÿ

zPaddleStaticRunner.__call__c                 C   s   d S r‚   r9   )r…   r9   r9   r:   Úclose,  s   zPaddleStaticRunner.closec                 C   sô   | j  dd¡}| j  dd¡}ts.| d¡r.| jtv r.|dkr.t d| j› d¡ d| j d< n!tsO| d	¡rO| jt	v rO|dkrOt d| j› d
¡ d| j d< dS | jdkrv|dkrxdd l
}d| ¡  dd¡v ro|d	krot d¡ d	| j d< d S d S d S )Nr    rH   r!   ÚcpuÚtrtÚgpuz
The model(z>) is not supported to run in trt mode! Using `paddle` instead!ÚmkldnnzA) is not supported to run in MKLDNN mode! Using `paddle` instead!ZLaTeX_OCR_recr   ZGenuineIntelZvendor_id_rawry   zwNow, the `LaTeX_OCR_rec` model only support `mkldnn` mode when running on Intel CPU devices. So using `mkldnn` instead.)r“   Úgetr   Ú
startswithr’   r   r   Úwarningr   r   ÚcpuinfoZget_cpu_info)r…   r    r!   r¥   r9   r9   r:   Ú_check_run_mode/  s@   ÿþ
ÿÿþ
ÿ
ÿöz"PaddleStaticRunner._check_run_modec                 C   s¾  t ƒ }tdƒ}t| j| jƒ}d|vrtdƒ‚t| jd | jƒ |  	¡  |d \}}| jd dkrB| j 
d¡d urBd | jd< t d¡ | jd dv r[| j 
d¡d u r[d	| jd< t d
¡ | j 
dd¡ d¡r¢| jd  ¡ dks€J d| j 
d¡› d| jd › dƒ‚| jt d }|  |||¡}| ddh¡ | d| j 
dd	¡¡ nŒ| t|ƒt|ƒ¡}| jd dkr&| ddh¡ |j}| j 
d¡dkrÉ|jn|j}	| ¡  | d| j 
dd	¡|	¡ t|dƒrû| | j 
dd¡¡ | j 
d¡rû| j 
d¡rû| ¡  t|dƒr| ¡  | d¡ | jdkr| d¡ | ¡ r$| d¡ | d¡ n| jd dkrU|  d| j 
dd	¡¡ t|dƒrI| | j 
dd¡¡ t|dƒrS| ¡  nÙ| jd dkr‘| !¡  | "| j 
dd	¡¡ t|dƒr{| | j 
dd¡¡ t|dƒr…| ¡  | d ¡ | d!¡ n| jd d"krÀ|  d"| j 
dd	¡¡ t|dƒr´| | j 
dd¡¡ t|dƒr¾| ¡  nn| jd d#krï|  d#| j 
dd	¡¡ t|dƒrã| | j 
dd¡¡ t|dƒrí| ¡  n?| jd d$kr7d	d%l#m$}
 |
 %¡  |  d$| j 
dd	¡¡ t|dƒr| ¡  t|dƒr"| ¡  n| &¡ }d&| j 
d'| j¡ }|
 '||¡ n÷| jd d(krŠt|dƒra| | j 
dd¡¡ | j 
d¡ra| j 
d¡ra| ¡  | d| j 
dd	¡¡ | ¡  t|dƒrz| ¡  | ¡ r‰| d¡ | d¡ n¤| jd d)krº|  d)t(| j 
dd	¡ƒ¡ t|dƒr¯| | j 
dd¡¡ t|dƒr¹| ¡  nt| jd dksÄJ ‚| )¡  | j 
dd¡}d*|v rì| *¡  d+|v rá| +¡  | ,| j 
d,d-¡¡ n
t|d.ƒrö| ¡  | -| j 
d/d-¡¡ t|dƒr| | j 
dd¡¡ t|dƒr| ¡  | d¡ | ¡ r.| d¡ | d¡ | .¡  | j 
d0g ¡D ]}| |¡ q9t/sI| 0¡  | ¡ rX| d¡ | d¡ | 1|¡}|S )1NrJ   rH   z!No valid PaddlePaddle model foundr!   rž   r"   z `device_id` has been set to None)r    ÚdcuÚnpuÚmluÚgcuÚxpuÚiluvatar_gpuÚ	metax_gpur   z`device_id` has been set to 0r    rŸ   r    ú`z9` is only available on GPU devices, but got device_type='z'.ÚfeedÚfetchrK   Zpaddle_fp16r%   Tr&   Úenable_new_executoré   zPP-DocLayoutV3rL   Zconv2d_add_act_fuse_passZconv2d_add_fuse_passr¨   r«   Zconv2d_bn_xpu_fuse_passZtransfer_layout_passr©   r­   rª   )ÚpassesZPaddleX_r;   r§   r¬   r¡   Zbf16r/   é
   rv   r#   r$   )2r   r   r   r   r   ÚRuntimeErrorr   r“   r’   r¦   r¢   r   Údebugr£   ÚlowerÚ	CACHE_DIRÚ_configure_trtZexp_disable_mixed_precision_opsrU   rT   r4   ÚPrecisionTypeZHalfZFloat32rv   r?   r%   r&   r±   Zset_optimization_levelr$   Zis_compiled_with_rocmZenable_custom_deviceZ
enable_xpuZset_xpu_device_idZpaddle_custom_device.gcur³   ZsetUpÚpass_builderZappend_passes_for_legacy_irr6   Zdisable_gpuZenable_mkldnnZenable_mkldnn_bfloat16Zset_mkldnn_cache_capacityZ set_cpu_math_library_num_threadsZenable_memory_optimr   rV   rW   )r…   rH   rf   Zmodel_pathsrc   rw   Ú	cache_dirrg   rº   Ú	precisionZ
gcu_passesr»   rj   r    Zdel_prh   r9   r9   r:   r”   U  s:  

ÿ

ÿÿýÿý
ÿ




€€
€ÿ€ÿ


€ÿ€

ÿÿ







zPaddleStaticRunner._createc              
   C   s6  t dƒ}tr_| j d¡d u rtdƒ‚|d | j }| d¡}| d¡}| ¡ r+| ¡ sGt| j di ¡|||| j dd	¡| jd | j d
¡ƒ nt	 
d|› d|› d¡ | t|ƒt|ƒ¡}|S | t|ƒt|ƒ¡}| t|d ƒ¡ | d| j dd	¡¡ | j di ¡D ]2}	t||	ƒs˜J dt|ƒ› d|	› dƒ‚| jd |	 }
t|
tƒr¬t||	ƒ|
Ž  q„t||	ƒd&i |
¤Ž q„| j dd¡r™| j d¡d u rËtdƒ‚| j dd¡rk| j d¡d urãt| jd ƒ}n|d }d}| ¡ sþ|jjddd t	 d|› ¡ n!| j dd¡r| ¡  t	 d|› d¡ nt	 d|› d¡ d}|r=tt|ƒt|ƒ| j dd	¡t|ƒ| jd | j d
¡ƒ | j d | j¡}|tv r\| j d!¡d"kr\|j |t| ¡ | t|ƒ| j d#d¡¡ |S i i i }}}| jd  ¡ D ]\}}|d	 ||< |d$ ||< |d% ||< |  |||¡ qz|S )'NrJ   r+   z%No dynamic shape information providedrŸ   z.jsonz
.pdiparamsr'   r"   r   r,   zUse TRT cache files(`z` and `z`).Zoptim_cacherK   rq   z` don't have function `rr   r(   Tr)   r-   zshape_range_info.pbtxt)ÚparentsÚexist_okz(Shape range info will be collected into r*   FzThe shape range info file (zB) has been removed, and the shape range info will be re-collected.zA shape range info file (z=) already exists. There is no need to collect the info again.r;   r    Ztrt_fp16r.   r   r   r9   )!r   r   r“   r¢   rµ   r   r~   Úexistsr€   r   r¶   rT   r4   Zset_optim_cache_dirrU   r?   r\   Ú
isinstancer™   Úgetattrr   ÚparentÚmkdirÚinfoÚunlinkrp   r’   r   ZInternalUtilsZdisable_tensorrt_half_opsZ#enable_tuned_tensorrt_dynamic_shaper>   Zset_trt_dynamic_shape_info)r…   rc   rw   r¼   rf   r   Ztrt_model_fileZtrt_params_filerg   Ú	func_nameÚargsr-   Zshould_collect_shape_range_infor;   Z
min_shapesZ
opt_shapesZ
max_shapesÚkeyZshapesr9   r9   r:   r¹     sº   


ù
ÿMµÿþ
ÿÿÿ
ÿ
ÿ
ú
ÿþôýÿz!PaddleStaticRunner._configure_trt)r=   N)r0   r1   r2   r3   r4   r	   r   r   r   r‡   r   rF   Zndarrayr   r   r   r¦   r”   r¹   Ú__classcell__r9   r9   r–   r:   rŽ     s&    þ
ýü
ûú
& -rŽ   )3r3   Úosr   Úpathlibr   Útypingr   r   r   r   r   r	   ÚnumpyrF   Zpydanticr
   r   Z&paddlex.inference.models.runners.utilsr   Z*paddlex.inference.models.utils.model_pathsr   Zpaddlex.utilsr   Zpaddlex.utils.depsr   Zpaddlex.utils.devicer   Zpaddlex.utils.flagsr   r   r   r   Zpaddlex.utils.import_guardr   r   Zinference_runnerr   rg   r   r   r   r   r¸   r   r4   rE   rI   rp   r€   r   rŽ   r9   r9   r9   r:   Ú<module>   s<    ÿþ
ý@M