o
    ûpi P  ã                   @   sà   d dl Zd dl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 d dlmZ ejdddd	d
„ ƒZejddddd„ ƒZejddddd„ ƒZejddddd„ ƒZejddddd„ ƒZejddddd„ ƒZdS )é    N)Úpir)Úadd_1D_constant_layerÚget_input_constant_valueÚget_shape_tensor_elementÚset_layer_nameÚ
trt_concatÚtrt_reshapeÚ	trt_shape)Úconverter_registry)Úget_trt_version_listzpd_op.dropoutz8.x)Ztrt_versionc                 C   sÈ   |d }t ||dƒd }| ¡  d¡}|dkr&|  |¡}t||ƒ | d¡S t d| g¡ d¡}t	 
|¡}t	 
t dg¡ d¡¡}	t	 
t dg¡ d¡¡}
| j|t	jj|	||
d}t||ƒ | d¡S )Nr   é   ÚmodeZupscale_in_trainé   Zfloat32)r   ÚshiftÚscaleÚpower)r   ÚattrsÚgetZadd_shuffler   Ú
get_outputÚnpÚarrayZastypeÚtrtÚWeightsZ	add_scaleZ	ScaleModeZUNIFORM)ÚnetworkÚ	paddle_opÚinputsZinput_xZdropout_probZdowngrade_in_inferÚshuffle_layerZweight_dataZscale_weightsZshift_weightsZpower_weightsZscale_layer© r   úc/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/paddle/tensorrt/impls/common.pyÚdropout_converter!   s(   



û

r   zpd_op.bilinear_interpztrt_version_ge=8.0c           ,      C   s‚  |d }|   |¡}t||ƒ | d¡}|j}| ¡  d¡}| ¡  d¡}| ¡  d¡}| ¡  d¡}	| ¡  d¡}
| ¡  d¡}| ¡  d¡}| ¡  d	¡}tƒ d }tƒ d
 }t|› d|› ƒ}|  |¡}t||ƒ |dkrut	j
j|_nt	jj|_|r‚t	jj|_n|	dkrŒt	jj|_nt	jj|_|dkršd}d}n|dkr¢d
}d}|j}d }|dkrlt | ¡ d
  ¡ ¡sØ| ¡ d
  ¡ }t|ƒd
kr×|d
 d ur×| ¡ d
  ¡ }|d
 }n”t | ¡ d  ¡ ¡sl| ¡ d  ¡ }|d }| ¡ r$g }t|tƒs|g}n|}t|ƒdkr#|d }|d
 }|  ||g¡}t||ƒ | d¡}nH| ¡ j}|jdkrl| j|dgd
gd
gd}t||ƒ | d¡}| j|d
gd
gd
gd}t||ƒ | d¡}|  ||g¡}t||ƒ | d¡}d}|d urud}|d u rƒt|ƒdkrƒd}|r4d}d}|rt|ƒd
kr|d }|d
 }n|r­t|ƒd
