Ë
    S²j‘R  ã                  óÐ  — U d Z ddlmZ ddlZddlZddlmZ erddlmZ ddl	m
Z
 ddlmZ ddlmZmZ ddlZdd	lmZ d
dlmZ dgZdaded<   daded<   e
 G d„ d«      «       Zed.d„«       Z	 d/	 	 	 d0d„Zd1d„Zd2d„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d3d„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d4d„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d5d„Z  ed«      Z!d6d„Z"d7d„Z#	 	 	 	 	 	 d8	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d9d„Z$	 d:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d;d„Z%	 	 	 d<dddddddddd œ		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d=d!„Z&dddddddd"œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d>d#„Z'ddddddddd$œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d?d%„Z(dddd&œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d@d'„Z)	 	 	 	 	 	 dAdd(œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dBd)„Z*	 	 	 dCdd(œ	 	 	 	 	 	 	 	 	 	 	 	 	 dDd*„Z+dd(œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dEd+„Z, ejZ                  d,e¬-«       y)Fz�
PROTOTYPE!
Flash Attention 3 implementation.
For fp8: only supports forward pass right now.
For fp16/bf16: supports forward and backward pass.
é    )ÚannotationsN)ÚTYPE_CHECKING)ÚCallable)Ú	dataclass)Úcache)ÚTypeVarTupleÚUnpack)ÚLibraryé   )Ú	_registryÚregister_flash_attention_fa3zCallable | NoneÚ_FA3_CUDA_FWDÚ_FA3_CUDA_BWDc                  ó    — e Zd ZU ded<   dd„Zy)Ú
_FA3HandlezLibrary | NoneÚlibraryc                óP   — d | _         t        j                  j                  d«       y )NF)r   ÚtorchÚ_CÚ_set_sdp_use_fa3)Úselfs    úV/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/nn/attention/_fa3.pyÚremovez_FA3Handle.remove*   s   € ØˆŒä�‰×!Ñ! %Õ(ó    N)ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   © r   r   r   r   &   s   … àÓô)r   r   c                óJ   — t         j                  j                  | «      \  }}|S ©N)r   ÚcudaÚget_device_capability)ÚdeviceÚmajorÚ_s      r   Ú_get_device_majorr)   0   s   € ä�z‰z×/Ñ/°Ó7�H€Eˆ1Ø€Lr   c                ó|   — t        | «       t        j                  j                  d«       t	        t        «       «      S )z™
    Register FA3 flash attention kernels with the PyTorch dispatcher.

    Args:
        module_path: Python module path to the FA3 implementation.
    T)Ú_fa3_import_moduler   r   r   r   Ú_fa3_register_kernels©Úmodule_paths    r   r   r   6   s/   € ô �{Ô#ô 
‡H�H×Ñ˜dÔ#äÔ+Ó-Ó.Ð.r   c                óÜ  — t        j                  | «       t        t        j                  d«      st        d| › d�«      ‚t        t        j                  j                  d«      st        d| › d�«      ‚t        t        j                  j                  d«      st        d| › d�«      ‚t        j                  j                  j                  at        j                  j                  j                  a
y )NÚflash_attn_3zModule 'z' does not expose FA3 kernelsÚfwdz%' does not expose FA3 forward kernelsÚbwdz&' does not expose FA3 backward kernels)Ú	importlibÚimport_moduleÚhasattrr   ÚopsÚRuntimeErrorr0   r1   r   r2   r   r-   s    r   r+   r+   G   s½   € Ü×Ñ˜KÔ(Ü”5—9‘9˜nÔ-Ü˜X k ]Ð2OÐPÓQÐQÜ”5—9‘9×)Ñ)¨5Ô1ÜØ�{�mÐ#HÐIó
ð 	
ô ”5—9‘9×)Ñ)¨5Ô1ÜØ�{�mÐ#IÐJó
ð 	
ô —I‘I×*Ñ*×.Ñ.€MÜ—I‘I×*Ñ*×.Ñ.�Mr   c                 ób  — t        ddd«      } | j                  dt        d«       | j                  dt        d«       | j                  dt        d«       | j                  dt
        d«       | j                  dt        d«       | j                  d	t        d«       | j                  d
