§
    ‚Štj7  ã                   óà   — d dl Z d dlZd dlZddlmZ  e¦   «         rd dlmZ dZdZ e	 ej
        de¬¦  «        ¦  «        Zeeefvr ed¦  «        ‚i Zd	„ Zd
„ Z	 	 	 dd„Z	 	 	 	 	 dd„Zd„ ZdS )é    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                 óº   — | t           vrFt          j        t          j        ddg| ¬¦  «        d¬¦  «                             ¦   «         t           | <   t           |          S )z6Get or create attention mask for the specified device.i   ©Údeviceé   )Údiagonal)ÚATTN_MASK_NPU_CACHEÚtorchÚtriuÚonesÚboolr
   s    úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/integrations/npu_flash_attention.pyÚget_attn_mask_npur   (   sT   € àÕ(Ð(Ð(Ý&+¤jµ´¸TÀ4¸LÐQWÐ1XÑ1XÔ1XÐcdÐ&eÑ&eÔ&e×&jÒ&jÑ&lÔ&lÕ˜FÑ#Ý˜vÔ&Ð&ó    c                  óB   — t          ¦   «         rt          t          k    nd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   ç        Fc                 ó8  — d|z
  }|€"dt          j        | j        d         ¦  «        z  }|s*| j        d         }t          | |||d||¬¦  «        d         }	nDt	          | j        ¦  «        }
| j        d         }t          | |||d|||
t          ¬¦	  «	        d         }	|	S )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_funcr1   3   s¿   € ð �i‘€IàÐØ�dœi¨¬°¬Ñ4Ô4Ñ4ˆàð Ø”7˜1”:ˆÝ% a¨¨A¨x¸È9Ð\iÐjÑjÔjÐklÔmˆˆå)¨!¬(Ñ3Ô3ˆØ”7˜1”:ˆÝ%ØØØØØØØØ$Ý#ð

ñ 

ô 

ð ô
ˆð €Mr   c
                 ó   — d|z
  }|€"dt          j        | j        d         ¦  «        z  }|	sÄ| j        d         }t          | |||d d ||dt	          |dd …                              ¦   «                              ¦   «                              ¦   «         ¦  «        t	          |dd …                              ¦   «                              ¦   «                              ¦   «         ¦  «        ¬¦  «        d         }nÞt          | j	        ¦  «        }| j        d         }t          | |||d d |||dt	          |dd …                              ¦   «                              ¦   «                              ¦   «         ¦  «        t	          |dd …                              ¦   «                              ¦   «                              ¦   «         ¦  «        t          ¬¦  «        d         }|S )Nr   r   r   ÚTND)Úpser"   r!   r    Úinput_layoutÚactual_seq_qlenÚactual_seq_kvlenr   )	r4   Úpadding_maskr"   r!   r    r5   r6   r7   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/   r0   s                  r   Únpu_flash_attn_varlen_funcrA   V   s½  € ð �i‘€IàÐØ�dœi¨¬°¬Ñ4Ô4Ñ4ˆàð  Ø”7˜1”:ˆÝ%ØØØØØØØØØÝ! ,¨q¨r¨rÔ"2×"6Ò"6Ñ"8Ô"8×">Ò">Ñ"@Ô"@×"GÒ"GÑ"IÔ"IÑJÔJÝ" <°°°Ô#3×#7Ò#7Ñ#9Ô#9×#?Ò#?Ñ#AÔ#A×#HÒ#HÑ#JÔ#JÑKÔKð
ñ 
ô 
ð ôˆˆõ *¨!¬(Ñ3Ô3ˆØ”7˜1”:ˆÝ%ØØØØØØØ$ØØØÝ! ,¨q¨r¨rÔ"2×"6Ò"6Ñ"8Ô"8×">Ò">Ñ"@Ô"@×"GÒ"GÑ"IÔ"IÑJÔJÝ" <°°°Ô#3×#7Ò#7Ñ#9Ô#9×#?Ò#?Ñ#AÔ#A×#HÒ#HÑ#JÔ#JÑKÔKÝ#ð
ñ 
ô 
ð ôˆð  €Mr   c                  ó    — t          d¦  «        ‚)Nz.npu_flash_attn_with_kvcache is not implemented)ÚNotImplementedErrorr   r   r   Únpu_flash_attn_with_kvcacherD   Ž   s   € Ý
ÐNÑ
OÔ
OÐOr   )r   NF)NNr   NF)r$   Úosr   Úutils.import_utilsr   Ú	torch_npur   r   Ú#DOWN_RIGHT_ALIGNED_CAUSAL_MASK_MODEÚintÚgetenvr   Ú
ValueErrorr   r   r   r1   rA   rD   r   r   r   ú<module>rL      sA  ðð €€€Ø 	€	€	€	à €€€à 7Ð 7Ð 7Ð 7Ð 7Ð 7ð ÐÑÔð /Ø.Ð.Ð.Ð.Ð.Ð.ð
 %&Ð !Ø&'Ð #àˆc�)�"”)Ð1Ð;^Ð_Ñ_Ô_Ñ`Ô`€ØÐ8Ð:]Ð^Ð^Ð^Ø
ˆ*ð	1ñô ð ð
 Ð ð'ð 'ð 'ðcð cð cð ØØð ð  ð  ð  ðR ØØØØð4ð 4ð 4ð 4ðpPð Pð Pð Pð Pr   