o
    pi#                     @   s   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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dS )    N)
generic_plugin_converterget_input_constant_valueget_shape_tensor_elementset_layer_namesqueeze_trttrt_cast
trt_gathertrt_reshape	trt_shapetrt_unsqueeze)converter_registryzpd_op.nonzeroz8.x)Ztrt_versionc           	      C   sn   |d }|  |tj}t|| | |d}|d}t|| | j|d}d|_|d}t|| |S )Nr   )input)   r   )Zadd_casttrtZfloat32r   Zadd_non_zero
get_outputadd_shuffleZfirst_transpose)	network	paddle_opinputsinput_tensorZ
cast_layerZnon_zero_layerZnonzero_outputZshuffle_layerZtransposed_output r   c/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/paddle/tensorrt/impls/search.pynon_zero_converter!   s   




r   zpd_op.argmaxztrt_version_ge=8.0c                 C   s  |d }|j }t|}tt||dd }| d }|dk r#||7 }| j|tjjdd|> d}t	|| |r<|
dS |
d}	t|	j }
dg|
 }d||< dd t|D }| |	}t| |	| d	gd
}t| ||| dgd
}|d| t	|| |
dS )Nr   r   keepdimsr   opkZaxesFTc                 S   s   g | ]\}}|s|qS r   r   ).0iZsqueezer   r   r   
<listcomp>L   s
    z$argmax_converter.<locals>.<listcomp>shape_tensornamereal_shape_tensor)shapelenintr   attrsadd_topkr   TopKOperationMAXr   r   	enumerater   r
   r"   r   	set_input)r   r   r   x
input_dimsrankaxisr   
topk_layerZtopk_outZtopk_out_shape_sizeZshould_squeezeZgather_indiceslayerr    r#   r   r   r   argmax_converter2   sB   








r3   zpd_op.argminc                 C   s   |d }|j }t|}tt||dd }| d }|dk r#||7 }| j|tjjdd|> d}t	|| |r<|
dS | |
d}	t	|	| g }
tt|D ]}||krXqQ|
||  qQt|
|	_|	
dS )Nr   r   r   r   )r$   r%   r&   r   r'   r(   r   r)   MINr   r   r   rangeappendtuplereshape_dims)r   r   r   r-   r.   r/   r0   r   r1   Zsqueeze_layerZoutput_dimsr   r   r   r   argmin_converter`   s,   




r9   zpd_op.argsortc                 C   s  |d }|j }|j}t|}| d }| d }|| dkr4t| ||}	|	d}
|	d}|
|fS |dk r>|t|7 }|rDtjjntjj	}|tj
jkrPdnd}|dkrltddg}t| ||d| d	gd
}d}|r|t| |tj
j| d	gd}| ||dd|> }t| || dgd}t| ||d| dgd}|d| t|| |d}|d}|dkrtdg}t| ||d| dgd
}t| ||d| dgd
}t| ||| dgd}t| ||j| dgd}||fS )Nr   r0   
descendingi   r   TFr   )Zis_shape_tensorr"   r!   r$   k_tensoroutindices
out_tensorindices_tensor)r$   dtyper%   r'   r   r   r   r)   r*   r4   DataTypeFLOATZDimsr	   r"   r   r(   r
   r   r,   r   )r   r   r   r   input_shapeZin_typeZin_rankr0   r:   r2   Zout0Zout1Ztopk_opZ	need_castZunsqueeze_shaper1   r$   r<   r=   r>   Zsqueeze_shaper?   r@   r   r   r   argsort_converter~   s   









rE   zpd_op.wherec                 C   s:   |d }|d }|d }|  |||}t|| |dS )Nr   r      )Z
add_selectr   r   )r   r   r   	conditionr-   yZselect_layerr   r   r   where_converter   s   

rI   z
pd_op.topkc                 C   sp  |d }|j }| dd}| dd}|rtjjntjj}t||d}|d u r/td|d }	t	|}
|
dk}|rJt
| |dg| dgd	}|j}|tjjkrat| |tjj| dgd	}|dk ri||
7 }| ||t|	d|> }t|| |d}|d}|rt| |dg| d
gd	}t| |dg| dgd	}|tjjkrt| |tjj| d
gd	}||fS )Nr   r0   r;   largestTr   z'Dynamic k is not supported in TensorRT.r   r!   valuesr>   )r$   r'   getr   r)   r*   r4   r   NotImplementedErrorr%   r   r"   rA   rB   ZINT32r   rC   r(   r&   r   r   r   )r   r   r   r   rD   r0   rJ   flagZk_listr   Z
input_rankZexpand_to_2dZ
input_typer2   rK   r>   r   r   r   topk_converter   sX   




rO   zpd_op.index_selectc                 C   sb   |d }|d }|  dd}| |}d|_t|| | ||d|}t|| |dS )Nr   r   r0   )r;   )r'   rL   r   r8   r   Z
add_gatherr   )r   r   r   r   Zindex_tensorr0   Zreshape_layerZgather_layerr   r   r   index_select_converter  s   



rP   )Ztensorrtr   Zpaddle.tensorrt.converter_utilsr   r   r   r   r   r   r   r	   r
   r   Zpaddle.tensorrt.registerr   registerr   r3   r9   rE   rI   rO   rP   r   r   r   r   <module>   s"   0

-

I

9