o
    wi"                     @   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__kDLCPUkDLCUDAkDLCUDAHost	kDLOpenCL	kDLVulkankDLMetalkDLVPIkDLROCMkDLROCMHost	kDLExtDevkDLCUDAManaged	kDLOneAPI	kDLWebGPU
kDLHexagon r"   r"   W/home/ubuntu/sommelier/.venv/lib/python3.10/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 )DLDevicedevice_type	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kDLFloatkDLOpaquePointer	kDLBfloat
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#   r4   [   s
    r4   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stridesbyte_offsetN)r   r   r   r'   c_void_pr$   r(   r4   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 )DLManagedTensor	dl_tensormanager_ctxdeleterN)r   r   r   r:   r'   rB   	CFUNCTYPEr)   r"   r"   r"   r#   rF   o   s
    rF   c                 C   s   t | dd)z/
    Raise error with the provided message
    msgN)	ExceptionrK   r"   r"   r#   _raise_errorz   s   rN   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'   rD   len_shaperC   _strides)selfr?   r"   r"   r#   __init__   s   zDataViewContext.__init__c                 C   s@   t | }t |}t j| t jt | t |t jS rQ   )r'   	py_objectpointer	pythonapi	Py_IncRefcastrB   )rU   py_obj
py_obj_ptrr"   r"   r#   as_manager_ctx   s
   

zDataViewContext.as_manager_ctx)rP   N)r   r   r   rV   r'   rB   r^   r"   r"   r"   r#   rO      s    
rO   handlerP   c                 C   sT   t | }t|jttj}|j}tj	| tj	t| tj
|  d S rQ   )rF   from_addressr'   r[   rH   rC   rW   contentsrY   	Py_DecRefPyMem_RawFree)r_   dl_managed_tensorr]   r\   r"   r"   r#   managed_tensor_deleter   s   
re   c                 C   sH   t | t j}t j|tr"t j|t}t| t j|d  d S d S rQ   )	r'   r[   rW   rY   PyCapsule_IsValidc_str_dltensorPyCapsule_GetPointerre   PyCapsule_SetDestructor)r_   	pycapsulerd   r"   r"   r#   pycapsule_deleter   s   rk   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   INT8r   INT16r   INT32    INT64@   UINT8UINT16UINT32UINT64FP16FP32FP64BF16BYTESz+DLPack currently doesn't suppose BYTES typez9Can not covert unknown data type '{}' to DLPack data type)	r*   r3   r-   r.   r/   r1   rN   formatr4   )r>   r5   r6   r"   r"   r#   triton_to_dlpack_dtype   sZ   
r}   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?   r~   calculated_strideir"   r"   r#   is_contiguous_data   s   r   r>   c                 C   s.   | j | j d }t|D ]}||| 9 }q|S )Nr   )r6   r7   r   )r>   r=   r?   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)hasattrrN   r   r   r   r   )
dlpack_objstreamr<   r"   r"   r#   get_dlpack_capsule   s   



r   c                 C   s   t | dr	|  S d S )Nr   )r   r   )r   r"   r"   r#   get_dlpack_device  s   
r   c                 C   s   t j| t}t|S rQ   )r'   rY   rh   rg   rF   r`   )	dlcapsuleptrr"   r"   r#   get_managed_tensor  s   
r   rQ   )"r'   rB   rY   PyMem_RawMallocrestyperc   argtypesrW   PyCapsule_Newc_char_prh   rg   r(   r   	Structurer$   r8   r*   r4   r:   rF   rN   rO   rJ   re   rk   r}   rC   rD   r   r   r   r   r   r"   r"   r"   r#   <module>   sR   $

	
1





	