ó
    pyüi  ã                   óî   • S SK r S SK Jr  SSKJr  S\ R                  S\S\ R                  4S jrS	\R                  S
\ R                  S\ R                  S\ R                  S\ R                  S-  S\4S jr	g)é    N)Únné   )Ú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         Úb/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/integrations/eager_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Úscalingc                 óô  • 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[        5      (       a  [        U SS5      nUS:X  d  Uc  S	OS
n	XI   n
OUn
[        R                  " XR                  SS5      5      U-  nU
b  Xº-   n[        U S5      (       aÌ  U R                  R                  SSSS5      R                  UR                   S   SUR                   S   S5      n[        R"                  " X¼/SS9nX»R%                  SSS9R&                  -
  n[(        R*                  R-                  US[        R.                  S9R1                  UR2                  5      nUSS S24   nOF[(        R*                  R-                  US[        R.                  S9R1                  UR2                  5      n[        R                  " X³5      nUR                  SS5      R5                  5       nXÛ4$ )NÚcacheÚ
read_indexÚwrite_index)Ú
key_statesÚvalue_statesÚ	layer_idxr   r   r   r
   Únum_key_value_groupsÚsliding_windowÚfull_attentionÚsliding_attentionr   é   Úsinkséÿÿÿÿéþÿÿÿ)ÚdimT)r*   Úkeepdim)r*   Údtype.)ÚpopÚupdater!   Ú	transposeÚ	unsqueezeÚhasattrr   r"   Ú
isinstanceÚdictÚgetattrÚtorchÚmatmulr'   r   r   r   ÚcatÚmaxÚvaluesr   Ú
functionalÚsoftmaxÚfloat32Útor,   Ú
contiguous)r   r   r   r   r   r   Úkwargsr   r#   Ú
layer_typeÚcausal_maskÚattn_weightsr'   Úattn_outputs                 r   Úeager_paged_attention_forwardrD      sE  € ð )/¯
©
°7¸DÓ(A€EØÑà—\‘\ØØØ×&Ñ&Ø˜lÑ+Ø˜}Ñ-ð "ð 
‰
ˆð �m‰m˜A˜qÓ!×+Ñ+¨AÓ.ˆØ—‘  1Ó%×/Ñ/°Ó2ˆô ˆvÐ-×.Ñ.Ü˜×8Ñ8Ó9ˆÜ˜%×!<Ñ!<Ó=ˆô �.¤$×'Ñ'Ü  Ð)9¸1Ó=ˆØ)7¸1Ó)<ÀÑ@VÑ%Ð\oˆ
Ø$Ñ0‰à$ˆä—<’< §}¡}°Q¸Ó':Ó;¸gÑE€LØÑØ#Ñ1ˆô ˆv�w×Ñà—‘×$Ñ$ Q¨¨A¨qÓ1×8Ñ8¸¿¹ÀQ¹ÈÈUÏ[É[ÐY[É_Ð^`ÓaˆÜ—y’y ,Ð!6¸BÑ?ˆà#×&6Ñ&6¸2ÀtÐ&6Ð&L×&SÑ&SÑSˆä—}‘}×,Ñ,¨\¸rÌÏÉÐ,ÐW×ZÑZÐ[`×[fÑ[fÓgˆØ# C¨¨"¨ HÑ-‰ä—}‘}×,Ñ,¨\¸rÌÏÉÐ,ÐW×ZÑZÐ[`×[fÑ[fÓgˆä—,’,˜|Ó3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ$Ð$r   )
r5   r   Ú$generation.continuous_batching.cacher   ÚTensorÚintr   ÚModuleÚfloatrD   © r   r   Ú<module>rK      sŠ   ðÛ Ý å Fð	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ô 	Uð8%Ø�I‰Ið8%à�<‰<ð8%ð 
�‰ð8%ð �<‰<ð	8%ð
 —L‘L 4Ñ'ð8%ð õ8%r   