t        d«       | S )NÚatenÚIMPLÚCUDAz"_flash_attention_forward.quantizedz-_scaled_dot_product_flash_attention.quantizedÚ_flash_attention_forwardÚ+_flash_attention_forward_no_dropout_inplaceÚ#_scaled_dot_product_flash_attentionÚ_flash_attention_backwardÚ,_scaled_dot_product_flash_attention_backward)	r
   ÚimplÚ!_fa3_flash_attention_forward_implÚ4_fa3_scaled_dot_product_flash_attention_forward_implÚ)_fa3_flash_attention_forward_impl_defaultÚ4_fa3_flash_attention_forward_no_dropout_inplace_implÚ<_fa3_scaled_dot_product_flash_attention_forward_impl_defaultÚ"_fa3_flash_attention_backward_implÚ5_fa3_scaled_dot_product_flash_attention_backward_impl)Úlibs    r   r,   r,   X   s°   € Ü
�&˜& &Ó
)€CØ‡H�HØ,Ô.OÐQWôð ‡H�HØ7Ü<Øôð
 ‡H�HØ"Ô$MÈvôð ‡H�HØ5Ü<Øôð
 ‡H�HØ-ÜDØôð ‡H�HÐ(Ô*LÈfÔUØ‡H�HØ6Ü=Øôð
 €Jr   c                óÐ  — |dk7  ryt        d„ |D «       «      syt        |D �ch c]  }|j                  ’Œ c}«      dk7  ry| j                  t        j
                  k(  r |�|�|€t        j                  dt        «       |€| j                  «       dk7  ry	|�| j                  «       d
k7  ryt        j                  j                  «       syt        | j                  «      dk7  ryy c c}w )Nç        zdropout_p must be 0c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr#   )Úis_cuda©Ú.0Úts     r   ú	<genexpr>z,_fa3_common_support_error.<locals>.<genexpr>…   s   è ø€ Ò*˜Qˆq�y�yÑ*ùs   ‚zinputs must be CUDA tensorsr   úinputs must share devicez¯When using SDPA with fp8, descale tensor should always be used for accurate dequantization. Please use _scaled_dot_product_attention_quantized and provide the descale tensors.é   zdense query must be 4Dé   zragged query must be 3DzCUDA not availableé	   z#FA3 requires compute capability 9.0)ÚallÚlenr&   Údtyper   Úfloat8_e4m3fnÚwarningsÚwarnÚUserWarningÚdimr$   Úis_availabler)   )ÚqueryÚtensorsÚ	dropout_pÚ	cum_seq_qÚ	q_descaleÚ	k_descaleÚ	v_descalerP   s           r   Ú_fa3_common_support_errorrf   y   sÔ   € ð �CÒØ$äÑ* 'Ô*Ô*Ø,Ü
˜gÖ&˜ˆA�H‹HÒ&Ó'¨1Ò,Ø)Ø‡{�{”e×)Ñ)Ò)ØÐ˜YÐ.°)Ð2Cä�‰ð+ô ô	
ð Ð˜UŸY™Y›[¨AÒ-Ø'ØÐ §¡£°Ò!1Ø(Ü�:‰:×"Ñ"Ô$Ø#Ü˜Ÿ™Ó&¨!Ò+Ø4Øùò) 's   £C#c           	     óœ  ‡— |ry|�y|�+|j                   t        j                  k7  ry|j                  syt        j                  t        j
                  t        j                  fŠt        ˆfd„| ||hD «       «      sd‰› �S t        | ||hD �ch c]  }|j                   ’Œ c}«      dk7  ryt        | | ||f||||	|
