ó
    pyüiu	  ã                   ó*  • S SK r SSKJr  S\ R                  S\S\ R                  4S jr  SS\ R                  R                  S	\ R                  S
\ R                  S\ R                  S\ R                  S-  S\S\S-  S\	\ R                  S4   4S jjr
g)é    Né   )ÚPagedAttentionCacheÚhidden_statesÚn_repÚreturnc                 ó    • U R                   u  p#pEUS:X  a  U $ U SS2SS2SSS2SS24   R                  X#XU5      n U R                  X#U-  XE5      $ )zÈ
This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
é   N)ÚshapeÚexpandÚreshape)r   r   ÚbatchÚnum_key_value_headsÚslenÚhead_dims         Úa/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/integrations/sdpa_paged.pyÚ	repeat_kvr      s_   € ð
 2?×1DÑ1DÑ.€E Ø�ƒzØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐW\ÐdlÓm€MØ× Ñ  ¸eÑ(CÀTÓTÐTó    ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚdropoutÚscalingc           
      óv  • UR                  SS 5      nUbg  UR                  UUU R                  US   US   S9u  p#UR                  SS5      R	                  S5      nUR                  SS5      R	                  S5      n[        U S5      (       a*  [        X R                  5      n[        X0R                  5      nUn	UR                  5       nUR                  5       nUR                  5       n[        R                  R                  R                  UUUU	UUSS	9n
U
R                  SS
5      R                  5       n
U
S 4$ )NÚcacheÚ
read_indexÚwrite_index)Ú
key_statesÚvalue_statesÚ	layer_idxr   r   r   r	   Únum_key_value_groupsF)Ú	attn_maskÚ	dropout_pÚscaleÚ	is_causalr   )ÚpopÚupdater!   Ú	transposeÚ	unsqueezeÚhasattrr   r"   Ú
contiguousÚtorchÚnnÚ
functionalÚscaled_dot_product_attention)r   r   r   r   r   r   r   Úkwargsr   Úcausal_maskÚattn_outputs              r   Úsdpa_attention_paged_forwardr4      sD  € ð )/¯
©
°7¸DÓ(A€EØÑà—\‘\ØØØ×&Ñ&Ø˜lÑ+Ø˜}Ñ-ð "ð 
‰
ˆð �m‰m˜A˜qÓ!×+Ñ+¨AÓ.ˆØ—‘  1Ó%×/Ñ/°Ó2ˆô ˆvÐ-×.Ñ.Ü˜×8Ñ8Ó9ˆÜ˜%×!<Ñ!<Ó=ˆð !€Kð ×ÑÓ€EØ
�.‰.Ó
€CØ×ÑÓ€EÜ—(‘(×%Ñ%×BÑBØØØØØØàð Cð 	€Kð ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜ÐÐr   )g        N)r-   Ú$generation.continuous_batching.cacher   ÚTensorÚintr   r.   ÚModuleÚfloatÚtupler4   © r   r   Ú<module>r<      s¹   ðÛ å Fð	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ô 	Uð$ Ø ñ0Ø�H‰H�O‰Oð0à�<‰<ð0ð 
�‰ð0ð �<‰<ð	0ð
 —L‘L 4Ñ'ð0ð ð0ð �T‰\ð0ð ˆ5�<‰<˜ÐÑö0r   