§
    [�’jÆ  ã                   ód  — d dl Z ddlmZmZ ddlmZ  ej        e¦  «        Z e¦   «         Z	de j
        de j        j        de j        fd„Z	 	 	 	 	 	 dde j        j        de j
        d
e j
        de j
        de j
        dz  dededz  dedz  dedz  dedz  de j
        dz  dee j
        df         fd„ZdS )é    Né   )Ú_flash_attention_forwardÚ!flash_attn_supports_top_left_mask)ÚloggingÚqueryÚmoduleÚreturnc                 óD  — | j         t          j        k    rŠ| j        j        }t          j        |¦  «        rt          j        |¦  «        S t          |j        d¦  «        r|j        j         S t          d„ | 
                    ¦   «         D ¦   «         ¦  «        j        j         S dS )ziIf the query is in float32, return a target dtype compatible with flash attention. Return None otherwise.Ú_is_quantizedc              3   óX   K  — | ]%}t          |t          j        j        ¦  «        ¯!|V — Œ&d S )N)Ú
isinstanceÚtorchÚnnÚLinear)Ú.0Úlayers     úWC:\Projects\DSCons\.venv\Lib\site-packages\transformers\integrations\flash_attention.pyú	<genexpr>z#get_target_dtype.<locals>.<genexpr>   s8   è è € ÐbÐb %½zÈ%ÕQVÔQYÔQ`Ñ?aÔ?aÐb˜ÐbÐbÐbÐbÐbÐbó    N)Údtyper   Úfloat32ÚdeviceÚtypeÚis_autocast_enabledÚget_autocast_dtypeÚhasattrÚconfigÚnextÚmodulesÚweight)r   r   Údevice_types      r   Úget_target_dtyper"      s’   € à„{•e”mÒ#Ð#Ø”lÔ'ˆÝÔ$ [Ñ1Ô1ð 	pÝÔ+¨KÑ8Ô8Ð8å�V”] OÑ4Ô4ð 	pØ”=Ô&Ð&åÐbÐb¨6¯>ª>Ñ+;Ô+;ÐbÑbÔbÑbÔbÔiÔoÐoØˆ4r   ç        ÚkeyÚvalueÚattention_maskÚdropoutÚscalingÚsliding_windowÚsoftcapÚ	is_causalÚs_auxc                 ó  — |                      dd¦  «        rt                               d¦  «         |j        d         }t	          d„ |j        D ¦   «         ¦  «        rt          d¦  «        ‚|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|j        d         |j        d         }}||k    r*t          j        j	         
                    |d	||z
  g¦  «        }t          || ¦  «        }|	�|	n| j        }	t          ||||f||	||||t          || j        j        t#          | d
¦  «        r| j        nd |
�|
                     |j        ¦  «        nd dœ|¤Ž}||k    r|dd |…f         }|d fS )NÚoutput_attentionsFz‚Flash Attention does not support `output_attentions=True`. Please set your attention to `eager` if you want any of these features.r   c              3   ó"   K  — | ]
}|d k    V — ŒdS )r   N© )r   Údims     r   r   z*flash_attention_forward.<locals>.<genexpr>1   s&   è è € Ð
+Ð
+˜ˆ3�!Š8Ð
+Ð
+Ð
+Ð
+Ð
+Ð
+r   z•Tensor query has shape  with a zero dimension.
FlashAttention does not support inputs with dim=0.
Please check your input shapes or use SDPA instead.é   éÿÿÿÿr   Ú	layer_idx)Úquery_lengthr+   r'   Úsoftmax_scaler)   r*   Úuse_top_left_maskÚtarget_dtypeÚattn_implementationr4   r,   .)ÚgetÚloggerÚwarning_onceÚshapeÚanyÚ
ValueErrorÚ	transposer   r   Ú
functionalÚpadr"   r+   r   Ú_use_top_left_maskr   Ú_attn_implementationr   r4   Útor   )r   r   r$   r%   r&   r'   r(   r)   r*   r+   r,   ÚkwargsÚseq_lenÚhead_dimÚ
v_head_dimr8   Úattn_outputs                    r   Úflash_attention_forwardrK      sÛ  € ð ‡z‚zÐ% uÑ-Ô-ð 
Ý×ÒðWñ	
ô 	
ð 	
ð Œk˜!Œn€Gå
Ð
+Ð
+˜uœ{Ð
+Ñ
+Ô
+Ñ+Ô+ð 
ÝðBñ
ô 
ð 	
ð �OŠO˜A˜qÑ!Ô!€EØ
�-Š-˜˜1Ñ
Ô
€CØ�OŠO˜A˜qÑ!Ô!€Eð !œ; rœ?¨E¬K¸¬Oˆj€HØ�XÒÐÝ”Ô#×'Ò'¨°°8¸jÑ3HÐ/IÑJÔJˆõ $ E¨6Ñ2Ô2€Lð 'Ð2�	�	¸Ô8H€Iå*ØØØØð	ð
 ØØØØ%ØÝ,Ø!Ø"œMÔ>Ý&-¨f°kÑ&BÔ&BÐL�&Ô"Ð"Èð Ð ð �HŠH�U”[Ñ!Ô!Ð!àð%ð ð( ð)ð €Kð. �XÒÐØ! # {¨
 {Ð"2Ô3ˆà˜ÐÐr   )r#   NNNNN)r   Úmodeling_flash_attention_utilsr   r   Úutilsr   Ú
get_loggerÚ__name__r;   rC   ÚTensorr   ÚModuler   r"   ÚfloatÚintÚboolÚtuplerK   r0   r   r   ú<module>rV      s~  ðØ €€€à hÐ hÐ hÐ hÐ hÐ hÐ hÐ hØ Ð Ð Ð Ð Ð ð 
ˆÔ	˜HÑ	%Ô	%€à6Ð6Ñ8Ô8Ð ð˜EœLð °%´(´/ð ÀeÄkð ð ð ð ð( Ø Ø!%Ø Ø!Ø!%ðLð LØŒHŒOðLàŒ<ðLð 
ŒðLð Œ<ð	Lð
 ”L 4Ñ'ðLð ðLð �T‰\ðLð ˜$‘JðLð �T‰\ðLð �d‰{ðLð Œ<˜$ÑðLð ˆ5Œ<˜ÐÔðLð Lð Lð Lð Lð Lr   