§
    �Štj19  ã            
      ó   — U d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZ dd	lmZ e
rdd
lmZ ddlZddlmZ dgZdaded<   e G d„ d¦  «        ¦   «         Zed`d„¦   «         Z	 dadbd„Zedcd„¦   «         Zddd„Z	 dedfd'„Z	 	 dgdhd3„Zdid7„Zdjd9„Z  ed:¦  «        Z!dkd=„Z"	 	 	 dldmdH„Z#	 dndodL„Z$ddddddddMddNœ	dpdQ„Z%ddddddddRœdqdS„Z&ddddTœdrdW„Z'	 	 	 dsddYœdtdZ„Z(ddYœdud]„Z) ej*        d^e¬_¦  «         dS )vzUBER PROTOTYPE!!!é    )ÚannotationsN)Ú	dataclass)Úcache)ÚAnyÚTYPE_CHECKING)ÚTypeVarTupleÚUnpacké   )Ú	_registry)Ú
ModuleType)ÚLibraryÚregister_flash_attention_fa4ú
str | NoneÚ_FA4_MODULE_PATHc                  ó"   — e Zd ZU ded<   dd„ZdS )Ú
_FA4HandlezLibrary | NoneÚlibraryÚreturnÚNonec                ó   — d | _         d S ©N)r   )Úselfs    úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/nn/attention/_fa4.pyÚremovez_FA4Handle.remove"   s   € ØˆŒˆˆó    N)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   © r   r   r   r      s6   € € € € € € àÐÐÑðð ð ð ð ð r   r   Údeviceútorch.devicer   Úintc                óJ   — t           j                             | ¦  «        \  }}|S r   )ÚtorchÚcudaÚget_device_capability)r!   ÚmajorÚ_s      r   Ú_get_device_majorr*   &   s    € åŒz×/Ò/°Ñ7Ô7�H€Eˆ1Ø€Lr   úflash_attn.cute.interfaceÚmodule_pathÚstrc                óZ   — t          | ¦  «        }| at          t          ¦   «         ¦  «        S )z™
    Register FA4 flash attention kernels with the PyTorch dispatcher.

    Args:
        module_path: Python module path to the FA4 implementation.
    )Ú_fa4_import_moduler   r   Ú_fa4_register_kernels)r,   r)   s     r   r   r   ,   s,   € õ 	˜;Ñ'Ô'€AØ"ÐÝÕ+Ñ-Ô-Ñ.Ô.Ð.r   r   c                ó”   — t          j        | ¦  «        }t          |d¦  «        rt          |d¦  «        st          d| › d�¦  «        ‚|S )NÚ_flash_attn_fwdÚ_flash_attn_bwdzModule 'z' does not expose FA4 kernels)Ú	importlibÚimport_moduleÚhasattrÚRuntimeError)r,   Úmodules     r   r/   r/   ;   sX   € åÔ$ [Ñ1Ô1€FÝ�6Ð,Ñ-Ô-ð RµW¸VÐEVÑ5WÔ5Wð RÝÐP kÐPÐPÐPÑQÔQÐQØ€Mr   r   c                 ó@  — t          ddd¦  «        } |                      dt          d¦  «         |                      dt          d¦  «         |                      dt          d¦  «         |                      dt
          d¦  «         |                      dt          d¦  «         | S )	NÚatenÚIMPLÚCUDAÚ_flash_attention_forwardÚ+_flash_attention_forward_no_dropout_inplaceÚ_flash_attention_backwardÚ#_scaled_dot_product_flash_attentionÚ,_scaled_dot_product_flash_attention_backward)r   ÚimplÚ!_fa4_flash_attention_forward_implÚ4_fa4_flash_attention_forward_no_dropout_inplace_implÚ"_fa4_flash_attention_backward_implÚ4_fa4_scaled_dot_product_flash_attention_forward_implÚ5_fa4_scaled_dot_product_flash_attention_backward_impl)Úlibs    r   r0   r0   C   s«   € Ý
�&˜& &Ñ
)Ô
)€CØ‡H‚HÐ'Õ)JÈFÑSÔSÐSØ‡H‚HØ5Ý<Øñô ð ð
 ‡H‚HÐ(Õ*LÈfÑUÔUÐUØ‡H‚HØ-Ý<Øñô ð ð
 ‡H‚HØ6Ý=Øñô ð ð
 €Jr   r    Úqueryútorch.TensorÚtensorsútuple[torch.Tensor, ...]Ú	cum_seq_qútorch.Tensor | NoneÚrequire_fp32ú$tuple[tuple[str, torch.Tensor], ...]c                óä  — t          d„ |D ¦   «         ¦  «        sdS t          d„ |D ¦   «         ¦  «        dk    rdS | j        t          j        t          j        fvrdS |D ]!\  }}|j        t          j        k    r|› d�c S Œ"|€|                      ¦   «         dk    rd	S |�|                      ¦   «         d
k    rdS t          j         	                    ¦   «         sdS t          | j        ¦  «        dvrdS d S )Nc              3  ó$   K  — | ]}|j         V — Œd S r   )Úis_cuda©Ú.0Úts     r   ú	<genexpr>z,_fa4_common_support_error.<locals>.<genexpr>_   s$   è è € Ð*Ð*˜QˆqŒyÐ*Ð*Ð*Ð*Ð*Ð*r   zinputs must be CUDA tensorsc                ó   — h | ]	}|j         ’Œ
S r    )r!   rT   s     r   ú	<setcomp>z,_fa4_common_support_error.<locals>.<setcomp>a   s   € Ð&Ð&Ð&˜ˆAŒHÐ&Ð&Ð&r   r
   úinputs must share devicez'query dtype must be float16 or bfloat16z dtype must be float32é   zdense query must be 4Dé   zragged query must be 3DzCUDA not available)é	   é
   z+FA4 requires compute capability 9.0 or 10.0)ÚallÚlenÚdtyper%   Úfloat16Úbfloat16Úfloat32Údimr&   Úis_availabler*   r!   )rI   rK   rM   rO   ÚnameÚtensors         r   Ú_fa4_common_support_errorri   Y   s!  € õ Ð*Ð* 'Ð*Ñ*Ô*Ñ*Ô*ð -Ø,Ð,Ý
Ð&Ð&˜gÐ&Ñ&Ô&Ñ'Ô'¨1Ò,Ð,Ø)Ð)Ø„{�5œ=­%¬.Ð9Ð9Ð9Ø8Ð8Ø$ð 3ð 3‰ˆˆfØŒ<�5œ=Ò(Ð(ØÐ2Ð2Ð2Ð2Ð2Ð2ð )àÐ˜UŸYšY™[œ[¨AÒ-Ð-Ø'Ð'ØÐ §¢¡¤°Ò!1Ð!1Ø(Ð(ÝŒ:×"Ò"Ñ$Ô$ð $Ø#Ð#Ý˜œÑ&Ô&¨gÐ5Ð5Ø<Ð<Øˆ4r   ÚkeyÚvalueÚ	dropout_pÚfloatÚreturn_debug_maskÚboolÚalibi_slopesÚ	seqused_kÚblock_tableÚ
num_splitsú
int | Nonec
                ó  — |dk    rdS |rdS |�dS |� |j         t          j        k    rdS |j        sdS t	          | j        ¦  «        }
|�|
dk    rd|
› d	�S |	�|	d
k    r|
dk    rd|
› d	�S t          | | ||f|¦  «        }|�
|dk    rdS |S d S )Nç        údropout_p must be 0zreturn_debug_mask must be Falsezalibi_slopes not supportedzseqused_k must be int32zseqused_k must be CUDAr^   z+paged KV (block_table) not supported on SM Ú0r
   z-SplitKV (num_splits > 1) not supported on SM rZ   z(query, key, value must be on same device)ra   r%   Úint32rS   r*   r!   ri   )rI   rj   rk   rl   rn   rp   rq   rM   rr   rs   r(   Úerrors               r   Ú_fa4_forward_support_errorr{   s   só   € ð �CÒÐØ$Ð$Øð 1Ø0Ð0ØÐØ+Ð+ØÐØŒ?�eœkÒ)Ð)Ø,Ð,ØÔ ð 	,Ø+Ð+Ý˜eœlÑ+Ô+€EØÐ 5¨B¢; ;ØE¸UÐEÐEÐEÐEØÐ *¨q¢. .°U¸b²[°[ØG¸uÐGÐGÐGÐGÝ%ØØ	��UÐØñô €Eð
 ÐØÐ.Ò.Ð.Ø=Ð=ØˆØˆ4r   Úgrad_outÚoutÚ	logsumexpc           	     óV   — |dk    rdS t          || |||||f|d|ff¬¦  «        }|�|S d S )Nrv   rw   r~   )rO   )ri   )	r|   rI   rj   rk   r}   r~   rl   rM   rz   s	            r   Ú_fa4_backward_support_errorr€   ›   s\   € ð �CÒÐØ$Ð$Ý%ØØ	�5˜#˜u c¨9Ð5ØØ" IÐ.Ð0ð	ñ ô €Eð ÐØˆØˆ4r   Úvalc                ó   — | dk    rdn| S )z"need to convert -1 to None for FA4éÿÿÿÿNr    )r�   s    r   Ú_aten_to_fa4_window_sizer„   ²   s   € à˜"’9�9ˆ4ˆ4 #Ð%r   ÚTsú
Unpack[Ts]útuple[Unpack[Ts]]c                 ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  óB   K  — | ]}|                      d d¦  «        V — ŒdS )r
   é   N)Ú	transposerT   s     r   rW   z#_transpose_dense.<locals>.<genexpr>»   s0   è è € Ð4Ð4 q�—’˜Q Ñ"Ô"Ð4Ð4Ð4Ð4Ð4Ð4r   )Útuple)rK   s    r   Ú_transpose_denser�   º   s   € ÝÐ4Ð4¨GÐ4Ñ4Ô4Ñ4Ô4Ð4r   Úcu_seq_qÚcu_seq_kÚmax_qÚmax_kÚscaleúfloat | NoneÚ	is_causalÚwindow_size_leftÚwindow_size_rightú!tuple[torch.Tensor, torch.Tensor]c                ó,  — t           €t          d¦  «        ‚t          t           ¦  «        }||t          |	¦  «        t          |
¦  «        d|||||�|                     ¦   «         nd ||pd|dœ} |j        | ||fi |¤Ž\  }}||                     ¦   «         fS )NúFA4 not registeredTr
   )Úsoftmax_scaleÚcausalr•   r–   Ú
return_lseÚcu_seqlens_qÚcu_seqlens_kÚmax_seqlen_qÚmax_seqlen_krq   Ú
page_tablers   r}   )r   r7   r/   r„   Ú
contiguousr2   )rI   rj   rk   rŽ   r�   r�   r‘   r’   r”   r•   r–   rq   r}   rr   rs   r8   ÚkwargsÚlses                     r   Ú_fa4_run_forwardr¥   ¾   sÁ   € õ" ÐÝÐ/Ñ0Ô0Ð0ÝÕ 0Ñ1Ô1€Fð ØÝ4Ð5EÑFÔFÝ5Ð6GÑHÔHØØ Ø ØØØ/8Ð/D�Y×)Ò)Ñ+Ô+Ð+È$Ø!Ø �o AØðð €Fð &ˆvÔ% e¨S°%ÐBÐB¸6ÐBÐB�H€CˆØ�—’Ñ Ô Ð Ð r   FÚdeterministicú/tuple[torch.Tensor, torch.Tensor, torch.Tensor]c                ó  — t           €t          d¦  «        ‚t          t           ¦  «        }|                     ||||| |                     ¦   «         ||	t          |
¦  «        t          |¦  «        |||¬¦  «        \  }}}|||fS )Nr™   )rš   r›   r•   r–   r�   rž   r¦   )r   r7   r/   r3   r¢   r„   )r|   rI   rj   rk   r}   r~   rŽ   r�   r’   r”   r•   r–   r¦   r8   ÚdqÚdkÚdvs                    r   Ú_fa4_run_backwardr¬   æ   sš   € õ ÐÝÐ/Ñ0Ô0Ð0ÝÕ 0Ñ1Ô1€FØ×'Ò'ØØØØØØ×ÒÑÔØØÝ1Ð2BÑCÔCÝ2Ð3DÑEÔEØØØ#ð (ñ ô �J€BˆˆBð ˆr�2ˆ:Ðr   T©	r’   r•   r–   rq   rp   r}   rr   Úcompute_auxiliaryrs   Ú	cum_seq_kr®   c
       	        ó”  — t          | ||||	|||||¦
  «
        }|�t          d|› �¦  «        ‚t          | |||||||
|||||||¦  «        \  }}|rnt          j        dt          j        | j        ¬¦  «        }t          j        dt          j        | j        ¬¦  «        }t          j        d| j        | j        ¬¦  «        }nd }d }d }|||||fS )Nz)FA4 flash_attention forward unsupported: )rŠ   )ra   r!   r    r   )	r{   r7   r¥   r%   ÚzerosÚuint64r!   Úemptyra   )rI   rj   rk   rM   r¯   r�   r‘   rl   r”   rn   r’   r•   r–   rq   rp   r}   rr   r®   rs   rz   r¤   Ú	rng_stateÚphilox_offsetÚ
debug_masks                           r   rC   rC   
  s
  € õ, 'ØØØØØØØØØØñô €Eð ÐÝÐNÀuÐNÐNÑOÔOÐOÝØØØØØØØØØØØØØØØñô �H€Cˆð" ð Ý”K ­E¬LÀÄÐNÑNÔNˆ	Ýœ B­e¬lÀ5Ä<ÐPÑPÔPˆÝ”[ ¨%¬+¸e¼lÐKÑKÔKˆ
ˆ
àˆ	ØˆØˆ
Ø��Y ¨zÐ9Ð9r   )r’   r•   r–   rq   rp   rr   rs   c               óV   — t          |||||||||	|
|||||| |d|¬¦  «        \  }}}}}|S )NFr­   )rC   )r}   rI   rj   rk   rM   r¯   r�   r‘   rl   r”   rn   r’   r•   r–   rq   rp   rr   rs   r)   r¤   s                       r   rD   rD   J  sb   € õ* 8ØØØØØØØØØØØØ)Ø+ØØ!ØØØØð'ñ ô �O€A€sˆAˆq�!ð* €Jr   )r’   r•   r–   r´   Úunusedc               óÄ   — t          | ||||||
|¦  «        }|�t          d|› �¦  «        ‚t          j        ¦   «         }t	          | ||||||||||||¦  «        \  }}}|||fS )Nz*FA4 flash_attention backward unsupported: )r€   r7   r%   Ú$are_deterministic_algorithms_enabledr¬   )r|   rI   rj   rk   r}   r~   rM   r¯   r�   r‘   rl   r”   r´   r¸   r’   r•   r–   rz   r¦   r©   rª   r«   s                         r   rE   rE   w  s¢   € õ( (ØØØØØØØØñ	ô 	€Eð ÐÝÐOÈÐOÐOÑPÔPÐPÝÔ>Ñ@Ô@€MÝ"ØØØØØØØØØØØØØñô �J€BˆˆBð ˆr�2ˆ:Ðr   rv   ©r’   c               óÔ  — t          | ||||d d d ¦  «        }|�t          d|› �¦  «        ‚t          | ||¦  «        \  }}	}
t          j        | ¦  «        }|                     dd¦  «        }|                     d¦  «        }|	                     d¦  «        }t          ||	|
d d |||||||¬¦  «        \  }}}}}|                      d¦  «        }|                     d¦  «        }||d d |||||f	S )NzFA4 SDPA forward unsupported: r
   rŠ   )r’   r}   )r{   r7   r�   r%   Ú
empty_liker‹   ÚsizerC   )rI   rj   rk   rl   r”   rn   r’   rz   ÚqÚkÚvÚout_bhsdÚout_bshdÚmax_q_flashÚmax_k_flashr)   r¤   r´   rµ   r¶   r�   r‘   s                         r   rF   rF   ª  s.  € õ 'ØØØØØØØØñ	ô 	€Eð ÐÝÐC¸EÐCÐCÑDÔDÐDÝ˜u c¨5Ñ1Ô1�G€A€qˆ!õ
 Ô Ñ&Ô&€HØ×!Ò! ! QÑ'Ô'€Hà—&’&˜‘)”)€KØ—&’&˜‘)”)€KÝ3TØ	Ø	Ø	ØØØØØØØØØð4ñ 4ô 4Ñ0€A€sˆI�} jð �JŠJ�q‰MŒM€EØ�HŠH�Q‰KŒK€EàØØØØØØØØð
ð 
r   Úphilox_seedrµ   c               óT  — t          | ||||||
d ¦  «        }|�t          d|› �¦  «        ‚t          ||||| ¦  «        \  }}}}}|                     d¦  «        }|                     d¦  «        }	t	          ||||||d d ||	|
||||¬¦  «        \  }}}t          |||¦  «        \  }}}|||fS )NzFA4 SDPA backward unsupported: rŠ   r»   )r€   r7   r�   r¾   rE   )r|   rI   rj   rk   r}   r~   rM   r¯   r�   r‘   rl   r”   rÆ   rµ   r’   rz   r¿   rÀ   rÁ   ÚoÚgor©   rª   r«   s                           r   rG   rG   ç  só   € õ$ (ØØØØØØØØñ	ô 	€Eð ÐÝÐD¸UÐDÐDÑEÔEÐEÝ% e¨S°%¸¸hÑGÔG�N€A€qˆ!ˆQ�Ø�JŠJ�q‰MŒM€EØ�HŠH�Q‰KŒK€EÝ3Ø
Ø	Ø	Ø	Ø	ØØØØØØØØØØðñ ô �J€BˆˆBõ" " " b¨"Ñ-Ô-�J€BˆˆBØˆr�2ˆ:Ðr   ÚFA4)Úregister_fn)r!   r"   r   r#   )r+   )r,   r-   r   r   )r,   r-   r   r   )r   r   )r    )
rI   rJ   rK   rL   rM   rN   rO   rP   r   r   )NN)rI   rJ   rj   rJ   rk   rJ   rl   rm   rn   ro   rp   rN   rq   rN   rM   rN   rr   rN   rs   rt   r   r   )r|   rJ   rI   rJ   rj   rJ   rk   rJ   r}   rJ   r~   rJ   rl   rm   rM   rN   r   r   )r�   rt   r   rt   )rK   r†   r   r‡   )NNN) rI   rJ   rj   rJ   rk   rJ   rŽ   rN   r�   rN   r�   rt   r‘   rt   r’   r“   r”   ro   r•   rt   r–   rt   rq   rN   r}   rN   rr   rN   rs   rt   r   r—   )F)r|   rJ   rI   rJ   rj   rJ   rk   rJ   r}   rJ   r~   rJ   rŽ   rN   r�   rN   r’   r“   r”   ro   r•   rt   r–   rt   r¦   ro   r   r§   )&rI   rJ   rj   rJ   rk   rJ   rM   rN   r¯   rN   r�   r#   r‘   r#   rl   rm   r”   ro   rn   ro   r’   r“   r•   rt   r–   rt   rq   rN   rp   rN   r}   rN   rr   rN   r®   ro   rs   rt   )$r}   rJ   rI   rJ   rj   rJ   rk   rJ   rM   rN   r¯   rN   r�   r#   r‘   r#   rl   rm   r”   ro   rn   ro   r’   r“   r•   rt   r–   rt   rq   rN   rp   rN   rr   rN   rs   rt   )"r|   rJ   rI   rJ   rj   rJ   rk   rJ   r}   rJ   r~   rJ   rM   rN   r¯   rN   r�   r#   r‘   r#   rl   rm   r”   ro   r´   rJ   r¸   rJ   r’   r“   r•   rt   r–   rt   )rv   FF)rI   rJ   rj   rJ   rk   rJ   rl   rm   r”   ro   rn   ro   r’   r“   )r|   rJ   rI   rJ   rj   rJ   rk   rJ   r}   rJ   r~   rJ   rM   rN   r¯   rN   r�   r#   r‘   r#   rl   rm   r”   ro   rÆ   rJ   rµ   rJ   r’   r“   )+Ú__doc__Ú
__future__r   r4   Údataclassesr   Ú	functoolsr   Útypingr   r   Útyping_extensionsr   r	   Ú r   Útypesr   r%   Útorch.libraryr   Ú__all__r   r   r   r*   r   r/   r0   ri   r{   r€   r„   r…   r�   r¥   r¬   rC   rD   rE   rF   rG   Úregister_flash_attention_implr    r   r   ú<module>r×      sx  ðØ Ð Ð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à Ð Ð Ð Ð Ð ð ð !Ø Ð Ð Ð Ð Ð à €€€Ø !Ð !Ð !Ð !Ð !Ð !ð #ð€ð
  $Ð Ð #Ð #Ð #Ñ #ð ðð ð ð ð ñ ô ñ „ðð ðð ð ñ „ðð 3ð/ð /ð /ð /ð /ð ðð ð ñ „ððð ð ð ð4 :<ð	ð ð ð ð ðF (,Ø!ð%ð %ð %ð %ð %ðPð ð ð ð.&ð &ð &ð &ð
 €\�$ÑÔ€ð5ð 5ð 5ð 5ð"  $Ø'+Ø!ð%!ð %!ð %!ð %!ð %!ðj  ð!ð !ð !ð !ð !ð` Ø#'Ø$(Ø%)Ø(,Ø#Ø'+Ø"Ø!ð)=:ð =:ð =:ð =:ð =:ð =:ðZ Ø#'Ø$(Ø%)Ø(,Ø'+Ø!ð'*ð *ð *ð *ð *ð *ðz Ø#'Ø$(ð%0ð 0ð 0ð 0ð 0ð 0ðn ØØ#ð:ð ð:ð :ð :ð :ð :ð :ðZ ð!3ð 3ð 3ð 3ð 3ð 3ðl (€	Ô '¨Ð;WÐ XÑ XÔ XÐ XÐ XÐ Xr   