
    ΅ih                     .   % S r SSKrSSKJr  SSKJrJr  \R                  " \5      r	 " S S\5      r
\S\
S-  4   r\S   r0 q\\\4   \S	'   Sq\\\
4   S-  \S
'   S\\-  S\SS4S jrS\\-  SS4S jrS\\   4S jrS\S-  4S jrSS\SS4S jjrg)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                       \ rS rSrSS jrSrg)FlashAttentionHandle   Nc                     g )N )selfs    V/home/james-whalen/.local/lib/python3.13/site-packages/torch/nn/attention/_registry.pyremoveFlashAttentionHandle.remove   s    c    r
   )returnN)__name__
__module____qualname____firstlineno__r   __static_attributes__r
   r   r   r   r      s    !r   r   .FA4_FLASH_ATTENTION_IMPLS_FLASH_ATTENTION_ACTIVEimplregister_fnr   c                    U[         U '   g)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                     [        SS9  [        R                  U 5      nUc  [        SU  S[	        5        35      eU" 5       nUb  X4qgg)a#  
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$   =   sk    2 ! ),,T2K,TF 3**D*F)GI
 	

 ]F#'. r   c                  <    [        [        R                  5       5      $ )zBReturn the names of all available flash attention implementations.)sortedr   keysr
   r   r   r"   r"   f   s    (--/00r   c                  .    [         b	  [         S   $ [         $ )z
Return the currently activated flash attention impl name, if any.

``None`` indicates that no custom impl has been activated.
r   )r   r
   r   r   current_flash_attention_implr)   k   s#     #. 	 " %r   r   c                     Sn[         b	  [         S   nUb  UR                  5         Sq gU (       a  [        R                  S5        Sq g)z(
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   sL     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>r;      s     $ $ 
		8	$"8 " s04778en 13 S+-. 3CG s$889D@ G/
#
#/ / 
	/B&1
#
#&1	&1R1DI 1

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