§
    ‚ŠtjÙ  ã            
       óò  — d Z ddlZddlmZ ddlmZ ddlZddlmZ ddlm	Z	m
Z
mZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlmZmZ ddlmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1  e¦   «         rddlm2Z2  e-j3        e4¦  «        Z5 G d„ dej6        ¦  «        Z7d„ Z8dAd„Z9 G d„ dej:        ¦  «        Z;dej<        de=d ej>        d!ej<        fd"„Z?d#ej<        d$ej<        d%e@d&eAd!ej<        f
d'„ZB G d(„ d)ej:        ¦  «        ZC G d*„ d+eC¦  «        ZD G d,„ d-ej:        ¦  «        ZEeCeCeDd.œZF G d/„ d0e¦  «        ZGe, G d1„ d2e*¦  «        ¦   «         ZHe, G d3„ d4eH¦  «        ¦   «         ZI e,d5¬6¦  «         G d7„ d8eHe¦  «        ¦   «         ZJ e,d9¬6¦  «         G d:„ d;eH¦  «        ¦   «         ZKe, G d<„ d=eH¦  «        ¦   «         ZLe, G d>„ d?eH¦  «        ¦   «         ZMg d@¢ZNdS )BzPyTorch Falcon model.é    N)ÚCallable)ÚOptional)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚ	LayerNormÚMSELoss)Ú
functionalé   )Úinitialization)Úget_activation)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_mask)Ú!flash_attn_supports_top_left_maskÚis_flash_attn_available)ÚGradientCheckpointingLayer)Ú)BaseModelOutputWithPastAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentionsÚQuestionAnsweringModelOutputÚ SequenceClassifierOutputWithPastÚTokenClassifierOutput)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚPreTrainedModel)Úauto_docstringÚlogging)Úmaybe_autocasté   )ÚFalconConfig)Ú_flash_attention_forwardc                   ó2   — e Zd Zdej        dej        fd„ZdS )ÚFalconLinearÚinputÚreturnc                 óF   — || j         j        z  }| j        €|S || j        z   S ©N)ÚweightÚTÚbias)Úselfr%   Úhidden_statess      úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/falcon/modeling_falcon.pyÚforwardzFalconLinear.forward=   s+   € Ø ¤¤Ñ-ˆØŒ9ÐØ Ð Ø˜tœyÑ(Ð(ó    N)Ú__name__Ú
__module__Ú__qualname__ÚtorchÚTensorr/   © r0   r.   r$   r$   <   s:   € € € € € ð)˜Uœ\ð )¨e¬lð )ð )ð )ð )ð )ð )r0   r$   c                 óœ   — | dd| j         d         dz  …f         }| d| j         d         dz  d…f         }t          j        | |fd¬¦  «        S )z*Rotates half the hidden dims of the input..Néÿÿÿÿé   ©Údim)Úshaper4   Úcat)ÚxÚx1Úx2s      r.   Úrotate_halfrA   E   s]   € à	
ˆ3Ð"�!”'˜"”+ Ñ"Ð"Ð"Ô	#€BØ	
ˆ3�”˜”˜qÑ Ð"Ð"Ð"Ô	#€BÝŒ9�r�c˜2�Y BÐ'Ñ'Ô'Ð'r0   c                 ó¾   — |                      |¦  «        }|                      |¦  «        }| |z  t          | ¦  «        |z  z   }||z  t          |¦  «        |z  z   }||fS )a…  Applies Rotary Position Embedding to the query and key tensors.

    Args:
        q (`torch.Tensor`): The query tensor.
        k (`torch.Tensor`): The key tensor.
        cos (`torch.Tensor`): The cosine part of the rotary embedding.
        sin (`torch.Tensor`): The sine part of the rotary embedding.
        unsqueeze_dim (`int`, *optional*, defaults to 1):
            The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
            sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
            that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
            k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
            cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
            the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
    Returns:
        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
    )Ú	unsqueezerA   )ÚqÚkÚcosÚsinÚunsqueeze_dimÚq_embedÚk_embeds          r.   Úapply_rotary_pos_embrK   M   sc   € ð$ �-Š-˜Ñ
&Ô
&€CØ
�-Š-˜Ñ
&Ô
&€CØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�GÐÐr0   c                   óÔ   ‡ — e Zd ZU ej        ed<   ddefˆ fd„Ze	 	 	 ddedz  de	d         de
dz  ded	ef         fd
„¦   «         Z ej        ¦   «         ed„ ¦   «         ¦   «         Zˆ xZS )ÚFalconRotaryEmbeddingÚinv_freqNÚconfigc                 ó²  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        || _        | j        j        d         | _        | j        }| j        dk    rt          | j                 } || j        |¦  «        \  }| _
        |                      d|d¬¦  «         |                      d|                     ¦   «         d¬¦  «         d S )NÚ	rope_typeÚdefaultrN   F)Ú
persistentÚoriginal_inv_freq)ÚsuperÚ__init__Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenrO   Úrope_parametersrQ   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚclone)r,   rO   ÚdeviceÚrope_init_fnrN   Ú	__class__s        €r.   rV   zFalconRotaryEmbedding.__init__j   sÊ   ø€ Ý‰Œ×ÒÑÔÐØ"(Ô"@ˆÔØ$*Ô$BˆÔ!àˆŒàœÔ4°[ÔAˆŒØ!%Ô!EˆØŒ>˜YÒ&Ð&Ý.¨t¬~Ô>ˆLØ+7¨<¸¼ÀVÑ+LÔ+LÑ(ˆ�$Ô(à×Ò˜Z¨¸eÐÑDÔDÐDØ×ÒÐ0°(·.².Ñ2BÔ2BÈuÐÑUÔUÐUÐUÐUr0   r_   ztorch.deviceÚseq_lenr&   ztorch.Tensorc                 óü   — | j         d         }t          | dd¦  «        p| j        | j        z  }d}d|t	          j        d|dt          j        ¬¦  «                             |t          j        ¬¦  «        |z  z  z  }||fS )	a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚhead_dimNç      ð?r   r9   ©Údtype©r_   rh   )	rZ   ÚgetattrÚhidden_sizeÚnum_attention_headsr4   ÚarangeÚint64ÚtoÚfloat)rO   r_   rb   Úbaser;   Úattention_factorrN   s          r.   r[   z5FalconRotaryEmbedding.compute_default_rope_parametersz   sŒ   € ð& Ô% lÔ3ˆÝ�f˜j¨$Ñ/Ô/Ðc°6Ô3EÈÔIcÑ3cˆàÐð Ø•U”\ ! S¨!µ5´;Ð?Ñ?Ô?×BÒBÈ&ÕX]ÔXcÐBÑdÔdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r0   c                 óN  — | j         d d d …d f                              ¦   «                              |j        d         dd¦  «                             |j        ¦  «        }|d d …d d d …f                              ¦   «         }t          |j        j        t          ¦  «        r|j        j        dk    r|j        j        nd}t          |d¬¦  «        5  |                     ¦   «         |                     ¦   «         z   
                    dd¦  «        }t          j        ||fd¬	¦  «        }|                     ¦   «         | j        z  }|                     ¦   «         | j        z  }	d d d ¦  «         n# 1 swxY w Y   |                     |j        ¬
¦  «        |	                     |j        ¬
¦  «        fS )Nr   r8   r    ÚmpsÚcpuF)Údevice_typeÚenabledr9   r:   rg   )rN   rp   Úexpandr<   ro   r_   Ú
isinstanceÚtypeÚstrr   Ú	transposer4   r=   rF   r\   rG   rh   )
r,   r>   Úposition_idsÚinv_freq_expandedÚposition_ids_expandedrv   ÚfreqsÚembrF   rG   s
             r.   r/   zFalconRotaryEmbedding.forward˜   s·  € ð !œM¨$°°°°4¨-Ô8×>Ò>Ñ@Ô@×GÒGÈÔHZÐ[\ÔH]Ð_aÐcdÑeÔe×hÒhÐijÔiqÑrÔrÐØ ,¨Q¨Q¨Q°°a°a°a¨ZÔ 8× >Ò >Ñ @Ô @Ðå'1°!´(´-ÅÑ'EÔ'EÐkÈ!Ì(Ì-Ð[`ÒJ`ÐJ`�a”h”m�mÐfkˆÝ¨¸UÐCÑCÔCð 	5ð 	5Ø&×,Ò,Ñ.Ô.Ð1F×1LÒ1LÑ1NÔ1NÑN×YÒYÐZ[Ð]^Ñ_Ô_ˆEÝ”)˜U E˜N°Ð3Ñ3Ô3ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCð		5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð �vŠv˜AœGˆvÑ$Ô$ c§f¢f°1´7 fÑ&;Ô&;Ð;Ð;s   ÃBE&Å&E*Å-E*r(   )NNN)r1   r2   r3   r4   r5   Ú__annotations__r!   rV   Ústaticmethodr   ÚintÚtuplerp   r[   Úno_gradr   r/   Ú__classcell__©ra   s   @r.   rM   rM   g   sù   ø€ € € € € € ØŒlÐÐÑðVð V˜|ð Vð Vð Vð Vð Vð Vð  à&*Ø+/Ø"ð*ð *Ø˜tÑ#ð*à˜Ô(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ô	%ð	*ð *ð *ñ „\ð*ð: €U„]�_„_Øð<ð <ñ Ôñ „_ð<ð <ð <ð <ð <r0   rM   Úattention_maskÚ	num_headsrh   r&   c                 óÂ  — | j         \  }}dt          j        t          j        |¦  «        ¦  «        z  }t	          j        ddt          j        |¦  «        dz
   z   z  | j        t          j        ¬¦  «        }t	          j        dd|z   | j        t          j	        ¬¦  «        }t	          j
        ||¦  «        }||k    r²t	          j        ddt          j        d|z  ¦  «        dz
   z   z  | j        t          j        ¬¦  «        }	t          |||z
  ¦  «        }
