
    {-j                        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ee          Z! G 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                   *   e Zd ZdZdZedeee                  fd            Z	ee
defd                        Zedefd            Zdeeedf                  f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Zd	d	d
deeef         dee         dee         deeef         fdZdeeef         deeef         fdZdeeef         fdZdeeef         deeef         fdZdeeef         deeef         fdZdedefdZdedd	fdZddZe deeef         dee         dd	fd            Z!e dedeeef         fd            Z"e#deeeeef         eef                  deeef         fd            Z$d	S ) InferenceEnginez!Base class for inference engines.Treturnc                     d S N selfs    f/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddlex/inference/models/engines/_base.pyengine_config_modelz#InferenceEngine.engine_config_model(       t    c                     t           r   NotImplementedErrorr    s    r"   namezInferenceEngine.name,   s
     "!r%   c                     dS )NTr   r    s    r"   needs_local_modelz!InferenceEngine.needs_local_model1   r$   r%   .c                     d S r   r   r    s    r"   get_supported_model_formatsz+InferenceEngine.get_supported_model_formats5   s	     tr%   N
model_namedevicecfgr/   r0   c                    |                      |          }|                     |||          }|                     |          }|                     |          S )Nr.   )_engine_config_to_dictprepare_config_dictvalidate_config_dictpost_normalize_config)r!   r1   r/   r0   rawprepared	validateds          r"   normalize_configz InferenceEngine.normalize_config:   sc     ))#..++! , 
 

 --h77	)))444r%   r7   c                
    ~~|S r   r   )r!   r7   r/   r0   s       r"   r4   z#InferenceEngine.prepare_config_dictJ   s     
r%   c                     | j         }||S 	 |                    |          }n-# t          $ r }t          d| j         d|           |d }~ww xY w |j        di |                                 S )NzInvalid z engine_config: r   )r#   model_validater   
ValueErrorr)   
model_dumpget_config_dump_kwargs)r!   r7   config_modelr9   es        r"   r5   z$InferenceEngine.validate_config_dictT   s    /J	O$33C88II 	O 	O 	OF	FF1FFGGQN	O#y#DDd&A&A&C&CDDDs   # 
AAAc                 
    ddiS )Nexclude_noneTr   r    s    r"   r@   z&InferenceEngine.get_config_dump_kwargs^   s    %%r%   r9   c                     |S r   r   )r!   r9   s     r"   r6   z%InferenceEngine.post_normalize_configa   s    r%   engine_configc                      t          |          S r   )dict)r!   rF   s     r"   to_predictor_configz#InferenceEngine.to_predictor_configd   s    M"""r%   	model_dirc                     ~| j         S r   )r)   )r!   rJ   s     r"   resolve_engine_from_model_dirz-InferenceEngine.resolve_engine_from_model_dirg   s    yr%   c                     |                                  }|d S t          |t                    t          fd|D                       st	          d| j        d          d S )Nc              3       K   | ]}|v V  	d S r   r   ).0model_formatmodel_pathss     r"   	<genexpr>z5InferenceEngine.ensure_model_files.<locals>.<genexpr>p   s(      QQ<<;.QQQQQQr%   z+No valid model files were found for engine .)r-   r   r   anyr>   r)   )r!   rJ   model_formatsrQ   s      @r"   ensure_model_filesz"InferenceEngine.ensure_model_filesk   s    88:: F%i1BCCQQQQ=QQQQQ 	LdiLLL  	 	r%   c                     dS )z/Check that required dependencies are installed.Nr   r    s    r"   ensure_environmentz"InferenceEngine.ensure_environmentu   s      r%   c                 Z    |r(t          |          \  }}|| d<   ||d         nd| d<   dS dS )zEApply device_type and device_id from a device string into raw config.device_typeNr   	device_idr   )r7   r0   rZ   
