
    a,j.                         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dS )
    N)Protocol)Version   )_OpFnc                   d    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dS )DSLModuleProtocolz*Complete interface for DSL utility modulesreturnc                     d S N selfs    Z/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/torch/_native/dsl_registry.pyruntime_availablez#DSLModuleProtocol.runtime_available             Nc                     d S r   r   r   s    r   runtime_versionz!DSLModuleProtocol.runtime_version   r   r   c                     d S 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                    d S r   r   )r   r   r   r   r   r   r   s          r   register_op_overridez&DSLModuleProtocol.register_op_override   s	     sr   )r	   N)__name__
__module____qualname____doc__boolr   r   r   r   strr   r   r   r   r   r   r      s        44,4,,,,444444222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dS )DSLRegistryzIRegistry for DSL modules - calls their existing API functions dynamicallyc                     i | _         d S r   )_dsl_modulesr   s    r   __init__zDSLRegistry.__init__&   s    :<r   namer	   Nc                     t          |t                    s$t          dt          |          j                   |                                st          d          dS )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)   sa    $$$ 	SQDJJ<OQQRRRzz|| 	GEFFF	G 	Gr   
dsl_modulec                 :   |                      |           g d}fd|D             }|rt          d| d|           || j        v rI| j        |         }|u rt                              d|           dS t                              d|           | j        |<   | j                                         | j                                         | j	                                         | j
                                         t                              d|           dS )	z-Register a DSL module with required interface)r   r   r   r   c                 4    g | ]}t          |          |S r   )hasattr).0methodr3   s     r   
<listcomp>z,DSLRegistry.register_dsl.<locals>.<listcomp>=   s8     
 
 
V9T9T

 
 
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   r-   r(   logdebugwarningis_dsl_availablecache_clearget_dsl_versionlist_available_dslslist_all_dslsinfo)r   r*   r3   required_methodsmissing_methodsexisting_modules     `   r   register_dslzDSLRegistry.register_dsl1   sk    	%%%
 
 

 
 
 
!1
 
 
  	RtRRRR  
 4$$$"/5O*,,		=    f   #-$ 	))+++((*** ,,...&&(((2D99999r   dsl_namec                    | j                             |          }|dS 	 |                                S # t          $ r! t                              d|d           Y dS t          $ r t                              d|           Y dS w xY w)z<Check if DSL is available by calling its runtime_available()NFzDSL %s import errorTexc_infoz&Error checking availability for DSL %s)r(   getr   ImportErrorr:   r;   	Exception	exceptionr   rG   r3   s      r   r=   zDSLRegistry.is_dsl_availablec   s     &**844
5	//111 	 	 	II+XIEEE55 	 	 	MMBHMMM55	s   4 'B$BBc                     | j                             |          }|dS 	 |                                S # t          $ r! t                              d|d           Y dS w xY w)z0Get DSL version by calling its runtime_version()Nz Error getting version for DSL %sTrI   )r(   rK   r   rM   r:   r;   rO   s      r   r?   zDSLRegistry.get_dsl_versionr   sw     &**844
4	--/// 	 	 	II8(TIRRR44	s   4 'AA.c                     g }| j         D ],}|                     |          r|                    |           -t          |          S )z%Get names of currently available DSLs)r(   r=   appendtuple)r   	availabler*   s      r   r@   zDSLRegistry.list_available_dsls~   sT     	% 	' 	'D$$T** '  &&&Yr   c                 N    t          | j                                                  S )z/Get all registered DSL names (available or not))rS   r(   keysr   s    r   rA   zDSLRegistry.list_all_dsls   s!     T&++--...r   c                 6    | 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(   rK   r1   s     r   get_dsl_modulezDSLRegistry.get_dsl_module   s      $$T***r   )r   r    r!   r"   r)   r$   r2   r   rF   	functoolscacher#   r=   r   r?   rS   r@   rA   rX   r   r   r   r&   r&   #   sj       SS= = =Gs Gt G G G G0: 0:2C 0: 0: 0: 0: 0:d _     _ _	 	$ 	 	 	 _	 _ U38_       _  _/uS#X / / / _/	+3 	++<t+C 	+ 	+ 	+ 	+ 	+ 	+r   r&   )rY   loggingtypingr   torch._vendor.packaging.versionr   registryr   	getLoggerr   r:   r   r&   dsl_registryr   r   r   <module>ra      s               3 3 3 3 3 3       g!!       (r+ r+ r+ r+ r+ r+ r+ r+l {}}r   