o
    yqi9)                     @   s  U 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mZmZmZmZmZmZmZ d dlmZmZ d dlmZmZ ddlmZmZ dd	lmZmZ dd
lm Z  ddl!m"Z" ddl#m$Z$ G dd deZ%G dd deZ&G dd deZ'G dd deZ(ed Z)ee*d< G dd deZ+G dd deZ,G dd deZ-G dd deZ.G d d! d!eZ/G d"d# d#eZ0ed$ Z1ee*d%< e
dd&d' Z2ed(d)e/d*e$d+eee)ee3ef f ede3f f fd,d-Z4dS ).    N)defaultdict)	lru_cache)AnyDictListLiteralOptionalTupleUnion)	BaseModelField)	Annotated	TypeAlias   )function_requires_depsis_paddle2onnx_plugin_available)get_paddle_cuda_versionget_paddle_version)USE_PIR_TRT   )is_mkldnn_available)
ModelPathsc                   @   sN   e Zd ZU dZeeeeee  f  e	d< dZ
eeeeee  f  e	d< dS )PaddleInferenceInfoNtrt_dynamic_shapestrt_dynamic_shape_input_data)__name__
__module____qualname__r   r   r   strr   int__annotations__r   float r"   r"   b/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/paddlex/inference/utils/hpi.pyr   "   s   
  $r   c                   @   s.   e Zd ZU dZeeeeee  f  e	d< dS )TensorRTInfoNdynamic_shapes)
r   r   r   r%   r   r   r   r   r   r    r"   r"   r"   r#   r$   '   s   
 $r$   c                   @   s.   e Zd ZU dZee ed< dZee ed< dS )InferenceBackendInfoCollectionNpaddle_infertensorrt)	r   r   r   r'   r   r   r    r(   r$   r"   r"   r"   r#   r&   +   s   
 r&   c                   @   s   e Zd ZU dZee ed< dS )HPIInfoNbackend_configs)r   r   r   r*   r   r&   r    r"   r"   r"   r#   r)   1   s   
 r)   )paddleopenvinoonnxruntimer(   omInferenceBackendc                   @      e Zd ZU dZeed< dS )OpenVINOConfig
   cpu_num_threadsNr   r   r   r3   r   r    r"   r"   r"   r#   r1   ;      
 r1   c                   @   r0   )ONNXRuntimeConfigr2   r3   Nr4   r"   r"   r"   r#   r6   ?   r5   r6   c                   @   sJ   e Zd ZU dZed ed< dZeed< dZe	e
eeee  f  ed< dS )TensorRTConfigfp32)r8   fp16	precisionTuse_dynamic_shapesNr%   )r   r   r   r:   r   r    r;   boolr%   r   r   r   r   r   r"   r"   r"   r#   r7   C   s   
 $r7   c                   @   s   e Zd ZdS )OMConfigN)r   r   r   r"   r"   r"   r#   r=   J   s    r=   c                   @   s   e Zd ZU eeeddf ed< eed< dZee	 ed< dZ
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d< dS )	HPIConfigZ
model_name)aliaspdx_model_namedevice_typeN	device_idTauto_configbackendbackend_confighpi_infoauto_paddle2onnx)r   r   r   r   r   r   r    rB   r   r   rC   r<   rD   r/   rE   r   r   rF   r)   rG   r"   r"   r"   r#   r>   N   s   
 r>   c                   @   s&   e Zd ZU eed< dZee ed< dS )	ModelInfonameNrF   )r   r   r   r   r    rF   r   r)   r"   r"   r"   r#   rH   Z   s   
 rH   )r+   onnxr.   ModelFormatc                  C   sB   t jjtddd} t| }W d    |S 1 sw   Y  |S )Nzhpi_model_info_collection.jsonzutf-8)encoding)	importlib	resources	open_text__package__jsonload)fhpi_model_info_collectionr"   r"   r#   _get_hpi_model_info_collectionb   s   
rU   zultra-infer
hpi_configmodel_pathsreturnc                 C   s  ddl m}m}m}m} d|v }| jrt r|pd|v }g }d|v r'|d | r6|r6| jdkr6|d | rE|rE| jdv rE|d | rT|rT| jd	krT|d
 | red|v re| jdkre|d |sidS | j	d ur~| j	|vr~d dt
| j	 dfS t }d|d d   krdkrn n(|d d u r|d dkrd|d  |d  }nd|d  |d  |d  }nd | dfS | jdkrt }	|	j }
|
dkrd}n)d t
|
 dfS | jd	krt }|sdS |d }d| }n
d t
| j dfS t }||vrdS || | }| j|vrd t
| j dfS || j  }t r/| jdksD|d d  D ]}|drB|| q5tr[tjd
r[tjdr[| jd	ksp|d d  D ]}|d rn|| qag }tt}|D ]/}|drd}n|d
rd
}n|}|d ur||vrqx|| || | qx|sd!S | j	d ur| j	|vrd t
| j	 d"fS | j	}n|d }|| }| jd urd }|dkrd#| jv r| jd# d$rd}n| jd# d%rd }|r|D ]}||r nqd&S |d }i }|dkra|d'v s J ||dkr-| d#di nN|d(kr:| d#d(i nA|dkrG| d#d$i n4|d krT| d#d)i n'|d*kr`| d#d+i n|d
kr{|d,v soJ ||d-kr{| d.d/i | jd ur| | j ||fS )0Nr   )is_built_with_omis_built_with_openvinois_built_with_ortis_built_with_trtrJ   r+   cpur,   )r]   gpur-   r^   r(   r.   Znpu)Nz$No inference backends are available.zInference backend z is unavailable.)r   r      )r   r   r   r   z# is not a supported Paddle version.x86_64Zcpu_x64z! is not a supported architecture.)NzNo CUDA version was found.Zgpu_cudaz  is not a supported device type.)Nz#No prior knowledge can be utilized.z is not a known model.paddle_mkldnnZnvinferpaddle_tensorrt)Nz%No inference backend can be selected.z& is not a supported inference backend.Zrun_modeZmkldnnZtrt)Nz"Unsupported backend configuration.)r+   paddle_fp16ra   rb   paddle_tensorrt_fp16rc   Ztrt_fp32rd   Ztrt_fp16)r(   tensorrt_fp16re   r:   r9   )!Zultra_inferrY   rZ   r[   r\   rG   r   appendrA   rD   reprr   platformunamemachinelowerr   rU   r@   copyr   
startswithremover   rM   util	find_specctypesZfind_libraryr   listrE   update)rV   rW   rY   rZ   r[   r\   Zis_onnx_model_availableZavailable_backendsZpaddle_versionri   archkeyZcuda_versionrT   Z!hpi_model_info_collection_for_envZsupported_pseudo_backendsZpbZsupported_backendsZbackend_to_pseudo_backendsrD   Zsuggested_backendZpseudo_backendsZrequested_base_pseudo_backendZpseudo_backendZsuggested_backend_configr"   r"   r#   $suggest_inference_backend_and_configk   s  	







,

















rv   )5Zctypes.utilrq   importlib.resourcesrM   importlib.utilrQ   rh   collectionsr   	functoolsr   typingr   r   r   r   r   r	   r
   Zpydanticr   r   Ztyping_extensionsr   r   Z
utils.depsr   r   Z	utils.envr   r   Zutils.flagsr   miscr   rW   r   r   r$   r&   r)   r/   r    r1   r6   r7   r=   r>   rH   rK   rU   r   rv   r"   r"   r"   r#   <module>   sN   
$
"