o
    "j                     @   s2   d dl Z G dd dZedZdd Zdd ZdS )	    Nc                   @   s0   e Zd ZdZddgZdd Zdd Zdd	 Zd
S )RegistryzA general registry object.namerulesc                 C   s   || _ i | _d S N)r   r   )selfr    r   ^/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/decomposition/register.py__init__   s   
zRegistry.__init__c                 C   sD   t |tsJ t|sJ || jvsJ d| d|| j|< d S )Nzname "z"" should not be registered before.)
isinstancestrinspect
isfunctionr   )r   op_typeruler   r   r   register   s   
zRegistry.registerc                 C   s   | j |S r   )r   get)r   r   r   r   r   lookup"   s   zRegistry.lookupN)__name__
__module____qualname____doc__	__slots__r	   r   r   r   r   r   r   r      s    r   decompositionc                    s.   t  tstdt  d fdd}|S )ap  
    Decorator for registering the lower function for an original op into sequence of primitive ops.

    Args:
        op_type(str): The op name

    Returns:
        wrapper: Inner wrapper function

    Examples:
        .. code-block:: python

            >>> from paddle.decomposition import register
            >>> @register.register_decomp('softmax')
            >>> def softmax(x, axis):
            ...     molecular = exp(x)
            ...     denominator = broadcast_to(sum(molecular, axis=axis, keepdim=True), x.shape)
            ...     res = divide(molecular, denominator)
            ...     return res
    zop_type must be str, but got .c                    s   t  |  | S r   )_decomposition_opsr   )fr   r   r   wrapperA   s   z register_decomp.<locals>.wrapper)r
   r   	TypeErrortype)r   r   r   r   r   register_decomp)   s   
r    c                 C   s   t | }|S r   )r   r   )r   Z
_lowerruler   r   r   get_decomp_ruleH   s   
r!   )r   r   r   r    r!   r   r   r   r   <module>   s
   