t	          j        ddd|
z  z   d| j        t          j	        ¬¦  «        }t	          j        |t	          j
        |	|¦  «        gd¬¦  «        }|                      d¬¦  «        dz
  | z  d d …d d d …f         }|d                              ¦   «         |z  }|                     ||z  d|¦  «                             |¦  «        S )	Nr9   r   ri   r    r   r:   r8   ).N)r<   ÚmathÚfloorÚlog2r4   Útensorr_   Úfloat32rm   Úint32ÚpowÚminr=   ÚcumsumÚbfloat16Úreshapero   )r‰   rŠ   rh   Ú
batch_sizeÚ
seq_lengthÚclosest_power_of_2rq   ÚpowersÚslopesÚ
extra_baseÚnum_remaining_headsÚextra_powersÚarange_tensorÚalibis                 r.   Úbuild_alibi_tensorr¡   ¨   sä  € Ø+Ô1Ñ€J�
Ø�dœj­¬°9Ñ)=Ô)=Ñ>Ô>Ñ>ÐÝŒ<Ø	�•t”yÐ!3Ñ4Ô4°qÑ8Ð9Ñ9Ð:Ñ;ÀNÔDYÕafÔanðñ ô €Dõ Œ\˜!˜QÐ!3Ñ3¸NÔ<QÕY^ÔYdÐeÑeÔe€FÝŒY�t˜VÑ$Ô$€Fà˜YÒ&Ð&Ý”\Ø�A�4œ9 QÐ);Ñ%;Ñ<Ô<¸qÑ@ÐAÑAÐBÑCÈNÔLaÕinÔivð
ñ 
ô 
ˆ
õ "Ð"4°iÐBTÑ6TÑUÔUÐÝ”| A q¨1Ð/BÑ+BÑ'BÀAÈnÔNcÕkpÔkvÐwÑwÔwˆÝ”˜F¥E¤I¨j¸,Ñ$GÔ$GÐHÈaÐPÑPÔPˆð %×+Ò+°Ð+Ñ3Ô3°aÑ7¸>ÑIÈ1È1È1ÈdÐTUÐTUÐTUÈ:ÔV€MØ�9Ô×&Ò&Ñ(Ô(¨=Ñ8€EØ�=Š=˜ iÑ/°°JÑ?Ô?×BÒBÀ5ÑIÔIÐIr0   r>   ÚresidualÚprobÚtrainingc                 ó>   — t          j        | ||¬¦  «        }||z   }|S )a
  
    Dropout add function

    Args:
        x (`torch.tensor`):
            input tensor
        residual (`torch.tensor`):
            residual tensor
        prob (`float`):
            dropout probability
        training (`bool`):
            training mode
    )Úpr¤   )ÚFÚdropout)r>   r¢   r£   r¤   Úouts        r.   Údropout_addrª   Å   s(   € õ Œ)�A˜¨Ð
1Ñ
1Ô
1€CØ
�S‰.€CØ€Jr0   c                   ó,  ‡ — e Zd Zddefˆ fd„Zdej        deej        ej        ej        f         fd„Zdej        dej        fd„Z		 	 	 	 	 dd
ej        dej        dz  dej        dej
        dz  dedz  dededeej        ej        f         dz  fd„Zˆ xZS )ÚFalconAttentionNrO   c                 óî  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        | j        | j        z  | _        | j        | _        |j        | _        |j	        | _	        d| _
        || _        |€(t                               d| j        j        › d�¦  «         | j        | j        z  | j        k    r t!          d| j        › d| j        › d�¦  «        ‚dt#          j        | j        ¦  «        z  | _        | j        | _        |j        r|j        dz  |j        z   | j        z  }n$|j        r| j        d| j        z  z   }n
d	| j        z  }t1          | j        ||j        ¬
¦  «        | _        |j        | _        |j        | _        t1          | j        | j        |j        ¬
¦  «        | _        t9          j        |j        ¦  «        | _        | j        s| j        s|j        nd| _        d S )NTzInstantiating z¹ without passing a `layer_idx` is not recommended and will lead to errors during the forward call if caching is used. Please make sure to provide a `layer_idx` when creating this class.zA`hidden_size` must be divisible by num_heads (got `hidden_size`: z and `num_heads`: z).rf   r9   r   ©r+   r    )rU   rV   rO   rk   rl   rŠ   re   Ú
split_sizeÚhidden_dropoutrW   Ú	is_causalÚ	layer_idxÚloggerÚwarning_oncera   r1   Ú
ValueErrorrŒ   ÚsqrtÚinv_norm_factorÚbetaÚnew_decoder_architectureÚnum_kv_headsÚmulti_queryr$   r+   Úquery_key_valueÚdenser   ÚDropoutÚattention_dropout)r,   rO   r²   Úqkv_out_dimra   s       €r.   rV   zFalconAttention.__init__Ù   s  ø€ Ý‰Œ×ÒÑÔÐàˆŒØ!Ô-ˆÔØÔ3ˆŒØÔ(¨D¬NÑ:ˆŒØÔ*ˆŒØ$Ô3ˆÔØ'-Ô'EˆÔ$àˆŒØ"ˆŒØÐÝ×Òð, ¤Ô!8ð ,ð ,ð ,ñô ð ð Œ=˜4œ>Ñ)¨TÔ-=Ò=Ð=Ýð'ÐTXÔTdð 'ð 'Ø”Nð'ð 'ð 'ñô ð ð  #¥T¤Y¨t¬}Ñ%=Ô%=Ñ=ˆÔØÔ(ˆŒ	ØÔ*ð 	/Ø!Ô.°Ñ2°VÔ5OÑOÐSWÔS`Ñ`ˆKˆKØÔð 	/ØÔ*¨Q°´Ñ->Ñ>ˆKˆKà˜dÔ.Ñ.ˆKÝ+¨DÔ,<¸kÐPVÔP[Ð\Ñ\Ô\ˆÔØ(.Ô(GˆÔ%Ø!Ô-ˆÔÝ! $Ô"2°DÔ4DÈ6Ì;ÐWÑWÔWˆŒ
Ý!#¤¨FÔ,DÑ!EÔ!EˆÔØ48Ô4QÐqÐY]ÔYiÐq˜FÔ/Ð/ÐpqˆÔÐÐr0   Ú	fused_qkvr&   c                 óø  — | j         r¿|j        \  }}}|                     ||d| j        | j        z  dz   | j        ¦  «        }|dd…dd…dd…dd…f         }|dd…dd…dd…dgf         }|dd…dd…dd…dgf         }t          j        ||j        ¦  «        }t          j        ||j        ¦  «        }d„ |||fD ¦   «         \  }}}|||fS | j        sT|j        \  }	}
}|                     |	|
| j        d| j        ¦  «        }|dddd…f         |dd	dd…f         |dddd…f         fS |j        \  }	}
}|                     |	|
| j        dz   | j        ¦  «        }|ddd…dd…f         |ddgdd…f         |ddgdd…f         fS )
a¨  
        Split the last dimension into (num_heads, head_dim), results share same memory storage as `fused_qkv`

        Args:
            fused_qkv (`torch.tensor`): [batch_size, seq_length, num_heads * 3 * head_dim]

        Returns:
            query: [batch_size, seq_length, num_heads, head_dim] key: [batch_size, seq_length, num_heads, head_dim]
            value: [batch_size, seq_length, num_heads, head_dim]
        r8   r9   Néþÿÿÿc                 ó:   — g | ]}|                      d d¦  «        ‘ŒS )r9   r   )Úflatten)Ú.0r>   s     r.   ú
