
    ^j                     &   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mZ  ej0                  e      Zd
Z ed dd dd        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z  dede!de!ddfdZ ejN                  d
 eeejP                  e                y)     N)cast)Version   )cuda   )_available_version_unavailable_reasoncheck_native_jit_disabledcheck_native_version_skip)dsl_registryDSLModuleProtocol)	_OpCondFn	_OpImplFnderegister_op_overridesregister_op_overridecutedsl   .   _CUTEDSL_REQUIRED_VERSIONSreturnc                      t        j                         syddl} | j                  j                  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
    )FNr   N)nvidia_cutlass_dslcutlass)apache_tvm_ffitvm_ffiTr   z`CuTeDSL operators require optional Python packages `nvidia-cutlass-dsl` and `apache-tvm-ffi`; %sF)	_cudais_builttorchversionhipr	   r   loginfo)r   depsreason	availabler    s        f/var/www/ramen.bs-engineer-server.com/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.   P   s    +-LIqr)   c                       t               \  } }|S r+   r,   r-   r    s     r'   runtime_versionr1   U   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#   r0   s     r'   _version_is_okr3   Z   s;    )+JAw "w2L'LHH	<"	 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   i   s     "4EFr)   Fallow_multiple_overrideunconditional_override
lib_symbol	op_symboldispatch_keycondimplr:   r;   c          
      |    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
    Nr9   )r(   r
   r3   _register_op_override_implr7   )	r<   r=   r>   r?   r@   r:   r;   r&   r    s	            r'   r   r   p   sF     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   r   r6   r   rB   	getLogger__name__r"   r7   r   set__annotations__cachetupleboolr(   r.   r1   r3   strregister_dslmodulesr8   r)   r'   <module>rU      s     
  3 $  :  g!   qc1#QqcNqc1#QqcNqc1#QqcN, CL  '%gn(<"= ' 'T4 
 
   G %*#(  d
	
  " ! 
H   )T*;S[[=R%S Tr)   