«      }|�|d	k(  ry
|S y c c}w )Nzreturn_debug_mask must be Falsezalibi_slopes not supportedzseqused_k must be int32zseqused_k must be CUDAc              3  ó:   •K  — | ]  }|j                   ‰v –— Œ y ­wr#   ©rX   ©rO   rP   Úsupported_dtypess     €r   rQ   z-_fa3_forward_support_error.<locals>.<genexpr>µ   s   øè ø€ ÒH¨qˆq�w‰wÐ*Ô*ÑHùó   ƒúinputs must be one of r   ú#all inputs must have the same dtyperR   z(query, key, value must be on same device)
rX   r   Úint32rM   rY   Úfloat16Úbfloat16rV   rW   rf   )r_   ÚkeyÚvaluera   Úreturn_debug_maskÚalibi_slopesÚ	seqused_krb   rc   rd   re   rP   Úerrorrk   s                @r   Ú_fa3_forward_support_errorrx   ž   så   ø€ ñ Ø0ØÐØ+ØÐØ�?‰?œeŸk™kÒ)Ø,Ø× Ò Ø+Ü×+Ñ+¬U¯]©]¼E¿N¹NÐKÐÜÓH°U¸CÀÐ4GÔHÔHØ'Ð(8Ð'9Ð:Ð:Ü
˜e S¨%Ð0Ö1˜ˆA�G‹GÒ1Ó2°aÒ7Ø4Ü%ØØ	��UÐØØØØØó€Eð ÐØÐ.Ò.Ø=ØˆØùò 2s   ÂC	c
           	     ó”  ‡— |j                   t        j                  k(  r	 y|j                   t        j                  k7  ryt        j                  t        j
                  fŠt        ˆfd„| ||||hD «       «      sd‰› �S t        | ||||hD �
ch c]  }
|
j                   ’Œ c}
«      dk7  ryt        || |||||f||d d d «      }|�|S y c c}
w )NzHFA3 backward does not support fp8 - use inference only (torch.no_grad())zlogsumexp dtype must be float32c              3  ó:   •K  — | ]  }|j                   ‰v –— Œ y ­wr#   ri   rj   s     €r   rQ   z._fa3_backward_support_error.<locals>.<genexpr>Ý   s   øè ø€ ÒW¨qˆq�w‰wÐ*Ô*ÑWùrl   rm   r   rn   )	rX   r   rY   Úfloat32rp   rq   rV   rW   rf   )Úgrad_outr_   rr   rs   ÚoutÚ	logsumexpra   rb   Úwindow_size_leftÚwindow_size_rightrP   rw   rk   s               @r   Ú_fa3_backward_support_errorr�   É   sÜ   ø€ ð ‡{�{”e×)Ñ)Ò)àVð	
ð ‡�œ%Ÿ-™-Ò'Ø0ÜŸ™¤u§~¡~Ð6ÐÜÓW°X¸uÀcÈ5ÐRUÐ4VÔWÔWØ'Ð(8Ð'9Ð:Ð:Ü
˜h¨¨s°E¸3Ð?Ö@˜ˆA�G‹GÒ@ÓAÀQÒFØ4Ü%ØØ	�5˜#˜u c¨9Ð5ØØØØØó€Eð ÐØˆØùò As   ÂCÚTsc                 ó&   — t        d„ | D «       «      S )Nc              3  ó@   K  — | ]  }|j                  d d«      –— Œ y­w)r   é   N)Ú	transposerN   s     r   rQ   z#_transpose_dense.<locals>.<genexpr>ó   s   è ø€ Ò4 q�—‘˜Q ×"Ñ4ùs   ‚)Útuple)r`   s    r   Ú_transpose_denserˆ   ò   s   € ÜÑ4¨GÔ4Ó4Ð4r   c                óR   — | �$| j                  d«      dk7  r| j                  «       S | S )z2Ensure tensor is contiguous in the last dimension.éÿÿÿÿr   )ÚstrideÚ
contiguous)Úxs    r   Ú_maybe_contiguousrŽ   ö   s&   € à˜]¨q¯x©x¸«|¸qÒ/@ˆ1�<‰<‹>ÐGÀaÐGr   c                ó´  — t         €t        d«      ‚t        | «      }t        |«      }|j                  t        j
                  k(  r8|j                  d«      dk7  r$|j                  d«      dk7  r|j                  «       n
t        |«      }t        |«      }t        |«      }t        |«      }t        |«      }t        g |‘|‘|‘d‘d‘d‘|‘|‘|‘d‘d‘|‘|‘|‘|‘d‘d‘d‘d‘d‘|‘|‘|‘|‘|‘|	�|	nd‘|
�|
nd‘d‘d‘d‘d‘|xs t	        j                  «       rdnd‘d‘t        j                  j                  «       xs d‘­Ž \  }}}}||j                  «       fS )	zF
    Run the FA3 forward pass by calling the C++ kernel directly.
    NúFA3 not registeredrŠ   r   éýÿÿÿr   rK   T)r   r7   rŽ   rX   r   rY   r‹   rŒ   Ú$are_deterministic_algorithms_enabledr   Ú_get_sm_carveout_experimental)r_   rr   rs   Úcu_seq_qÚcu_seq_kÚmax_qÚmax_kÚscaleÚ	is_causalr   r€   rv   r}   rc   rd   re   Úblock_tableÚ
