o
    i(D                     @   s   d dl Zd dlmZmZ d dlZddlmZm	Z	 ddl
mZmZmZmZmZmZmZmZ ddlmZ er:ddl
mZ ddlmZ dd	lmZ G d
d dejejejZG dd deejZerkG dd deejZ dS dS )    N)TupleUnion   )_numpy_to_plugin_field_type_built_in_to_plugin_field_type)
TensorDescTensorShape	ShapeExpr
ShapeExprs
SymIntExprSymExprsSymInt32)IS_AOT_ENABLED)KernelLaunchParams)_TypeFormatCombination)
public_apic                   @   sb   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	de
fddZdd Zdd ZdS )_TemplatePluginBasec                 C   s^   t j|  t j|  t j|  d| _g | _i | _|| _|| _	|| _
g | _i | _d | _d S )N1)trt	IPluginV3__init__IPluginV3QuickCoreIPluginV3QuickBuildplugin_versioninput_typesaliased_mapplugin_namespaceplugin_namenum_outputsautotune_combssupported_combs	curr_combselfname	namespacer    r'   Z/home/ubuntu/.local/lib/python3.10/site-packages/tensorrt_bindings/plugin/_plugin_class.pyr   #   s   
z_TemplatePluginBase.__init__c                 C   s   | j S N)r   r$   r'   r'   r(   get_num_outputs4   s   z#_TemplatePluginBase.get_num_outputsc                 C   s   || _ d gt| }i }tt|D ]&}t ||< || || _t|| dd|| _d|| _||t|| < q| j	|i | j
}t|tsLt|g}g | _tt|D ]&}| j|| j ||  d urv|t||   | j|< qUd| j|< qU| jS )NT)	_is_dummy)r   lenranger   dtyper   
shape_expr
_immutableidregister_functionattrs
isinstancer   tupleoutput_typesappendget_aliasedr   )r$   r   ranksinput_descsinput_desc_mapioutput_descsr'   r'   r(   get_output_data_types7   s&   



z)_TemplatePluginBase.get_output_data_typesc                 C   s   g }| j  D ]p\}}|| jv rwt|tjr?t|jtjkr.|t	
|| t	jj q|t	
||tt|j  qt|trS|t	
|| t	jj qt|tre|t	
||t	jj q|t	
|t|gtt|  qt	|S r)   )r5   itemsimpl_attr_namesr6   npndarrayr0   float16r9   r   PluginFieldtobytesPluginFieldTypeUNKNOWNr   strencodeCHARbytesarrayr   typePluginFieldCollection)r$   fieldskeyvaluer'   r'   r(   get_fields_to_serializeS   sD   





z+_TemplatePluginBase.get_fields_to_serializec                 C   sD  t |dksJ |t_g | _tt |D ]1}t }|| }| j| |_tt ||_	tt |D ]}t
|| |j	|< q0d|_| j| q| j| ji | j| _t| jts^t| jg| _t| jD ]\}}|jro|| qcg }	tt | jD ]&}tt | j| j	}
tt |
D ]}| j| j	| j|
|< q|	|
 qy|	S )Nr   T)r.   r   _exprBuilderr<   r/   r   r   r0   r   r1   r
   r2   r9   r4   r5   r?   r6   r   r7   	enumerateis_size_tensor