device_idss       r"   _apply_devicezInferenceEngine._apply_devicex   sR      	Q&26&:&:#K!,C0:0Fz!}}DC	Q 	Qr%   	pp_optionc                 V    i }| j                                         D ]\  }}||||<   |S r   )__dict__items)r^   r1   keyvalues       r"   _pp_option_to_engine_configz+InferenceEngine._pp_option_to_engine_config   s>    #,2244 	! 	!JC  C
r%   c                 H   |i S t          |t                    rt          |          S t          |t                    r|                     |          S t          |t                    r|                    dd          S t          dt          |          j         d          )NT)rD   by_aliaszP`engine_config` must be dict, Pydantic model, or PaddlePredictorOption, but got rS   )	
isinstancerH   r   rd   r   r?   	TypeErrortype__name__)clsr1   s     r"   r3   z&InferenceEngine._engine_config_to_dict   s    
 ;Ic4   	99c011 	8223777c9%% 	D>>td>CCC-Cyy)- - -
 
 	
r%   )r   N)%rj   
__module____qualname____doc___InferenceEngine__is_basepropertyr	   r   r   r#   r   strr)   boolr+   r
   r   r-   r   r   r   r   r:   r4   r5   r@   r6   rI   r   rL   rV   rX   staticmethodr]   rd   classmethodr3   r   r%   r"   r   r   #   s       ++IXd9o%>    X "c " " " ^ X" 4    X	%(#-.	/    %) $5 5 5eDcN,A9LMN5 SM	5
 5 
c3h5 5 5 5( %) $  #s(^ SM	
  
c3h   ES#X E4S> E E E E&S#X & & & &tCH~ $sCx.    #c3h #DcN # # # #t     D T    > > > > Q4S> Q8C= QT Q Q Q \Q /D cSVh    \ 
eDcN,A9LMN
 
c3h
 
 
 [
 
 
r%   r   )	metaclassc                       e Zd ZdZdZdee         fdZ	 ddee         dee         fdZ	e
deddf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ZdS )RunnerEnginez4Inference engines that can build an InferenceRunner.Tr   c                     d S r   r   r    s    r"   get_default_runner_builderz'RunnerEngine.get_default_runner_builder   s    tr%   Nbindingc                 v    |$|j         |j         j        }t          |          r|S |                                 S r   )runner_bindingrunner_buildercallablery   )r!   rz   r}   s      r"   get_runner_builderzRunnerEngine.get_runner_builder   sE     7#9#E$3BN'' &%%..000r%   runnerc                     t           r   r'   )r!   r   s     r"   validate_runnerzRunnerEngine.validate_runner   s    !!r%   )rz   r/   rJ   model_configrF   c                    |                      |          }t          |          st          d|d| j         d           ||||||                                           }|                     |           |S )NzModel z does not provide z runner metadata.)r/   rJ   r   rF   default_builder)r   r~   RuntimeErrorr)   ry   r   )r!   r/   rJ   r   rF   rz   r}   r   s           r"   build_runnerzRunnerEngine.build_runner   s     0099'' 	UUUUUU    !%' ;;==
 
 
 	V$$$r%   r   )rj   rl   rm   rn   _RunnerEngine__is_baser	   RunnerBuilderry   r   r   r   r   r   rq   r   r   r   r   r   r%   r"   rw   rw      s"       >>IH],C     ,01 1(1	-	 1 1 1 1 "o "$ " " " ^" &*    D>	
 tCH~. CH~ '" 
     r%   rw   N)#rn   abcr   r   pathlibr   typingr   r   r   r	   r
   r   r   pydanticr   r   	constantsr   utils.devicer   utils.subclass_registerr   bindingsr   runners.inference_runnerr   runners.paddle_static.configr   utils.model_pathsr   r   r   r   rw   r   r%   r"   <module>r      s    * ) # # # # # # # #       D D D D D D D D D D D D D D D D D D / / / / / / / / + + + + + + ) ) ) ) ) ) @ @ @ @ @ @       6 6 6 6 6 6 @ @ @ @ @ @ A A A A A A A Ao-.u
 u
 u
 u
 u
c%= u
 u
 u
 u
p+ + + + +? + + + + +r%   