<listcomp>z0FalconAttention._split_heads.<locals>.<listcomp>  s$   € Ð NÐ NÐ N°Q §¢¨1¨a¡¤Ð NÐ NÐ Nr0   r   .r   r    )	r¹   r<   ÚviewrŠ   rº   re   r4   Úbroadcast_tor»   )r,   rÁ   Úbatchrb   Ú_ÚqkvÚqueryÚkeyÚvaluer—   r˜   Úthree_times_hidden_sizes               r.   Ú_split_headszFalconAttention._split_heads  só  € ð Ô(ð 	\Ø )¤ÑˆE�7˜AØ—.’. ¨°°T´^ÀtÔGXÑ5XÐ[\Ñ5\Ð^bÔ^kÑlÔlˆCØ˜˜˜˜1˜1˜1˜a˜a˜a  " ˜Ô%ˆEØ�a�a�a˜˜˜˜A˜A˜A ˜t�mÔ$ˆCØ˜˜˜˜1˜1˜1˜a˜a˜a " ˜Ô&ˆEÝÔ$ S¨%¬+Ñ6Ô6ˆCÝÔ& u¨e¬kÑ:Ô:ˆEà NÐ N¸5À#ÀuÐ:MÐ NÑ NÔ NÑˆE�3˜Ø˜#˜uÐ$Ð$ØÔ!ð 	\Ø>G¼oÑ;ˆJ˜
Ð$;Ø!Ÿš z°:¸t¼~ÈqÐRVÔR_Ñ`Ô`ˆIØ˜S ! Q Q Q˜YÔ'¨°3¸¸1¸1¸1°9Ô)=¸yÈÈaÐQRÐQRÐQRÈÔ?SÐSÐSà>G¼oÑ;ˆJ˜
Ð$;Ø!Ÿš z°:¸t¼~ÐPQÑ?QÐSWÔS`ÑaÔaˆIØ˜S # 2 # q q q˜[Ô)¨9°S¸2¸$ÀÀÀ°\Ô+BÀIÈcÐTVÐSWÐYZÐYZÐYZÈlÔD[Ð[Ð[r0   r>   c                 óè   — |j         \  }}}|| j        z  }|                     || j        || j        ¦  «        }|                     dddd¦  «        }|                     ||| j        | j        z  ¦  «        S )z÷
        Merge heads together over the last dimension

        Args:
            x (`torch.tensor`): [batch_size * num_heads, seq_length, head_dim]

        Returns:
            torch.tensor: [batch_size, seq_length, num_heads * head_dim]
        r   r9   r    r   )r<   rŠ   rÈ   re   Úpermuter–   )r,   r>   Úbatch_size_and_num_headsr˜   rË   r—   s         r.   Ú_merge_headszFalconAttention._merge_heads#  sv   € ð 34´'Ñ/Ð  *¨aØ-°´Ñ?ˆ
ð �FŠF�:˜tœ~¨z¸4¼=ÑIÔIˆð �IŠI�a˜˜A˜qÑ!Ô!ˆð �yŠy˜ Z°´À$Ä-Ñ1OÑPÔPÐPr0   Fr-   r    r‰   r}   Ú
layer_pastÚ	use_cacheÚoutput_attentionsÚposition_embeddingsc	                 óŒ  — |                       |¦  «        }
| j        r| j        n| j        }|                      |
¦  «        \  }}}|j        \  }}}}|                     dd¦  «                             || j        || j        ¦  «        }|                     dd¦  «                             |||| j        ¦  «        }|                     dd¦  «                             |||| j        ¦  «        }|€|\  }}t          ||||¦  «        \  }}|�| 
                    ||| j        ¦  «        \  }}|j        d         }|�€ | j        j        dk    r@|s>| j        o	|d u o|dk    }t          j        j                             ||||d|¬¦  «        }d }nY||                     dd¦  «        z  }|t'          j        | j        ¦  «        z  }t+          j        ||z   d|j        ¬¦  «        }||z  }|                     || j        || j        ¦  «        }|                     d	ddd
¦  «        }|                     ||| j        | j        z  ¦  «        }|                      |¦  «        }||fS | j        j        dk    r£|s¡| j        o	|d u o|dk    }t          j        j                             ||||| j        r| j        j        nd|¬¦  «        }d }|                     dd¦  «        }|                     ||| j        | j        z  ¦  «        }|                      |¦  «        }�n:||                     dd¦  «        z  }|                     || j        ||¦  «        }|j        }|t          j        k    s|t          j        k    r|                      t          j!        ¦  «        }||                     || j        dd¦  «        z   }|| j"        z  }t+          j        ||z   d|j        ¬¦  «        }|                      |¦  «        }|                     || j        ||¦  «        }||z   #                    d	d¦  «        }|  $                    |¦  «        }|                      |¦  «        }||fS )Nr    r9   rÃ   Úsdpaç        )Ú	attn_maskÚ	dropout_pr±   r8   )r;   rh   r   r   )%r¼   r¹   rŠ   rº   rÑ   r<   r|   r–   re   rK   Úupdater²   rO   Ú_attn_implementationr±   r4   r   r
   Úscaled_dot_product_attentionrŒ   r¶   r§   Úsoftmaxrh   rÈ   rÓ   r½   r¤   r¿   r¦   Úfloat16r•   ro   r�   r·   rÅ   rÕ   )r,   r-   r    r‰   r}   rÖ   r×   rØ   rÙ   ÚkwargsrÁ   rº   Úquery_layerÚ	key_layerÚvalue_layerr—   Úquery_lengthrË   rF   rG   Ú	kv_lengthr±   Úattn_outputÚattention_scoresÚattention_probsÚmatmul_resultÚinput_dtypeÚattention_logitsÚattention_probs_reshapeds                                r.   r/   zFalconAttention.forward<  s–  € ð ×(Ò(¨Ñ7Ô7ˆ	Ø)-Ô)FÐ]�t”~�~ÈDÔL]ˆà04×0AÒ0AÀ)Ñ0LÔ0LÑ-ˆ�i à)4Ô):Ñ&ˆ
�L ! Qà!×+Ò+¨A¨qÑ1Ô1×9Ò9¸*ÀdÄnÐVbÐdhÔdqÑrÔrˆØ×'Ò'¨¨1Ñ-Ô-×5Ò5°jÀ,ÐP\Ð^bÔ^kÑlÔlˆ	Ø!×+Ò+¨A¨qÑ1Ô1×9Ò9¸*ÀlÐT`ÐbfÔboÑpÔpˆàˆ=Ø*‰HˆC�Ý%9¸+ÀyÐRUÐWZÑ%[Ô%[Ñ"ˆK˜àÐ!Ø%/×%6Ò%6°yÀ+ÈtÌ~Ñ%^Ô%^Ñ"ˆI�{à”O BÔ'ˆ	à‰=ØŒ{Ô/°6Ò9Ð9ÐBSÐ9ð
 !œNÐZ¨~ÀÐ/EÐZÈ,ÐYZÒJZ�	Ý#œhÔ1×NÒNØØØØ,Ø!Ø'ð Oñ ô �ð $(Ð Ð à#.°×1DÒ1DÀRÈÑ1LÔ1LÑ#LÐ Ø ¥D¤I¨d¬mÑ$<Ô$<Ñ<Ð å#$¤9Ð-=ÀÑ-NÐTVÐ^kÔ^qÐ#rÑ#rÔ#rÐ à.°Ñ<�à%×*Ò*¨:°t´~À|ÐUYÔUbÑcÔcˆKØ%×-Ò-¨a°°A°qÑ9Ô9ˆKØ%×-Ò-¨j¸,ÈÌÐY]ÔYfÑHfÑgÔgˆKàŸ*š* [Ñ1Ô1ˆKàÐ 0Ð0Ð0ð Œ{Ô/°6Ò9Ð9ÐBSÐ9ð !œNÐZ¨~ÀÐ/EÐZÈ,ÐYZÒJZ�	Ý#œhÔ1×NÒNØØØØ,Ø:>¼-ÐP˜dÔ4Ô6Ð6ÈSØ'ð Oñ ô �ð #'�Ø)×3Ò3°A°qÑ9Ô9�Ø)×1Ò1°*¸lÈDÌNÐ]aÔ]jÑLjÑkÔk�à"Ÿjšj¨Ñ5Ô5�‘à +¨i×.AÒ.AÀ"ÀbÑ.IÔ.IÑ I�ð $1×#5Ò#5°jÀ$Ä.ÐR^Ð`iÑ#jÔ#jÐ ð /Ô4�à¥%¤-Ò/Ð/°;Å%Ä.Ò3PÐ3PØ'7×':Ò':½5¼=Ñ'IÔ'IÐ$à#3°e·j²jÀÈTÌ^Ð]^Ð`bÑ6cÔ6cÑ#cÐ Ø  DÔ$8Ñ8Ð Ý"#¤)Ð,<¸~Ñ,MÐSUÐ]jÔ]pÐ"qÑ"qÔ"q�à"&×"8Ò"8¸Ñ"IÔ"I�ð ,;×+?Ò+?À
ÈDÌNÐ\hÐjsÑ+tÔ+tÐ(ð  8¸+ÑE×NÒNÈqÐRSÑTÔT�ð #×/Ò/°Ñ<Ô<�à"Ÿjšj¨Ñ5Ô5�à Ð/Ð/r0   r(   ©NNFFN)r1   r2   r3   r!   rV   r4   r5   r…   rÑ   rÕ   Ú
LongTensorr   Úboolr/   r‡   rˆ   s   @r.   r¬   r¬   Ø   sp  ø€ € € € € ð(rð (r˜|ð (rð (rð (rð (rð (rð (rðT\ e¤lð \°u¸U¼\È5Ì<ÐY^ÔYeÐ=eÔ7fð \ð \ð \ð \ð@Q˜eœlð Q¨u¬|ð Qð Qð Qð Qð< 15Ø#'ØØ"'ØHLðo0ð o0à”|ðo0ð Œ|˜dÑ"ðo0ð œð	o0ð
 Ô&¨Ñ-ðo0ð ˜D‘Lðo0ð ðo0ð  ðo0ð # 5¤<°´Ð#=Ô>ÀÑEðo0ð o0ð o0ð o0ð o0ð o0ð o0ð o0r0   r¬   c                   óº   ‡ — e Zd ZdZˆ fd„Z	 	 	 	 	 ddej        dej        dz  dej        dej        dz  d	edz  d
e	de	de
ej        ej        f         dz  fd„Zˆ xZS )ÚFalconFlashAttention2aH  
    Falcon flash attention module. This module inherits from `FalconAttention` as the weights of the module stays
    untouched. The only required change would be on the forward pass where it needs to correctly call the public API of
    flash attention and deal with padding tokens in case the input contains any of them.
    c                 ó`   •—  t          ¦   «         j        |i |¤Ž t          ¦   «         | _        d S r(   )rU   rV   r   Ú_flash_attn_uses_top_left_mask)r,   Úargsrä   ra   s      €r.   rV   zFalconFlashAttention2.__init__µ  s6   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)õ
 /PÑ.QÔ.QˆÔ+Ð+Ð+r0   NFr-   r    r‰   r}   rÖ   r×   rØ   rÙ   c	                 ó¼  — |                       |¦  «        }
| j        r| j        n| j        }|                      |
¦  «        \  }}}|j        \  }}}}|                     dd¦  «                             || j        || j        ¦  «        }|                     dd¦  «                             |||| j        ¦  «        }|                     dd¦  «                             |||| j        ¦  «        }|€|\  }}t          ||||¦  «        \  }}|�| 
                    ||| j        ¦  «        \  }}|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|�t          d¦  «        ‚| j        r| j        j        nd}|j        }|j        j        dk    r|j        j        nd}|t&          j        k    r¹t'          j        |¦  «        rt'          j        |¦  «        }n3t/          | j        d¦  «        r| j        j        }n| j         j        j        }t2                               d|› d	�¦  «         |                     |¦  «        }|                     |¦  «        }|                     |¦  «        }t9          |||||||| j        | j        ¬
¦	  «	        }|                     ||| j        | j        z  ¦  «        }|                      |¦  «        }|sd }||fS )Nr    r9   z6`alibi` is not supported when `use_flash_attn` is TruerÜ   rt   ru   Ú_is_quantizedz¾The input hidden states seems to be silently casted in float32, this might be related to the fact you have upcasted embedding or layer norm layers in float32. We will cast back the input in ú.)r}   r¨   r±   Úuse_top_left_mask) r¼   r¹   rŠ   rº   rÑ   r<   r|   r–   re   rK   rß   r²   rµ   r¤   rO   r¿   rh   r_   rz   r4   r�   Úis_autocast_enabledÚget_autocast_dtypeÚhasattrr)   r³   r´   ro   r"   r±   r÷   r½   )r,   r-   r    r‰   r}   rÖ   r×   rØ   rÙ   rä   rÁ   rº   rå   ræ   rç   r—   rè   rË   rF   rG   Úattn_dropoutrî   rv   Útarget_dtyperê   Úattn_weightss                             r.   r/   zFalconFlashAttention2.forward½  s  € ð ×(Ò(¨Ñ7Ô7ˆ	Ø)-Ô)FÐ]�t”~�~ÈDÔL]ˆà04×0AÒ0AÀ)Ñ0LÔ0LÑ-ˆ�i à)4Ô):Ñ&ˆ
�L ! Qà!×+Ò+¨A¨qÑ1Ô1×9Ò9¸*ÀdÄnÐVbÐdhÔdqÑrÔrˆØ×'Ò'¨¨1Ñ-Ô-×5Ò5°jÀ,ÐP\Ð^bÔ^kÑlÔlˆ	Ø!×+Ò+¨A¨qÑ1Ô1×9Ò9¸*ÀlÐT`ÐbfÔboÑpÔpˆàˆ=Ø*‰HˆC�Ý%9¸+ÀyÐRUÐWZÑ%[Ô%[Ñ"ˆK˜àÐ!Ø%/×%6Ò%6°yÀ+ÈtÌ~Ñ%^Ô%^Ñ"ˆI�{ð "×+Ò+¨A¨qÑ1Ô1ˆØ×'Ò'¨¨1Ñ-Ô-ˆ	Ø!×+Ò+¨A¨qÑ1Ô1ˆàÐÝÐUÑVÔVÐVà8<¼ÐN�t”{Ô4Ð4È3ˆð
 "Ô'ˆØ1<Ô1CÔ1HÈEÒ1QÐ1Q�kÔ(Ô-Ð-ÐW\ˆØ�%œ-Ò'Ð'ÝÔ(¨Ñ5Ô5ð AÝ$Ô7¸ÑDÔD��å˜œ oÑ6Ô6ð AØ#œ{Ô0��à#Ô3Ô:Ô@�å×Òð$à ð$ð $ð $ñô ð ð &Ÿ.š.¨Ñ6Ô6ˆKØ!Ÿš \Ñ2Ô2ˆIØ%Ÿ.š.¨Ñ6Ô6ˆKå.ØØØØØØ%Ø Ø”nØ"ÔAð

ñ 

ô 

ˆð #×*Ò*¨:°|ÀTÄ^ÐVZÔVcÑEcÑdÔdˆØ—j’j Ñ.Ô.ˆà ð 	 ØˆLà˜LÐ(Ð(r0   rñ   )r1   r2   r3   Ú__doc__rV   r4   r5   rò   r   ró   r…   r/   r‡   rˆ   s   @r.   rõ   rõ   ®  sú   ø€ € € € € ðð ðRð Rð Rð Rð Rð 15Ø#'ØØ"'ØHLðS)ð S)à”|ðS)ð Œ|˜dÑ"ðS)ð œð	S)ð
 Ô&¨Ñ-ðS)ð ˜D‘LðS)ð ðS)ð  ðS)ð # 5¤<°´Ð#=Ô>ÀÑEðS)ð S)ð S)ð S)ð S)ð S)ð S)ð S)r0   rõ   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )Ú	FalconMLPrO   c                 ó$  •— t          ¦   «                              ¦   «          |j        }t          ||j        |j        ¬¦  «        | _        t          |j        ¦  «        | _	        t          |j        ||j        ¬¦  «        | _
        |j        | _        d S )Nr®   )rU   rV   rk   r$   Úffn_hidden_sizer+   Údense_h_to_4hr   Ú
activationÚactÚdense_4h_to_hr°   )r,   rO   rk   ra   s      €r.   rV   zFalconMLP.__init__  s€   ø€ Ý‰Œ×ÒÑÔÐØÔ(ˆå)¨+°vÔ7MÐTZÔT_Ð`Ñ`Ô`ˆÔÝ! &Ô"3Ñ4Ô4ˆŒÝ)¨&Ô*@À+ÐTZÔT_Ð`Ñ`Ô`ˆÔØ$Ô3ˆÔÐÐr0   r>   r&   c                 ó€   — |                       |                      |¦  «        ¦  «        }|                      |¦  «        }|S r(   )r
  r  r  )r,   r>   s     r.   r/   zFalconMLP.forward  s9   € Ø�HŠH�T×'Ò'¨Ñ*Ô*Ñ+Ô+ˆØ×Ò˜qÑ!Ô!ˆØˆr0   )	r1   r2   r3   r!   rV   r4   r5   r/   r‡   rˆ   s   @r.   r  r    sj   ø€ € € € € ð4˜|ð 4ð 4ð 4ð 4ð 4ð 4ð˜œð ¨%¬,ð ð ð ð ð ð ð ð r0   r  )ÚeagerrÛ   Úflash_attention_2c                   óè   ‡ — e Zd Zddefˆ fd„Z	 	 	 	 	 ddej        dej        dz  dej        dej        dz  d	ee	ej        ej        f         z  dz  d
e
de
de	ej        ej        f         dz  fd„Zˆ xZS )ÚFalconDecoderLayerNrO   c                 ó`  •— t          ¦   «                              ¦   «          |j        }|j        | _        t          |j                 ||¦  «        | _        t          |¦  «        | _	        |j
        | _
        || _        |j        €|j        rd|_        |j        s8t          ||j        ¬¦  «        | _        t          ||j        ¬¦  «        | _        d S |j        dk    r8t          ||j        ¬¦  «        | _        t          ||j        ¬¦  «        | _        d S t          ||j        ¬¦  «        | _        d S )Nr9   ©Úeps)rU   rV   rk   rl   rŠ   ÚFALCON_ATTENTION_CLASSESrà   Úself_attentionr  Úmlpr°   rO   Únum_ln_in_parallel_attnr¹   Úparallel_attnr   Úlayer_norm_epsilonÚpost_attention_layernormÚinput_layernormÚln_attnÚln_mlp)r,   rO   r²   rk   ra   s       €r.   rV   zFalconDecoderLayer.__init__+  s!  ø€ Ý‰Œ×ÒÑÔÐØÔ(ˆØÔ3ˆŒå6°vÔ7RÔSÐTZÐ\eÑfÔfˆÔÝ˜VÑ$Ô$ˆŒØ$Ô3ˆÔØˆŒàÔ)Ð1°fÔ6UÐ1Ø-.ˆFÔ*àÔ#ð 
	]Ý,5°kÀvÔG`Ð,aÑ,aÔ,aˆDÔ)Ý#,¨[¸fÔ>WÐ#XÑ#XÔ#XˆDÔ Ð Ð àÔ-°Ò2Ð2å(¨¸&Ô:SÐTÑTÔT�”å'¨¸Ô9RÐSÑSÔS�”��å'0°À&ÔB[Ð'\Ñ'\Ô'\�Ô$Ð$Ð$r0   Fr-   r    r‰   r}   rÖ   r×   rØ   rÙ   c	           
      ó¦  — |}