num_splitsÚqÚkÚvÚcu_seqlens_qÚcu_seqlens_kÚsoftmax_lseÚ	out_accumÚsoftmax_lse_accums                             r   Ú_fa3_run_forwardr¤   û   s`  € ô. ÐÜÐ/Ó0Ð0ä˜%Ó €AÜ˜#Ó€Að �;‰;œ%×-Ñ-Ò-Ø�L‰L˜Ó Ò!Ø�L‰L˜Ó Ò!ð 	×ÑÔô ˜uÓ%ð ô % XÓ.€LÜ$ XÓ.€LÜ! )Ó,€IÜ# KÓ0€Kä5Bð $6Ø	ð$6à	ð$6ð 	
ð$6ð 	ð	$6ð
 	ð$6ð 	ð$6ð 	ð$6ð 	ð$6ð 	ð$6ð 	ð$6ð 	ð$6ð 	ð$6ð 	ð$6ð 	ð$6ð 	ð$6ð  	ð!$6ð" 	ð#$6ð$ 	ð%$6ð& 	ð'$6ð( 	ð)$6ð* 	ð+$6ð, 	ð-$6ð. 	ð/$6ð0 	ð1$6ð2 	ð3$6ð4 -Ð8Ñ¸bð5$6ð6 /Ð:ÑÀð7$6ð8 	
ð9$6ð: 	ð;$6ð< 	ð=$6ð> 	ð?$6ð@ 	ò 	FÜ×;Ñ;Ô=‰AÀ1ðC$6ðD 	ðE$6ôF 	�‰×.Ñ.Ó0Ò5°AòG$6Ñ2€Cˆ�iÐ!2ðJ �×&Ñ&Ó(Ð(Ð(r   c                óR  — t         €t        d«      ‚t        | «      }|j                  d«      dk7  r|j	                  «       n|}|j                  d«      dk7  r|j	                  «       n|}|j                  d«      dk7  r|j	                  «       n|}t        |«      }t        |«      }t        j                  |«      }t        j                  |«      }t        j                  |«      }t        |||||||||||d d ||	|
|||d|t
        j                  j                  «       xs d«       |||fS )Nr�   rŠ   r   rK   r   )	r   r7   rŽ   r‹   rŒ   r   Ú
empty_liker   r“   )r|   r_   rr   rs   r}   r~   r”   r•   Úmax_seqlen_qÚmax_seqlen_kr˜   r™   r   r€   ÚdeterministicÚdoutrœ   r�   rž   ÚoÚlseÚdqÚdkÚdvs                           r   Ú_fa3_run_backwardr°   L  s/  € ô" ÐÜÐ/Ó0Ð0ô ˜XÓ&€DØ#Ÿl™l¨2Ó.°!Ò3ˆ×ÑÔ¸€AØŸJ™J r›N¨aÒ/ˆ�‰Ô°S€AØ#Ÿl™l¨2Ó.°!Ò3ˆ×ÑÔ¸€AÜ˜#Ó€AÜ
˜IÓ
&€Cô 
×	Ñ	˜!Ó	€BÜ	×	Ñ	˜!Ó	€BÜ	×	Ñ	˜!Ó	€BÜØØ	Ø	Ø	Ø	ØØ
Ø
Ø
ØØØØØØØØØØØØÜ�‰×.Ñ.Ó0Ò5°Aô-ð0 ˆr�2ˆ:Ðr   rŠ   T©	r˜   r   r€   rv   ru   r}   rš   Úcompute_auxiliaryr›   c       	        óÂ  — t        | ||||	||||
||«      }|�t        d|› �«      ‚t        | |||||||||||||
||||«      \  }}|r�t        j                  dt        j
                  | j                  ¬«      }t        j                  dt        j
                  | j                  ¬«      }t        j                  d| j                  | j                  ¬«      }nd }d }d }|||||fS )Nz)FA3 flash_attention forward unsupported: )r…   )rX   r&   r!   r   )	rx   r7   r¤   r   ÚzerosÚuint64r&   ÚemptyrX   )r_   rr   rs   rb   Ú	cum_seq_kr–   r—   ra   r™   rt   rc   rd   re   r˜   r   r€   rv   ru   r}   rš   r²   r›   rw   r¬   Ú	rng_stateÚphilox_offsetÚ
debug_masks                              r   rB   rB   ‡  s  € ô2 'ØØØØØØØØØØØó€Eð ÐÜÐFÀuÀgÐNÓOÐOÜØØØØØØØØØØØØØØØØØØó%�H€Cˆñ( Ü—K‘K ¬E¯L©LÀÇÁÔNˆ	ÜŸ™ B¬e¯l©lÀ5Ç<Á<ÔPˆÜ—[‘[ ¨%¯+©+¸e¿l¹lÔK‰
àˆ	ØˆØˆ
Ø��Y ¨zÐ9Ð9r   )r˜   r   r€   rv   ru   rš   r›   c               óR   — t        |||||||||	|
d d d f|||||| |d|dœ	Ž\  }}}}}|S )NFr±   ©rB   )r}   r_   rr   rs   rb   r·   r–   r—   ra   r™   rt   r˜   r   r€   rv   ru   rš   r›   r(   r¬   s                       r   rE   rE   Î  sh   € ô* 8ØØØØØØØØØØØØØðð Ø)Ø+ØØ!ØØØØò-�O€A€sˆAˆq�!ð0 €Jr   )r˜   r   r€   rv   ru   rš   r}   r›   c
               óB   — t        | |||||||||	d d d |
|||||||¬«      S )N)r˜   r   r€   rv   ru   r}   rš   r›   r¼   )r_   rr   rs   rb   r·   r–   r—   ra   r™   rt   r˜   r   r€   rv   ru   rš   r}   r›   s                     r   rD   rD   þ  sP   € ô* -ØØØØØØØØØØØØØØØ)Ø+ØØ!ØØØô+ð r   )r˜   r   r€   c               óÆ   — t        | ||||||
|||«
      }|�t        d|› �«      ‚t        j                  «       }t	        | |||||||||	|||�|nd|�|nd|«      \  }}}|||fS )z0FA3 implementation of _flash_attention_backward.z*FA3 flash_attention backward unsupported: rŠ   )r�   r7   r   r’   r°   )r|   r_   rr   rs   r}   r~   rb   r·   r–   r—   ra   r™   r¸   Úunusedr˜   r   r€   rw   r©   r­   r®   r¯   s                         r   rG   rG   ,  s°   € ô* (ØØØØØØØØØØó€Eð ÐÜÐGÈÀwÐOÓPÐPä×>Ñ>Ó@€Mä"ØØØØØØØØØØØØØ,Ð8Ñ¸bØ.Ð:ÑÀØó�J€BˆˆBð" ˆr�2ˆ:Ðr   ©r˜   c	               ó  — t        | ||||d d d |||«      }
|
�t        d|
› �«      ‚t        | ||«      \  }}}| j                  t        j
                  k(  rt        j                  n| j                  }t	        j                  | |¬«      }|j                  dd«      }|j                  d«      }|j                  d«      }t        |||d d ||||||	||||¬«      \  }}}}}| j                  d«      }|j                  d«      }||d d |||||f	S )NzFA3 SDPA forward unsupported: ri   r   r…   )r˜   r}   rc   rd   re   )rx   r7   rˆ   rX   r   rY   rq   r¦   r†   ÚsizerB   )r_   rr   rs   rc   rd   re   ra   r™   rt   r˜   rw   rœ   r�   rž   Ú	out_dtypeÚout_bhsdÚout_bshdÚmax_q_flashÚmax_k_flashr(   r¬   r¸   r¹   rº   r–   r—   s                             r   rC   rC   g  sA  € ô 'ØØØØØØØØØØØó€Eð ÐÜÐ;¸E¸7ÐCÓDÐDÜ˜u c¨5Ó1�G€A€qˆ!ð
 #(§+¡+´×1DÑ1DÒ"D”—’È%Ï+É+€IÜ×Ñ ¨YÔ7€HØ×!Ñ! ! QÓ'€Hà—&‘&˜“)€KØ—&‘&˜“)€KÜ3TØ	Ø	Ø	ØØØØØØØØØØØØô4Ñ0€A€sˆI�} jð" �J‰J�q‹M€EØ�H‰H�Q‹K€EàØØØØØØØØð
ð 
r   c               ó,   — t        | ||d d d ||||¬«
      S )NrÀ   )rC   )r_   rr   rs   ra   r™   rt   r˜   s          r   rF   rF   ®  s0   € ô @ØØØØØØØØØØôð r   c               óÜ   — t        | ||||||
ddd«
      }|�t        d|› �«      ‚t        | ||||«      \  }}}}}t        ||||||dd||	|
||||¬«      \  }}}t        |||«      \  }}}|||fS )zCFA3 implementation of _scaled_dot_product_flash_attention_backward.NzFA3 SDPA backward unsupported: rÀ   )r�   r7   rˆ   rG   )r|   r_   rr   rs   r}   r~   rb   r·   r–   r—   ra   r™   Úphilox_seedr¹   r˜   rw   Ú
grad_out_tÚq_tÚk_tÚv_tÚout_tr­   r®   r¯   Údq_outÚdk_outÚdv_outs                              r   rH   rH   Æ  sÃ   € ô& (Ø�%˜˜e S¨)°YÀÀdÈDó€Eð ÐÜÐ<¸U¸GÐDÓEÐEô (8Ø�%˜˜e Só(Ñ$€J��S˜#˜uô 4ØØØØØØØØØØØØØØØô�J€BˆˆBô& .¨b°"°bÓ9Ñ€FˆF�FØ�6˜6Ð!Ð!r   ÚFA3)Úregister_fn)r&   ztorch.devicer   Úint)Úflash_attn_interface)r.   Ústrr   r   )r.   r×   r   r   )r   r
   )r_   útorch.Tensorr`   ztuple[torch.Tensor, ...]ra   Úfloatrb   útorch.Tensor | Nonerc   rÚ   rd   rÚ   re   rÚ   r   ú
