o
    j9:jh                     @   sl  U d dl Z d dlZd dlZd dlmZ d dlmZ ddlmZ	 ddl
mZmZmZmZ ddlmZmZ dd	lmZmZmZ eeZd
Zed dd dd ed dd dd hZee ed< e jdee edB f fddZ!de fddZ"ddeB fddZ#e jde fddZ$d#ddZdddde%de%de%dede d e ddfd!d"Ze&d
eeej'e  dS )$    N)cast)Version   )cuda   )_available_version_unavailable_reasoncheck_native_jit_disabledcheck_native_version_skip)dsl_registryDSLModuleProtocol)_OpFnderegister_op_overridesregister_op_overridecutedsl   ._CUTEDSL_REQUIRED_VERSIONSreturnc                  C   sT   t  sdS ddg} t| }|du rd}td}||fS td| d}d}||fS )	z\
    Check if cutedsl (and deps) are available.

    NOTE: Doesn't import at this point
    )FN)nvidia_cutlass_dslcutlass)apache_tvm_ffitvm_ffiNTr   z`CuTeDSL operators require optional Python packages `nvidia-cutlass-dsl` and `apache-tvm-ffi`; %sF)_cudais_builtr   r   logwarning)depsreason	availableversion r!   b/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/torch/_native/cutedsl_utils.py_check_runtime_available#   s"   
r#   c                  C   s   t  \} }| S Nr#   )r   _r!   r!   r"   runtime_availableB      
r'   c                  C   s   t  \} }|S r$   r%   r&   r    r!   r!   r"   runtime_versionG   r(   r*   c                  C   s.   t  \} }t s|tv rdS td|t dS )NTz`cutedsl version %s is not known-good (ok: %s); set TORCH_NATIVE_SKIP_VERSION_CHECK=1 to overrideF)r#   r
   r   r   r   r)   r!   r!   r"   _version_is_okL   s   
r+   c                   C   s   t td dS )z,
    Deregister all ops through cuteDSL
    )disable_dsl_namesN)_deregister_op_overrides_impl_CUTEDSL_DSL_NAMEr!   r!   r!   r"   r   [   s   r   Fallow_multiple_overrideunconditional_override
lib_symbol	op_symboldispatch_keyimplr0   r1   c             	   C   s<   t  \}}|r
t rdS t sdS tt| |||||d dS )z
    See torch/_native/registry.py for the underlying implementation
    and arguments. This is a thin, DSL-checking wrapper over
    _register_op_override_impl
    Nr/   )r#   r	   r+   _register_op_override_implr.   )r2   r3   r4   r5   r0   r1   r   r    r!   r!   r"   r   b   s   


r   )r   N)(	functoolsloggingsystypingr   torch._vendor.packaging.versionr   backendsr   r   common_utilsr   r   r	   r
   r   r   registryr   r   r-   r   r6   	getLogger__name__r   r.   r   set__annotations__cachetupleboolr#   r'   r*   r+   strregister_dslmodulesr!   r!   r!   r"   <module>   sN   
 


"