| j         j        r;| j         j        dk    r+|                      |¦  «        }|                      |¦  «        }n|                      |¦  «        }|                      ||||||||¬¦  «        \  }}| j         j        sF| j         j        r|}n7t          ||
| j         j	        | j
        ¬¦  «        }
|                      |
¦  «        }| j         j        r| j         j        r| j         j        dk    r|}|                      |¦  «        }| j         j        s| j         j        r||z  }t          ||
| j         j        | j
        ¬¦  «        }||fS )Nr9   )rÖ   r‰   r}   r    r×   rØ   rÙ   )r¤   r    )rO   r¹   r  r  r  r  r  r  rª   r¿   r¤   r  r  r°   )r,   r-   r    r‰   r}   rÖ   r×   rØ   rÙ   rä   r¢   Úattention_layernorm_outÚmlp_layernorm_outÚattention_outputr  Ú
mlp_outputÚoutputs                    r.   r/   zFalconDecoderLayer.forwardD  s•  € ð !ˆàŒ;Ô/ð 	J°D´KÔ4WÐ[\Ò4\Ð4\Ø&*§l¢l°=Ñ&AÔ&AÐ#Ø $§¢¨MÑ :Ô :ÐÐà&*×&:Ò&:¸=Ñ&IÔ&IÐ#ð *.×)<Ò)<Ø#Ø!Ø)Ø%ØØØ/Ø 3ð *=ñ 	*
ô 	*
Ñ&Ð˜,ð Œ{Ô3ð 	LØŒ{Ô(ð LØ$;Ð!Ð!å&Ø$ h°´Ô0MÐX\ÔXeðñ ô �ð %)×$AÒ$AÀ(Ñ$KÔ$KÐ!ð ŒKÔ0ð	8à”Ô)ð	8ð ”Ô3°qÒ8Ð8à 7Ðð —X’XÐ/Ñ0Ô0ˆ
àŒ;Ô/ð 	+°4´;Ô3Lð 	+ØÐ*Ñ*ˆJå˜Z¨°4´;Ô3MÐX\ÔXeÐfÑfÔfˆà�|Ð#Ð#r0   r(   rñ   )r1   r2   r3   r!   rV   r4   r5   rò   r   r…   ró   r/   r‡   rˆ   s   @r.   r  r  *  s  ø€ € € € € ð]ð ]˜|ð ]ð ]ð ]ð ]ð ]ð ]ð< 15ØGKØØ"'ØHLð8$ð 8$à”|ð8$ð Œ|˜dÑ"ð8$ð œð	8$ð
 Ô&¨Ñ-ð8$ð ˜E %¤,°´Ð"<Ô=Ñ=ÀÑDð8$ð ð8$ð  ð8$ð # 5¤<°´Ð#=Ô>ÀÑEð8$ð 8$ð 8$ð 8$ð 8$ð 8$ð 8$ð 8$r0   r  c                   óœ   ‡ — e Zd ZU eed<   dZdZdgZdZdZ	dZ
 ej        ¦   «         dej        fˆ fd„¦   «         Zed
defd	„¦   «         Zˆ xZS )ÚFalconPreTrainedModelrO   ÚtransformerTr  Úmodulec                 ó  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rHt	          j        |j        d| j        j        ¬¦  «         |j	        �t	          j
        |j	        ¦  «         dS dS dS )zInitialize the weights.rÜ   )ÚmeanÚstdN)rU   Ú_init_weightsry   r$   ÚinitÚnormal_r)   rO   Úinitializer_ranger+   Úzeros_)r,   r'  ra   s     €r.   r+  z#FalconPreTrainedModel._init_weights‰  s}   ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�lÑ+Ô+ð 	)ÝŒL˜œ¨S°d´kÔ6SÐTÑTÔTÐTØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ð(Ð(ð	)ð 	)à&Ð&r0   FÚhard_check_onlyc                 óB   — t          | dd¦  «        }|r|S |sd|_        |S )NÚuse_bettertransformerFrÛ   )rj   rà   )ÚclsrO   r0  Ú_is_bettertransformers       r.   Ú_check_and_enable_sdpaz,FalconPreTrainedModel._check_and_enable_sdpa“  s7   € å '¨Ð-DÀeÑ LÔ LÐØ ð 	ØˆMàð 	1Ø*0ˆFÔ'Øˆr0   )F)r1   r2   r3   r!   r‚   Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphr4   r†   r   ÚModuler+  Úclassmethodró   r5  r‡   rˆ   s   @r.   r%  r%    s¸   ø€ € € € € € àÐÐÑØ%ÐØ&*Ð#Ø-Ð.ÐØÐØ€NØ!Ðà€U„]�_„_ð) B¤Ið )ð )ð )ð )ð )ñ „_ð)ð ðð ¸Tð ð ð ñ „[ðð ð ð ð r0   r%  c                   ó  ‡ — e Zd Zdefˆ fd„Zd„ Zdej        fd„Ze		 	 	 	 	 	 	 	 	 ddej
        dz  dedz  d	ej        dz  d
