§
    ‚Štj=  ã                   ó   — d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 dd	lmZ d
dlmZ d
dlmZmZmZmZmZmZ ddlmZ  G d„ de¦  «        Z G d„ de¦  «        Z G d„ dej        j        ¦  «        Zd'd„Z G d„ de¦  «        Z G d„ dej        ¦  «        Z  G d„ dej!        ¦  «        Z" G d„ de¦  «        Z# G d„ de¦  «        Z$ G d „ d!e¦  «        Z% G d"„ d#e¦  «        Z& G d$„ d%ee$¦  «        Z'g d&¢Z(dS )(zPyTorch Phimoe model.é    )ÚCallableN)Únné   )Ú GenericForSequenceClassification)ÚROPE_INIT_FUNCTIONS)Úmaybe_autocast)ÚOutputRecorderé   )ÚLlamaAttention)ÚMixtralDecoderLayerÚMixtralExpertsÚMixtralForCausalLMÚMixtralModelÚMixtralPreTrainedModelÚMixtralRotaryEmbeddingé   )ÚPhimoeConfigc                   ó$   — e Zd Zddefd„Zdd„ZdS )ÚPhimoeRotaryEmbeddingNÚconfigc                 óÔ  — t           j                             ¦   «          |j        | _        |j        | _        || _        | j        j        d         | _        | j	        | _
        | j        dk    rt          | j                 | _
        |  
                    | j        |¦  «        \  }| _        |                      d|d¬¦  «         |                      d|                     ¦   «         d¬¦  «         d S )NÚ	rope_typeÚdefaultÚinv_freqF)Ú
persistentÚoriginal_inv_freq)r   ÚModuleÚ__init__Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenr   Úrope_parametersr   Úcompute_default_rope_parametersÚrope_init_fnr   Úattention_scalingÚregister_bufferÚclone)Úselfr   Údevicer   s       úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/phimoe/modular_phimoe.pyr   zPhimoeRotaryEmbedding.__init__)   sÑ   € Ý
Œ	×ÒÑÔÐØ"(Ô"@ˆÔØ$*Ô$BˆÔ!àˆŒàœÔ4°[ÔAˆŒØ&*Ô&JˆÔØŒ>˜YÒ&Ð&Ý 3°D´NÔ CˆDÔØ+/×+<Ò+<¸T¼[È&Ñ+QÔ+QÑ(ˆ�$Ô(à×Ò˜Z¨¸eÐÑDÔDÐDØ×ÒÐ0°(·.².Ñ2BÔ2BÈuÐÑUÔUÐUÐUÐUó    c                 ó˜  — |�t          | j        j        › d|› d�¦  «        ‚d }t          j        |¦  «        dz   }| j        j        d         dk    r<|r:|| j        j        d         k    r| j        j        d         n| j        j        d         }|                      | j        |j        |¦  «        \  }}|€|n|}|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
¬¦  «        }|                     ¦   «         |z  }|                     ¦   «         |z  }d d d ¦  «         n# 1 swxY w Y   |                     |j        ¦  «        |                     |j        ¦  «        fS )Nz3 does not support layer types, but got `layer_type=ú`r   r   r   Ú original_max_position_embeddingsÚlong_mscaleÚshort_mscaler   éÿÿÿÿÚmpsÚcpuF)Údevice_typeÚenabledr
   ©Údim)Ú
