o
    + iE                     @   sF  d dl Zd dlZd dlmZmZmZmZm	Z	m
Z
mZmZmZmZ d dlmZ ejjejjejjejjejjdZejdddejddd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ejddddd Zejdddejd ddd!d" Zejd#ddd$d% Zejd&dd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d0ddd1d2 Z#ejd3ddd4d5 Z$ejd6ddd7d8 Z%ejd9ddejd:ddd;d< Z&ejd=ddd>d? Z'ejd@dddAdB Z(dS )C    N)
add_1D_constant_layeradd_constant_layerset_layer_name
trt_concattrt_divtrt_mintrt_powtrt_prodtrt_subtrt_sum)converter_registry)
pd_op.tanh
pd_op.relupd_op.sigmoid
pd_op.silupd_op.swishr   ztrt_version_ge=8.0)Ztrt_versionr   r   c                 C   s,   |  |d t|  }t|| |dS Nr   )add_activationactivation_type_mapnamer   
get_outputnetwork	paddle_opinputslayer r   l/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/tensorrt/impls/activation.pyactivation_converter)   s
   

r   zpd_op.logsigmoidc                 C   sH   |  |d tjj}t|| | |dtjj}t|| |dS r   )	r   trtActivationTypeSIGMOIDr   	add_unaryr   UnaryOperationZLOG)r   r   r   Zsigmoid_layerr   r   r   r   logsigmoid_converter4   s   


r$   zpd_op.relu6c                 C   s4   |  |d tjj}d|_d|_t|| |dS )Nr                 @)r   r   r    CLIPalphabetar   r   r   r   r   r   relu6_converterC   s
   

r*   zpd_op.softmaxc                 C   sT  ddl m} |d }|j}t|}| dd}|dk}|dk}	|s%|	rJ| |}
d|r/dn|d f}||
_t|
| |
	d}|j}t|}d}| 
|}t|| || | td|d }d}d}t|d |dD ]}|| dkr{|d7 }qn |dk r|| }n|}d|> |_|s|	r| |	d}
|d j|
_|
}t|| |	dS )Nr   )support_fp32_mix_precisionaxis      )Zpaddle.tensorrt.utilr+   shapelenattrsgetadd_shuffleZreshape_dimsr   r   Zadd_softmaxr   maxrangeaxes)r   r   r   r+   Zinput1Zinput_shape
input_dimsr,   Z	is_0_dimsZ	is_1_dimsZreshaped_layerZreshaped_dimsr   r7   Zpadded_dimsZexplicit_batchir   r   r   softmax_converterL   sH   









r:   z
pd_op.geluc                 C   sh  |d }|  d }dgt|j }|rt| dg|tj| dgd}t| dg|tj| dgd}t| d	g|tj| d
gd}t| dg|tj| dgd}	t| dg|tj| dgd}
t| ||| dgd}t| ||| dgd}t	| ||| dgd}t| ||| dgd}| 
|tjj}t|| t	| |d|	| dgd}t| ||
| dgd}t| ||| dgd}|S t| dg|tj| dgd}	t| dg|tj| dgd}
t| dg|tj| dgd}t| ||| dgd}| |tjj}t|| t	| |d|	| dgd}t| ||
| dgd}t| ||| dgd}|S )Nr   approximater.         @constant_layer_powr   gHm?constant_layer_multiplygQ63E?constant_layer_sqrt      ?constant_layer_oneg      ?constant_layer_half	layer_pow	layer_mul	layer_add
layer_sqrt	layer_one	layer_cdfygnU~f?constant_layer_rsqrt2)r2   r1   r0   r   npfloat32r   r   r	   r   r   r   r    TANHr   r   r"   r#   ZERF)r   r   r   Z	input_valr;   Zconst_shaper=   r?   r@   rB   rC   rD   rE   rF   rG   Z
layer_tanhrH   rI   rJ   rK   Z	layer_erfr   r   r   gelu_converter   s   

















rO   zpd_op.hardsigmoidc                 C   P   |d }|  d }|  d }| |tjj}||_||_t|| |dS )Nr   slopeoffset)	r2   r   r   r    HARD_SIGMOIDr(   r)   r   r   )r   r   r   xrQ   rR   hardsigmoid_layerr   r   r   hardsigmoid_converter  s   

rV   zpd_op.hardswishc           	      C   sn   |d }d}d}d}|  |tjj}d| |_|| |_t|| | ||dtj	j
}t|| |dS )Nr   r&   r<   rA   )r   r   r    rS   r(   r)   r   add_elementwiser   ElementWiseOperationZPROD)	r   r   r   rT   	thresholdscalerR   rU   Zhardswish_layerr   r   r   hardswish_converter  s   