ej
        dz  dej
        dz  dedz  dedz  dedz  dedz  deej        df         ez  fd„¦   «         Zˆ xZS )ÚFalconModelrO   c                 óê  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        ‰j        | _        t          j	        ‰j
        | j        ¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t!          | j        ‰j        ¬¦  «        | _        d| _        t)          ‰¬¦  «        | _        |                      ¦   «          d S )Nc                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS ))r²   )r  )rÆ   ÚirO   s     €r.   rÇ   z(FalconModel.__init__.<locals>.<listcomp>«  s'   ø€ ÐqÐqÐqÈAÕ 2°6ÀQÐ GÑ GÔ GÐqÐqÐqr0   r  F©rO   )rU   rV   rk   Ú	embed_dimrl   rŠ   r    Ú	use_alibir   Ú	EmbeddingÚ
vocab_sizeÚword_embeddingsÚ
ModuleListÚrangeÚnum_hidden_layersÚhr   r  Úln_fÚgradient_checkpointingrM   Ú
rotary_embÚ	post_init©r,   rO   ra   s    `€r.   rV   zFalconModel.__init__   sÖ   øø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ+ˆŒØÔ3ˆŒØœˆŒõ  "œ|¨FÔ,=¸t¼~ÑNÔNˆÔõ ”ÐqÐqÐqÐqÕQVÐW]ÔWoÑQpÔQpÐqÑqÔqÑrÔrˆŒõ ˜dœn°&Ô2KÐLÑLÔLˆŒ	Ø&+ˆÔ#Ý/°vÐ>Ñ>Ô>ˆŒð 	�ŠÑÔÐÐÐr0   c                 ó   — | j         S r(   ©rH  )r,   s    r.   Úget_input_embeddingsz FalconModel.get_input_embeddingsµ  s   € ØÔ#Ð#r0   Únew_embeddingsc                 ó   — || _         d S r(   rS  ©r,   rU  s     r.   Úset_input_embeddingsz FalconModel.set_input_embeddings¸  s   € Ø-ˆÔÐÐr0   NÚ	input_idsÚpast_key_valuesr‰   r}   Úinputs_embedsr×   rØ   Úoutput_hidden_statesÚreturn_dictr&   .c
                 ób  — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|	�|	n| j         j        }	|du |duz  rt          d¦  «        ‚| j        r%| j        r|rt           	                    d¦  «         d}|€|  
                    |¦  «        }|r|€t          | j         ¬¦  «        }d}|�|                     ¦   «         nd}|j        \  }}}| j        rK|€+t          j        |||z   f|j        t          j        ¬¦  «        n|}t'          || j        |j        ¬¦  «        }|€V|�|                     ¦   «         nd}t          j        |j        d	         |j        ¬
¦  «        |z   }|                     d¦  «        }t1          | j         |||d„ ¬¦  «        }|�Ò|�Ð|j        dk    rÅt          j        |j        ¦  «        j        }|j        t          j        k    r5t          j        |t          j        d|j        |j        ¬¦  «        |¦  «        } |j        |dg|j        d	d…         ¢R Ž }t          j         |tC          j"        | j         j#        | j        z  ¦  «        z  |dk     |¦  «        }|}|  $                    ||¬¦  «        }|rdnd}|rdnd}tK          | j&        ¦  «        D ]6\  }}|r||fz   } |||||||||¬¦  «        }|d         }|r||d	         fz   }Œ7|  '                    |¦  «        }|r||fz   }|	stQ          d„ ||||fD ¦   «         ¦  «        S tS          ||||¬¦  «        S )á²  
        input_ids (`torch.LongTensor` of shape `(batch_size, input_ids_length)`):
            `input_ids_length` = `sequence_length` if `past_key_values` is `None` else `past_key_values.get_seq_length()`
            (`sequence_length` of input past key value states). Indices of input sequence tokens in the vocabulary.

            If `past_key_values` is used, only `input_ids` that do not have their past calculated should be passed as
            `input_ids`.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        Nz:You must specify exactly one of input_ids or inputs_embedszZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...FrC  r   ri   rg   r    ©r_   c                  óB   — t          j        dt           j        ¬¦  «        S )NTrg   )r4   r�   ró   )rø   s    r.   ú<lambda>z%FalconModel.forward.<locals>.<lambda>  s   € ­E¬L¸ÅUÄZÐ,PÑ,PÔ,P€ r0   )rO   r[  r‰   rZ  Úand_mask_functioné   rÜ   r8   )r}   r6   )rÖ   r‰   r}   r×   rØ   r    rÙ   c              3   ó   K  — | ]}|®|V — Œ	d S r(   r6   )rÆ   Úvs     r.   ú	<genexpr>z&FalconModel.forward.<locals>.<genexpr>9  s1   è è € ð ð ØÐghÐgt�ÐgtÐgtÐgtÐgtðð r0   )Úlast_hidden_staterZ  r-   Ú
attentions)*rO   rØ   r\  r×   r]  rµ   rN  r¤   r³   r´   rH  r   Úget_seq_lengthr<   rE  r4   Úonesr_   Úlongr¡   rŠ   rh   rm   rC   r   ÚndimÚfinfor“   ró   Úwherer�   r–   Úmasked_fillrŒ   r¶   rk   rO  Ú	enumeraterL  rM  r…   r   )r,   rY  rZ  r‰   r}   r[  r×   rØ   r\  r]  rä   r    Úpast_key_values_lengthr—   r˜   rË   ÚmaskÚpast_seen_tokensÚcausal_maskÚ	min_dtyper-   rÙ   Úall_self_attentionsÚall_hidden_statesrB  ÚblockÚoutputss                              r.   r/   zFalconModel.forward»  sF  € ð6 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð "+Ð!6�I�I¸D¼KÔ<Qˆ	Ø%0Ð%<�k�kÀ$Ä+ÔBYˆà˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÔ&ð 	"¨4¬=ð 	"Øð "Ý×#Ò#Øpñô ð ð "�	àÐ Ø ×0Ò0°Ñ;Ô;ˆMàð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOð ˆØETÐE` ×!?Ò!?Ñ!AÔ!AÐ!AÐfgÐØ$1Ô$7Ñ!ˆ
�J ØŒ>ð 	Xð
 "Ð)õ ”
Ø Ð.DÑ!DÐEÈmÔNbÕjoÔjtðñ ô ð ð $ð õ ' t¨T¬^À=ÔCVÐWÑWÔWˆEàÐØCRÐC^˜×=Ò=Ñ?Ô?Ð?ÐdeÐÝ œ<¨Ô(;¸AÔ(>À}ÔG[Ð\Ñ\Ô\Ð_oÑoˆLØ'×1Ò1°!Ñ4Ô4ˆLå(Ø”;Ø'Ø)Ø+àPÐPð
ñ 
ô 
ˆð Ð Ð!8¸[Ô=MÐQRÒ=RÐ=RÝœ MÔ$7Ñ8Ô8Ô<ˆIð Ô ¥E¤JÒ.Ð.Ý#œkØ¥¤¨c¸+Ô:LÐTaÔTgÐ!hÑ!hÔ!hÐjsñô �ð
 "�E”M *¨bÐC°5´;¸q¸r¸r´?ÐCÐCÐCˆEÝÔ+Ø�œ	 $¤+Ô"9¸T¼^Ñ"KÑLÔLÑLØ˜bÒ Øñô ˆKð &ˆØ"Ÿošo¨mÈ,˜oÑWÔWÐà$5Ð?˜b˜b¸4ÐØ"6Ð@˜B˜B¸DÐå! $¤&Ñ)Ô)ð 	Jð 	J‰HˆAˆuØ#ð IØ$5¸Ð8HÑ$HÐ!à�eØØ*Ø*Ø)Ø#Ø"3ØØ$7ð	ñ 	ô 	ˆGð $ AœJˆMØ ð JØ&9¸WÀQ¼Z¸MÑ&IÐ#øð Ÿ	š	 -Ñ0Ô0ˆàð 	EØ 1°]Ð4DÑ DÐàð 	Ýð ð Ø)¨?Ð<MÐObÐcðñ ô ñ ô ð õ 9Ø+Ø+Ø+Ø*ð	
ñ 
ô 
ð 	
r0   ©	NNNNNNNNN)r1   r2   r3   r!   rV   rT  r4   r5   rX  r   rò   r   ró   r…   r   r/   r‡   rˆ   s   @r.   r?  r?  ž  sl  ø€ € € € € ð˜|ð ð ð ð ð ð ð*$ð $ð $ð.°5´<ð .ð .ð .ð .ð ð .2Ø(,Ø.2Ø04Ø15Ø!%Ø)-Ø,0Ø#'ðF
ð F
àÔ# dÑ*ðF
ð  ™ðF
ð œ tÑ+ð	F
ð
 Ô&¨Ñ-ðF
ð Ô'¨$Ñ.ðF
ð ˜$‘;ðF
ð   $™;ðF
ð # T™kðF
ð ˜D‘[ðF
ð 
ˆuŒ|˜SÐ Ô	!Ð$MÑ	MðF
ð F
ð F
ñ „^ðF
ð F
ð F
ð F
ð F
r0   r?  z…
    The Falcon Model transformer with a language modeling head on top (linear layer with weights tied to the input embeddings).
    )Úcustom_introc                   ó<  ‡ — e Zd ZddiZdefˆ fd„Zdej        fd„Ze		 	 	 	 	 	 	 	 	 	 	 dd	ej
        dz  d
edz  dej        dz  dej
        dz  dej        dz  dej        dz  dedz  dedz  dedz  dedz  deej        z  deej                 ez  fd„¦   «         Zˆ xZS )ÚFalconForCausalLMzlm_head.weightz"transformer.word_embeddings.weightrO   c                 óæ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S ©NFr®   )
rU   rV   r?  r&  r   ÚLinearrk   rG  Úlm_headrP  rQ  s     €r.   rV   zFalconForCausalLM.__init__M  sa   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý& vÑ.Ô.ˆÔÝ”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒð 	�ŠÑÔÐÐÐr0   rU  c                 ó   — || _         d S r(   )r‚  rW  s     r.   Úset_output_embeddingsz'FalconForCausalLM.set_output_embeddingsU  s   € Ø%ˆŒˆˆr0   Nr   rY  rZ  r‰   r}   r[  Úlabelsr×   rØ   r\  r]  Úlogits_to_keepr&   c                 óº  — |
�|
n| j         j        }
|                      ||||||||	|
¬¦	  «	        }|d         }t          |t          ¦  «        rt          | d¦  «        n|}|                      |dd…|dd…f         ¦  «        }d}|� | j        ||fd| j         j        i|¤Ž}|
s|f|dd…         z   }|�|f|z   n|S t          |||j
        |j        |j        ¬¦  «        S )a\  
        input_ids (`torch.LongTensor` of shape `(batch_size, input_ids_length)`):
            `input_ids_length` = `sequence_length` if `past_key_values` is `None` else `past_key_values.get_seq_length()`
            (`sequence_length` of input past key value states). Indices of input sequence tokens in the vocabulary.

            If `past_key_values` is used, only `input_ids` that do not have their past calculated should be passed as
            `input_ids`.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set
            `labels = input_ids` Indices are selected in `[-100, 0, ..., config.vocab_size]` All labels set to `-100`
            are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size]`
        N)rZ  r‰   r}   r[  r×   rØ   r\  r]  r   rG  r    ©ÚlossÚlogitsrZ  r-   ri  )rO   r]  r&  ry   r„   Úslicer‚  Úloss_functionrG  r   rZ  r-   ri  )r,   rY  rZ  r‰   r}   r[  r…  r×   rØ   r\  r]  r†  rä   Útransformer_outputsr-   Úslice_indicesÚ	lm_logitsr‰  r#  s                      r.   r/   zFalconForCausalLM.forwardX  sP  € ðD &1Ð%<�k�kÀ$Ä+ÔBYˆà"×.Ò.ØØ+Ø)Ø%Ø'ØØ/Ø!5Ø#ð /ñ 

ô 

Ðð ,¨AÔ.ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—L’L ¨q¨q¨q°-ÀÀÀÐ/BÔ!CÑDÔDˆ	àˆØÐØ%�4Ô%ØØðð ð  œ;Ô1ðð ð	ð ˆDð ð 	FØ�\Ð$7¸¸¸Ô$;Ñ;ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå0ØØØ/Ô?Ø-Ô;Ø*Ô5ð
ñ 
ô 
ð 	
r0   )NNNNNNNNNNr   )r1   r2   r3   Ú_tied_weights_keysr!   rV   r4   r5   r„  r   rò   r   ró   r„   r…   r   r/   r‡   rˆ   s   @r.   r~  r~  E  s�  ø€ € € € € ð +Ð,PÐQÐð˜|ð ð ð ð ð ð ð&°E´Lð &ð &ð &ð &ð ð .2Ø(,Ø.2Ø04Ø-1Ø&*Ø!%Ø)-Ø,0Ø#'Ø-.ðF
ð F
àÔ# dÑ*ðF
ð  ™ðF
ð œ tÑ+ð	F
ð
 Ô&¨Ñ-ðF
ð ”| dÑ*ðF
ð ”˜tÑ#ðF
ð ˜$‘;ðF
ð   $™;ðF
ð # T™kðF
ð ˜D‘[ðF
ð ˜eœlÑ*ðF
ð 
ˆuŒ|Ô	Ð@Ñ	@ðF
ð F
ð F
ñ „^ðF
ð F
ð F
ð F
ð F
r0   r~  aØ  
    The Falcon Model transformer with a sequence classification head on top (linear layer).

    [`FalconForSequenceClassification`] uses the last token in order to do the classification, as other causal models
    (e.g. GPT-1) do.

    Since it does classification on the last token, it requires to know the position of the last token. If a
    `pad_token_id` is defined in the configuration, it finds the last token that is not a padding token in each row. If
    no `pad_token_id` is defined, it simply takes the last value in each row of the batch. Since it cannot guess the
    padding tokens when `inputs_embeds` are passed instead of `input_ids`, it does the same (take the last value in
    each row of the batch).
    c                   óò   ‡ — e Zd Zdefˆ fd„Ze	 	 	 	 	 	 	 	 	 ddej        dz  dedz  dej	        dz  dej	        dz  dej	        dz  d	e
dz  d
e
dz  de
dz  de
dz  deej	                 ez  fd„¦   «         Zˆ xZS )ÚFalconForSequenceClassificationrO   c                 óþ   •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S r€  )
rU   rV   Ú
num_labelsr?  r&  r   r�  rk   ÚscorerP  rQ  s     €r.   rV   z(FalconForSequenceClassification.__init__±  sk   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒÝ& vÑ.Ô.ˆÔÝ”Y˜vÔ1°6Ô3DÈ5ÐQÑQÔQˆŒ
ð 	�ŠÑÔÐÐÐr0   NrY  rZ  r‰   r[  r…  r×   rØ   r\  r]  r&   c
           
      ó¦  — |	�|	n| j         j        }	|                      ||||||||	¬¦  «        }|d         }|                      |¦  «        }|�|j        d         }n|j        d         }| j         j        €|dk    rt          d¦  «        ‚| j         j        €d}n¨|�}|| j         j        k                         |j        t          j
        ¦  «        }t          j        |j        d         |j        t          j
        ¬¦  «        }||z                       d¦  «        }n)d}t                               | j        j        › d�¦  «         |t          j        ||j        ¬	¦  «        |f         }d}|��.| j         j        €f| j        dk    rd
| j         _        nN| j        dk    r7|j        t          j        k    s|j        t          j        k    rd| j         _        nd| j         _        | j         j        d
k    rWt-          ¦   «         }| j        dk    r1 ||                     ¦   «         |                     ¦   «         ¦  «        }nb |||¦  «        }nU| j         j        dk    rt1          ¦   «         } |||¦  «        }n*| j         j        dk    rt3          ¦   «         } |||¦  «        }|	s|f|dd…         z   }|�|f|z   n|S t5          |||j        |j        |j        ¬¦  «        S )á6  
        input_ids (`torch.LongTensor` of shape `(batch_size, input_ids_length)`):
            `input_ids_length` = `sequence_length` if `past_key_values` is `None` else `past_key_values.get_seq_length()`
            (`sequence_length` of input past key value states). Indices of input sequence tokens in the vocabulary.

            If `past_key_values` is used, only `input_ids` that do not have their past calculated should be passed as
            `input_ids`.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        N©rZ  r‰   r[  r×   rØ   r\  r]  r   r    z=Cannot handle batch sizes > 1 if no padding token is defined.r8   ri   zŠ will not detect padding tokens in `inputs_embeds`. Results may be unexpected if using padding tokens in conjunction with `inputs_embeds.`r`  Ú
