
    zj                     J    d dl Z  G d d          Z ed          Zd Zd ZdS )    Nc                   ,    e Zd ZdZddgZd Zd Zd ZdS )RegistryzA general registry object.namerulesc                 "    || _         i | _        d S N)r   r   )selfr   s     m/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddle/decomposition/register.py__init__zRegistry.__init__   s    	


    c                     t          |t                    sJ t          j        |          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rules      r
   registerzRegistry.register   sl    '3'''''!$'''''dj(((@W@@@ )(( #
7r   c                 6    | j                             |          S r   )r   get)r	   r   s     r
   lookupzRegistry.lookup"   s    z~~g&&&r   N)__name__
__module____qualname____doc__	__slots__r   r   r    r   r
   r   r      sQ        $$!I  # # #' ' ' ' 'r   r   decompositionc                 |     t           t                    s t          dt                      d           f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                 >    t                               |            | S r   )_decomposition_opsr   )fr   s    r
   wrapperz register_decomp.<locals>.wrapperA   s    ##GQ///r   )r   r   	TypeErrortype)r   r$   s   ` r
   register_decompr'   )   sX    * gs## JHWHHHIII     Nr   c                 :    t                               |           }|S r   )r"   r   )r   
_lowerrules     r
   get_decomp_ruler*   H   s    #**733Jr   )r   r   r"   r'   r*   r   r   r
   <module>r+      sr    ' ' ' ' ' ' ' '* Xo..   >    r   