
    ^ja                         d dl Z d dlZd dlmZ d dlmZ ddlmZmZ  ej                  e
      Z G d de      Z G d d	      Z e       Zy)
    N)Protocol)Version   )	_OpCondFn	_OpImplFnc                   l    e Zd ZdZdefdZdedz  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y)DSLModuleProtocolz*Complete interface for DSL utility modulesreturnc                      y N selfs    e/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_native/dsl_registry.pyruntime_availablez#DSLModuleProtocol.runtime_available           Nc                      y r   r   r   s    r   runtime_versionz!DSLModuleProtocol.runtime_version   r   r   c                      y r   r   r   s    r   deregister_op_overridesz)DSLModuleProtocol.deregister_op_overrides   r   r   F)allow_multiple_overrideunconditional_override
lib_symbol	op_symboldispatch_keycondimplr   r   c                     y r   r   )r   r   r   r   r   r   r   r   s           r   register_op_overridez&DSLModuleProtocol.register_op_override   s     r   )r
   N)__name__
__module____qualname____doc__boolr   r   r   r   strr   r   r    r   r   r   r	   r	      s|    4,4,4442 ).',

 
 	

 $
 
 "&
 !%
 

r   r	   c                      e Zd ZdZd ZdeddfdZdededdfdZe	j                  d	edefd
       Ze	j                  d	ededz  fd       Ze	j                  deedf   fd       Ze	j                  deedf   fd       Zdededz  fdZy)DSLRegistryzIRegistry for DSL modules - calls their existing API functions dynamicallyc                     i | _         y r   )_dsl_modulesr   s    r   __init__zDSLRegistry.__init__'   s
    :<r   namer
   Nc                     t        |t              s!t        dt        |      j                         |j                         st        d      y)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   r,   s     r   _validate_dsl_namezDSLRegistry._validate_dsl_name*   sD    $$;DJ<O<O;PQRRzz|EFF r   
dsl_modulec                 L   | j                  |       g d}|D cg c]  }t        ||      r| }}|rt        d| d|       || j                  v r@| j                  |   }||u rt        j                  d|       yt        j                  d|       || j                  |<   | j                  j                          | j                  j                          | j                  j                          | j                  j                          t        j                  d|       yc c}w )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)r4   hasattrr/   r*   logdebugwarningis_dsl_availablecache_clearget_dsl_versionlist_available_dslslist_all_dslsinfo)r   r,   r5   required_methodsmethodmissing_methodsexisting_modules          r   register_dslzDSLRegistry.register_dsl2   s'    	%
 "2
V9TF
 
 tf$@@QR 
 4$$$"//5O*,		=  f #-$ 	))+((*  ,,.&&(2D9I
s
   D!D!dsl_namec                     | j                   j                  |      }|y	 |j                         S # t        $ r t        j                  d|d       Y yt        $ r t        j                  d|       Y yw xY w)z<Check if DSL is available by calling its runtime_available()FzDSL %s import errorTexc_infoz&Error checking availability for DSL %s)r*   getr   ImportErrorr8   r9   	Exception	exceptionr   rF   r5   s      r   r;   zDSLRegistry.is_dsl_availabled   sv     &&**84
	//11 	II+XIE 	MMBHM	s   0 !A4A43A4c                     | j                   j                  |      }|y	 |j                         S # t        $ r t        j                  d|d       Y yw xY w)z0Get DSL version by calling its runtime_version()Nz Error getting version for DSL %sTrH   )r*   rJ   r   rL   r8   r9   rN   s      r   r=   zDSLRegistry.get_dsl_versions   s\     &&**84
	--// 	II8(TIR	s   0 !AA.c                     g }| j                   D ]%  }| j                  |      s|j                  |       ' t        |      S )z%Get names of currently available DSLs)r*   r;   appendtuple)r   	availabler,   s      r   r>   zDSLRegistry.list_available_dsls   sG     	%% 	'D$$T*  &	' Yr   c                 H    t        | j                  j                               S )z/Get all registered DSL names (available or not))rR   r*   keysr   s    r   r?   zDSLRegistry.list_all_dsls   s     T&&++-..r   c                 8    | j                   j                  |      S )zGet a registered DSL module by name.

        Args:
            name: Name of the DSL to retrieve.

        Returns:
            The DSL module if registered, None otherwise.
        )r*   rJ   r3   s     r   get_dsl_modulezDSLRegistry.get_dsl_module   s       $$T**r   )r!   r"   r#   r$   r+   r&   r4   r	   rE   	functoolscacher%   r;   r   r=   rR   r>   r?   rW   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(   )rX   loggingtypingr   torch._vendor.packaging.versionr   registryr   r   	getLoggerr!   r8   r	   r(   dsl_registryr   r   r   <module>r`      sL       3 * g! *r+ r+l }r   