o
    e"                     @   s  d dl Z e je jj_e jge jj_e je jj_e je j	e jge jj_e je jj
_e je j	ge jj
_dZG dd de jZG dd de jZG dd de jZG d	d
 d
e jZG dd de jZG dd de jZdd ZG dd dZe de jde jddfddZe de jde jddfddZdd Zde jde e jde e jfddZd ede jde e jfd!d"Zd)d#d$Zd%d& Z d'd( Z!dS )*    Ns   dltensorc                   @   sD   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdS )DLDeviceType                  	   
                     N)__name__
__module____qualname__ZkDLCPUkDLCUDAZkDLCUDAHostZ	kDLOpenCLZ	kDLVulkanZkDLMetalZkDLVPIZkDLROCMZkDLROCMHostZ	kDLExtDevZkDLCUDAManagedZ	kDLOneAPIZ	kDLWebGPUZ
kDLHexagon r   r   JD:\Projects\ConvertPro\env\Lib\site-packages\tritonclient/utils/_dlpack.pyr   9   s    r   c                   @   s   e Zd ZdefdejfgZdS )DLDeviceZdevice_typeZ	device_idN)r   r   r   r   ctypesc_int_fields_r   r   r   r   r   J   s    r   c                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	DLDataTypeCoder   r   r   r   r         N)
r   r   r   kDLIntkDLUIntkDLFloatZkDLOpaquePointer	kDLBfloatZ
kDLComplexkDLBoolr   r   r   r   r   Q   s    r   c                   @   s&   e Zd ZdefdejfdejfgZdS )
DLDataType	type_codebitslanesN)r   r   r   r   r   c_uint8c_uint16r   r   r   r   r   r#   [   s
    r#   c                	   @   sP   e Zd Zdejfdefdejfdefdeej	fdeej	fdej
fgZdS )	DLTensordatadevicendimdtypeshapestridesZbyte_offsetN)r   r   r   r   c_void_pr   r   r#   POINTERc_int64c_uint64r   r   r   r   r   r)   c   s    r)   c                   @   s.   e Zd ZdefdejfdedejfgZdS )DLManagedTensorZ	dl_tensormanager_ctxdeleterN)r   r   r   r)   r   r0   	CFUNCTYPEr   r   r   r   r   r4   o   s
    r4   c                 C   s   t | dd)z/
    Raise error with the provided message
    msgN)	Exceptionr8   r   r   r   _raise_errorz   s   r;   c                   @   s&   e Zd ZdddZdejfddZdS )DataViewContextreturnNc                 C   s(   t jt| | | _t t j | _d S N)r   r2   len_shaper1   Z_strides)selfr.   r   r   r   __init__   s   zDataViewContext.__init__c                 C   s@   t | }t |}t j| t jt | t |t jS r>   )r   	py_objectpointer	pythonapiZ	Py_IncRefcastr0   )rA   py_obj
py_obj_ptrr   r   r   as_manager_ctx   s
   

zDataViewContext.as_manager_ctx)r=   N)r   r   r   rB   r   r0   rI   r   r   r   r   r<      s    
r<   handler=   c                 C   sT   t | }t|jttj}|j}tj	| tj	t| tj
|  d S r>   )r4   from_addressr   rF   r5   r1   rC   contentsrE   Z	Py_DecRefPyMem_RawFree)rJ   dl_managed_tensorrH   rG   r   r   r   managed_tensor_deleter   s   
rO   c                 C   sH   t | t j}t j|tr"t j|t}t| t j|d  d S d S r>   )	r   rF   rC   rE   ZPyCapsule_IsValidc_str_dltensorPyCapsule_GetPointerrO   ZPyCapsule_SetDestructor)rJ   Z	pycapsulerN   r   r   r   pycapsule_deleter   s   rR   c                 C   s0  | dkr
t j}d}n| dkrt j}d}n~| dkrt j}d}nt| dkr(t j}d}nj| d	kr2t j}d
}n`| dkr<t j}d}nV| dkrFt j}d}nL| dkrPt j}d}nB| dkrZt j}d
}n8| dkrdt j}d}n.| dkrnt j}d}n$| dkrxt j}d
}n| dkrt j}d}n| dkrtd ntd|  t||dS )NBOOLr   ZINT8r   ZINT16r   ZINT32    ZINT64@   ZUINT8ZUINT16ZUINT32ZUINT64ZFP16ZFP32ZFP64ZBF16ZBYTESz+DLPack currently doesn't suppose BYTES typez9Can not covert unknown data type '{}' to DLPack data type)	r   r"   r   r   r    r!   r;   formatr#   )r-   r$   r%   r   r   r   triton_to_dlpack_dtype   sZ   
rW   r,   r.   stridec                 C   sL   |d u st |s
dS d}tt| D ]}|| |kr dS ||| 9 }qdS )NTr   F)boolreversedrange)r,   r.   rX   Zcalculated_strideir   r   r   is_contiguous_data   s   r]   r-   c                 C   s.   | j | j d }t|D ]}||| 9 }q|S )Nr   )r%   r&   r[   )r-   r,   r.   Zelement_byte_sizer\   r   r   r   get_byte_size   s   r^   c                 C   sD   t | dr t | dstd |  }|tjkr|  S | |S | S )N
__dlpack____dlpack_device__zCDLPack expects '__dlpack_device__' if '__dlpack__' has been defined)hasattrr;   r`   r   r   r_   )
dlpack_objstreamr+   r   r   r   get_dlpack_capsule   s   



rd   c                 C   s   t | dr	|  S d S )Nr`   )ra   r`   )rb   r   r   r   get_dlpack_device  s   
re   c                 C   s   t j| t}t|S r>   )r   rE   rQ   rP   r4   rK   )Z	dlcapsuleptrr   r   r   get_managed_tensor  s   
rg   r>   )"r   r0   rE   ZPyMem_RawMallocrestyperM   argtypesrC   ZPyCapsule_Newc_char_prQ   rP   r   r   	Structurer   r'   r   r#   r)   r4   r;   r<   r7   rO   rR   rW   r1   r2   r]   r^   rd   re   rg   r   r   r   r   <module>   sR   $

	
1





	