
    Bj                        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dZdZ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j%        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triton      returnc                      t          j                    sdS dg} t          |           }|d}t          d          }nt                              d|           d}d}||fS )zO
    Check if triton is available

    NOTE: must not import at this point
    )FN)r   r   NTr   z*triton native DSL ops require: `triton` %sF)_cudais_builtr	   r   logwarning)depsreason	availableversions       ]/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/torch/_native/triton_utils.py_check_runtime_availabler      sw     > } 	D !&&F~	$X..@&III	g    c                  (    t                      \  } }| S Nr   )r   _s     r   runtime_availabler%   8   s    +--LIqr    c                  (    t                      \  } }|S r"   r#   )r$   r   s     r   runtime_versionr'   =   s    )++JAwNr    c                      t                      \  } }|dS |j        t          k    }|j        t          k    }|r|st                      rdS t                              d|t          t                     dS )NFTzetriton version %s is not sufficient (>= (%s.%s.*)); set TORCH_NATIVE_SKIP_VERSION_CHECK=1 to override)r   major_TRITON_REQUIRED_VERSION_MAJORminor_TRITON_MINIMUM_VERSION_MINORr   r   r   )r$   r   major_okminor_oks       r   _version_is_sufficientr/   B   s    )++JAwu } >>H} ==H X ";"="= tKK	<&%   5r    c                  0    t          t                     dS )z+
    Deregister all ops through triton
    )disable_dsl_namesN)_deregister_op_overrides_impl_TRITON_DSL_NAME r    r   r   r   Z   s     "4DEEEEEEr    Fallow_multiple_overrideunconditional_override
lib_symbol	op_symboldispatch_keyimplr6   r7   c          	          t                      \  }}|rt                      rdS t                      sdS t          t          | |||||           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
    Nr5   )r   r
   r/   _register_op_override_implr3   )r8   r9   r:   r;   r6   r7   r   r   s           r   r   r   a   sx     233Iw 35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*   r,   cachetupleboolr   r%   r'   r/   strregister_dslmodulesr4   r    r   <module>rN      sU        



       3 3 3 3 3 3 $ $ $ $ $ $            : 9 9 9 9 9 9 9          g!!  !"  !  %gn(<"=    04    
    
     .F F F F %*#(    	 " ! 
   D  (DD):CK<Q$R$R S S S S Sr    