regressionÚsingle_label_classificationÚmulti_label_classificationrˆ  )rO   r]  r&  r•  r<   Úpad_token_idrµ   ro   r_   r4   r‘   rm   Úargmaxr³   r´   ra   r1   Úproblem_typer”  rh   rl  r„   r	   Úsqueezer   r   r   rZ  r-   ri  )r,   rY  rZ  r‰   r[  r…  r×   rØ   r\  r]  rä   r�  r-   rŠ  r—   Úlast_non_pad_tokenÚnon_pad_maskÚtoken_indicesÚpooled_logitsr‰  Úloss_fctr#  s                         r.   r/   z'FalconForSequenceClassification.forwardº  s  € ð@ &1Ð%<�k�kÀ$Ä+ÔBYˆà"×.Ò.ØØ+Ø)Ø'ØØ/Ø!5Ø#ð /ñ 	
ô 	
Ðð ,¨AÔ.ˆØ—’˜MÑ*Ô*ˆàÐ Ø"œ¨Ô+ˆJˆJà&Ô,¨QÔ/ˆJàŒ;Ô#Ð+°
¸a²°ÝÐ\Ñ]Ô]Ð]ØŒ;Ô#Ð+Ø!#ÐÐØÐ"à%¨¬Ô)AÒA×EÒEÀfÄmÕUZÔU`ÑaÔaˆLÝ!œL¨¬¸Ô)<ÀVÄ]ÕZ_ÔZeÐfÑfÔfˆMØ"/°,Ñ">×!FÒ!FÀrÑ!JÔ!JÐÐà!#ÐÝ×ÒØ”>Ô*ð Zð Zð Zñô ð ð
 �uœ|¨J¸v¼}ÐMÑMÔMÐOaÐaÔbˆàˆØÑØŒ{Ô'Ð/Ø”? aÒ'Ð'Ø/;�D”KÔ,Ð,Ø”_ qÒ(Ð(¨f¬l½e¼jÒ.HÐ.HÈFÌLÕ\aÔ\eÒLeÐLeØ/L�D”KÔ,Ð,à/K�D”KÔ,àŒ{Ô'¨<Ò7Ð7Ý"™9œ9�Ø”? aÒ'Ð'Ø#˜8 M×$9Ò$9Ñ$;Ô$;¸V¿^º^Ñ=MÔ=MÑNÔN�D�Dà#˜8 M°6Ñ:Ô:�D�DØ”Ô)Ð-JÒJÐJÝ+Ñ-Ô-�Ø�x ¨vÑ6Ô6��Ø”Ô)Ð-IÒIÐIÝ,Ñ.Ô.�Ø�x ¨vÑ6Ô6�Øð 	FØ#Ð%Ð(;¸A¸B¸BÔ(?Ñ?ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå/ØØ Ø/Ô?Ø-Ô;Ø*Ô5ð
ñ 
ô 
ð 	
r0   r{  )r1   r2   r3   r!   rV   r   r4   rò   r   r5   ró   r…   r   r/   r‡   rˆ   s   @r.   r’  r’  ¢  s9  ø€ € € € € ð˜|ð ð ð ð ð ð ð ð .2Ø(,Ø.2Ø-1Ø&*Ø!%Ø)-Ø,0Ø#'ðf
ð f
àÔ# dÑ*ðf
ð  ™ðf
ð œ tÑ+ð	f
ð
 ”| dÑ*ðf
ð ”˜tÑ#ðf
ð ˜$‘;ðf
ð   $™;ðf
ð # T™kðf
ð ˜D‘[ðf
ð 
ˆuŒ|Ô	Ð?Ñ	?ðf
ð f
ð f
ñ „^ðf
ð f
ð f
ð f
ð f
r0   r’  c                   óò   ‡ — e Zd Zdefˆ fd„Ze	 	 	 	 	 	 	 	 	 ddej        dz  dedz  dej	        dz  dej	        dz  dej	        dz  d	e
dz  d
e
dz  de
dz  de
dz  deej	                 ez  fd„¦   «         Zˆ xZS )ÚFalconForTokenClassificationrO   c                 ó”  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          |dd ¦  «        �|j        }nt          |dd ¦  «        �|j        }nd}t          j	        |¦  «        | _
        t          j        |j        |j        ¦  «        | _        |                      ¦   «          d S )NÚclassifier_dropoutr°   gš™™™™™¹?)rU   rV   r”  r?  r&  rj   r¨  r°   r   r¾   r¨   r�  rk   Ú