kr­|d  }}|dkrÖ|dkrÖ|| dkrÕ|| dkrÕt|| | ƒ}
t|| | ƒ}n6|
dkr|dkr|dkrê|dks|| dkr|| dkrt|
ƒt|| ƒ }t|ƒt|| ƒ }dgt|jƒ } |dkr"|| d< || d< n|dkr/|| d
< || d< | |_n|d ur™g }!t | |d| !¡ dgd}"|! "|"¡ |dkrht | |d
| !¡ dgd}#|! "|#¡ |! "|¡ n|dkrƒt | |d| !¡ dgd}#|! "|¡ |! "|#¡ |  |!¡}$t|$|ƒ |$ d¡}$| #d
|$¡ n£|dkrà|   |¡}%|% d¡}&| j|&dgdgd
gd}'| j$dt	 %t&j'|
|gt&j(d¡d d¡}(|  |' d¡|(g¡})d|)_)| #d
|) d¡¡ n\|dkr7|   |¡}%|% d¡}&| j|&dgd
gd
gd}*| j|&dgd
gd
gd}+| j$dt	 %t&j'|
|gt&j(d¡d d¡}(|  |* d¡|(|+ d¡g¡})d|)_)| #d
|) d¡¡ nt*d|ƒ‚| d¡S )Nr   Údata_formatÚinterp_methodÚalign_cornersÚ
align_modeÚout_hÚout_wÚout_dr   r   Ú.ç333333!@ÚNCHWr   é   ÚNHWCgffffff @)ÚstartÚshapeÚstrideTFç      ð¿ç      ð?Ú	batch_dim©ÚnameÚchannel_dim)r   )Zdtype)r-   Úweightsz9Converter for bilinear_interp not support data_format {}.)+Ú	add_shaper   r   r-   r   r   r   ÚfloatÚ
add_resizer   ÚInterpolationModeÚLINEARÚresize_modeÚ
ResizeModeÚResizeCoordinateTransformationÚALIGN_CORNERSÚcoordinate_transformationÚ
HALF_PIXELÚ
ASYMMETRICr   Zis_fake_valueZoperandsÚsourceÚlenZ
is_combineÚ
isinstanceÚlistÚadd_concatenationÚsizeÚ	add_sliceÚintÚscalesr   r3   ÚappendÚ	set_inputZadd_constantr   r   r   Zint32ÚaxisÚNotImplementedError),r   r   r   Úinput_tensorÚinput_shape_tensorÚ
input_rankr    r!   r"   r#   r$   r%   r&   Ú
scale_attrÚ	trt_majorÚ	trt_minorÚtrt_version_floatÚresize_layerÚh_axisÚw_axisÚin_dimÚoutsize_tensorZsize_tensor_operandZoutput_tensor_operandÚsize_tensorÚsize_tensorsZ	outsize_hZ	outsize_wZsize_tensor_shapeZ
use_scalesÚscale_hÚscale_wrJ   Úoutsize_itensorsr1   r4   Zoutput_size_tensorZshape_layerZshape_outputÚslice_layerZhw_constantZconcat_layerZn_layerZc_layerr   r   r   Úbilinear_interp_converter=   sr  







ÿÿÿ
€
ÿ

€
ÿ

ÿ

ÿ



€(





ü


ü


ü







ÿÿþûÿ


ÿÿÿþûÿþ
ra   zpd_op.embeddingc                 C   s2   |d }|d }|   ||d¡}t||ƒ | d¡S )Nr   r   )Z
add_gatherr   r   )r   r   r   ÚxÚweightZgather_layerr   r   r   Úembedding_converter  s
   

rd   zpd_op.unbindc              
   C   sì  |d }|j }| ¡  d¡}t|ƒ}|dk r||7 }t|ƒ}g }g }g }	t|ƒD ]Y}
