ó
    Këgj`  ã                   óÊ  • S SK r S SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  \R                  " SS 05      \" S#S V Vs/ s H  n S  H  n\R                  S	U 0US
9PM     M!     snn / SQS.\D6\R                  " SS/S9S\R                   S\R                   S\R                   S\R                   S\R                   S	\R                   S\R                   4S j5       5       5       r\" S5         S$S\ R$                  S\ R$                  S\ R$                  S\ R$                  S\ R$                  S\ R$                  S\S\ R(                  S-  S\S \S!S4S" jj5       rgs  snn f )%é    N)Údispatch)Úfla_cache_autotune)Úexp2)Úautotune_cache_kwargsÚ	IS_VARLENc                 ó   • U S   S L$ )NÚ
cu_seqlens© )Úargss    Ú´C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\fla/ops/kda/chunk_intra_token_parallel.pyÚ<lambda>r      s   € ˜d <Ñ0¸Ñ<ó    )é   é   é   é   ÚBH)Ú	num_warps)ÚKÚHÚHV)ÚconfigsÚkeyÚTÚN)Údo_not_specializer   r   r   ÚBTÚBCc                 ó
  • [         R                  " S5      [         R                  " S5      nnU(       aê  SnSUnn[        S5       HY  nUU:  d  M  UU-   S-  nU[         R                  " UU-   S-   5      R	                  [         R
                  5      :  a  UnMT  US-   nM[     Un[         R                  " UU-   5      R	                  [         R
                  5      [         R                  " UU-   S-   5      R	                  [         R
                  5      nnUU-
  n	UU-
  nOUU	-  U	-  nUU	-  nUU	:¼  a  g UU-  nUU-  U-  nUU-  nUUU-  -   nXº-  nU UU
-  U-  -  n UUU
-  U-  -  nUUU-  U-  -  nUUU-  U-  -  nUUU-  U-  -  nUUU-  -  n[        R                  " U5      n UU-  [         R                  " SU5      -   n!U!U-  n"[         R                  " SU 5      n#U!U:  n$U#U:  n%U$S S 2S 4   U%S S S 24   -  n&U"S S 2S 4   U-  U#S S S 24   -   n'[         R                  " U UU
-  U-  -   U'-   U&SS9R	                  [         R                  5      n([         R                  " UUU
-  U-  -   U'-   U&SS9R	                  [         R                  5      n)UUU-  U-  -   U!S S 2S 4   U-  -   U#S S S 24   -   n*UUU-  -   U!-   n+[         R                  " U*U&SS9R	                  [         R                  5      n,U)[         R                  " U+U$SS9R	                  [         R                  5      S S 2S 4   -  n)[        U[        US-   [        U	UU-   5      5      5       GH±  n-[         R                  " UU-U
-  U-  -   U'-   U&SS9R	                  [         R                  5      n.UU-U-  U-  -   U!S S 2S 4   U-  -   U#S S S 24   -   n/[         R                  " U/U&SS9R	                  [         R                  5      n0[         R                  " U%S S S 24   U.[        U,U0-
  5      -  S5      n1[         R                  " U(U1-  SS9U-  n2[         R                  " U)U1-  SS9[         R                  " U-U:  SS5      -  n3[         R                  " UUU-  U-  -   U!U-  -   U-U-  -   U2R	                  UR                  R                   5      U$S	9  [         R                  " UUU-  U-  -   U!U-  -   U--   U-
  U3R	                  UR                  R                   5      U$S	9  GM´     g )
Nr   r   é   r   )ÚmaskÚotherg        )Úaxisg      ð?)r!   )ÚtlÚ
program_idÚrangeÚloadÚtoÚint32ÚtritonÚnext_power_of_2ÚarangeÚfloat32ÚminÚwherer   ÚsumÚstoreÚdtypeÚ
element_ty)4ÚqÚkÚgÚbetaÚAqkÚAkkÚscaler	   r   r   r   r   r   r   r   r   r   Úi_tgÚi_hgÚi_nÚleftÚrightÚ_ÚmidÚbosÚeosÚi_tÚi_cÚi_sÚi_tcÚi_tsÚGÚBKÚo_hvÚo_hÚo_kÚm_hvÚm_kÚm_hkÚp_qkÚb_qÚb_kÚp_gÚp_betaÚb_gÚjÚb_kjÚp_gjÚb_gjÚb_kgjÚb_AqkÚb_Akks4                                                       r   Ú)chunk_kda_fwd_kernel_intra_token_parallelr^      sÑ  € ô@ —’˜qÓ!¤2§=¢=°Ó#3ˆ$€DæØˆØ˜ˆeˆô
 �r–ˆAØ�e�|Ø˜e‘|¨Ñ)�Øœ"Ÿ'š' *¨sÑ"2°QÑ"6Ó7×:Ñ:¼2¿8¹8ÓDÓDØ’Eà ™7’Dñ ð ˆä—7’7˜:¨Ñ+Ó,×/Ñ/´·±Ó9¼2¿7º7À:ÐPSÑCSÐVWÑCWÓ;X×;[Ñ;[Ô\^×\dÑ\dÓ;eˆSˆØ�#‰IˆØ�S‰j‰à�q‰y˜A‰oˆØ�Q‰hˆà
ˆaƒxØà
�‰)€CØ�‰8˜Ñ
€CØ�‰8€DØ�#˜‘(‰?€Dà‘g€Aàˆˆq‰�‰�N€AØˆˆq‰�‰�N€AØˆˆr‰�!‰�O€AØˆ3�‰8�B‰;Ñ€CØˆ3�‰8�B‰;Ñ€CØˆC�"‰HÑ€Dä×-Ò-¨aÓ0€BØ�"‰9”r—y’y  BÓ'Ñ'€DØ
�!‰)€CÜ
�)Š)�A�rÓ
€CØ�"‰9€DØ
�‰'€CØ’�4�‰=˜3˜t¢Q˜w™<Ñ'€Dð Šq�$ˆw‰<˜!Ñ˜c $ª '™lÑ*€DÜ
�'Š'�!�c˜A‘g ‘k‘/ DÑ(¨t¸1Ñ
=×
@Ñ
@ÄÇÁÓ
L€CÜ
�'Š'�!�c˜A‘g ‘k‘/ DÑ(¨t¸1Ñ
=×
@Ñ
@ÄÇÁÓ
L€Cð ˆc�B‰h˜‰lÑ
˜T¢! T '™]¨QÑ.Ñ
.°°Tº1°W±Ñ
=€CØ�C˜"‘H‰_˜tÑ#€FÜ
�'Š'�#˜D¨Ñ
,×
/Ñ
/´·
±
Ó
;€CØ
”—’˜ T°Ñ5×8Ñ8¼¿¹ÓDÂQÈÀWÑMÑ
M€Cä�4œ˜S 1™W¤c¨!¨T°B©YÓ&7Ó8×9ˆÜ�wŠw�q˜1˜q™5 1™9‘} tÑ+°$¸aÑ@×CÑCÄBÇJÁJÓOˆØ�1�r‘6˜A‘:‰~ ¢Q¨ W¡°Ñ 1Ñ1°C¸ºa¸±LÑ@ˆÜ�wŠw�t $¨cÑ2×5Ñ5´b·j±jÓAˆä—’˜˜T¢1˜W™ t¬d°3¸±:Ó.>Ñ'>ÀÓDˆÜ—’�s˜U‘{¨Ñ+¨eÑ3ˆÜ—’�s˜U‘{¨Ñ+¬b¯hªh°q¸3±wÀÀSÓ.IÑIˆä
�Š��s˜R‘x "‘}Ñ$ t¨b¡yÑ0°1°r±6Ñ9¸5¿8¹8ÀCÇIÁI×DXÑDXÓ;YÐ`dÒeÜ
�Š��s˜R‘x "‘}Ñ$ t¨b¡yÑ0°1Ñ4°tÑ;¸U¿X¹XÀcÇiÁi×FZÑFZÓ=[ÐbfÕgò :r   Úkdar4   r5   Úgkr7   r8   r9   r:   r	   Ú
chunk_sizeÚsub_chunk_sizeÚreturnc
                 óÈ   ^^^• / U R                   QUR                   S   P7u  mmp«mUb  [        U5      S-
  OTnUnU	nUUU4S jn[        U   " U UUUUUUUUTU
TUUUS9  XE4$ )a)  
Token-parallel implementation: each token gets its own thread block.
Supports both fixed-length and variable-length sequences.
Reduces wasted computation on padding.

