o
    + iR9                     @   s8  d dl Z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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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dS )"    N)_PADDLE_PIR_DTYPE_2_NUMPY_DTYPE)add_1D_constant_layerget_input_constant_valueresize_to_1dset_layer_nametrt_casttrt_floor_divtrt_maxtrt_mintrt_reduce_to_scalartrt_reshape	trt_shapetrt_sub)converter_registryzpd_op.full_int_arrayztrt_version_ge=8.0)Ztrt_versionc                 C   sX   |  d }t|dkrdS ttj|tjd}| t|g|}t|| |	dS )Nvaluer    dtype)
attrslentrtZWeightsnparrayint32add_constantr   
get_output)network	paddle_opinputsr   Zvalue_weightZfull_int_array_layerr   r   j/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/tensorrt/impls/creation.pyfull_int_array_converter&   s   

r    z
pd_op.fullc                 C   s   |  d }|  dd}|  d}tt| }|tdkr(td}|tdkr4td}| |tj|||d	}t|| |d
S )Nshaper   g      ?r   float64float32int64r   r   r   )	r   getr   r   r   r   fullr   r   )r   r   r   r!   r   r   Z	out_dtypeZ
full_layerr   r   r   full_converter3   s   



r'   zpd_op.assignz8.xzpd_op.assign_out_c                 C   s&   |d }|  |}t|| |dS )Nr   )Zadd_identityr   r   )r   r   r   input_tensorZidentity_layerr   r   r   assign_converterD   s   


r)   zpd_op.assign_valuezpd_op.assign_value_c              
   C   s   |  }|d }|d }|d }tjtjtjtjtjtjtjtjtjtji}||vr2td| d|| }tj	||d
|}	|tjkrK|	tj}	| t||	}
t|
| |
d u r`td|
dS )	Nr!   r   valueszUnsupported dtype z& for assign_value op in TRT converter.r   z1Failed to create constant layer for assign_value.r   )r   paddleZfloat16r   r#   r"   r   r$   
ValueErrorr   ZreshapeZastyper   tupler   RuntimeErrorr   )r   r   r   r   r!   r   r*   Zpaddle_to_np_dtype_mapZnp_dtypeZarrZconst_layerr   r   r   assign_value_converterM   s.   



r/   zpd_op.arangec                 C   sX  |\}}}t | d| dgd}t| ||| dgd}t| ||| dgd}| d}	|jtjj	krDt
| |tj| dgd}
n|}
t| ||
| dgd}t| ||| d	gd}|d }t| |d
| dgd}| jd
tjjd}|d| |d| |d| t|| |d}|	tjks|	tjkrt
| |tj| dgd}|S )Nr   zero_tensornamedeltaf_quotient_tensorr   quotient_tensordelta_1number_tensorr   start1r!   op      output_tensor)r   r2   r   r   r   r%   r   r   ZDataTypeFLOATr   r   r	   r   add_fillFillOperationLINSPACE	set_inputr   r   r+   r$   )r   r   r   startendstepr0   r3   r4   r   r5   r6   r7   r8   
fill_layerr=   r   r   r   arange_convertero   sT   





rG   zpd_op.full_likec                 C   s  |d }|j }t|}t| dd}d tjtjtjtjtjtjtjtjtjd
}||d }|d u r8|j	}t
||d}	|	d urvt|	ttfrQ|	rO|	d nd}	|tjkrft| t|	tj| dgd}
n%t| t|	tj| dgd}
n|d }
|
j	|krt| |
|| dgd}
t| || dgd}t| dg| | d	gd}|}| |
}|d| t|| tdg| }tdg| }tdg| }t| dg| | d
gd}t| d| dgd}t| ||| dgd}t| ||| dgd}t| ||| dgd}| |d|||}|d| |d| |d| t|| |d}|j	|krDt| ||| dgd}|S )Nr   r   )
r   r;   r<                        r;   value_tensorr1   shape_tensorone_rank_tensorstarts_tensor
one_tensorsizes_tensorinput_sub_tensorstrides_tensorr<   rI   output)r!   r   intr   r%   r   boolr   r#   r   r   
isinstancelistr-   r   r   r2   floatr   r   add_shufflerB   r   ZDimsr	   r   r
   Z	add_slicer   )r   r   r   r(   r!   Zndimsr   Z	dtype_mapZtarget_dtyper   rP   rQ   rR   Zinput_shape_tensorZshuffle_layerrC   sizeZstriderS   rT   rU   rV   rW   layerrX   r   r   r   full_like_converter   s   











ra   zpd_op.full_with_tensorc                 C   s  |d }d }|  d }| }t|}|dkr'|d }t|tr$|}n|g}t||d}	|	d ur6|	}d}
n|d }d}
d}d}t|tjrP|j}t|}|}nt|tt	fr^t|}|}n	t
dt| |d urtt|dkrtd}nt|dkr}d}nd}|rt|dkr|d }t|tjst
d|jd }|}n2g }|D ]}t|jdkrt| |d	| d
gd}|| q| |}t|| |d}t|}t| || dgd}| jdtjjd}|d| |tjks|tjkrdg| }t| || dgd}|d| |dt| |tj n1|tjkr@dg| }t| |tj| dgd}|d| |dt| |tj ntd| t|| |d}|S )Nr   r   r<   r;   TFzUnsupported shape_tensor type: zshape_tensor must be an ITensor)r;   tensorr1   shapes_tensorr   r9   value_inputg        z(Unsupported dtype for full_with_tensor: )r   operandsr   r[   r\   r   r   ZITensorr!   r-   	TypeErrortyper   r2   appendadd_concatenationr   r   r   r?   r@   rA   rB   r+   r   r$   r   r   r   r#   r,   )r   r   r   rd   rQ   r   re   Znum_operandsZshape_tensor_listZ	shape_valZis_static_shapeZshape_nbDimsZtensor_rankZshape_xrc   Zis_dynamic_shapeZshape_tensorsrb   Zconcat_layerrF   beta_vecr=   r   r   r   full_with_tensor_converter  s   









rk   zpd_op.meshgridc              
      s  |d }t |}g } fdd|D }t|D ]}|| }g }	t|D ]}
t dtjd| d| gd}|	| q#|| |	|<  |	}t||  	|}|
d|d g }t|D ]	}
|||
  q`t dtjd| d| gd||<  |}t||  jd	tjjd
}|
d|d t dtjd| dgd}|
d| dg| }|
dt |tj  |d|dtjjd}|| q|S )Nr   c                    s   g | ]
}  |d qS )r   )Z	add_shaper   ).0inpr   r   r   
<listcomp>  s    z&meshgrid_converter.<locals>.<listcomp>r;   FZone_)r   Z	is_scalarr2   Zones_shape_r   r9   TZone_for_fillr<   )r   ranger   r   r   r2   rh   ri   r   r^   rB   r   r?   r   r@   rA   r#   Zadd_elementwiseZElementWiseOperationZPROD)r   r   Z
vec_inputsr   nZoutputsZ
input_dimskxZreshape_dimsioneZ
dim_concatZ
x_reshapedZ
ones_shaperF   rd   rj   gridr   rn   r   meshgrid_converterx  sp   







rw   )numpyr   Ztensorrtr   r+   Zpaddle.pir.corer   Zpaddle.tensorrt.converter_utilsr   r   r   r   r   r   r	   r
   r   r   r   r   Zpaddle.tensorrt.registerr   registerr    r'   r)   r/   rG   ra   rk   rw   r   r   r   r   <module>   s4   8


 
6
m
c