
    /jo                     D   U d Z ddlZddlmZ ddlmZmZ  ej        e          Z	 G d de          Z
ede
dz  f         Zed         Zi aeeef         ed	<   daeee
f         dz  ed
<   deez  deddfdZdeez  ddfdZdee         fdZdedz  fdZddeddfdZdS )zRegistry for flash attention implementations.

This module contains the registration system for flash attention implementations.
It has no torch dependencies to avoid circular imports during initialization.
    N)Callable)LiteralProtocolc                       e Zd ZddZdS )FlashAttentionHandlereturnNc                     d S )N )selfs    a/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torch/nn/attention/_registry.pyremovezFlashAttentionHandle.remove   s          )r   N)__name__
__module____qualname__r   r
   r   r   r   r      s        !!!!!!r   r   .)FA3FA4_FLASH_ATTENTION_IMPLS_FLASH_ATTENTION_ACTIVEimplregister_fnr   c                    |t           | <   dS )a#  
    Register the callable that activates a flash attention impl.

    .. note::
        This function is intended for SDPA backend providers to register their
        implementations. End users should use :func:`activate_flash_attention_impl`
        to activate a registered implementation.

    Args:
        impl: Implementation identifier (e.g., ``"FA4"``).
        register_fn: Callable that performs the actual dispatcher registration.
            This function will be invoked by :func:`activate_flash_attention_impl`
            and should register custom kernels with the PyTorch dispatcher.
            It may optionally return a handle implementing
            :class:`FlashAttentionHandle` to keep any necessary state alive.

    Example:
        >>> def my_impl_register(module_path: str = "my_flash_impl"):
        ...     # Register custom kernels with torch dispatcher
        ...     pass  # doctest: +SKIP
        >>> register_flash_attention_impl(
        ...     "MyImpl", register_fn=my_impl_register
        ... )  # doctest: +SKIP
    N)r   )r   r   s     r   register_flash_attention_implr      s    < $/4   r   c                     t          d           t                              |           }|!t          d|  dt	                                  |            }|| |fadS dS )ac  
    Activate into the dispatcher a previously registered flash attention impl.

    .. note::
        Backend providers should NOT automatically activate their implementation
        on import. Users should explicitly opt-in by calling this function or via
        environment variables to ensure multiple provider libraries can coexist.

    Args:
        impl: Implementation identifier to activate. See
            :func:`~torch.nn.attention.list_flash_attention_impls` for available
            implementations.
            If the backend's :func:`register_flash_attention_impl` callable
            returns a :class:`FlashAttentionHandle`, the registry keeps that
            handle alive for the lifetime of the process (until explicit
            uninstall support exists).

    Example:
        >>> activate_flash_attention_impl("FA4")  # doctest: +SKIP
    F)_raise_warnNzUnknown flash attention impl 'z'. Available implementations: )restore_flash_attention_implr   get
ValueErrorlist_flash_attention_implsr   )r   r   handles      r   activate_flash_attention_implr!   =   s    2 !    ),,T22KIT I I*D*F*FI I
 
 	

 []]F#'. r   c                  N    t          t                                                    S )zBReturn the names of all available flash attention implementations.)sortedr   keysr
   r   r   r   r   f   s    (--//000r   c                  8    t           t           d         nt           S )z
    Return the currently activated flash attention impl name, if any.

    ``None`` indicates that no custom impl has been activated.
    Nr   )r   r
   r   r   current_flash_attention_implr&   k   s     #. 	 ""$r   Tr   c                     d}t           t           d         }||                                 n| rt                              d           da dS )z0
    Restore the default FA2 implementation
    N   zDTrying to restore default FA2 impl when no custom impl was activated)r   r   loggerwarning)r   r    s     r   r   r   x   s]     F*(+	 
R	
 	
 	
 #r   )T)__doc__loggingcollections.abcr   typingr   r   	getLoggerr   r)   r   _RegisterFn_FlashAttentionImplr   dictstr__annotations__r   tupler   r!   listr   r&   boolr   r
   r   r   <module>r8      s      $ $ $ $ $ $ $ $ $ $ $ $ $ $ 
	8	$	$" " " " "8 " " " s04778l+ 13 S+-. 3 3 3CG s$889D@ G G G/
#
#/ / 
	/ / / /B&1
#
#&1	&1 &1 &1 &1R1DI 1 1 1 1

cDj 
 
 
 
# #d #d # # # # # #r   