ó
    Këgj  ã                   ó�  • S SK r S SKrS SKJr  S SKJrJr  S SKJ	r	  \R                  " SS 05      \R                  " SS V s/ s H  n \R                  0 U S9PM     sn S/S	.\	D6\R                  S\R                  S
\R                  S\R                  4S j5       5       5       r  SS\S-  S\ R"                  S-  4S jjrgs  sn f )é    N)ÚexpÚlog)Úautotune_cache_kwargsÚ	HAS_SCALEc                 ó   • U S   S L$ )NÚscale© )Úargss    Ú¥C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\fla/ops/utils/logsumexp.pyÚ<lambda>r      s   € ˜d 7™m°4Ñ7ó    )é   é   é   é   é   é    ©Ú	num_warpsÚD)ÚconfigsÚkeyÚBc                 ód  • [         R                  " S5      R                  [         R                  5      [         R                  " S5      R                  [         R                  5      pvXt-  [         R                  " SU5      -   nXƒ:  n	[         R
                  " XU-  -   U-   U	[        S5      * S9n
U(       a  X¢-  n
[         R                  " U
S5      n[        [         R                  " [        X«-
  5      S5      5      U-   n[         R                  " X[         R                  " X45      -  -   U-   U5        g )Nr   r   Úinf)ÚmaskÚother)ÚtlÚ
program_idÚtoÚint64ÚarangeÚloadÚfloatÚmaxr   Úsumr   ÚstoreÚcdiv)ÚxÚzr   r   r   r   Úi_nÚi_dÚo_dÚm_dÚb_xÚb_mÚb_zs                r   Úlogsumexp_fwd_kernelr2      s×   € ô( �}Š}˜QÓ×"Ñ"¤2§8¡8Ó,¬b¯mªm¸AÓ.>×.AÑ.AÄ"Ç(Á(Ó.KˆØ
‰'”B—I’I˜a “OÑ
#€CØ
‰'€Cä
�'Š'�!˜A‘g‘+ Ñ#¨#´e¸E³l°]Ñ
C€CÞØ‰kˆÜ
�&Š&��a‹.€CÜ
Œb�fŠf”S˜™“^ QÓ'Ó
(¨3Ñ
.€CÜ‡H‚HˆQ”r—w’w˜q“}Ñ$Ñ$ sÑ*¨CÕ0r   r   Údtypec                 óÂ  • U R                   nU R                  SUS   5      n U R                   u  pE[        [        R                  " U5      S5      n[        R
                  " XV5      nU R                  XG[        R                  S9n[        XG4   " U UUUUS9  UR                  S5      R                  " USS 6 nUb%  U[        R                  :w  a  UR                  U5      nU$ )aw  
Compute the logsumexp of the input tensor over the last dimension.

Args:
    x (Tensor):
        The input tensor of any shape.
    scale (Optional[float]):
        The scale applied to the input tensor. Default: `None`.
    dtype (Optional[torch.dtype]):
        The data type of the output tensor. Default: `None`.
Returns:
    Tensor: The logsumexp of the input tensor.
éÿÿÿÿi   )r3   )r)   r*   r   r   r   N)ÚshapeÚviewÚminÚtritonÚnext_power_of_2r(   Ú	new_emptyÚtorchr$   r2   Ú	logsumexpr    )	r)   r   r3   r6   ÚNr   r   ÚNDr*   s	            r   Úlogsumexp_fwdr@   0   sÈ   € ð& �G‰G€EØ	�‰ˆr�5˜‘9Ó€AØ�7‰7�D€AÜŒF×"Ò" 1Ó% yÓ1€AÜ	�Š�QÓ	€Bà	�‰�A¤§¡ˆÐ-€AÜ˜!˜Ò!Ø
Ø
ØØ
Ø
òð 	
�‰�B‹×Ò˜e C R˜jÐ)€AØÑ˜U¤e§k¡kÓ1Ø�D‰D�‹KˆØ€Hr   r	   )NN)r<   r9   Útriton.languageÚlanguager   Úfla.ops.utils.opr   r   Ú	fla.utilsr   Ú
heuristicsÚautotuneÚConfigÚjitÚ	constexprr2   r$   r3   r@   r   s   0r   Ú<module>rJ      sü   ðó Û Ý ç %Ý +ð ×ÒØÑ7ðó ð ‡‚ð ñ .óâ-ˆIð 	�‰�b IˆÓ.Ù-ñð 
ˆñð ñð ‡�ð1ð 
‡|�|ð	1ð
 
‡|�|ð1ð �|‰|ó1ó óóð1ð, Ø $ñ$à�4‰<ð$ð �;‰;˜Ñö$ùò9s   ÁC