o
    h4                     @   s   d dl Z d dlZe ddefddZe ddd Ze ddd Ze ddefd	d
Ze ddd Ze ddd Z	dd Z
dd ZdS )    Nreturnc                  C   s>   zddl m}  | d uW S  ty   Y dS  ty   Y dS w )Nr   
triton_keyF)triton.compiler.compilerr   ImportErrorRuntimeErrorr    r   g/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/torch/utils/_triton.pyhas_triton_package   s   
r
   c                  C   ^   t  r-dd l} | j r-| j dkr-| jjs-zddlm}m	} W dS  t
y,   Y dS w dS )Nr   	   r   )create_1d_tma_descriptorcreate_2d_tma_descriptorTF)r
   torchcudais_availableget_device_capabilityversionhip$triton.tools.experimental_descriptorr   r   r   )r   r   r   r   r   r	   has_triton_tma      r   c                  C   r   )Nr   r   )&experimental_device_tensormap_create1d&experimental_device_tensormap_create2dTF)r
   r   r   r   r   r   r   triton.language.extra.cudar   r   r   )r   r   r   r   r   r	   has_triton_tma_device)   r   r   c                     sN   t  sdS ddlm  dd } dd }dd	 }| ||d
 fdd}| S )NFr   )get_interface_for_devicec                 S   s   | j  jdkS )N   )Workerget_device_propertiesmajordevice_interfacer   r   r	   cuda_extra_checkG   s   z$has_triton.<locals>.cuda_extra_checkc                 S   s   dd l }d|jjv S )Nr   cpu)triton.backendsbackends)r#   tritonr   r   r	   cpu_extra_checkJ   s   z#has_triton.<locals>.cpu_extra_checkc                 S   s   dS )NTr   r"   r   r   r	   _return_trueO   s   z has_triton.<locals>._return_true)r   xpur%   c                     s4     D ]\} } | }| r||r dS qdS )NTF)itemsr   )deviceextra_checkr#   r   triton_supported_devicesr   r	    is_device_compatible_with_tritonX   s   z4has_triton.<locals>.is_device_compatible_with_triton)r
   torch._dynamo.device_interfacer   )r$   r)   r*   r1   r   r/   r	   
has_triton@   s   r3   c                  C   s*   ddl m}  ddlm} |j }| |S )Nr   )make_backend)driver)r   r4   triton.runtime.driverr5   activeget_current_target)r4   r5   targetr   r   r	   triton_backendb   s   
r:   c                  C   s>   ddl m}  t }|   d|  }t|d  S )Nr   r   -zutf-8)	r   r   r:   hashhashlibsha256encode	hexdigestupper)r   backendkeyr   r   r	   triton_hash_with_backendk   s   rD   c                 C   sZ   | j drd| j dd   }d| S | j dr&d| j dd   }d| S | j }d| S )Nfpfloat   bfbfloatztriton.language.)name
startswith)dtypesuffixr   r   r	   dtype_to_stringv   s   rN   c                  C   s   dd l } dd | jj_d S )Nr   c                 S   s   t | S )N)rN   )selfr   r   r	   <lambda>   s    z)patch_triton_dtype_repr.<locals>.<lambda>)r(   languagerL   __repr__)r(   r   r   r	   patch_triton_dtype_repr   s   rS   )	functoolsr=   	lru_cacheboolr
   r   r   r3   r:   rD   rN   rS   r   r   r   r	   <module>   s    

!



