o
    + i6                  
   @   sx  d dl Z d dlZd dlmZ d dlZd dlZzd dlZW n e	y. Z
 zW Y dZ
[
ndZ
[
ww d dlmZ d dlmZ d dlmZ eee jddZG dd	 d	eZd
d Zdd Zdd Zg ddfddZdd Zdd Zdd Zd6ddZd6ddZdd Zdd ZG d d! d!ZG d"d# d#Z G d$d% d%Z!d6d&d'Z"d6d(d)Z#d*d+ Z$d,d- Z%d.d/ Z&d0d1 Z'd2d3 Z(d4d5 Z)dS )7    N)Enum)pir)
get_logger)_PADDLE_PIR_DTYPE_2_NUMPY_DTYPEz&%(asctime)s-%(levelname)s: %(message)s)fmtc                   @   s    e Zd ZdZdZdZdZdZdS )	RefitRoleSHIFTSCALECONSTANTBIASKERNELN)__name__
__module____qualname__r   r	   r
   r   r    r   r   `/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/tensorrt/util.pyr   $   s    r   c                 C   sz   t  }| dkr
tjS | dkrtjS | dkrtjS | dkrtjS | dkr&tjS | dkr6|d dkr3tjS tjS td	|  )
NZFLOAT32ZFLOAT16ZINT32INT8ZBOOLZINT64r   
   zUnsupported dtype: )	get_trt_version_listtrtfloat32Zfloat16int32Zint8boolint64	TypeError)Zpd_dtypeversion_listr   r   r   	map_dtype,   s   r   c                 C   s2   |   jD ]}| dks| dkr dS qdS )Nzpd_op.whilezpd_op.ifFT)global_blockopsnameprogramopr   r   r   support_constant_folding_pass@   s
   r#   c                 C   s   |   jD ];}| dks*| dks*| dks*| dks*| dd dkr+q|dd	u r5 d	S | d d	u r@ d	S qtd
 dS )Nzpd_op.fetchz
pd_op.datazpd_op.tensorrt_enginezcinn_op.group.r   builtin	__l_trt__FzAll ops convert to trt.T)r   r   r   splithas_attrattrs_loggerinfor    r   r   r   all_ops_into_trtG   s   
r,   c                 C   s   dd }t jdd}|  |d u rtj }td}di ig}|d ur<|jdkr<|dd	|ii |d
d	|ii |||| |	|  |
  g }t| rl|d||di |d||di |di i |di i |||| |	|  | S )Nc                 S   s6   |D ]}|  D ]\}}||v rq| || qqd S N)itemsadd_pass)pmpassesdisable_passesZ	pass_itemZ	pass_nameZ	pass_attrr   r   r   
_add_pass_Z   s   z run_pir_pass.<locals>._add_pass_   	opt_levelr   Ztrt_op_marker_passr   Z#delete_quant_dequant_linear_op_pass__param_scope__Z(trt_delete_weight_dequant_linear_op_passZconstant_folding_pass)Z	__place__r7   Zdead_code_elimination_passZconv2d_add_fuse_pass)r   PassManagerenable_print_statisticspaddlestaticZglobal_scope	CUDAPlacevalueappendrunclearr#   )r!   r2   scopeprecision_moder3   r0   placer1   r   r   r   run_pir_passY   sZ   



rD   c                 C   s.   t jdd}|  |di  ||  | S )Nr4   r5   Ztrt_sub_graph_extract_pass)r   r8   r9   r/   r?   )r!   r0   r   r   r   run_trt_partition   s
   
rE   c                 C   s<   t |tr|g}|  jD ]}| |v r|dd qd S )Nr&   F)
isinstancestrr   r   r   set_bool_attr)r!   Zdisabled_opsr"   r   r   r   forbid_op_lower_trt   s   
rI   c                 C   s,   |   jD ]}| |kr|dd qd S )Nr&   T)r   r   r   rH   )r!   Zop_namer"   r   r   r   enforce_op_lower_trt   s
   rJ   c              	   C   s   t j < t j| % t d}t j|}|j| |||d}|W  d    W  d    S 1 s4w   Y  W d    d S 1 sDw   Y  d S )Nr   )feed
fetch_listrA   )r:   	pir_utilsIrGuardr;   program_guardr<   Executorr?   )r!   	feed_dataZfetch_var_listrA   rC   executoroutputr   r   r   predict_program   s   

RrT   c                 C   s   t jddi t j L t j| 6 t j }tt	|D ]}|j
| || |d q |jj| |d d ddt j |d d\}}}W d    n1 sMw   Y  W d    n1 s\w   Y  t jddi |S )	NZFLAGS_enable_collect_shapeT)rK   rA   rK   fetch)rK   rL   Zfeed_var_nameZfetch_var_namerC   rA   ZplanF)r:   Z	frameworkZ	set_flagsrM   rN   r;   rO   rP   rangelenr?   Z_executor_cacheZget_pir_program_and_executorZ_current_expected_place_)r!   ZfeedsrA   rR   iZexe_program_r   r   r   warmup_shape_infer   s*   

 r[   c                  C   s   t j} ttt| dS )Nr$   )r   __version__listmapintr'   )versionr   r   r   r      s   r   c                 C   s   |   jD ]L}| dkr,| d   }|d ur,|dr,| d r,|dd | dkrQ|	 d 
 d }|d urQ|drQ| d rQ|dd qd S )Nzbuiltin.splitr   r&   Tzbuiltin.combine)r   r   r   ZoperandssourceZget_defining_opr(   r)   rH   resultsZall_used_ops)r!   r"   Zdefining_opr   r   r   mark_builtin_op   s&   

rc   c                       sD   e Zd ZdZd fdd	ZdddZdd Zdd	 Zd
d Z  Z	S )TensorRTConfigManagerNc                    s8   | j st | | _ || j _| j S |d ur|| j _| j S r-   )	_instancesuper__new__
trt_configclsrh   	__class__r   r   rg      s   zTensorRTConfigManager.__new__c                 C   s
   || _ d S r-   )rh   )selfrh   r   r   r   _init      
zTensorRTConfigManager._initc                 C      | j r| j jr| j jS d S r-   )rh   rB   rm   r   r   r   get_precision_mode     z(TensorRTConfigManager.get_precision_modec                 C   s   | j r| j jr| j jS g S r-   )rh   Zops_run_floatrq   r   r   r   get_force_fp32_ops  rs   z(TensorRTConfigManager.get_force_fp32_opsc                 C   rp   r-   )rh   Zrefit_params_pathrq   r   r   r   get_refit_params_path  rs   z+TensorRTConfigManager.get_refit_params_pathr-   )
r   r   r   re   rg   rn   rr   rt   ru   __classcell__r   r   rk   r   rd      s    
	rd   c                       s2   e Zd ZdZd fdd	Zdd Zdd Z  ZS )	TensorRTConstantManagerNc                    s"   | j st | | _ i | j _| j S r-   )re   rf   rg   constant_dictri   rk   r   r   rg     s   zTensorRTConstantManager.__new__c                 C   sb   t t|j }|t dkrt d}|t dkr t d}t j||d}| j||i d S )NZfloat64r   r   r   )dtype)npry   r   arrayrx   update)rm   r   Ztensor_datar=   Z	out_dtypeZconstant_arrayr   r   r   set_constant_value  s   

z*TensorRTConstantManager.set_constant_valuec                 C   
   | j | S r-   )rx   rm   r   r   r   r   get_constant_value$  ro   z*TensorRTConstantManager.get_constant_valuer-   )r   r   r   re   rg   r}   r   rv   r   r   rk   r   rw     s
    	rw   c                       sL   e Zd ZdZd fdd	Zdd Zdd Zdd	 Zdd
dZdd Z	  Z
S )RefitManagerNc                    s*   | j st | | _ i | j _i | j _| j S r-   )re   rf   rg   trt_weights_dictrefit_param_names2trt_namesri   rk   r   r   rg   +  s
   zRefitManager.__new__c                 C   s   || j |< d S r-   r   )rm   r   Ztrt_weightsr   r   r   set_trt_weight_tensor2  s   z"RefitManager.set_trt_weight_tensorc                 C   r~   r-   r   r   r   r   r   get_trt_weight_tensor5  ro   z"RefitManager.get_trt_weight_tensorc                 C   s6   t |tr|j}|| jvri | j|< || j| |< d S r-   )rF   r   r=   r   )rm   
param_nameZ
layer_nameroler   r   r   set_mapping8  s
   


zRefitManager.set_mappingc                 C   sP   || j v r&|d u r| j | S t|tr|j}|| j | v r$| j | | S d S d S r-   )r   rF   r   r=   )rm   r   r   r   r   r   get_mapping?  s   


zRefitManager.get_mappingc                 C   s   | j S r-   )r   rq   r   r   r   get_all_mappingsL     zRefitManager.get_all_mappingsr-   )r   r   r   re   rg   r   r   r   r   r   rv   r   r   rk   r   r   (  s    
r   c                 C   s0   t  }| }| |v r|  tjj|_d S d S r-   )rd   rt   Zreset_precisionr   ZDataTypeFLOAT	precision)Zop_typelayerrh   Ztrt_managerZforce_fp32_opsr   r   r   support_fp32_mix_precisionR  s   r   c                 C   s@   g d}||v r
|S t |tjr|j}| ||}|dS |S )N)zpd_op.depthwise_conv2dzpd_op.conv2dzpd_op.conv2d_transposezpd_op.conv3dzpd_op.conv3d_transposezpd_op.batch_normzpd_op.batch_norm_zpd_op.layer_normz pd_op.depthwise_conv2d_transposezpd_op.fused_conv2d_add_actzpd_op.affine_channelzpd_op.preluz,pd_op.fused_bias_dropout_residual_layer_normzpd_op.deformable_convr   )rF   r   WeightsshapeZadd_constant
get_output)networkZpaddle_value
trt_tensorZuse_op_nameZforbid_cast_opZinput_shapeZconstant_layerr   r   r   weight_to_tensorZ  s   
r   c                 C   sJ   |d u rd S t |tjkr|S t|jdkr|S | |}d|_|dS )Nr   )   )typer   r   rX   r   Zadd_shuffleZreshape_dimsr   )r   r   Zshuffle_layerr   r   r   zero_dims_to_one_dimsu  s   

r   c                 C   s^   | j }d}|ddkrdS |D ]}|t|9 }q| jtjkp$| jtjk}|dko.|dko.|S )Nr   rU   F   )r   countabsry   r:   r   r   )r=   dimsZtotal_elementsdimZis_int_dtyper   r   r   is_shape_tensor  s   r   c                 C   sB   | d ur| } nt jd}t j|d} t j| st |  | S )N~z.pp_trt_cache)ospath
expanduserjoinexistsmakedirs)
cache_pathZ	home_pathr   r   r   get_cache_path  s   
r   c                 C   s6   g }g }| D ]}|j |vr|| ||j  q|S r-   )idr>   )Z
value_listZret_listZret_list_idr=   r   r   r   remove_duplicate_value  s   

r   c                 C   sV   |  dr'|  d }|  d }t|D ]\}}|| }|| | | qd S d S )Ninputs_indexinputs_scale)r(   r)   	enumerateset_dynamic_range)Z	paddle_opZ
trt_inputsr   r   rY   indexscaler   r   r   r     s   
r   c                   C   s   t jS r-   )r   r\   r   r   r   r   get_trt_version  r   r   r-   )*loggingr   enumr   numpyrz   r:   Ztensorrtr   	Exceptioner   Zpaddle.base.log_helperr   Zpaddle.pir.corer   r   INFOr*   r   r   r#   r,   rD   rE   rI   rJ   rT   r[   r   rc   rd   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sP   A


*

	