ValueErrorÚ	__class__Ú__name__ÚtorchÚmaxr   r"   r$   r)   ÚfloatÚexpandÚshapeÚtoÚ
isinstanceÚtypeÚstrr   Ú	transposeÚcatÚcosÚsinÚdtype)r(   ÚxÚposition_idsÚ
layer_typeÚmscaleÚseq_lenr   r%   Úinv_freq_expandedÚposition_ids_expandedr4   ÚfreqsÚembrF   rG   s                  r*   ÚforwardzPhimoeRotaryEmbedding.forward9   sz  € ØÐ!ÝØ”>Ô*ÐlÐlÐ_iÐlÐlÐlñô ð ð ˆÝ”)˜LÑ)Ô)¨AÑ-ˆØŒ;Ô& {Ô3°yÒ@Ð@ÀWÐ@ð ˜Tœ[Ô8Ð9[Ô\Ò\Ð\ð ”Ô+¨MÔ:Ð:à”[Ô0°Ô@ð ð
 '+×&7Ò&7¸¼ÀQÄXÈwÑ&WÔ&WÑ#ˆÐ#Ø&, nÐ"Ð"¸&ˆØ$ T¨1¨1¨1¨d ]Ô3×9Ò9Ñ;Ô;×BÒBÀ<ÔCUÐVWÔCXÐZ\Ð^_Ñ`Ô`×cÒcÐdeÔdlÑmÔmÐØ ,¨Q¨Q¨Q°°a°a°a¨ZÔ 8× >Ò >Ñ @Ô @Ðå'1°!´(´-ÅÑ'EÔ'EÐkÈ!Ì(Ì-Ð[`ÒJ`ÐJ`�a”h”m�mÐfkˆÝ¨¸UÐCÑCÔCð 	%ð 	%Ø&×,Ò,Ñ.Ô.Ð1F×1LÒ1LÑ1NÔ1NÑN×YÒYÐZ[Ð]^Ñ_Ô_ˆEÝ”)˜U E˜N°Ð3Ñ3Ô3ˆCØ—'’'‘)”)˜fÑ$ˆCØ—'’'‘)”)˜fÑ$ˆCð		%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð
 �vŠv�a”g‰Œ §¢ q¤w¡¤Ð/Ð/s   Å=BHÈHÈH©N)NN)r:   Ú
__module__Ú__qualname__r   r   rR   © r+   r*   r   r   (   sN   € € € € € ðVð V˜|ð Vð Vð Vð Vð 0ð 0ð 0ð 0ð 0ð 0r+   r   c                   ó   — e Zd ZdS )ÚPhimoeAttentionN©r:   rT   rU   rV   r+   r*   rX   rX   U   ó   € € € € € Ø€Dr+   rX   c                   ó’   — e Zd Zedej        dej        dej        dej        dej        f
d„¦   «         Zedej        fd„¦   «         Zd	S )
ÚPhimoeMultiplierÚscoresÚ
multiplierÚselected_expertsÚmasked_gatesÚmask_for_onec                 ó:   — |                       |||¦  «         ||z  S )a  
        Forward pass for the custom autograd function.

        Args:
            ctx: Context object to save information for backward computation.
            scores (torch.Tensor): Input scores tensor.
            multiplier (torch.Tensor): Multiplier tensor.
            selected_experts (torch.Tensor): Tensor of selected experts.
            masked_gates (torch.Tensor): Masked gates tensor.
            mask_for_one (torch.Tensor): Mask for one tensor.

        Returns:
            torch.Tensor: Result of the forward pass.
        )Úsave_for_backward)Úctxr]   r^   r_   r`   ra   s         r*   rR   zPhimoeMultiplier.forwardZ   s(   € ð. 	×Ò˜jÐ*:¸LÑIÔIÐIØ˜LÑ(Ð(r+   Úgrad_at_outputc                 ó�   — | j         \  }}}||z  }||                     d¦  «        z  }|                     d||¬¦  «         |ddddfS )aB  
        Backward pass for the custom autograd function.

        Args:
            ctx: Context object with saved tensors from the forward pass.
            grad_at_output (torch.Tensor): Gradient at the output.

        Returns:
            tuple[torch.Tensor, None, None, None, None]: Gradients for the inputs.
        r1   )r7   ÚindexÚsrcN)Úsaved_tensorsÚmulÚscatter_add_)rd   re   r^   r_   r`   Úgrad_at_scores_expandeds         r*   ÚbackwardzPhimoeMultiplier.backwardt   sx   € ð 69Ô5FÑ2ˆ
Ð$ là'¨*Ñ4ˆà".°×1CÒ1CÀBÑ1GÔ1GÑ"GÐØ×,Ò,ØØ"Øð 	-ñ 	
ô 	
ð 	
ð $ØØØØð
ð 	
r+   N)r:   rT   rU   Ústaticmethodr;   ÚTensorrR   rm   rV   r+   r*   r\   r\   Y   s–   € € € € € Øð)à”ð)ð ”Lð)ð  œ,ð	)ð
 ”lð)ð ”lð)ð )ð )ñ „\ð)ð2 ð
àœð
ð 
ð 
ñ „\ð
ð 
ð 
r+   r\   c                 óB  — t          j        ¦   «         5  |                      dd¬¦  «        \  }}|                      ¦   «                              |¬¦  «        }|| z
  |z  d|z  k    }ddd¦  «         n# 1 swxY w Y   |                      |t          d¦  «        ¦  «        }|ru|t          j        |t           j        ¬¦  «         	                    ¦   «          
                    ¦   «         z
                       d¬	¦  «        d
                              d¦  «        }n|}t          j        |d¬	¦  «        }|                     d|¬¦  «        }	|r’|                     dd¬¦  «        \  }
}t          j        ||k    t          j        |
¦  «        dk    ¦  «        }t          j        d|d¬¦  «                             |¦  «        }t$                               | |	|||¦  «        }n|	}t          j        | d|t          d¦  «        ¦  «        }t          j        ¦   «         5  |                     dd¬¦  «        \  }}|                      ¦   «                              |¬¦  «        }|| z
  |z  d|z  k    }ddd¦  «         n# 1 swxY w Y   |                     |t          d¦  «        ¦  «        }|ru|t          j        |t           j        ¬¦  «         	                    ¦   «          
                    ¦   «         z
                       d¬	¦  «        d
                              d¦  «        }n|}t          j        |d¬	¦  «        }|                     d|¬¦  «        }|r¤|                     dd¬¦  «        \  }
}t          j        ||k    t          j        |
¦  «                             ¦   «         dk    ¦  «        }t          j        d|d¬¦  «                             |¦  «        }t$                               | ||||¦  «        }n|}t          j        ||fd¬	¦  «        }t          j        ||fd¬	¦  «        }||fS )ud  
    Sparse mixer function to select top-k experts and compute multipliers.
    Based on the paper: https://huggingface.co/papers/2409.12136
    We first replace the TopK(Â·) function as random sampling of discrete variables
    in model training. Then, following Liu et al. (2023a) and Liu et al. (2023b), we apply Heun's
    third order method to approximate the expert routing gradient and construct a modified
    back-propagation to give a mathematically sound gradient estimation for expert routing.

    Args:
        scores (torch.Tensor): Input scores tensor.
        jitter_eps (float): Jitter epsilon for numerical stability.
        training (bool): Flag indicating if the model is in training mode.
        top_k (int): Number of top experts to select.

    Returns:
        tuple[torch.Tensor, torch.Tensor]: Multiplier and selected experts tensors.
    r1   T)r7   Úkeepdim)Úminr
   Nz-inf)Úmemory_formatr6   r   )r7   rg   g      è?gioð…ÉTÕ?gKÈ=›Uå?)Úalpha)r;   Úno_gradr<   ÚabsÚclampÚmasked_fillr=   Ú
empty_likeÚlegacy_contiguous_formatÚexponential_ÚlogÚ	unsqueezeÚsoftmaxÚgatherÚ
logical_orÚ	rand_likeÚaddÚtype_asr\   ÚapplyÚscatterÚuniform_Úconcat)r]   Ú
jitter_epsÚtrainingÚtop_kÚmask_logits_thresholdÚmax_indÚfactorr`   r_   Úmultiplier_oÚ
max_scoresra   r^   Úmasked_scoresÚmasked_gates_top2Úselected_experts_top2Úmultiplier_top2_oÚmask_for_one_top2Úmultiplier_top2s                      r*   Úsparsemixerr–   —   sØ  € õ$ 
Œ‰Œð _ð _à)/¯ª¸ÀD¨Ñ)IÔ)IÑ&Ð˜wØ—’‘”×#Ò#Ð(=Ð#Ñ>Ô>ˆØ"7¸&Ñ"@ÀFÑ!JÈqÐS]É~Ò ^Ðð	_ð _ð _ñ _ô _ð _ð _ð _ð _ð _ð _øøøð _ð _ð _ð _ð ×%Ò%Ð&;½UÀ6¹]¼]ÑKÔK€LØð 
#ð ÝÔ" <½uÔ?]Ð^Ñ^Ô^×kÒkÑmÔm×qÒqÑsÔsñt÷ ŠS�RˆS‰[Œ[˜ô	÷
 ŠY�r‰]Œ]ð 	Ðð #Ðõ ”= °2Ð6Ñ6Ô6€LØ×&Ò&¨2Ð5EÐ&ÑFÔF€Làð "à*×.Ò.°2¸tÐ.ÑDÔDÑˆ