classifierrP  )r,   rO   r¨  ra   s      €r.   rV   z%FalconForTokenClassification.__init__&  s¼   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå& vÑ.Ô.ˆÔÝ�6Ð/°Ñ6Ô6ÐBØ!'Ô!:ÐÐÝ�VÐ-¨tÑ4Ô4Ð@Ø!'Ô!6ÐÐà!$ÐÝ”zÐ"4Ñ5Ô5ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐr0   NrY  rZ  r‰   r[  r…  r×   rØ   r\  r]  r&   c
           
      óâ  — |	�|	n| j         j        }	|                      ||||||||	¬¦  «        }|d         }|                      |¦  «        }|                      |¦  «        }d}|�V|j        \  }}t          ¦   «         } ||                     ||z  | j        ¦  «        |                     ||z  ¦  «        ¦  «        }|	s|f|dd…         z   }|�|f|z   n|S t          |||j
        |j        ¬¦  «        S )r—  Nr˜  r   r9   )r‰  rŠ  r-   ri  )rO   r]  r&  r¨   r©  r<   r   rÈ   r”  r   r-   ri  )r,   rY  rZ  r‰   r[  r…  r×   rØ   r\  r]  rä   r�  r-   rŠ  r‰  r—   r˜   r¤  r#  s                      r.   r/   z$FalconForTokenClassification.forward7  s:  € ð@ &1Ð%<�k�kÀ$Ä+ÔBYˆà"×.Ò.ØØ+Ø)Ø'ØØ/Ø!5Ø#ð /ñ 	
