o
    + i8                     @   s   d dl Zd dl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dS )    N)add_1D_constant_layer	broadcastget_shape_tensor_elementset_layer_name	trt_shapetrt_sum)converter_registry)support_fp32_mix_precisionzpd_op.matmulztrt_version_ge=8.0)Ztrt_versionc                 C   s   |  d  j}| d }| d }|rtjjntjj}|r%tjjntjj}|d }t|d tj	krH| 
||d }t|| |d}t|dkrg| |}	g t|dR |	_t|	| |	d}t| |d ||d jd|\}
}| |
|||}t| | t|| |dS )N   transpose_xtranspose_yr   Zweight_tensor_broadcast)ZoperandssourceshapeattrstrtMatrixOperationZ	TRANSPOSENONEtypeZWeightsZadd_constantr   
get_outputlenadd_shuffletupleZreshape_dimsr   nameadd_matrix_multiplyr	   )network	paddle_opinputsZweight_shaper   r   Zself_matrix_opZother_matrix_opZweight_tensorlayerZlhs_valZrhs_valout r   h/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/tensorrt/impls/linalg.pymatmul_converter   sF   








r!   zpd_op.transposec                 C   s4   |  d }| |d }||_t|| |dS )Npermr   )r   r   Zsecond_transposer   r   )r   r   r   r"   Ztransposed_tensorr   r   r    transpose_converterJ   s
   

r#   z	pd_op.bmmz8.xc                 C   s4   |  |d tjj|d tjj}t|| |dS )Nr   r
   )r   r   r   r   r   r   )r   r   r   r   r   r   r    bmm_converterU   s
   

r$   z
pd_op.flipc                    sr  |d }|j  t  d }fdd|D }t| dgdd fdd	}|D ]x} }||d	| }||tjj	 |j
||d
d}	t|	 tdg dgd}
tdg dgd}||
}t| |d}t|| dgd}|d| ||	dtjj|}|d| t| |d}q1|}t| |dS )Nr   axisc                    s    g | ]}|d k r|  n|qS )r   r   ).0a)rankr   r    
<listcomp>d   s     z"flip_converter.<locals>.<listcomp>shape_tensor)r   c                    sD    |  }|dkrt |gd |gdS t| d |gdS )Nr   T)Z	is_scalarr   )r   r   r   )axis_idxr   Zdim_val)
input_dimsr   r   r*   r   r    get_axis_lengthi   s   

z'flip_converter.<locals>.get_axis_lengthZtrip_limit_T)reversezero_tensorr
   
one_tensoriNext_layer)N)r   r   r   r   r   Zadd_loopZadd_trip_limitr   Z	TripLimitZCOUNTZadd_iteratorr   r   Zadd_recurrencer   r   Z	set_inputZadd_loop_outputZ
LoopOutputZCONCATENATEZadd_identity)r   r   r   input_tensorr%   r-   r+   Z
loop_layerZ
trip_limititeratorr/   r0   Z
iRec_layerZiCurr1   Zloop_out_layerZidentity_layerr   )r,   r   r   r(   r*   r    flip_converter^   sJ   







r4   zpd_op.p_normc                 C   s   |d }|j }| dd}| dd}|dkr|n|t| }d|> }| ||tjj}t|| |	d}	| 
|	tjj||}
t|
| |
	d}| |tjj}t|| |	d}|S )Nr   r%   keepdimFr
   )r   r   getr   Zadd_elementwiser   ZElementWiseOperationZPRODr   r   Z
add_reduceZReduceOperationZSUMZ	add_unaryZUnaryOperationZSQRT)r   r   r   r2   r,   r%   r6   Z	axis_maskZ
prod_layerZprod_tensorZreduce_layerZreduced_tensorZ
sqrt_layerZoutput_tensorr   r   r    p_norm_converter   s(   






r8   )Ztensorrtr   Zpaddle.tensorrt.converter_utilsr   r   r   r   r   r   Zpaddle.tensorrt.registerr   Zpaddle.tensorrt.utilr	   registerr!   r#   r$   r4   r8   r   r   r   r    <module>   s     
+


;