�GÝÔ'Ø Ò'ÝŒO˜JÑ'Ô'¨$Ò.ñ
ô 
ˆõ
 ”y ¨¸VÐDÑDÔD×LÒLÈ\ÑZÔZˆå%×+Ò+ØØØØØñ
ô 
ˆ
ˆ
ð "ˆ
õ ”MØØ
ØÝˆf‰Œñ	ô €Mõ 
Œ‰Œð _ð _à)6×):Ò):¸rÈ4Ð):Ñ)PÔ)PÑ&Ð˜wØ—’‘”×#Ò#Ð(=Ð#Ñ>Ô>ˆØ"7¸&Ñ"@ÀFÑ!JÈqÐS]É~Ò ^Ðð	_ð _ð _ñ _ô _ð _ð _ð _ð _ð _ð _øøøð _ð _ð _ð _ð &×1Ò1Ð2GÍÈvÉÌÑWÔWÐØð (ð "ÝÔ"Ð#4ÅEÔDbÐcÑcÔcß’‘”ß’‘”ñ÷
 ŠS�RˆS‰[Œ[˜ô÷ ŠY�r‰]Œ]ð 	Ðð !(ÐåœÐ&7¸RÐ@Ñ@Ô@ÐØ)×0Ò0°RÐ?TÐ0ÑUÔUÐàð ,à/×3Ò3¸ÀDÐ3ÑIÔIÑˆ
