o
    H!ij                     @   sl   d dl Z d dl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dS )    N)ThreadPoolExecutor   )device   ImageBatchSampler   )BasePipelinec                       s6   e Zd Zdd fdd
Zedd Zdd Z  ZS )	"MultiDeviceSimpleInferenceExecutorNpostprocess_resultc                   s    t    || _|| _|| _d S N)super__init__
_pipelines_batch_sampler_postprocess_result)self	pipelinesbatch_samplerr   	__class__ q/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddlex/inference/pipelines/_parallel.pyr      s   

z+MultiDeviceSimpleInferenceExecutor.__init__c                 C      | j S r   )r   r   r   r   r   r         z,MultiDeviceSimpleInferenceExecutor.pipelinesc              
   o   s   t t| jdt}| |}d}|sug }| jD ]*}zt|}	W n ty,   d}Y  nw |	j}
|dd ||
||}||	|f q|D ]%\}	}|	 }t
|	j|D ]\}}||d< qS| jre| ||	}|E d H  qE|rW d    d S W d    d S 1 sw   Y  d S )N)max_workersFTc                 S   s   t | j|g|R i |S r   )listpredict)pipelineinput_instancesargskwargsr   r   r   <lambda>5   s    z<MultiDeviceSimpleInferenceExecutor.execute.<locals>.<lambda>
input_path)r   lenr   r   nextStopIterationZ	instancessubmitappendresultzipZinput_pathsr   )r   inputr"   r#   poolZinput_batchesZout_of_dataZinput_future_pairsr    input_batchr!   futurer+   r%   Zresult_itemr   r   r   execute"   sB   

	
"z*MultiDeviceSimpleInferenceExecutor.execute)__name__
__module____qualname__r   propertyr   r1   __classcell__r   r   r   r   r
      s
    
r
   c                       sj   e Zd Z fddZedd Zdd Zdd Zej	d	d
 Z
ej	dd Zej	dd Zdd Z  ZS )#AutoParallelSimpleInferencePipelinec           
         s   t  j|i | d| _| jd urSt| j\}}|d urSt|dkrSd| _g | _|D ]}| |t	||g}| j
| q+| |}| |}	t| j|	| jd| _| js`| || j| _d S d S )NFr   Tr   )r   r   _multi_device_inferencer   device_utilsZparse_devicer&   r   _create_internal_pipelineZconstr_devicer*   _get_batch_size_create_batch_samplerr
   r   	_executor	_pipeline)
r   configr"   r#   Zdevice_typeZ
device_idsZ	device_idr    
batch_sizer   r   r   r   r   L   s,   


z,AutoParallelSimpleInferencePipeline.__init__c                 C   r   r   )r8   r   r   r   r   multi_device_inferencei   r   z:AutoParallelSimpleInferencePipeline.multi_device_inferencec                 C   s(   | j r| jjd }t||S t| j|S )Nr   )r8   r=   r   getattrr>   )r   nameZfirst_pipeliner   r   r   __getattr__m   s   
z/AutoParallelSimpleInferencePipeline.__getattr__c                 o   sP    | j r| jj|g|R i |E d H  d S | jj|g|R i |E d H  d S r   )r8   r=   r1   r>   r   )r   r-   r"   r#   r   r   r   r   t   s    z+AutoParallelSimpleInferencePipeline.predictc                 C      t r   NotImplementedErrorr   r?   r   r   r   r   r:         z=AutoParallelSimpleInferencePipeline._create_internal_pipelinec                 C   rE   r   rF   )r   r?   r   r   r   r;      rI   z3AutoParallelSimpleInferencePipeline._get_batch_sizec                 C   rE   r   rF   r   r@   r   r   r   r<      rI   z9AutoParallelSimpleInferencePipeline._create_batch_samplerc                 C   s   |S r   r   )r   r+   r/   r   r   r   r      s   z7AutoParallelSimpleInferencePipeline._postprocess_result)r2   r3   r4   r   r5   rA   rD   r   abcabstractmethodr:   r;   r<   r   r6   r   r   r   r   r7   K   s    



r7   c                   @   s6   e Zd Zeejdd Zdd Zdd Zdd Z	d	S )
(AutoParallelImageSimpleInferencePipelinec                 C   rE   r   rF   r   r   r   r   _pipeline_cls   s   z6AutoParallelImageSimpleInferencePipeline._pipeline_clsc                 C   s   | j ||| j| j| jdS )N)r   	pp_optionuse_hpip
hpi_config)rN   rO   rP   rQ   rH   r   r   r   r:      s   zBAutoParallelImageSimpleInferencePipeline._create_internal_pipelinec                 C   s   t |S r   r   rJ   r   r   r   r<      s   z>AutoParallelImageSimpleInferencePipeline._create_batch_samplerc                 C   s"   t |j|D ]\}}||d< q|S )N
page_index)r,   Zpage_indexes)r   r+   r/   rR   itemr   r   r   r      s   
z<AutoParallelImageSimpleInferencePipeline._postprocess_resultN)
r2   r3   r4   r5   rK   rL   rN   r:   r<   r   r   r   r   r   rM      s    	rM   )rK   concurrent.futuresr   utilsr   r9   Zcommon.batch_samplerr   baser	   objectr
   r7   rM   r   r   r   r   <module>   s   4L