ó
    pyüi7  ã                   óÜ   • S SK r S SKrS SKrSSKJr  \" 5       (       a  S SKJr  SrSr\	" \R                  " S\S95      r\\\4;  a  \" S5      e0 rS	 rS
 r   SS jr     SS jrS rg)é    Né   )Úis_torch_npu_available)Únpu_fusion_attentioné   ÚNPU_FA2_SPARSE_MODE)Údefaultz…Environment variable `NPU_FA2_SPARSE_MODE` can only be set as 2 (top-left aligned causal mask) or 3 (down-right aligned causal mask).c                 ó¦   • U [         ;  a?  [        R                  " [        R                  " SS/U S9SS9R	                  5       [         U '   [         U    $ )z6Get or create attention mask for the specified device.i   ©Údeviceé   )Údiagonal)ÚATTN_MASK_NPU_CACHEÚtorchÚtriuÚonesÚboolr
   s    Új/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/integrations/npu_flash_attention.pyÚget_attn_mask_npur   (   sF   € àÔ(Ó(Ü&+§j¢j´·²¸TÀ4¸LÐQWÑ1XÐcdÑ&e×&jÑ&jÓ&lÔ˜FÑ#Ü˜vÑ&Ð&ó    c                  ó>   • [        5       (       a  [        [        :H  $ S$ )NF)r   ÚSPARSE_MODEÚ!TOP_LEFT_ALIGNED_CAUSAL_MASK_MODE© r   r   Ú'is_npu_fa2_top_left_aligned_causal_maskr   /   s   € Ü?U×?WÑ?WŒ;Ô;Ñ;ÐbÐ]bÐbr   c                 ó(  • SU-
  nUc&  S[         R                  " U R                  S   5      -  nU(       d   U R                  S   n[        XX(SXtS9S   n	U	$ [	        U R
                  5      n
U R                  S   n[        U UUUSUUU
[        S9	S   n	U	$ )Nç      ð?éÿÿÿÿr   ÚBSND)Ú	keep_probÚscaler   )r   r    Ú
atten_maskÚsparse_mode)ÚmathÚsqrtÚshaper   r   r   r   )ÚqÚkÚvÚ	dropout_pÚsoftmax_scaleÚcausalÚkwargsr   Úhead_numÚoutputÚattn_mask_npus              r   Únpu_flash_attn_funcr0   3   s®   € ð �i‘€IàÑØœdŸiši¨¯©°©Ó4Ñ4ˆæØ—7‘7˜1‘:ˆÜ% a¨A¸È9ÑjÐklÑmˆð  €Mô *¨!¯(©(Ó3ˆØ—7‘7˜1‘:ˆÜ%ØØØØØØØØ$Ü#ñ

ð ñ
ˆð €Mr   c
                 óî  • SU-
  nUc&  S[         R                  " U R                  S   5      -  nU	(       d“  U R                  S   n[        U UUUS S UUS[	        USS  R                  5       R                  5       R                  5       5      [	        USS  R                  5       R                  5       R                  5       5      S9S   nU$ [        U R                  5      nU R                  S   n[        U UUUS S UUUS[	        USS  R                  5       R                  5       R                  5       5      [	        USS  R                  5       R                  5       R                  5       5      [        S9S   nU$ )Nr   r   r   ÚTND)Úpser!   r    r   Úinput_layoutÚactual_seq_qlenÚactual_seq_kvlenr   )	r3   Úpadding_maskr!   r    r   r4   r5   r6   r"   )r#   r$   r%   r   ÚtupleÚcpuÚnumpyÚtolistr   r   r   )r&   r'   r(   Úcu_seqlens_qÚcu_seqlens_kÚmax_seqlen_qÚmax_seqlen_kr)   r*   r+   r,   r   r-   r.   r/   s                  r   Únpu_flash_attn_varlen_funcr@   V   sv  € ð �i‘€IàÑØœdŸiši¨¯©°©Ó4Ñ4ˆæØ—7‘7˜1‘:ˆÜ%ØØØØØØØØØÜ! ,¨q¨rÐ"2×"6Ñ"6Ó"8×">Ñ">Ó"@×"GÑ"GÓ"IÓJÜ" <°°Ð#3×#7Ñ#7Ó#9×#?Ñ#?Ó#A×#HÑ#HÓ#JÓKñ
ð ñˆð@ €Mô% *¨!¯(©(Ó3ˆØ—7‘7˜1‘:ˆÜ%ØØØØØØØ$ØØØÜ! ,¨q¨rÐ"2×"6Ñ"6Ó"8×">Ñ">Ó"@×"GÑ"GÓ"IÓJÜ" <°°Ð#3×#7Ñ#7Ó#9×#?Ñ#?Ó#A×#HÑ#HÓ#JÓKÜ#ñ
ð ñˆð  €Mr   c                  ó   • [        S5      e)Nz.npu_flash_attn_with_kvcache is not implemented)ÚNotImplementedErrorr   r   r   Únpu_flash_attn_with_kvcacherC   Ž   s   € Ü
ÐNÓ
OÐOr   )ç        NF)NNrD   NF)r#   Úosr   Úutils.import_utilsr   Ú	torch_npur   r   Ú#DOWN_RIGHT_ALIGNED_CAUSAL_MASK_MODEÚintÚgetenvr   Ú
ValueErrorr   r   r   r0   r@   rC   r   r   r   Ú<module>rL      s¨   ðó Û 	ã å 7ñ ×ÑÝ.ð
 %&Ð !Ø&'Ð #á�"—)’)Ð1Ð;^Ñ_Ó`€ØÐ8Ð:]Ð^Ó^Ù
ð	1óð ð
 Ð ò'òcð ØØô ðR ØØØØô4ópPr   