_set_indexr   	DimsExprs_expr)r$   inputsshape_inputsexprBuilderr>   descinpjidxoutput_exprsexprsr'   r'   r(   get_output_shapesy   s4   
z%_TemplatePluginBase.get_output_shapesc                 C   sL   t  | _dd |D dd |D  | j_dd |D dd |D  | j_d S )Nc                 S      g | ]}|j jqS r'   r^   rO   .0r_   r'   r'   r(   
<listcomp>       z8_TemplatePluginBase.configure_plugin.<locals>.<listcomp>c                 S   re   r'   rf   rh   outr'   r'   r(   ri          c                 S   re   r'   r^   formatrg   r'   r'   r(   ri      rj   c                 S   re   r'   rn   rk   r'   r'   r(   ri      rm   )r   r"   typeslayouts)r$   r[   outputsr'   r'   r(   configure_plugin   s   z$_TemplatePluginBase.configure_pluginc                    s   j d urt jdkr fdd jD }nd}t|D ][\}}||k rJd j| _t| j| _|jj	 j| _	|jj
 j| _
d j| _qd j||  _t| j||  _|jj	 j||  _	|jj
 j||  _
d j||  _q j g  j| jR   _t jdkrd gt| }tt|}tt|D ]3}t ||< ||k r j| n j||  j|| _tjj|| _	|| j|j|< || j	|j|< qt  j|< |S g }	 jD ]	}|	|  qg }
i  _t|	D ]Q\}} j|}|d ur||jd urt|jnt  q|jd ur"t|jnt  j|< tt|D ]}t }|j| |_|j| |_	|
| q.q|
S )Nr   c                       g | ]} j | qS r'   r5   rh   kr*   r'   r(   ri          zI_TemplatePluginBase.get_supported_format_combinations.<locals>.<listcomp>r'   FT) autotune_functionr.   autotune_attr_namesrV   r<   r2   r	   shaper^   ro   scaler?   r    r   r/   r   PluginTensorDescr   r0   rO   TensorFormatLINEARrp   rq   setr!   extend_get_combinationsgetupdatetacticsr9   )r$   in_out
num_inputsvalr>   r^   default_combcombr`   	all_combsret_supported_combsrS   r"   r'   r*   r(   !get_supported_format_combinations   sn   




$z5_TemplatePluginBase.get_supported_format_combinationsoutput_indexc                 C   s
   | j | S r)   )r   )r$   r   r'   r'   r(   get_aliased_input      
z%_TemplatePluginBase.get_aliased_inputc                 C   s"   | j | j}|d usJ t|S r)   )r!   r   r"   list)r$   r   r'   r'   r(   get_valid_tactics   s   z%_TemplatePluginBase.get_valid_tacticsc                 C   
   || _ d S r)   _tacticr$   tacticr'   r'   r(   
set_tactic   r   z_TemplatePluginBase.set_tacticN)__name__
__module____qualname__r   r+   r@   rT   rd   rs   r   intr   r   r   r'   r'   r'   r(   r      s    &"	Br   c                       s<   e Zd Z fddZdd Zdd Zdd Zd	d
 Z  ZS )_TemplateJITPluginc                    s&   t  ||| tj|  d| _d S )NF)superr   r   IPluginV3QuickRuntimeexpects_tacticr#   	__class__r'   r(   r      s   
z_TemplateJITPlugin.__init__c                 C   s.   || _ || _|| _|| _|| _|| _|| _d S r)   )r4   impl_functionr5   rB   rz   ry   r   )r$   r4   r5   rB   r   rz   ry   r   r'   r'   r(   init   s   

z_TemplateJITPlugin.initc                 C      | S r)   r'   r$   rO   r'   r'   r(   get_capability_interface
     z+_TemplateJITPlugin.get_capability_interfacec                    s  d gt | }t j }	tt |D ]B}
t ||
< ||
 j||
 _t||
 ||
 _	||
 j
||
 _
||
 j||
 _||
 ||
 _|||
 _|
|	v||
 _||
 ||
 _qd gt | }tt |D ]@}
t ||
< ||
 j||
 _t||
 ||
 _	||
 j
||
 _
||
 j||
 _||
 ||
 _|||
 _d||
 _||
 ||
 _qd j D ]\}
}|| ||
 _||
 || _q|D ]}d|_q|D ]}d|_qt  jdkr߇ fdd jD }nd} jr jg |||| jR   d S  jg |||R d|i d S )NFTr   c                    rt   r'   ru   rv   r*   r'   r(   ri   <  rx   z._TemplateJITPlugin.enqueue.<locals>.<listcomp>r'   stream)r.   r   r   valuesr/   r   rO   r0   r	   r{   ro   r|   data_ptr_stream
_read_onlystridesrA   _aliased_tor2   rB   r   r   r   )r$   
input_descoutput_descr[   rr   
in_stridesout_stridesr   input_tensorsaliased_input_idxsr>   output_tensorsr`   tr   r'   r*   r(   enqueue  s\   





"z_TemplateJITPlugin.enqueuec                 C   $   t | j| j| j}|j| j |S r)   )r   r   r   r   __dict__r   r$   cloned_pluginr'   r'   r(   cloneG  
   z_TemplateJITPlugin.clone)	r   r   r   r   r   r   r   r   __classcell__r'   r'   r   r(   r      s    :r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )_TemplateAOTPluginc                 C   s&   t | ||| tj|  i | _d S r)   )r   r   r   IPluginV3QuickAOTBuild