||
kr=| t| d| ¡ dgd¡ n6| t	| t
| || ¡ dgd|
| ¡ d|
› gd¡ |	 t	| t
| || ¡ dgd|
| ¡ d|
› gd¡ | t| d| ¡ d	gd¡ q(t| |	| ¡ d
gd}t dg| ¡}g }t| ¡ d  ¡  ¡  ¡ ƒ}t|ƒD ]J}
t| |
| ¡ d|
› dgd||< |  ||||¡}| dt| |ƒ¡ | dt| |ƒ¡ t||ƒ t| | d¡|d| ¡ d|
› gd}| |¡ q©|S )Nr   rM   r   r[   r2   r	   Zsize_tensor_Znew_shape_tensor_Zstart_tensorÚnew_shape_tensorZstart_Z_tensorr   TZshuffle_tensor_)Zis_shape_tensorr3   )r-   r   r   rC   rI   ÚrangerK   r   r3   r   r	   r   r   ZDimsÚresultsÚtypeZas_vec_typeÚas_listrH   rL   r   r   r   )r   r   r   rb   Úinput_shaperM   ZrankZstart_tensorsr\   Znew_shape_tensorsÚire   r.   ZoutputsZoutput_sizer`   r   r   r   r   Úunbind_converter!  s„   ÿÿüÿüÿÿÿÿ
ÿü
ûrl   zpd_op.nearest_interpc                 C   sÖ  |d }|   |¡}t||ƒ | d¡}|j}| ¡  d¡}| ¡  d¡}| ¡  d¡}| ¡  d¡}	| ¡  d¡}
| ¡  d¡}| ¡  d¡}tƒ d }tƒ d	 }t|› d
|› ƒ}|  |¡}t||ƒ |dkrp|rot	j
j|_nt	j
j|_|j}d}d}|d urt|ƒdkr|d }|d	 }n-|	dkr¼|
dkr¼|dkr d}d}n|dkr¨d	}d}t|	ƒt|| ƒ }t|
ƒt|| ƒ }d }|d d urÕ|  |d ¡}t||ƒ | d¡}dgt|jƒ }|dkrîd|d	< ||d< ||d< n|dkrÿ||d	< ||d< d|d< ntd|› dƒ‚|d urcg }t| |d| ¡ dgd}| |¡ |dkr;t| |d	| ¡ dgd}| |¡ | |¡ n|dkrVt| |d| ¡ dgd}| |¡ | |¡ | d	|  |¡ d¡¡ n||_| d¡S )Nr   r    r!   r"   r$   r%   r&   r   r   r'   r(   r0   r   r)   r*   r+   zUnsupported data format z", only NCHW or NHWC are supported.r1   r2   r4   )r6   r   r   r-   r   r   r   r7   r8   r   r=   rA   r?   rC   rF   Ú
ValueErrorr   r3   rK   rL   rJ   )r   r   r   rO   rP   rQ   r    r!   r"   r$   r%   r&   rR   rS   rT   rU   rV   rY   r]   r^   rW   rX   rZ   rJ   r_   r1   r4   r   r   r   Únearest_interp_converterl  sª   






ÿ€ÿ





ÿ
ÿ


ü


ü

ÿ
rn   zpd_op.linear_interpc                 C   s¦  |d }|  ¡  d¡}|  ¡  d¡}|  ¡  d¡}|  ¡  d¡}|  ¡  d¡}|  |¡}	t|	|ƒ tƒ d }
tƒ d }t|
› d|› ƒ}|d	krNtjj|	_	ntj
j|	_	|r[tjj|	_ntjj|	_|j}d
}|rqt|ƒdkrq|d }|dkrwdnd}t|ƒdkr‡t|| | ƒ}d }t|ƒdkr™|d d ur™|d }|d u r¯t|ƒdkr¯|d d ur¯|d d }|dkrÁ|dkrÁt|ƒt|| ƒ }dg}|dkrÓ| d¡ | |¡ n|dkrá| |¡ | d¡ |d urKg }t| || ¡ dgd}t| |d| ¡ dgd}| |¡ |dkr t| |d| ¡ dgd}| |¡ | |¡ n|dkr;| |¡ t| |d| ¡ dgd}| |¡ |	 dt| || ¡ dgd¡ n||	_|	 d¡S )Nr   r    r!   r"   r%   r   r   r'   r(   r/   r)   r   g        r0   r+   rj   r2   r1   r4   r_   )r   r   r8   r   r   r7   r   r9   r:   r;   r<   r=   r>   r?   r@   r-   rC   rI   rK   r	   r3   r   rL   r   rJ   r   )r   r   r   rO   Zdata_layoutr!   r"   r%   rR   ÚlayerrS   rT   rU   rY   r^   rX   rZ   rJ   r_   rj   r1   r4   r   r   r   Úlinear_interp_converter×  s   




ÿÿ



ÿÿ

ÿ


ÿ

ýþ	
rp   )Únumpyr   Ztensorrtr   Zpaddler   Zpaddle.tensorrt.converter_utilsr   r   r   r   r   r   r	   Zpaddle.tensorrt.registerr
   Zpaddle.tensorrt.utilr   Úregisterr   ra   rd   rl   rn   rp   r   r   r   r   Ú<module>   s6   $	
ÿ
 Wÿ

Jÿ
hÿ