
    9jh                        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j.                  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z  f   fd       Z!de fdZ"ddez  fdZ#e j<                  de fd       Z$ddZdddde%de%de%dede de ddfdZ ejL                  d
 eeejN                  e                y)    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                      t        j                         syddg} t        |       }|d}t        d      }||fS t        j                  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versions       [/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_native/cutedsl_utils.py_check_runtime_availabler$   #   s}     >> 	*%D !&F~	$%9: g 	 		
 	g    c                       t               \  } }| S Nr$   )r!   _s     r#   runtime_availabler*   B   s    +-LIqr%   c                       t               \  } }|S r'   r(   r)   r"   s     r#   runtime_versionr-   G   s    )+JAwNr%   c                  z    t               \  } }t               s|t        v ryt        j	                  d|t               y)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,   s     r#   _version_is_okr/   L   s;    )+JAw "w2L'LKK	<"	 r%   c                  $    t        t               y)z,
    Deregister all ops through cuteDSL
    )disable_dsl_namesN)_deregister_op_overrides_impl_CUTEDSL_DSL_NAME r%   r#   r   r   [   s     "4EFr%   Fallow_multiple_overrideunconditional_override
lib_symbol	op_symboldispatch_keyimplr6   r7   c          	      z    t               \  }}|r
t               ryt               syt        t        | |||||       y)z
    See torch/_native/registry.py for the underlying implementation
    and arguments. This is a thin, DSL-checking wrapper over
    _register_op_override_impl
    Nr5   )r$   r
   r/   _register_op_override_implr3   )r8   r9   r:   r;   r6   r7   r!   r"   s           r#   r   r   b   sC     23Iw35 75r%   )r   N)(	functoolsloggingsystypingr   torch._vendor.packaging.versionr   backendsr   r   common_utilsr   r	   r
   r   r   r   registryr   r   r2   r   r=   	getLogger__name__r   r3   r   set__annotations__cachetupleboolr$   r*   r-   r/   strregister_dslmodulesr4   r%   r#   <module>rP      st     
  3 $  :  g!   qc1#QqcNqc1#QqcN	, CL  %gn(<"=  <4 
 
   G %*#(  	 " ! 
D   )T*;S[[=R%S Tr%   