o
    .i                     @   s.   d dl mZmZ ededZG dd dZdS )    )AnyTypeVar_T)boundc                   @   s:   e Zd ZdZdddZdefddZd	edefd
dZdS )ExtensionManageraj  
    A registry for managing pluggable extension classes.

    This class provides a simple mechanism to register and instantiate
    extension classes by name. It is commonly used to implement plugin
    systems where different implementations can be swapped at runtime.

    Examples:
        Basic usage with a registry instance:

        >>> FOO_REGISTRY = ExtensionManager()
        >>> @FOO_REGISTRY.register("my_foo_impl")
        ... class MyFooImpl(Foo):
        ...     def __init__(self, value):
        ...         self.value = value
        >>> foo_impl = FOO_REGISTRY.load("my_foo_impl", value=123)

    returnNc                 C   s
   i | _ dS )z9
        Initialize an empty extension registry.
        N
name2class)self r   P/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/utils/registry.py__init__   s   
zExtensionManager.__init__namec                    s   dt dt f fdd}|S )zD
        Decorator to register a class with the given name.
        cls_to_registerr   c                    s   | j  < | S )Nr   )r   r   r
   r   r   wrap'   s   
z'ExtensionManager.register.<locals>.wrap)r   )r
   r   r   r   r   r   register"   s   zExtensionManager.registercls_namec                 O   s2   | j |}|dusJ d| d||i |S )zN
        Instantiate and return a registered extension class by name.
        NzExtension class z
 not found)r	   get)r
   r   argskwargsclsr   r   r   load-   s   zExtensionManager.load)r   N)	__name__
__module____qualname____doc__r   strr   r   r   r   r   r   r   r      s
    
r   N)typingr   r   typer   r   r   r   r   r   <module>   s   