ô 	
Ðð ,¨AÔ.ˆØŸš ]Ñ3Ô3ˆØ—’ Ñ/Ô/ˆàˆØÐØ%+¤\Ñ"ˆJ˜
Ý'Ñ)Ô)ˆHØ�8Ø—’˜J¨Ñ3°T´_ÑEÔEÀvÇ{Â{ÐS]Ð`jÑSjÑGkÔGkñô ˆDð ð 	FØ�YÐ!4°Q°R°RÔ!8Ñ8ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå$ØØØ-Ô;Ø*Ô5ð	
ñ 
ô 
ð 	
r0   r{  )r1   r2   r3   r!   rV   r   r4   rò   r   r5   ró   r…   r   r/   r‡   rˆ   s   @r.   r¦  r¦  $  s9  ø€ € € € € ð˜|ð ð ð ð ð ð ð" ð .2Ø(,Ø.2Ø-1Ø&*Ø!%Ø)-Ø,0Ø#'ðA
ð A
àÔ# dÑ*ðA
ð  ™ðA
ð œ tÑ+ð	A
ð
 ”| dÑ*ðA
ð ”˜tÑ#ðA
ð ˜$‘;ðA
ð   $™;ðA
ð # T™kðA
ð ˜D‘[ðA
ð 
ˆuŒ|Ô	Ð4Ñ	4ðA
ð A
ð A
ñ „^ðA
ð A
ð A
ð A
ð A
r0   r¦  c                   óÔ   ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 	 ddej        dz  dej        dz  dej        dz  dej        dz  dej        dz  dedz  d	edz  d
edz  de	e
z  fd„¦   «         Zˆ xZS )ÚFalconForQuestionAnsweringc                 óØ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        d¦  «        | _        |                      ¦   «          d S )Nr9   )	rU   rV   r?  r&  r   r�  rk   Ú
qa_outputsrP  rQ  s     €r.   rV   z#FalconForQuestionAnswering.__init__~  sY   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý& vÑ.Ô.ˆÔÝœ) FÔ$6¸Ñ:Ô:ˆŒð 	�ŠÑÔÐÐÐr0   NrY  r‰   r[  Ústart_positionsÚend_positionsrØ   r\  r]  r&   c	                 óª  — |�|n| j         j        }|                      ||||||¬¦  «        }
|
d         }|                      |¦  «        }|                     dd¬¦  «        \  }}|                     d¦  «                             ¦   «         }|                     d¦  «                             ¦   «         }d}|�ç|�åt          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }t          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }|                     d¦  «        }| 	                    d|¦  «        }| 	                    d|¦  «        }t          |¬¦  «        } |||¦  «        } |||¦  «        }||z   dz  }|s||f|
dd…         z   }|�|f|z   n|S t          ||||
j        |
j        ¬	¦  «        S )
r_  N)r‰   r[  rØ   r\  r]  r   r    r8   r:   )Úignore_indexr9   )r‰  Ústart_logitsÚ
end_logitsr-   ri  )rO   r]  r&  r®  ÚsplitrŸ  Ú
contiguousÚlenÚsizeÚclampr   r   r-   ri  )r,   rY  r‰   r[  r¯  r°  rØ   r\  r]  rä   rz  Úsequence_outputrŠ  r³  r´  Ú
total_lossÚignored_indexr¤  Ú
start_lossÚend_lossr#  s                        r.   r/   z"FalconForQuestionAnswering.forward†  s  € ð4 &1Ð%<�k�kÀ$Ä+ÔBYˆà×"Ò"ØØ)Ø'Ø/Ø!5Ø#ð #ñ 
ô 
ˆð " !œ*ˆà—’ Ñ1Ô1ˆØ#)§<¢<°°r <Ñ#:Ô#:Ñ ˆ�jØ#×+Ò+¨BÑ/Ô/×:Ò:Ñ<Ô<ˆØ×'Ò'¨Ñ+Ô+×6Ò6Ñ8Ô8ˆ
àˆ
ØÐ&¨=Ð+Då�?×'Ò'Ñ)Ô)Ñ*Ô*¨QÒ.Ð.Ø"1×"9Ò"9¸"Ñ"=Ô"=�Ý�=×%Ò%Ñ'Ô'Ñ(Ô(¨1Ò,Ð,Ø -× 5Ò 5°bÑ 9Ô 9�à(×-Ò-¨aÑ0Ô0ˆMØ-×3Ò3°A°}ÑEÔEˆOØ)×/Ò/°°=ÑAÔAˆMå'°]ÐCÑCÔCˆHØ!˜ ,°Ñ@Ô@ˆJØ�x 
¨MÑ:Ô:ˆHØ$ xÑ/°1Ñ4ˆJàð 	RØ" JÐ/°'¸!¸"¸"´+Ñ=ˆFØ/9Ð/E�Z�M FÑ*Ð*È6ÐQå+ØØ%Ø!Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r0   )NNNNNNNN)r1   r2   r3   rV   r   r4   rò   ÚFloatTensorró   r…   r   r/   r‡   rˆ   s   @r.   r¬  r¬  |  s  ø€ € € € € ðð ð ð ð ð ð .2Ø37Ø26Ø37Ø15Ø)-Ø,0Ø#'ðF
ð F
àÔ# dÑ*ðF
ð Ô)¨DÑ0ðF
ð Ô(¨4Ñ/ð	F
ð
 Ô)¨DÑ0ðF
ð Ô'¨$Ñ.ðF
ð   $™;ðF
ð # T™kðF
ð ˜D‘[ðF
ð 
Ð-Ñ	-ðF
ð F
ð F
ñ „^ðF
ð F
ð F
ð F
ð F
r0   r¬  )r~  r?  r%  r’  r¦  r¬  )r    )Or  rŒ   Úcollections.abcr   Útypingr   r4   r   Útorch.nnr   r   r   r	   r
   r§   Ú r   r,  Úactivationsr   Úcache_utilsr   r   Ú
generationr   Úmasking_utilsr   Úmodeling_flash_attention_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   Úutilsr   r   Úutils.genericr   Úconfiguration_falconr!   r"   Ú
get_loggerr1   r³   r�  r$   rA   rK   r<  rM   r5   r„   rh   r¡   rp   ró   rª   r¬   rõ   r  r  r  r%  r?  r~  r’  r¦  r¬  Ú__all__r6   r0   r.   ú<module>rÒ     s¸  ðð Ð à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ $Ð $Ð $Ð $Ð $Ð $à &Ð &Ð &Ð &Ð &Ð &Ø )Ð )Ð )Ð )Ð )Ð )Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ø hÐ hÐ hÐ hÐ hÐ hÐ hÐ hØ 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +Ø .Ð .Ð .Ð .Ð .Ð .ð ÐÑÔð KØJÐJÐJÐJÐJÐJà	ˆÔ	˜HÑ	%Ô	%€ð
)ð )ð )ð )ð )�2”9ñ )ô )ð )ð(ð (ð (ðð ð ð ð4><ð ><ð ><ð ><ð ><˜BœIñ ><ô ><ð ><ðBJ u¤|ð JÀð JÈEÌKð JÐ\aÔ\hð Jð Jð Jð Jð:�5”<ð ¨5¬<ð ¸uð ÐPTð ÐY^ÔYeð ð ð ð ð&S0ð S0ð S0ð S0ð S0�b”iñ S0ô S0ð S0ðlb)ð b)ð b)ð b)ð b)˜Oñ b)ô b)ð b)ðJð ð ð ð �”	ñ ô ð ð" ØØ.ðð Ð ðR$ð R$ð R$ð R$ð R$Ð3ñ R$ô R$ð R$ðj ðð ð ð ð ˜Oñ ô ñ „ðð< ðc
ð c
ð c
ð c
ð c
Ð'ñ c
ô c
ñ „ðc
ðL €ððñ ô ð
U
ð U
ð U
ð U
ð U
Ð-¨ñ U
ô U
ñô ð
U
ðp €ððñ ô ðq
ð q
ð q
ð q
ð q
Ð&;ñ q
ô q
ñô ðq
ðh ðT
ð T
ð T
ð T
ð T
Ð#8ñ T
ô T
ñ „ðT
ðn ðP
ð P
ð P
ð P
ð P
Ð!6ñ P
ô P
ñ „ðP
ðfð ð €€€r0   