o
    piJ                     @   s  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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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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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d:d; Z,ejd<ddd=d> Z-ejd?ddd@dA Z.ejdBdddCdD Z/ejdEdddFdG Z0ejdHddejdIdddJdK Z1ejdLddejdMdddNdO Z2dS )P    N)add_1D_constant_layeradd_cast_reduce_layeradd_constant_layeradd_elementwise_layeradd_reduce_layer	broadcastcast_tensorfill_constant_layerget_axes_for_reduce_opget_axis_lengthget_input_constant_valueget_shape_tensor_elementset_layer_nametrt_cast
trt_concat	trt_equal
trt_expandtrt_maxtrt_reshape	trt_shape)converter_registryz	pd_op.addztrt_version_ge=8.0)Ztrt_versionz
pd_op.add_c                 C      t | ||tjjS N)r   trtElementWiseOperationSUMnetwork	paddle_opinputs r    a/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/paddle/tensorrt/impls/math.pyadd_converter+   s   r"   zpd_op.scalec                 C   s  |d }|  dd}|  dd}|jtjjk}|r7t| |dkr)t|d nt|d | dgd}nt| |t	j
| dgd	}|dk}d
gt|j }	t| |	| dgd}
| |}|d
|
 t|| t||d
}|d ur|d }d}|rt| t|dkr|d n|d | dgd}nt| |t	j
| dgd	}|d
k}nd}|d
 }d}d
gt|j }t| || dgd}| |}|d
| t|| d }|s|r|r| |}t|| n^|r|s| ||dtjj}t|| |d}|s| ||dtjj}t|| n-|s/| ||dtjj}t|| |d}|sC| ||dtjj}t|| |dS )Nr   bias        bias_after_scaleTg      ?bias_tensorname)dtyper(      bias_shapes_tensorFscale_tensorscale_shapes_tensor)attrsgetr)   r   DataTypeINT32r   intr(   npfloat32lenshapeZadd_shuffle	set_inputr   r   Zadd_identityadd_elementwise
get_outputr   PRODr   )r   r   r   xr#   r%   Zis_intr&   Z	is_bias_0Zbias_shapesr+   Zreshape_layer_biasscaleZhas_scale_tensorr,   Z
is_scale_1Zscale_shapesr-   Zreshape_layer_scalelayerr    r    r!   scale_converter3   s   
















r>   z	pd_op.maxc           
      C   s   |d }t ||d}|j}| d }| jr|dksJ dg }t|dkr.ttt|}tt|D ]}|| dk rFt|||  ||< q4| j|tj	j
t||d}	t|	| |	dS )Nr   r*   keepdimzCcan't reduce on axis == 0 when network has implicit batch dimension)ZaxesZ	keep_dims)r   r6   r.   Zhas_implicit_batch_dimensionr5   listrangeZ
add_reducer   ReduceOperationMAXr
   r   r9   )
r   r   r   input_tensoraxisinput_shaper?   Zoutput_shapeir=   r    r    r!   max_converter   s.   


rH   zpd_op.dividec                 C   r   r   )r   r   r   DIVr   r    r    r!   divide_converter      rJ   zpd_op.subtractc                 C   r   r   )r   r   r   SUBr   r    r    r!   subtract_converter   rK   rM   zpd_op.multiplyc                 C   r   r   )r   r   r   r:   r   r    r    r!   multiply_converter   rK   rN   z
pd_op.clipz8.xc                    s   	 d	 fdd	}|d   j }t|} }t|| |d}t||d}|||d ||}t||d}	||	|d ||| dgd}
t || dgd}||
t	j
j}t|| |dS )
Nc                    sT   | d urt |||  j|dS t|d|||d}|j jkr(t| j|d}|S )Nr'   r*   )r	   r)   r   r   )valueZconstant_inputsinput_shape_tensorrankr(   Zexpanded_tensorrD   r   r    r!   _get_constant_or_expand_tensor   s"   	
z6clip_converter.<locals>._get_constant_or_expand_tensorr   r*      beta_tr'   
lower_clipr   )r6   r5   Z	add_shaper   r9   r   r(   r   r8   r   r   MIN)r   r   r   rS   rF   rQ   rP   Z	min_valueZalpha_tZ	max_valuerU   rV   r=   r    rR   r!   clip_converter   s8   



	


rX   z	pd_op.powc                 C   s   ddl m} |d }| d }|j}tdgt| }|g}t| ||tj	|
 dgd}	| ||	tjj}
t|
| ||
 |
 |
dS )Nr   support_fp32_mix_precisionyr*   r'   )paddle.tensorrt.utilrZ   r.   r6   r   ZDimsr5   r   r3   r4   r(   r8   r   POWr   r9   )r   r   r   rZ   r;   factorZdims_xZ
trt_dims_yZw_datar[   r=   r    r    r!   pow_converter  s   

r_   zpd_op.remainderzpd_op.remainder_c                 C   s  ddl m} | d  j}|d j}|d }|d }t|d tjkr7| ||d }t	|| |
d}t|d tjkrR| ||d }t	|| |
d}t| ||dd|\}}	|jtjjk}
|
rp| ||	tjj}n	| ||	tjj}t	|| |
d}|| | | |	|tjj}t	|| |
d}|| | | ||tjj}t	|| |
d}|| | |S )Nr   rY   r*   Zinput_tensor_broadcastZweight_tensor_broadcast)r\   rZ   Zoperandssourcer6   typer   ZWeightsZadd_constantr   r9   r   r)   r0   r1   r8   r   	FLOOR_DIVrI   r(   r:   rL   )r   r   r   rZ   Zweight_shaperF   Zweight_tensorrD   lhs_valrhs_valZis_floor_divZquotient_layerZquotientZproduct_layerproductZremainder_layer	remainderr    r    r!   remainder_converter  sZ   














