o
    0jK                     @   s   d Z ddlmZ ddlmZmZ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 ddlmZ ddlmZmZ G dd deZdS )zONNX Runtime engine.    )Path)AnyDictOptionalTupleType   )MODEL_FILE_PREFIX)is_dep_available   )ONNXRuntimeRunner)InferenceRunnerONNXRuntimeRunnerConfig)LocalModelFormat   )RunnerBuilderRunnerEnginec                   @   s   e Zd ZdZdZedefddZedee	 fddZ
deeedf  fd	d
Zddddeeef dee dee deeef fddZdddZdeeef ddfddZdefddZdeddfddZdS )ONNXRuntimeEnginez"Engine for ONNX Runtime inference.onnxruntimereturnc                 C      dS )Nr    selfr   r   m/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddlex/inference/models/engines/onnxruntime.pyname#      zONNXRuntimeEngine.namec                 C   s   t S Nr   r   r   r   r   engine_config_model'   r   z%ONNXRuntimeEngine.engine_config_model.c                 C   r   )N)Zonnxr   r   r   r   r   get_supported_model_formats+   s   z-ONNXRuntimeEngine.get_supported_model_formatsN)
model_namedevicerawr!   r"   c                C   s   ~|  || |S r   )Z_apply_device)r   r#   r!   r"   r   r   r   prepare_config_dict0   s   z%ONNXRuntimeEngine.prepare_config_dictc                 C   s   t dstdd S )Nr   zVEngine 'onnxruntime' is unavailable because dependency 'onnxruntime' is not installed.)r
   RuntimeErrorr   r   r   r   ensure_environment;   s
   z$ONNXRuntimeEngine.ensure_environmentengine_configc                 C   sb   | d}|d u s|dkrd S |dkrtddd l}t| }d|vr/tdt|dd S )	Ndevice_typecpuZgpuz?`engine='onnxruntime'` currently only supports `cpu` and `gpu`.r   ZCUDAExecutionProviderzqONNX Runtime GPU inference is unavailable because `CUDAExecutionProvider` is not available. Available providers: .)get
ValueErrorr   setZget_available_providersr%   sorted)r   r'   r(   ZortZavailable_providersr   r   r   _check_device_supportB   s    
z'ONNXRuntimeEngine._check_device_supportc                    sL   d ddt dtt dttt tf  dtt tf dtt dtf fdd	}|S )
N)default_builderr!   	model_dirmodel_configr'   r0   r   c                    s.   ~ ~~|d u rt d | t|t|dS )Nz1`model_dir` is required for engine='onnxruntime'.)r1   Zmodel_file_prefixconfig)r,   r/   r   r	   )r!   r1   r2   r'   r0   r   r   r   runner_builderU   s   
zDONNXRuntimeEngine.get_default_runner_builder.<locals>.runner_builder)strr   r   r   r   r   r   )r   r4   r   r   r   get_default_runner_builderT   s   
z,ONNXRuntimeEngine.get_default_runner_builderrunnerc                 C   s$   t |tstdt|j dd S )Nz>Engine 'onnxruntime' must build an ONNXRuntimeRunner, but got r*   )
isinstancer   	TypeErrortype__name__)r   r7   r   r   r   validate_runneri   s   
z!ONNXRuntimeEngine.validate_runner)r   N)r;   
__module____qualname____doc__entitiespropertyr5   r   r   r   r   r   r   r   r    r   r   r$   r&   r/   r   r6   r   r<   r   r   r   r   r      s2    
	



r   N)r?   pathlibr   typingr   r   r   r   r   	constantsr	   Z
utils.depsr
   Zrunnersr   Zrunners.inference_runnerr   Zrunners.onnxruntime_runnerr   Zutils.model_pathsr   Z_baser   r   r   r   r   r   r   <module>   s   