kernel_mapr#   r'   r'   r(   r   S  s   
z_TemplateAOTPlugin.__init__c                 C   r   r)   r   r   r'   r'   r(   r   X  r   z_TemplateAOTPlugin.set_tacticc                 C   s(   || _ || _|| _|| _|| _|| _d S r)   )r4   aot_impl_functionr5   aot_impl_attr_namesrz   ry   )r$   r4   r5   r   r   rz   ry   r'   r'   r(   r   [  s   	
z_TemplateAOTPlugin.initc                 C   r   r)   r'   r   r'   r'   r(   r   k  r   z+_TemplateAOTPlugin.get_capability_interfacec           
      C   s   g }g }t |D ]\}}||j ||j qt |D ]\}}||j ||j qt|t|| jf}|| jv sDJ d|| j| \}}	|t|	trV|		 fS |	fS )Nzkey {} not in kernel_map)
rV   r9   rO   ro   r7   r   r   r6   rJ   rK   )
r$   	inputDesc
outputDescio_types
io_formatsr>   r^   rR   kernel_nameptxr'   r'   r(   
get_kerneln  s   z_TemplateAOTPlugin.get_kernelc                 C   s  |t _t| jdkrt| j  \}}nd}g }	g }
t|D ]\}}||k rad| j| _t	|| j| _
|jj| j| _|jj| j| _|jj| j| _|	|jj |
|jj d| j| _qd| j||  _t	|| j||  _
|jj| j||  _|jj| j||  _|jj| j||  _|	|jj |
|jj d| j||  _q| jg | j|| j| jR  \}}}}t|tst|tstdt| dt|tst|tstdt| dt|tstdt| dt|tstd	t| d| |_| |_| |_| |_| |_| |_|  |_ ||f| j!t"|	t"|
| jf< t||_#t|D ]\}}t|t$sStd
t| d| ||< q?d S )Nr   r'   FTz.Kernel name must be a 'str' or 'bytes'.  Got: .z,PTX/CUBIN must be a 'str' or 'bytes'.  Got: zDLaunch params must be a 'tensorrt.plugin.KernelLaunchParams'.  Got: z:Extra args must be a 'tensorrt.plugin.SymIntExprs'.  Got: z7Extra args must be a 'tensorrt.plugin.SymInt32'.  Got: )%r   rU   r.   r5   ziprA   rV   r<   r2   r	   r{   r^   rO   r0   ro   r|   r9   r?   r   r   r6   rJ   rM   	TypeErrorr   r   grid_xgrid_ygrid_zblock_xblock_yblock_z
shared_memr   r7   
nbSymExprsr   )r$   inDimsExprsr   r   launchParamssymExprSetterr]   _r   r   r   r>   r^   r   r   launch_params
extra_argsargr'   r'   r(   get_launch_params  sn   








z$_TemplateAOTPlugin.get_launch_paramsc                 C   s   dS )N r'   r*   r'   r'   r(   get_timing_cache_id  r   z&_TemplateAOTPlugin.get_timing_cache_idc                 C   r   r)   )r   r   r   r   r   r   r   r'   r'   r(   r     r   z_TemplateAOTPlugin.cloneN)r   r   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   r   O  s    Ar   )!tensorrtr   typingr   r   numpyrC   _utilsr   r   _tensorr   r   r	   r
   r   r   r   r   _exportr   r   	_autotuner   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   <module>   s.   (
 T]