rg   z	pd_op.minc                 C   r   r   )r   r   rB   rW   r   r    r    r!   min_converterO     rh   z	pd_op.sumc                 C   r   r   )r   r   rB   r   r   r    r    r!   sum_converterT  ri   rj   z
pd_op.meanc                 C   r   r   )r   r   rB   ZAVGr   r    r    r!   mean_converterY  ri   rk   z	pd_op.anyc                 C   r   r   )r   r   rB   rC   r   r    r    r!   any_converter^  rK   rl   z	pd_op.allc                 C   r   r   )r   r   rB   rW   r   r    r    r!   all_convertere  rK   rm   zpd_op.cumsumc           !   
   C   s   |d }|j }t||dd }|j}t|}|dk r||7 }t|}|| dkr7t| || d| dgd}nt| || dgd}	t| |	|d| dgd}g }
t	|D ]+}||krn|

t| dg| d| gd qU|

t| ||| d| gd qUt| |
| d	gd}dg| }dg| }dg| }| ||||}|d
| t|| |dkr|
| t| |
| dgd}t| |d|d| dgd}|  }||tjj |||}t|| |d}tjdgtjd}t| || dgd}t| ||dd|\}}t| ||| dgd}| ||tjj }t|| |d}|dkr=t| |d| dgd}|!|}|d}| ||tjj"}t|| |d}|d| t|| tj#j$}|%|||} | d| t| | | dS )Nr   r*   T
trip_limit)Z	is_scalarr(   dynamic_shaper'   Zshape_list_slice_shaperT   	new_shapesqueeze_output)Zis_shape_tensorr(   r$   )r)   zeroZsqueeze_output_broadcastZzero_output_broadcastr   r    zero_tensor)&r)   r   r6   r5   r2   r   r(   r   r   rA   appendr   r   Z	add_slicer7   r   popr   r9   Zadd_loopZadd_trip_limitr   Z	TripLimitZCOUNTZadd_iteratorr3   arrayr4   r   r   r8   r   r:   Zadd_recurrencer   Z
LoopOutputZCONCATENATEZadd_loop_output)!r   r   r   rD   r)   rE   rF   rQ   rn   ro   Z
shape_listrG   rp   startsizeZstrideZinput_slicedrq   rr   loopiteratordataZzero_vecrs   rc   rd   r   rt   Zrunning_sumZrunning_sum_tensorZcur_sumZreverse_flagZloop_outr    r    r!   cumsum_converterl  s   

	



















r}   zpd_op.floor_dividec                 C   r   r   )r   r   r   rb   r   r    r    r!   floor_divide_converter  rK   r~   z	pd_op.logc                 C   sB   t | |d tj| dgd}| |tjj}t|| |dS )Nr   rD   r'   )	r   r   r4   r(   	add_unaryUnaryOperationZLOGr   r9   )r   r   r   rD   r=   r    r    r!   log_converter  s   

r   zpd_op.elementwise_powc                 C   r   r   )r   r   r   r]   r   r    r    r!   elementwise_pow_converter   rK   r   zpd_op.isnanc                 C   sD   |d }t | ||| dgd}| |tjj}t|| |dS )Nr   equal_tensorr'   )r   r(   r   r   r   NOTr   r9   )r   r   r   rD   r   r=   r    r    r!   isnan_converter  s   


r   zpd_op.minimumc                 C      t | ||tjj}|S r   )r   r   r   rW   )r   r   r   Z	min_layerr    r    r!   minimum_converter     r   zpd_op.maximumc                 C   r   r   )r   r   r   rC   )r   r   r   Z	max_layerr    r    r!   maximum_converter  r   r   zpd_op.greater_equalzpd_op.greater_equal_c                 C   >   t | ||tjj}t | ||tjj}t | |||gtjj}|S r   )r   r   r   GREATEREQUALOR)r   r   r   Zgreater_layer_outputequal_layer_outputor_layerr    r    r!   greater_equal_converter%     r   zpd_op.less_equalzpd_op.less_equal_c                 C   r   r   )r   r   r   LESSr   r   )r   r   r   Zless_layer_outputr   r   r    r    r!   less_equal_converter7  r   r   )3numpyr3   Ztensorrtr   Zpaddle.tensorrt.converter_utilsr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Zpaddle.tensorrt.registerr   registerr"   r>   rH   rJ   rM   rN   rX   r_   rg   rh   rj   rk   rl   rm   r}   r~   r   r   r   r   r   r   r   r    r    r    r!   <module>   sn   X
g




9
7





 

	



