o
    piU8                     @   s`   d dl Zd dlZd dlmZmZmZ d dlm	Z	 e	j
ddddd Ze	j
d	d
ddd ZdS )    N)get_input_constant_valueget_trt_pluginset_layer_name)converter_registryzpd_op.pool2dztrt_version_ge=8.0)Ztrt_versionc           +         s  |d }  d  j}t|} dd} dd} dddg} dddg  d	d
}	 dd}
 dd} dd} dsqt|dkrqt|d}|d u rptdn
 dddg}fdd}tj	j
}tjj
}|dkrtjj
}tj	j
}n|dkrtjj}tj	j}ntd| |s|rg d |dkrdgt   t d  d }t|d |d }t|d |d }d }tdd}tdd}||d  |d  d d   dk r|d d |_||d  |d  d d   dk r|d d |_  }tdD ]} | }|d| d | q%|dkrtdD ]} d|  } d| d | q@tdD ]>}|d|  ||  d ||  }t|d ||  ||  |d|   d}|d }|| }| d| < | d| d < qX  } fddtt D  |dkrdgt| }|rr|dkrr|\}} |dkr| dkrd|d > d|d > B }!| j|tj	j|!d
d}"|"d u rtd|"}t| nX||d  }#||d  }$|#dk s	|$dk r|| ||
|||	|| |
}n3|#| }%|$|  }&|#|d |%  }'|$| d |&  }(|%dks:|&dkr>tdt|'|(}t|%|&}tdd}| j|||d})|)d u ratd||)_||)_|	|)_|)}t| n|s|s|
s|dkr|jdkr||d  dks|jdkr||d  dkr| j||j|jf|j|jfd }*|*d u rtd!t|* |*d}| j|||d})|)d u rtd||)_||)_|	|)_|dkrtjj |)_!|)}t| n^|s(|s(|
r(| j|||d})|)d u rtd||)_||)_|	|)_|dkrtjj |)_!ntjj"|)_!|)}t| n#|r>|s>| ||d"d
}"|"}t| n|| ||
|||	|| |
}|d u rTtd#|dS )$Nr   global_poolingFpooling_typeavgstrides   paddings	exclusiveT	ceil_modeadaptivepadding_algorithmEXPLICITkernel_size   zLThe defining op of kernel size must be builtin.constant/pd_op.full_int_arrayc
                    s*  t dtj|gtjdt jjt dtjt|tjdt jj	t dtj|gtjdt jjt dtj|gtjdt jjt dtj|tj
dt jjt dtj|tj
dt jjt dtj|tj
dt jjt d	tj|	gtjdt jjg}
t |
}d
}d}t|||}| |g|}t|  |S )Nr   Zdtype	pool_typer   r   ksizer	   r   r   Zpir_pool_plugin_dynamic1)trtPluginFieldnparraybool_PluginFieldTypeINT32listbytes_CHARint32PluginFieldCollectionr   add_plugin_v2r   )networkinput_tensorr   r   r   r   r   r	   r   r   plugin_fieldsplugin_field_collectionplugin_nameplugin_versionpluginlayer)	paddle_op d/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/paddle/tensorrt/impls/pooling.pycreate_pool_plugin4   sd   
*
z,pool2d_converter.<locals>.create_pool_pluginmaxzUnsupported pooling type: )r   r   r   r   VALIDSAMEc                    s    g | ]}|d  dkr | qS )r   r   r-   ).0i)r   r-   r.   
<listcomp>   s     z$pool2d_converter.<locals>.<listcomp>)inputopZaxesZ	keep_dimsz'Failed to add reduce layer in TensorRT.z4Calculated stride is non-positive, which is invalid.)r6   typeZwindow_sizez(Failed to add pooling layer in TensorRT.)r6   Zpre_paddingZpost_paddingz(Failed to add padding layer in TensorRT.   z+Failed to create pooling layer in TensorRT.)#Zoperandssourceshapelenattrsgetr   	Exceptionr   ReduceOperationMAXPoolingTypeAVERAGEAVG
ValueErrorZDimsHWhwcopyrangeinsertr0   
add_reduceRuntimeErrorr   add_pooling_nd	stride_nd
padding_ndaverage_count_excludes_paddingZadd_padding_nd
get_outputZPaddingModeZ
SAME_UPPERZpadding_modeZEXPLICIT_ROUND_UP)+r$   r,   inputsr%   Zinput_shapeZ
input_dimsr   r   r	   r   r   r   r   r   r/   reduce_operationnv_pool_typenv_paddingsnv_ksize
nv_stridesr+   Z	g_pre_padZ
g_post_padZreal_paddingsr4   Zcopy_padZout_sizeZpad_sumZpad_0Zpad_1Zread_paddingsZoutput_hZoutput_wZreduce_axesreduce_layerZinput_hZinput_wZstride_hZstride_wZkernel_hZkernel_wZpooling_layerZ	pad_layerr-   )r   r,   r.   pool2d_converter   sn  @

&&
 

















rY   zpd_op.pool3dz8.xc                 C   s  |d }|  d }|  d }|  d }|  d }|  d }|  dd}	|  d	 }
|  d
d}|  dd}|dksH|dkrOdgt| }tjj}tjj}|dkrdtjj}tjj}n|dkrptjj}tjj}t	|d |d |d }t	|d |d |d }t	|d |d |d }d }|s|s|
s| 
|||}||_||_|	|_t|| |}n|r| ||dd}t|| |}ntd	tj|
gtjdtjjtdtjt|tjdtjjtd
tj|gtjdtjjtdtj|tjdtjjtdtj|tjdtjjtdtj|tjdtjjtdtj|gtjdtjjg}t|}d}d}t|||}| |g|}t|| |dS )Nr   r   r   r   r	   r   r   Tr   r   Fr   r   r1   r2   r0   r   r
   r      r   Zpool3d_typer   	is_globalZpir_pool3d_plugin_dynamicr   )r=   r>   r<   r   rB   rA   r@   rC   rD   ZDims3rM   rN   rO   rP   r   rK   r   r   r   r   r   r   r   r   r    r!   r"   r   r#   rQ   )r$   r,   rR   r%   r   r   r   r	   r   r   r   r   r   rT   rS   rV   rW   rU   r+   Z
pool_layerrX   r&   r'   r(   r)   r*   r-   r-   r.   pool3d_converter0  s   



%

r\   )numpyr   Ztensorrtr   Zpaddle.tensorrt.converter_utilsr   r   r   Zpaddle.tensorrt.registerr   registerrY   r\   r-   r-   r-   r.   <module>   s   
  