o
    0j                     @   s   d Z ddlmZ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 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 edef Z G dd deedZ!G dd de!Z"dS )z#Base classes for inference engines.    )ABCabstractmethod)Path)AnyCallableDictOptionalTupleTypeUnion)	BaseModelValidationError   )MODEL_FILE_PREFIXparse_device)AutoRegisterABCMetaClass   )Binding)InferenceRunner)PaddlePredictorOption)LocalModelFormatget_model_paths.c                   @   s  e Zd ZdZdZedeee  fddZ	ee
defddZedefdd	Zdeeed
f  fddZddddeeeeef eef  dee dee deee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eeef deeef fddZdeeef fddZdeeef deeef fddZdeeef deeef fdd Zd!edefd"d#Zd!eddfd$d%Zd/d&d'Ze deeef dee ddfd(d)Z!e d*edeeef fd+d,Z"e#deeeeef eef  deeef fd-d.Z$dS )0InferenceEnginez!Base class for inference engines.Treturnc                 C      d S N selfr   r   g/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddlex/inference/models/engines/_base.pyengine_config_model(      z#InferenceEngine.engine_config_modelc                 C      t r   NotImplementedErrorr   r   r   r    name,      zInferenceEngine.namec                 C      dS )NTr   r   r   r   r    needs_local_model1   r"   z!InferenceEngine.needs_local_model.c                 C   r   r   r   r   r   r   r    get_supported_model_formats5   r'   z+InferenceEngine.get_supported_model_formatsN
model_namedevicecfgr,   r-   c                C   s.   |  |}| j|||d}| |}| |S )Nr+   )_engine_config_to_dictprepare_config_dictvalidate_config_dictpost_normalize_config)r   r.   r,   r-   rawprepared	validatedr   r   r    normalize_config:   s   


z InferenceEngine.normalize_configr3   c                C   s   ~~|S r   r   )r   r3   r,   r-   r   r   r    r0   J   s   z#InferenceEngine.prepare_config_dictc              
   C   sf   | j }|d u r	|S z||}W n ty( } ztd| j d| |d }~ww |jdi |  S )NzInvalid z engine_config: r   )r!   Zmodel_validater   
ValueErrorr&   
model_dumpget_config_dump_kwargs)r   r3   Zconfig_modelr5   er   r   r    r1   T   s   z$InferenceEngine.validate_config_dictc                 C   s   ddiS )Nexclude_noneTr   r   r   r   r    r9   ^      z&InferenceEngine.get_config_dump_kwargsr5   c                 C   s   |S r   r   )r   r5   r   r   r    r2   a      z%InferenceEngine.post_normalize_configengine_configc                 C   s   t |S r   )dict)r   r>   r   r   r    to_predictor_configd   r<   z#InferenceEngine.to_predictor_config	model_dirc                 C   s   ~| j S r   )r&   )r   rA   r   r   r    resolve_engine_from_model_dirg   s   z-InferenceEngine.resolve_engine_from_model_dirc                    sJ   |   }|d u r
d S t|t t fdd|D s#td| jdd S )Nc                 3   s    | ]}| v V  qd S r   r   ).0Zmodel_formatZmodel_pathsr   r    	<genexpr>p   s    z5InferenceEngine.ensure_model_files.<locals>.<genexpr>z+No valid model files were found for engine .)r*   r   r   anyr7   r&   )r   rA   Zmodel_formatsr   rD   r    ensure_model_filesk   s   
z"InferenceEngine.ensure_model_filesc                 C   r(   )z/Check that required dependencies are installed.Nr   r   r   r   r    ensure_environmentu   s    z"InferenceEngine.ensure_environmentc                 C   s8   |rt |\}}|| d< |dur|d nd| d< dS dS )zEApply device_type and device_id from a device string into raw config.device_typeNr   Z	device_idr   )r3   r-   rJ   Z
device_idsr   r   r    _apply_devicex   s
   zInferenceEngine._apply_device	pp_optionc                 C   s,   i }| j  D ]\}}|d ur|||< q|S r   )__dict__items)rL   r.   keyvaluer   r   r    _pp_option_to_engine_config   s   z+InferenceEngine._pp_option_to_engine_configc                 C   s`   |d u ri S t |trt|S t |tr| |S t |tr%|jdddS tdt|j d)NT)r;   Zby_aliaszP`engine_config` must be dict, Pydantic model, or PaddlePredictorOption, but got rF   )	
isinstancer?   r   rQ   r   r8   	TypeErrortype__name__)clsr.   r   r   r    r/      s   



z&InferenceEngine._engine_config_to_dict)r   N)%rU   
__module____qualname____doc__Z_InferenceEngine__is_basepropertyr   r
   r   r!   r   strr&   boolr)   r	   r   r*   r   r   r   r   r6   r0   r1   r9   r2   r@   r   rB   rH   rI   staticmethodrK   rQ   classmethodr/   r   r   r   r    r   #   sh    
	




"

""

$
r   )	metaclassc                   @   s   e Zd ZdZdZdee fddZ	ddee dee fdd	Z	e
d
eddfddZdddedee deeeef  deeef dee defddZdS )RunnerEnginez4Inference engines that can build an InferenceRunner.Tr   c                 C   r   r   r   r   r   r   r    get_default_runner_builder   r=   z'RunnerEngine.get_default_runner_builderNbindingc                 C   s.   |d ur|j d ur|j j}t|r|S |  S r   )Zrunner_bindingrunner_buildercallablera   )r   rb   rc   r   r   r    get_runner_builder   s
   zRunnerEngine.get_runner_builderrunnerc                 C   r#   r   r$   )r   rf   r   r   r    validate_runner   r"   zRunnerEngine.validate_runner)rb   r,   rA   model_configr>   c                C   sN   |  |}t|std|d| j d||||||  d}| | |S )NzModel z does not provide z runner metadata.)r,   rA   rh   r>   Zdefault_builder)re   rd   RuntimeErrorr&   ra   rg   )r   r,   rA   rh   r>   rb   rc   rf   r   r   r    build_runner   s   
	
zRunnerEngine.build_runnerr   )rU   rW   rX   rY   Z_RunnerEngine__is_baser   RunnerBuilderra   r   re   r   r   rg   r[   r   r   r   rj   r   r   r   r    r`      s4    
	

r`   N)#rY   abcr   r   pathlibr   typingr   r   r   r   r	   r
   r   Zpydanticr   r   	constantsr   Zutils.devicer   Zutils.subclass_registerr   Zbindingsr   Zrunners.inference_runnerr   Zrunners.paddle_static.configr   Zutils.model_pathsr   r   rk   r   r`   r   r   r   r    <module>   s   $x