r[   z	pd_op.eluz8.xz
pd_op.elu_c                 C   >   |d }|  d }| |tjj}||_t|| |dS )Nr   r(   )r2   r   r   r    ZELUr(   r   r   )r   r   r   rT   r(   Z	elu_layerr   r   r   elu_converter-     

r]   zpd_op.softplusc                 C   s   |d }|  d }|  d }| |tjj}d|_|| |_t|| | |dtjj	}d| |_||_t|| |dS )Nr   r)   rY   g,rA   )
r2   r   r   r    r'   r(   r)   r   r   SOFTPLUS)r   r   r   rT   r)   rY   Z
layer_clipsoftplus_layerr   r   r   softplus_converter8  s   




ra   r   r   c                 C   sD   |  |d t|  }t|| t| |d |d| dgdS Nr   r	   r>   )r   r   r   r   r	   r   )r   r   r   Zlayer_outputr   r   r   swish_silu_converterK  s   

rc   zpd_op.tanh_shrinkc                 C   sN   |d }|  |tjj}t|| | ||dtjj}t|| |dS r   )	r   r   r    rN   r   rW   r   rX   ZSUB)r   r   r   rT   
tanh_layerZsubtract_layerr   r   r   tanh_shrink_converterZ  s   


re   zpd_op.stanhc                 C   sP   |d }|  d }|  d }| |tjj}||_||_t|| |dS )Nr   scale_ascale_b)	r2   r   r   r    ZSCALED_TANHr(   r)   r   r   )r   r   r   rT   rf   rg   Zstanh_layerr   r   r   stanh_converterf     

rh   z
pd_op.mishc                 C   sh   |d }|  |tjj}t|| |d}|  |tjj}t|| |d}t| ||| dgdS rb   )	r   r   r    r_   r   r   rN   r	   r   )r   r   r   rT   r`   Zsoftplus_outputrd   Ztanh_outputr   r   r   mish_converterr  s   



rj   z
pd_op.celuc                 C   s>  |d }|  d }t|j}tdg| }t| |g|d| dgd}t| dg|d| dgd}t| d	g|d| d
gd}	t| ||| dgd}
| |
tj	j
}t|| t| |d|	| dgd}t| ||| dgd}t| ||| dgd}| |tjj}t|| t| |d|| dgd}|S )Nr   r(   r.   rM   
alpha_data)Zdtyper   r%   constant_zero_datarA   constant_one_datainput_div_with_alphar>   input_sub_with_oneinput_prod_with_alpha	min_inputoutput_tensor)r2   r1   r0   r   Dimsr   r   r   r"   r#   ZEXPr   r
   r   r	   r   r   r    RELUr   )r   r   r   Zinput_tensorr(   Z
input_rankZconstant_shaperk   rl   rm   rn   Zinput_exp_layerro   rp   rq   Z
relu_layerrr   r   r   r   celu_converter  s|   










ru   zpd_op.thresholded_reluc                 C   r\   )Nr   rY   )r2   r   r   r    ZTHRESHOLDED_RELUr(   r   r   )r   r   r   rT   rY   Zthresholded_relu_layerr   r   r   thresholded_relu_converter  s   

rv   zpd_op.leaky_reluzpd_op.leaky_relu_c                 C   r\   )Nr   negative_slope)r2   r   r   r    Z
LEAKY_RELUr(   r   r   )r   r   r   rT   rw   Zleaky_relu_layerr   r   r   leaky_relu_converter  r^   rx   z
pd_op.seluc                 C   rP   )Nr   r(   rZ   )	r2   r   r   r    ZSELUr(   r)   r   r   )r   r   r   rT   r(   rZ   Z
selu_layerr   r   r   selu_converter  ri   ry   zpd_op.preluc                 C   s  |\}}|j }| d }| dd}t| d  j }|}	| |	|}
t|
| |
	d}
|
j }|
}t
|t
|kr| |
}t|| |d }t| dg| dgd}t| |g| dgd}d }t
|d	 dkrt| dgt
|d	  | d
gd}|dkr|rt| |||g| dgd}n,t| ||g| dgd}n|rt| |||g| dgd}nt| ||g| dgd}|d| |	d}| ||}t|| |	dS )Nmodedata_formatZNCHWr.   r   n_tensorr>   c_tensor   	hw_tensorshape_tensor)r0   r2   r3   r   rs   ZoperandssourceZadd_constantr   r   r1   r4   r   r   r   Z	set_inputZadd_parametric_relu)r   r   r   inputrk   r8   rz   r{   Zw_dimsZ
trt_w_dimsZalpha_tensorZ
alpha_dimsZreal_alpha_tensorZreshape_layercr|   r}   r   r   r   r   r   r   prelu_converter  sp   











r   ))numpyrL   Ztensorrtr   Zpaddle.tensorrt.converter_utilsr   r   r   r   r   r   r   r	   r
   r   Zpaddle.tensorrt.registerr   r    rN   rt   r!   r   registerr   r$   r*   r:   rO   rV   r[   r]   ra   rc   re   rh   rj   ru   rv   rx   ry   r   r   r   r   r   <module>   st   0	


4
 

	




A
	