str | None)r_   rØ   rr   rØ   rs   rØ   ra   rÙ   rt   Úboolru   rÚ   rv   rÚ   rb   rÚ   rc   rÚ   rd   rÚ   re   rÚ   r   rÛ   )r|   rØ   r_   rØ   rr   rØ   rs   rØ   r}   rØ   r~   rØ   ra   rÙ   rb   rÚ   r   ú
int | Noner€   rÝ   r   rÛ   )r`   z
Unpack[Ts]r   ztuple[Unpack[Ts]])r�   rÚ   r   rÚ   )NNNNNN)&r_   rØ   rr   rØ   rs   rØ   r”   rÚ   r•   rÚ   r–   rÕ   r—   rÕ   r˜   úfloat | Noner™   rÜ   r   rÝ   r€   rÝ   rv   rÚ   r}   rÚ   rc   rÚ   rd   rÚ   re   rÚ   rš   rÚ   r›   rÝ   r   z!tuple[torch.Tensor, torch.Tensor])F) r|   rØ   r_   rØ   rr   rØ   rs   rØ   r}   rØ   r~   rØ   r”   rÚ   r•   rÚ   r§   rÝ   r¨   rÝ   r˜   rÞ   r™   rÜ   r   rÕ   r€   rÕ   r©   rÜ   r   z/tuple[torch.Tensor, torch.Tensor, torch.Tensor])NNN),r_   rØ   rr   rØ   rs   rØ   rb   rÚ   r·   rÚ   r–   rÕ   r—   rÕ   ra   rÙ   r™   rÜ   rt   rÜ   rc   rÚ   rd   rÚ   re   rÚ   r˜   rÞ   r   rÕ   r€   rÕ   rv   rÚ   ru   rÚ   r}   rÚ   rš   rÚ   r²   rÜ   r›   rÝ   )$r}   rØ   r_   rØ   rr   rØ   rs   rØ   rb   rÚ   r·   rÚ   r–   rÕ   r—   rÕ   ra   rÙ   r™   rÜ   rt   rÜ   r˜   rÞ   r   rÕ   r€   rÕ   rv   rÚ   ru   rÚ   rš   rÚ   r›   rÝ   )$r_   rØ   rr   rØ   rs   rØ   rb   rÚ   r·   rÚ   r–   rÕ   r—   rÕ   ra   rÙ   r™   rÜ   rt   rÜ   r˜   rÞ   r   rÕ   r€   rÕ   rv   rÚ   ru   rÚ   rš   rÚ   r}   rÚ   r›   rÝ   )"r|   rØ   r_   rØ   rr   rØ   rs   rØ   r}   rØ   r~   rØ   rb   rÚ   r·   rÚ   r–   rÕ   r—   rÕ   ra   rÙ   r™   rÜ   r¸   rØ   r¿   rØ   r˜   rÞ   r   rÝ   r€   rÝ   )NNNrK   FF)r_   rØ   rr   rØ   rs   rØ   rc   rÚ   rd   rÚ   re   rÚ   ra   rÙ   r™   rÜ   rt   rÜ   r˜   rÞ   )rK   FF)r_   rØ   rr   rØ   rs   rØ   ra   rÙ   r™   rÜ   rt   rÜ   r˜   rÞ   )r|   rØ   r_   rØ   rr   rØ   rs   rØ   r}   rØ   r~   rØ   rb   rÚ   r·   rÚ   r–   rÕ   r—   rÕ   ra   rÙ   r™   rÜ   rÊ   rØ   r¹   rØ   r˜   rÞ   ).Ú__doc__Ú
__future__r   r3   rZ   Útypingr   Úcollections.abcr   Údataclassesr   Ú	functoolsr   Útyping_extensionsr   r	   r   Útorch.libraryr
   Ú r   Ú__all__r   r    r   r   r)   r   r+   r,   rf   rx   r�   r‚   rˆ   rŽ   r¤   r°   rB   rE   rD   rG   rC   rF   rH   Úregister_flash_attention_implr!   r   r   ú<module>rê      sž  ðòõ #ã Û Ý  ñ Ý(å !Ý ß 2ã Ý !å ð #ð€ð
 "&€ˆÓ %Ø!%€ˆÓ %ð ÷)ð )ó ð)ð òó ðð .ð/Øð/àó/ó"/ó"ðB"Øð"à%ð"ð ð"ð #ð	"ð
 #ð"ð #ð"ð #ð"ð ó"ðJ(Øð(à	ð(ð ð(ð ð	(ð
 ð(ð &ð(ð #ð(ð #ð(ð #ð(ð #ð(ð #ð(ð ó(ðV#Øð#àð#ð 
ð#ð ð	#ð
 
ð#ð ð#ð ð#ð #ð#ð !ð#ð "ð#ð ó#ñL �$Ó€ó5óHð$  $Ø%)Ø%)Ø%)Ø'+Ø!ð%N)ØðN)à	ðN)ð ðN)ð "ð	N)ð
 "ðN)ð ðN)ð ðN)ð ðN)ð ðN)ð !ðN)ð "ðN)ð #ðN)ð 
ðN)ð #ðN)ð #ðN)ð  #ð!N)ð" %ð#N)ð$ ð%N)ð& 'ó'N)ð@  ð8Øð8àð8ð 
ð8ð ð	8ð
 
ð8ð ð8ð "ð8ð "ð8ð ð8ð ð8ð ð8ð ð8ð ð8ð ð8ð ð8ð  5ó!8ðL &*Ø%)Ø%)ðD:ð ØØØ%)Ø(,Ø#Ø'+Ø"Ø!ñ/D:ØðD:à	ðD:ð ðD:ð #ð	D:ð
 #ðD:ð ðD:ð ðD:ð ðD:ð ðD:ð ðD:ð #ðD:ð #ðD:ð #ðD:ð ðD:ð  ð!D:ð" ð#D:ð$ #ð%D:ð& &ð'D:ð( 
ð)D:ð* %ð+D:ð, ð-D:ð. ó/D:ðh ØØØ%)Ø(,Ø'+Ø!ñ'-Ø	ð-àð-ð 
ð-ð ð	-ð
 #ð-ð #ð-ð ð-ð ð-ð ð-ð ð-ð ð-ð ð-ð ð-ð ð-ð  #ð!-ð" &ð#-ð$ %ð%-ð& ó'-ðx ØØØ%)Ø(,Ø'+Ø#Ø!ñ'+Øð+à	ð+ð ð+ð #ð	+ð
 #ð+ð ð+ð ð+ð ð+ð ð+ð ð+ð ð+ð ð+ð ð+ð #ð+ð  &ð!+ð" %ð#+ð$ 
ð%+ð& ó'+ð| Ø#'Ø$(ñ%8Øð8àð8ð 
ð8ð ð	8ð
 
ð8ð ð8ð #ð8ð #ð8ð ð8ð ð8ð ð8ð ð8ð ð8ð ð8ð  ð!8ð" !ð#8ð$ "ó%8ð~ &*Ø%)Ø%)ØØØ#ðDð ñDØðDà	ðDð ðDð #ð	Dð
 #ðDð #ðDð ðDð ðDð ðDð óDðV ØØ#ðð ñØðà	ðð ðð ð	ð
 ðð ðð óðP ñ!2"Øð2"àð2"ð 
ð2"ð ð	2"ð
 
ð2"ð ð2"ð #ð2"ð #ð2"ð ð2"ð ð2"ð ð2"ð ð2"ð ð2"ð  ð2"ð  ó!2"ðj (€	× 'Ñ '¨Ð;WÖ Xr   