Writes directly to Aqk and Akk tensors (in-place).

Args:
    q: [B, T, H, K]
    k: [B, T, H, K]
    gk: [B, T, HV, K] cumsum of gates (HV >= H for GVA)
    beta: [B, T, HV]
    Aqk: [B, T, HV, BT] output tensor to write to
    Akk: [B, T, HV, BC] output tensor for diagonal blocks (fp32)
    scale: attention scale
    chunk_size: BT (default 64)
    sub_chunk_size: BC (default 16)
r   r   c                 óB   >• TT-  [         R                  " TU S   5      4$ )Nr   )r*   Úcdiv)ÚmetaÚBr   r   s    €€€r   ÚgridÚ0chunk_kda_fwd_intra_token_parallel.<locals>.grid¢   s    ø€ ˜A ™E¤6§;¢;¨r°4¸±:Ó#>Ð?Ð?r   )r4   r5   r6   r7   r8   r9   r:   r	   r   r   r   r   r   r   r   )ÚshapeÚlenr^   )r4   r5   r`   r7   r8   r9   r:   r	   ra   rb   r   r   r   r   r   ri   rh   r   r   s                   @@@r   Ú"chunk_kda_fwd_intra_token_parallelrm   ~   s�   ú€ ð> +�a—g‘gÐ*˜rŸx™x¨™{Ñ*�N€A€qˆ!�Ø)Ñ5ŒˆJ‹˜!Ò¸1€AØ	€BØ	€Bç?Ü-¨dÒ3Ø
Ø
Ø
ØØØØØØ
Ø
Ø
ØØ
ØØòð" ˆ8€Or   r
   )Né@   é   )Útorchr*   Útriton.languageÚlanguager$   Úfla.ops.backendsr   Úfla.ops.utils.cacher   Úfla.ops.utils.opr   Ú	fla.utilsr   Ú
heuristicsÚConfigÚjitÚ	constexprr^   ÚTensorÚfloatÚ
LongTensorÚintrm   )r   r   s   00r   Ú<module>r      sæ  ðó Û Ý å %Ý 2Ý !Ý +ð ×ÒØÑ<ðó ñ ð ñ ôâˆBÜ%ˆIð 	�‰�t˜R�j¨IˆÓ6á%ñ 	7Ùòò
 	ñð ñð ‡‚˜s C˜jÑ)ðZhð 
‡|�|ðZhð 	�‰ðZhð 
‡|�|ðZhð 	�‰ðZhð 	�‰ðZhð  	�‰ð!Zhð" �|‰|ó#Zhó *óóðZhñz 
ˆ%ƒð +/ØØñ5Ø‡|�|ð5à‡|�|ð5ð 	�‰ð5ð �,‰,ð	5ð
 
�‰ð5ð 
�‰ð5ð ð5ð × Ñ  4Ñ'ð5ð ð5ð ð5ð 
ô5ó ñ5ùóOs   Á&E