o
    j9:j.                     @   sf   d dl Z d dlZd dlmZ d dlmZ ddlmZ ee	Z
G dd deZG dd	 d	Ze ZdS )
    N)Protocol)Version   )_OpFnc                   @   sh   e Zd ZdZdefddZdedB fddZddd	Zd
d
dde	de	de	de
dededdfddZdS )DSLModuleProtocolz*Complete interface for DSL utility modulesreturnc                 C      d S N selfr
   r
   a/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/torch/_native/dsl_registry.pyruntime_available       z#DSLModuleProtocol.runtime_availableNc                 C   r   r	   r
   r   r
   r
   r   runtime_version   r   z!DSLModuleProtocol.runtime_versionc                 C   r   r	   r
   r   r
   r
   r   deregister_op_overrides   r   z)DSLModuleProtocol.deregister_op_overridesF)allow_multiple_overrideunconditional_override
lib_symbol	op_symboldispatch_keyimplr   r   c                C   r   r	   r
   )r   r   r   r   r   r   r   r
   r
   r   register_op_override   s   	z&DSLModuleProtocol.register_op_override)r   N)__name__
__module____qualname____doc__boolr   r   r   r   strr   r   r
   r
   r
   r   r      s,    
		r   c                   @   s   e Zd ZdZdd ZdeddfddZded	eddfd
dZe	j
dedefddZe	j
dededB fddZe	j
deedf fddZe	j
deedf fddZdededB fddZdS )DSLRegistryzIRegistry for DSL modules - calls their existing API functions dynamicallyc                 C   s
   i | _ d S r	   )_dsl_modulesr   r
   r
   r   __init__&   s   
zDSLRegistry.__init__namer   Nc                 C   s2   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"   r
   r
   r   _validate_dsl_name)   s
   
zDSLRegistry._validate_dsl_name
dsl_modulec                    s   |  | g d} fdd|D }|rtd| d| || jv r:| j| }| u r4t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                    s   g | ]	}t  |s|qS r
   )hasattr).0methodr*   r
   r   
<listcomp>=   s
    
z,DSLRegistry.register_dsl.<locals>.<listcomp>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)   r$   r    logdebugwarningis_dsl_availablecache_clearget_dsl_versionlist_available_dslslist_all_dslsinfo)r   r"   r*   required_methodsmissing_methodsexisting_moduler
   r.   r   register_dsl1   s6   








zDSLRegistry.register_dsldsl_namec                 C   sf   | j |}|du rdS z| W S  ty#   tjd|dd Y dS  ty2   td| Y dS 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   ImportErrorr0   r1   	Exception	exceptionr   r=   r*   r
   r
   r   r3   c   s   
zDSLRegistry.is_dsl_availablec                 C   sH   | j |}|du rdS z| W S  ty#   tjd|dd Y dS w )z0Get DSL version by calling its runtime_version()Nz Error getting version for DSL %sTr>   )r    r@   r   rB   r0   r1   rD   r
   r
   r   r5   r   s   
zDSLRegistry.get_dsl_version.c                 C   s,   g }| j D ]}| |r|| qt|S )z%Get names of currently available DSLs)r    r3   appendtuple)r   	availabler"   r
   r
   r   r6   ~   s   


zDSLRegistry.list_available_dslsc                 C   s   t | j S )z/Get all registered DSL names (available or not))rF   r    keysr   r
   r
   r   r7      s   zDSLRegistry.list_all_dslsc                 C   s   | 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    r@   r(   r
   r
   r   get_dsl_module   s   	zDSLRegistry.get_dsl_module)r   r   r   r   r!   r   r)   r   r<   	functoolscacher   r3   r   r5   rF   r6   r7   rI   r
   r
   r
   r   r   #   s    2r   )rJ   loggingtypingr   torch._vendor.packaging.versionr   registryr   	getLoggerr   r0   r   r   dsl_registryr
   r
   r
   r   <module>   s   

v