
    3j.                         S SK r S SKrS SKJr  S SKJr  SSKJr  \R                  " \	5      r
 " S S\5      r " S S	5      r\" 5       rg)
    N)Protocol)Version   )_OpFnc                   t    \ rS rSrSrS\4S jrS\S-  4S jrSS jr	SSS	.S
\
S\
S\
S\S\S\SS4S jjrSrg)DSLModuleProtocol   z*Complete interface for DSL utility modulesreturnc                     g N selfs    T/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/_native/dsl_registry.pyruntime_available#DSLModuleProtocol.runtime_available   s        Nc                     g r   r   r   s    r   runtime_version!DSLModuleProtocol.runtime_version   s    r   c                     g r   r   r   s    r   deregister_op_overrides)DSLModuleProtocol.deregister_op_overrides   s    sr   F)allow_multiple_overrideunconditional_override
lib_symbol	op_symboldispatch_keyimplr   r   c                    g r   r   )r   r   r   r   r   r   r   s          r   register_op_override&DSLModuleProtocol.register_op_override   s     r   r   )r
   N)__name__
__module____qualname____firstlineno____doc__boolr   r   r   r   strr   r!   __static_attributes__r   r   r   r   r      sr    4,4,4442 ).',		 	 		
 	 "&	 !%	 
	 	r   r   c                   0   \ rS rSrSrS rS\SS4S jrS\S\SS4S	 jr	\
R                  S
\S\4S j5       r\
R                  S
\S\S-  4S j5       r\
R                  S\\S4   4S j5       r\
R                  S\\S4   4S j5       rS\S\S-  4S jrSrg)DSLRegistry#   zIRegistry for DSL modules - calls their existing API functions dynamicallyc                     0 U l         g r   _dsl_modulesr   s    r   __init__DSLRegistry.__init__&   s
    :<r   namer
   Nc                     [        U[        5      (       d!  [        S[        U5      R                   35      eUR                  5       (       d  [        S5      eg)zValidate DSL name at runtimezDSL name must be string, got z&DSL name cannot be empty or whitespaceN)
isinstancer)   	TypeErrortyper#   strip
ValueErrorr   r3   s     r   _validate_dsl_nameDSLRegistry._validate_dsl_name)   sI    $$$;DJ<O<O;PQRRzz||EFF r   
dsl_modulec                 f   U R                  U5        / SQnU Vs/ s H  n[        X$5      (       a  M  UPM     nnU(       a  [        SU SU 35      eXR                  ;   a@  U R                  U   nXbL a  [        R                  SU5        g[        R                  SU5        X R                  U'   U R                  R                  5         U R                  R                  5         U R                  R                  5         U R                  R                  5         [        R                  SU5        gs  snf )z-Register a DSL module with required interface)r   r   r!   r   zDSL module 'z' missing required methods: z'DSL '%s' re-registered with same moduleNzPDSL '%s' re-registered with different module object (possibly from test imports)zSuccessfully registered DSL: %s)r;   hasattrr6   r0   logdebugwarningis_dsl_availablecache_clearget_dsl_versionlist_available_dslslist_all_dslsinfo)r   r3   r=   required_methodsmethodmissing_methodsexisting_modules          r   register_dslDSLRegistry.register_dsl1   s"    	%
 "2
!1v9TF!1 	 
 tf$@@QR 
 $$$"//5O,		=  f #-$ 	))+((*  ,,.&&(2D9I
s
   D.D.dsl_namec                     U R                   R                  U5      nUc  g UR                  5       $ ! [         a    [        R                  SUSS9   g[         a    [        R                  SU5         gf = f)z<Check if DSL is available by calling its runtime_available()FzDSL %s import errorTexc_infoz&Error checking availability for DSL %s)r0   getr   ImportErrorr@   rA   	Exception	exceptionr   rO   r=   s      r   rC   DSLRegistry.is_dsl_availablec   sv     &&**84
	//11 	II+XIE 	MMBHM	s   1 A4A43A4c                     U R                   R                  U5      nUc  g UR                  5       $ ! [         a    [        R                  SUSS9   gf = f)z0Get DSL version by calling its runtime_version()Nz Error getting version for DSL %sTrQ   )r0   rS   r   rU   r@   rA   rW   s      r   rE   DSLRegistry.get_dsl_versionr   s\     &&**84
	--// 	II8(TIR	s   1 AA.c                     / nU R                    H,  nU R                  U5      (       d  M  UR                  U5        M.     [        U5      $ )z%Get names of currently available DSLs)r0   rC   appendtuple)r   	availabler3   s      r   rF   DSLRegistry.list_available_dsls~   sE     	%%D$$T**  & & Yr   c                 H    [        U R                  R                  5       5      $ )z/Get all registered DSL names (available or not))r]   r0   keysr   s    r   rG   DSLRegistry.list_all_dsls   s     T&&++-..r   c                 8    U R                   R                  U5      $ )zGet a registered DSL module by name.

Args:
    name: Name of the DSL to retrieve.

Returns:
    The DSL module if registered, None otherwise.
)r0   rS   r:   s     r   get_dsl_moduleDSLRegistry.get_dsl_module   s       $$T**r   r/   )r#   r$   r%   r&   r'   r1   r)   r;   r   rM   	functoolscacher(   rC   r   rE   r]   rF   rG   rd   r*   r   r   r   r,   r,   #   s    S=Gs Gt G0: 0:2C 0: 0:d __    __	 	$ 	 	 __ U38_     __/uS#X / /	+3 	++<t+C 	+r   r,   )rf   loggingtypingr   torch._vendor.packaging.versionr   registryr   	getLoggerr#   r@   r   r,   dsl_registryr   r   r   <module>rn      sJ       3  ! (r+ r+l }r   