�GÝ!Ô,Ø! WÒ,ÝŒO˜JÑ'Ô'×0Ò0Ñ2Ô2°TÒ9ñ
ô 
Ðõ
 "œI fÐ.?ÀvÐNÑNÔN×VÒVÐWhÑiÔiÐå*×0Ò0ØØØ!ØØñ
ô 
ˆˆð ,ˆå”˜z¨?Ð;ÀÐDÑDÔD€JÝ”|Ð%5Ð7LÐ$MÐSUÐVÑVÔVÐð 	Øðð s%   ”AA2Á2A6Á9A6ÈAI1É1I5É8I5c                   ó   — e Zd ZdS )ÚPhimoeExpertsNrY   rV   r+   r*   r˜   r˜     rZ   r+   r˜   c                   óf   ‡ — e Zd Zdefˆ fd„Zdej        deej        ej        f         fˆ fd„Zˆ xZ	S )ÚPhimoeTopKRouterr   c                 óÄ   •— t          ¦   «                              |j        |j        d¬¦  «         |j        | _        |j        | _        |j        | _        |j        | _        d S )NF©Úbias)	Úsuperr   Úhidden_sizeÚnum_local_expertsÚrouter_jitter_noiseÚinput_jitter_noiseÚnum_experts_per_tokrŠ   Únum_experts©r(   r   r9   s     €r*   r   zPhimoeTopKRouter.__init__  sY   ø€ Ý‰Œ×Ò˜Ô+¨VÔ-EÈEÐÑRÔRÐRØ#)Ô#=ˆÔ Ø"(Ô";ˆÔØÔ/ˆŒ
Ø!Ô3ˆÔÐÐr+   Úhidden_statesÚreturnc                 ó4  •— | j         rF| j        dk    r;|t          j        |¦  «                             d| j        z
  d| j        z   ¦  «        z  }t          ¦   «                              |¦  «        }t          || j        | j         | j	        ¬¦  «        \  }}|||fS )Nr   ç      ð?)rˆ   r‰   rŠ   )
r‰   r¢   r;   ry   r†   rž   rR   r–   r¡   rŠ   )r(   r¦   Úrouter_logitsÚrouting_weightsr_   r9   s        €r*   rR   zPhimoeTopKRouter.forward  s©   ø€ ØŒ=ð 	˜TÔ4°qÒ8Ð8Ø�UÔ-¨mÑ<Ô<×EÒEØ�dÔ-Ñ-¨s°TÔ5LÑ/Lñô ñ ˆMõ ™œŸš¨Ñ6Ô6ˆÝ,7Ø dÔ&>ÈÌÐ^bÔ^hð-
ñ -
ô -
Ñ)ˆÐ)ð ˜oÐ/?Ð?Ð?r+   )
r:   rT   rU   r   r   r;   ro   ÚtuplerR   Ú__classcell__©r9   s   @r*   rš   rš     sŒ   ø€ € € € € ð4˜|ð 4ð 4ð 4ð 4ð 4ð 4ð	@ U¤\ð 	@°e¸E¼LÈ%Ì,Ð<VÔ6Wð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@r+   rš   c                   óF   ‡ — e Zd ZdZˆ fd„Zdej        dej        fd„Zˆ xZS )ÚPhimoeSparseMoeBlockaÈ  
    This implementation is
    strictly equivalent to standard MoE with full capacity (no
    dropped tokens). It's faster since it formulates MoE operations
    in terms of block-sparse operations to accommodate imbalanced
    assignments of tokens to experts, whereas standard MoE either
    (1) drop tokens at the cost of reduced performance or (2) set
    capacity factor to number of experts and thus waste computation
    and memory on padding.
    c                 ó  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        |j        | _	        t          |¦  «        | _        t          |¦  «        | _        |j        | _        d S rS   )rž   r   rŸ   Ú
