
    j                        d dl mZ d dlmZmZ d dlmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZmZmZ dd	lmZ  G d
 dee          ZdS )    )annotations)ABCabstractmethod)AnyDictOptionalUnion   )logging)AutoRegisterABCMetaClass   )BasePredictor	HPIConfigPaddlePredictorOption)uses_server_backendc                       e Zd ZdZdZdddddddd" fdZed             Zed#d            Z	d$dZ
d%dZd  Zd! Z xZS )&BasePipelinezBase class for all pipelines.

    This class serves as a foundation for creating various pipelines.
    It includes common attributes and methods that are shared among all
    pipeline implementations.
    TNF)deviceengineengine_config	pp_optionuse_hpip
hpi_configr   Optional[str]r   r   Optional[Dict[str, Any]]r   Optional[PaddlePredictorOption]r   boolr   *Optional[Union[Dict[str, Any], HPIConfig]]returnNonec                   t                                                       || _        || _        || _        || _        || _        || _        dS )a  
        Initializes the class with specified parameters.

        Args:
            device (Optional[str], optional): The device to use for prediction. Defaults to `None`.
            engine (Optional[str], optional): Inference engine. Defaults to `None`.
            engine_config (Optional[Dict[str, Any]], optional): Engine-specific config. Defaults to `None`.
            pp_option (Optional[PaddlePredictorOption], optional): Paddle predictor options.
                Defaults to `None`.
            use_hpip (bool, optional): Whether to use HPIP. Defaults to `False`.
            hpi_config (Optional[Union[Dict[str, Any], HPIConfig]], optional): HPIP configuration.
                Defaults to `None`.
        N)super__init__r   r   r   r   r   r   )	selfr   r   r   r   r   r   kwargs	__class__s	           p/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddlex/inference/pipelines/base.pyr#   zBasePipeline.__init__$   sJ    0 	*" $    c                     t          d          )z
        Declaration of an abstract method. Subclasses are expected to
        provide a concrete implementation of `predict`.
        Args:
            input: The input data to predict.
            **kwargs: Additional keyword arguments.
        z2The method `predict` has not been implemented yet.)NotImplementedErrorr$   inputr%   s      r'   predictzBasePipeline.predictD   s     ""VWWWr(   configDict[str, Any]inherited_engineallow_genaituple[Optional[str], bool]c                   d| v r|                      dd          }||du fS d| v }|r%t          |                      dd                    rd}|rdS |dfS )a  Resolve the effective child engine.

        Returns a tuple of `(engine, suppress_inherited_engine_defaults)`.

        Same-level `engine` has the highest priority. If a child omits `engine`
        but specifies another engine selector such as `use_hpip`, or a
        `genai_config` that targets a remote server backend, that selector
        should beat the inherited parent `engine` and fall back to local
        auto-resolution instead of reusing the parent engine defaults.
        r   Nr   genai_configT)NTF)getr   )r.   r0   r1   child_enginehas_local_engine_selectors        r'   _resolve_child_enginez"BasePipeline._resolve_child_engineO   s     v!::h55L!555$.&$8! 	-.vzz.$/O/OPP 	-(,%$ 	:&&r(   r   r   c                z   d|v rt          |d                   |                    dd          }|                     || j        d          \  }}|                    dd          }| j        /|s-t          | j                  }|r|                    |           |}|                    d| j                  }|                    dd          }	| j        ]|	pi }	t          | j        d	          r| j        
                    d
          n"t          | j        t
                    r| j        ni }
i |
|	}	ddlm} t          j        d|d         ||f           | j        | j                                        nd} |d|d         || j        |||                    dd          |||	|                    dd          d
|S )zK
        Create a model instance based on the given configuration.
        model_config_error	model_dirNTr1   r   r   r   
model_dumpexclude_noner   )create_predictorzCreating model: %s
model_name
batch_size   r4   )
rA   r;   r   r   r   rB   r   r   r   r4    )
ValueErrorr5   r8   r   r   dictupdater   r   hasattrr=   
isinstancemodelsr@   r   infor   copyr   )r$   r.   r%   r;   model_engine"suppress_inherited_engine_defaultsmodel_engine_configmergedr   r   baser@   r   s                r'   create_modelzBasePipeline.create_modelj   s     6))V$89:::JJ{D11	;?;U;UDKT <V <
 <
88 %jj$??)2T)$,--F" 31222"(::j$-88ZZd33
?&#)rJ 4?L99T***===)3DOT)J)JRdooPR 
 0D/J/J------ 6,#7L"Q	
 	
 	
 .2^-GDN'')))T	 
l+;-zz,22!ND99
 
 
 
 	
r(   'BasePipeline'c                &   d|v rt          |d                   ddlm} |                     || j        d          \  }}|                    d| j                  }|                    dd          }| j        ]|pi }t          | j        d	          r| j        	                    d
          n"t          | j        t                    r| j        ni }i ||} |d|| j        ||rdn| j        | j        | j                                        nd||d|S )zI
        Creates a pipeline based on the provided configuration.
        pipeline_config_errorrC   )create_pipelineFr<   r   r   Nr=   Tr>   )r.   r   r   r   r   r   r   rD   )rE    rV   r8   r   r5   r   r   rH   r=   rI   rF   r   r   r   rL   )	r$   r.   r%   rV   pipeline_enginerN   r   r   rQ   s	            r'   rV   zBasePipeline.create_pipeline   s]    #f,,V$;<===%%%%%% &&vt{&NN 	<; ::j$-88ZZd33
?&#)rJ 4?L99T***===)3DOT)J)JRdooPR 
 0D/J/J 
;":R@R040Jt~**,,,PT!
 
 
 
 	
r(   c                    d S )NrD   )r$   s    r'   closezBasePipeline.close   s    r(   c                     | j         |fi |S )aB  
        Calls the `predict` method with the given input and keyword arguments.

        Args:
            input: The input data to be predicted.
            **kwargs: Additional keyword arguments to be passed to the `predict` method.

        Returns:
            The prediction result from the `predict` method.
        )r-   r+   s      r'   __call__zBasePipeline.__call__   s     t|E,,V,,,r(   )r   r   r   r   r   r   r   r   r   r   r   r   r   r    )r.   r/   r0   r   r1   r   r   r2   )r.   r   r   r   )r.   r   r   rS   )__name__
__module____qualname____doc___BasePipeline__is_baser#   r   r-   staticmethodr8   rR   rV   rZ   r\   __classcell__)r&   s   @r'   r   r      s          I
 !% $2659AE% % % % % % % %@ X X ^X ' ' ' \'41
 1
 1
 1
f#
 #
 #
 #
J  - - - - - - -r(   r   )	metaclassN)
__future__r   abcr   r   typingr   r   r   r	   utilsr   utils.subclass_registerr   rJ   r   r   r   models.common.genair   r   rD   r(   r'   <module>rk      s    # " " " " " # # # # # # # # - - - - - - - - - - - -       ? ? ? ? ? ? D D D D D D D D D D 5 5 5 5 5 5v- v- v- v- v-3": v- v- v- v- v- v-r(   