
    9j.                         d dl Z d dlZd dlmZ d dlmZ ddlmZ  ej                  e	      Z
 G d de      Z G d d	      Z e       Zy)
    N)Protocol)Version   )_OpFnc                   b    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ededdfdZy)DSLModuleProtocolz*Complete interface for DSL utility modulesreturnc                      y N selfs    Z/media/conek/DATA/Code/OCR/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implr   r   c                     y 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      sm    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)r2   hasattrr-   r(   logdebugwarningis_dsl_availablecache_clearget_dsl_versionlist_available_dslslist_all_dslsinfo)r   r*   r3   required_methodsmethodmissing_methodsexisting_modules          r   register_dslzDSLRegistry.register_dsl1   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   ImportErrorr6   r7   	Exception	exceptionr   rD   r3   s      r   r9   zDSLRegistry.is_dsl_availablec   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 %sTrF   )r(   rH   r   rJ   r6   r7   rL   s      r   r;   zDSLRegistry.get_dsl_versionr   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(   r9   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))rP   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(   rH   r1   s     r   get_dsl_modulezDSLRegistry.get_dsl_module   s       $$T**r   )r   r    r!   r"   r)   r$   r2   r   rC   	functoolscacher#   r9   r   r;   rP   r<   r=   rU   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&   )rV   loggingtypingr   torch._vendor.packaging.versionr   registryr   	getLoggerr   r6   r   r&   dsl_registryr   r   r   <module>r^      sL       3  g! (r+ r+l }r   