hidden_dimÚintermediate_sizeÚffn_dimr    r¤   r£   rŠ   rš   Úrouterr˜   Úexpertsr¢   r¥   s     €r*   r   zPhimoeSparseMoeBlock.__init__6  sq   ø€ Ý‰Œ×ÒÑÔÐØ Ô,ˆŒØÔ/ˆŒØ!Ô3ˆÔØÔ/ˆŒ
Ý& vÑ.Ô.ˆŒÝ$ VÑ,Ô,ˆŒØ"(Ô";ˆÔÐÐr+   r¦   r§   c                 ó‚  — |j         \  }}}| j        rF| j        dk    r;|t          j        |¦  «                             d| j        z
  d| j        z   ¦  «        z  }|j         \  }}}|                     d|¦  «        }|                      |¦  «        \  }}}|                      |||¦  «        }|                     |||¦  «        S )Nr   r©   r1   )	r?   r‰   r¢   r;   ry   r†   Úreshaperµ   r¶   )	r(   r¦   Ú
batch_sizeÚsequence_lengthr²   Ú_r«   r_   Úfinal_hidden_statess	            r*   rR   zPhimoeSparseMoeBlock.forward@  sÓ   € Ø2?Ô2EÑ/ˆ
�O ZØŒ=ð 	˜TÔ4°qÒ8Ð8Ø�UÔ-¨mÑ<Ô<×EÒEØ�dÔ-Ñ-¨s°TÔ5LÑ/Lñô ñ ˆMð 3@Ô2EÑ/ˆ
�O ZØ%×-Ò-¨b°*Ñ=Ô=ˆØ/3¯{ª{¸=Ñ/IÔ/IÑ,ˆˆ?Ð,Ø"Ÿlšl¨=Ð:JÈOÑ\Ô\ÐØ"×*Ò*¨:°È
ÑSÔSÐSr+   )	r:   rT   rU   Ú__doc__r   r;   ro   rR   r­   r®   s   @r*   r°   r°   *  sr   ø€ € € € € ð	ð 	ð<ð <ð <ð <ð <ðT U¤\ð T°e´lð Tð Tð Tð Tð Tð Tð Tð Tr+   r°   c                   ó(   ‡ — e Zd Zdedefˆ fd„Zˆ xZS )ÚPhimoeDecoderLayerr   Ú	layer_idxc                 óä   •— t          ¦   «                              ||¦  «         t          j        |j        |j        d¬¦  «        | _        t          j        |j        |j        d¬¦  «        | _        d S ©NT)ÚepsÚelementwise_affine)rž   r   r   Ú	LayerNormrŸ   Úrms_norm_epsÚinput_layernormÚpost_attention_layernorm)r(   r   rÀ   r9   s      €r*   r   zPhimoeDecoderLayer.__init__O  sk   ø€ Ý‰Œ×Ò˜ Ñ+Ô+Ð+õ  "œ|¨FÔ,>ÀFÔDWÐlpÐqÑqÔqˆÔÝ(*¬ØÔ FÔ$7ÈDð)
ñ )
ô )
ˆÔ%Ð%Ð%r+   )r:   rT   rU   r   Úintr   r­   r®   s   @r*   r¿   r¿   N  sK   ø€ € € € € ð
˜|ð 
¸ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r+   r¿   c                   ó0   — e Zd Z eed¬¦  «        eedœZdS )ÚPhimoePreTrainedModelr   )rg   )rª   r¦   Ú
attentionsN)r:   rT   rU   r	   rš   r¿   rX   Ú_can_record_outputsrV   r+   r*   rË   rË   Y  s6   € € € € € à'˜Ð(8ÀÐBÑBÔBØ+Ø%ðð ÐÐÐr+   rË   c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )ÚPhimoeModelr   c                 ó–   •— t          ¦   «                              |¦  «         t          j        |j        |j        d¬¦  «        | _        d S rÂ   )rž   r   r   rÅ   rŸ   rÆ   Únormr¥   s     €r*   r   zPhimoeModel.__init__b  s>   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”L Ô!3¸Ô9LÐaeÐfÑfÔfˆŒ	ˆ	ˆ	r+   )r:   rT   rU   r   r   r­   r®   s   @r*   rÏ   rÏ   a  sO   ø€ € € € € ðg˜|ð gð gð gð gð gð gð gð gð gð gr+   rÏ   c                   ó6   ‡ — e Zd Zˆ fd„Z	 	 	 	 	 	 dˆ fd„	Zˆ xZS )ÚPhimoeForCausalLMc                 óª   •— t          ¦   «                              |¦  «         t          j        |j        |j        | j        j        ¬¦  «        | _        d S )Nrœ   )	rž   r   r   ÚLinearrŸ   Ú
vocab_sizer   Úlm_head_biasÚlm_headr¥   s     €r*   r   zPhimoeForCausalLM.__init__h  sB   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”y Ô!3°VÔ5FÈTÌ[ÔMeÐfÑfÔfˆŒˆˆr+   NTc                 ó   •— |rYt          | j        d¦  «        rD|j        d         | j        j        dz   k    r&|                     ¦   «         }	|	| j        j        k    rd } t          ¦   «         j        d|||||||dœ|¤Ž}
|
S )Nr.   r   )Ú	input_idsÚpast_key_valuesÚattention_maskÚinputs_embedsrJ   Ú	use_cacheÚlogits_to_keeprV   )Úhasattrr   r?   r.   Úget_seq_lengthrž   Úprepare_inputs_for_generation)r(   rÚ   rÛ   rÜ   rÝ   rJ   rÞ   rß   ÚkwargsÚpast_lengthÚmodel_inputsr9   s              €r*   râ   z/PhimoeForCausalLM.prepare_inputs_for_generationm  s°   ø€ ð" ð	'å˜œÐ%GÑHÔHð	'ð ” Ô" d¤kÔ&RÐUVÑ&VÒVÐVà)×8Ò8Ñ:Ô:ˆKØ˜dœkÔJÒJÐJØ"&�à<•u‘w”wÔ<ð 	
ØØ+Ø)Ø'Ø%ØØ)ð	
ð 	
ð ð	
ð 	
ˆð Ðr+   )NNNNTN)r:   rT   rU   r   râ   r­   r®   s   @r*   rÓ   rÓ   g  so   ø€ € € € € ðgð gð gð gð gð ØØØØØð#ð #ð #ð #ð #ð #ð #ð #ð #ð #r+   rÓ   c                   ó   — e Zd ZdS )ÚPhimoeForSequenceClassificationNrY   rV   r+   r*   rç   rç   “  s   € € € € € € € r+   rç   )rË   rÏ   rÓ   rç   )r
   ))r½   Úcollections.abcr   r;   r   Úmodeling_layersr   Úmodeling_rope_utilsr   Úutils.genericr   Úutils.output_capturingr	   Úllama.modeling_llamar   Úmixtral.modeling_mixtralr   r   r   r   r   r   Úconfiguration_phimoer   r   rX   ÚautogradÚFunctionr\   r–   r˜   rÕ   rš   r   r°   r¿   rË   rÏ   rÓ   rç   Ú__all__rV   r+   r*   ú<module>ró      s"  ðð Ð à $Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð 7Ð 6Ð 6Ð 6Ð 6Ð 6Ø +Ð +Ð +Ð +Ð +Ð +Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð /Ð .Ð .Ð .Ð .Ð .ð*0ð *0ð *0ð *0ð *0Ð2ñ *0ô *0ð *0ðZ	ð 	ð 	ð 	ð 	�nñ 	ô 	ð 	ð;
ð ;
ð ;
ð ;
ð ;
�u”~Ô.ñ ;
ô ;
ð ;
ð|xð xð xð xðv	ð 	ð 	ð 	ð 	�Nñ 	ô 	ð 	ð@ð @ð @ð @ð @�r”yñ @ô @ð @ð(!Tð !Tð !Tð !Tð !T˜2œ9ñ !Tô !Tð !TðH
ð 
ð 
ð 
ð 
Ð,ñ 
ô 
ð 
ðð ð ð ð Ð2ñ ô ð ðgð gð gð gð g�,ñ gô gð gð)ð )ð )ð )ð )Ð*ñ )ô )ð )ðX dÐ cÐ cÐ cÐ cÐ&FÐH]Ñ cÔ cÐ cðð ð €€€r+   