Ë
    ÛÓ^j™‰  ã                   óš  — d dl m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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 ddlmZmZ ddlmZ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* ddl+m,Z,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2  e*jf                  e4«      Z5 ed«       G d„ dejl                  «      «       Z7 G d„ dejl                  «      Z8 G d„ dejl                  «      Z9 G d„ dejl                  «      Z: G d „ d!ejl                  «      Z; G d"„ d#ejl                  «      Z<d$„ Z= ed%«      dDd&„«       Z>d'ej~                  d(e@d)ej~                  fd*„ZA	 dEd+ejl                  d,ej~                  d-ej~                  d.ej~                  d/ej~                  dz  d0eBd1eBd2e%e'   fd3„ZC G d4„ d5ejl                  «      ZD G d6„ d7e«      ZEe( G d8„ d9e#«      «       ZFe( G d:„ d;eF«      «       ZG	 	 	 dFd<ej~                  eHej~                     z  dz  d=e@dz  d/ej~                  dz  d)ej~                  e@z  fd>„ZI G d?„ d@eFe«      ZJ G dA„ dBeeF«      ZKg dC¢ZLy)Gé    )ÚCallable)ÚOptionalN)Únn)Ú
functionalé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úuse_kernel_forward_from_hubÚuse_kernel_func_from_hub)Úcreate_causal_mask)Ú GenericForSequenceClassificationÚGradientCheckpointingLayer)ÚMoeCausalLMOutputWithPastÚMoeModelOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmaybe_autocastÚmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )ÚJetMoeConfigÚRMSNormc                   óh   ‡ — e Zd Zddeddfˆ fd„Zdej                  dej                  fd„Zd„ Zˆ xZ	S )	ÚJetMoeRMSNormÚepsÚreturnNc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)z<
        JetMoeRMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__r   Ú	ParameterÚtorchÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizer&   Ú	__class__s      €úu/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/jetmoe/modeling_jetmoe.pyr*   zJetMoeRMSNorm.__init__2   s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕó    Úhidden_statesc                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S )Né   éÿÿÿÿT)Úkeepdim)	ÚdtypeÚtor,   Úfloat32ÚpowÚmeanÚrsqrtr/   r.   )r0   r5   Úinput_dtypeÚvariances       r3   ÚforwardzJetMoeRMSNorm.forward:   sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r4   c                 ó^   — t        | j                  j                  «      › d| j                  › �S )Nz, eps=)Útupler.   Úshaper/   )r0   s    r3   Ú
extra_reprzJetMoeRMSNorm.extra_reprA   s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr4   )g�íµ ÷Æ°>)
Ú__name__Ú
__module__Ú__qualname__Úfloatr*   r,   ÚTensorrB   rF   Ú__classcell__©r2   s   @r3   r%   r%   0   s7   ø„ ñ$¨ð $¸$õ $ð; U§\¡\ð ;°e·l±ló ;öJr4   r%   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 )ÚJetMoeRotaryEmbeddingÚinv_freqNÚconfigc                 ó®  •— t         ‰| �  «        |j                  | _        |j                  | _        || _        | j
                  j                  d   | _        | j                  }| j                  dk7  rt        | j                     } || j
                  |«      \  }| _
        | j                  d|d¬«       | j                  d|j                  «       d¬«       y )NÚ	rope_typeÚdefaultrP   F)Ú
persistentÚoriginal_inv_freq)r)   r*   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenrQ   Úrope_parametersrS   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚclone)r0   rQ   ÚdeviceÚrope_init_fnrP   r2   s        €r3   r*   zJetMoeRotaryEmbedding.__init__H   s¶   ø€ Ü‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àˆŒàŸ™×4Ñ4°[ÑAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÒ&Ü.¨t¯~©~Ñ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆ�$Ô(à×Ñ˜Z¨¸eÐÔDØ×ÑÐ0°(·.±.Ó2BÈuÐÕUr4   r_   ztorch.deviceÚseq_lenr'   ztorch.Tensorc                 ó  — | j                   d   }t        | dd«      xs | j                  | j                  z  }d}d|t	        j
                  d|dt        j                  ¬«      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_dimNg      ð?r   r7   ©r:   )r_   r:   )	rZ   Úgetattrr1   Únum_attention_headsr,   ÚarangeÚint64r;   rJ   )rQ   r_   ra   ÚbaseÚdimÚattention_factorrP   s          r3   r[   z5JetMoeRotaryEmbedding.compute_default_rope_parametersX   s�   € ð& ×%Ñ% lÑ3ˆÜ�f˜j¨$Ó/Òc°6×3EÑ3EÈ×IcÑIcÑ3cˆàÐð Ø”U—\‘\ ! S¨!´5·;±;Ô?×BÑBÈ&ÔX]×XcÑXcÐBÓdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r4   c                 óN  — | j                   d d d …d f   j                  «       j                  |j                  d   dd«      j	                  |j
                  «      }|d d …d d d …f   j                  «       }t        |j
                  j                  t        «      r/|j
                  j                  dk7  r|j
                  j                  nd}t        |d¬«      5  |j                  «       |j                  «       z  j                  dd«      }t        j                  ||fd¬	«      }|j                  «       | j                  z  }|j                  «       | j                  z  }	d d d «       j	                  |j                   ¬
«      	j	                  |j                   ¬
«      fS # 1 sw Y   ŒAxY w)Nr   r8   r!   ÚmpsÚcpuF)Údevice_typeÚenabledr7   ©rk   re   )rP   rJ   ÚexpandrE   r;   r_   Ú
isinstanceÚtypeÚstrr   Ú	transposer,   ÚcatÚcosr\   Úsinr:   )
r0   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedrp   ÚfreqsÚembry   rz   s
             r3   rB   zJetMoeRotaryEmbedding.forwardv   sR  € ð !ŸM™M¨$²°4¨-Ñ8×>Ñ>Ó@×GÑGÈ×HZÑHZÐ[\ÑH]Ð_aÐcdÓe×hÑhÐij×iqÑiqÓrÐØ ,ªQ°²a¨ZÑ 8× >Ñ >Ó @Ðä'1°!·(±(·-±-ÄÔ'EÈ!Ï(É(Ï-É-Ð[`ÒJ`�a—h‘h—m’mÐfkˆÜ¨¸UÔCñ 	5Ø&×,Ñ,Ó.Ð1F×1LÑ1LÓ1NÑN×YÑYÐZ[Ð]^Ó_ˆEÜ—)‘)˜U E˜N°Ô3ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆC÷		5ð �v‰v˜AŸG™GˆvÓ$ c§f¡f°1·7±7 fÓ&;Ð;Ð;÷	5ð 	5ús   ÃBFÆF$©N©NNN)rG   rH   rI   r,   rK   Ú__annotations__r"   r*   Ústaticmethodr   ÚintrD   rJ   r[   Úno_gradr   rB   rL   rM   s   @r3   rO   rO   E   s˜   ø… Ø�l‰lÓñV˜|õ Vð  à&*Ø+/Ø"ñ*Ø˜tÑ#ð*à˜Ñ(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ñ	%ò	*ó ð*ð: €U‡]�]ƒ_Øñ<ó ó ô<r4   rO   c                   ó6   ‡ — e Zd Zdedededdfˆ fd„Zd„ Zˆ xZS )ÚJetMoeParallelExpertsÚnum_expertsÚ
input_sizeÚoutput_sizer'   Nc                 óª   •— t         ‰| �  «        t        j                  t	        j
                  |||«      «      | _        || _        || _        || _	        y)aÃ  
        Initialize the JetMoeParallelExperts module.
        The experts weights are stored in [num_experts, output_size, input_size] format. Such that it's compatible with
        many MoE libraries, such as [Megablock](https://github.com/databricks/megablocks) and
        [ScatterMoE](https://github.com/shawntan/scattermoe), as well as the
        [MoE kernel](https://github.com/vllm-project/vllm/blob/main/vllm/model_executor/layers/fused_moe/fused_moe.py)
        used in vllm.

        Args:
            num_experts (int):
                Number of experts.
            input_size (int):
                Size of the input.
            output_size (int):
                Size of the output.
        N)
r)   r*   r   r+   r,   Úemptyr.   r‰   rŠ   r‹   )r0   r‰   rŠ   r‹   r2   s       €r3   r*   zJetMoeParallelExperts.__init__‡   sD   ø€ ô" 	‰ÑÔÜ—l‘l¤5§;¡;¨{¸KÈÓ#TÓUˆŒØ&ˆÔØ$ˆŒØ&ˆÕr4   c                 óü   — |j                  |d¬«      }g }t        | j                  «      D ]7  }|j                  t	        j
                  ||   | j                  |   «      «       Œ9 t        j                  |d¬«      }|S )a  
        Forward pass of the JetMoeParallelExperts module.

        Args:
            inputs (Tensor):
                Input tensor.
            expert_size:
                Expert size information.

        Returns:
            Tensor: Output tensor.
        r   rr   )	ÚsplitÚranger‰   ÚappendÚFÚlinearr.   r,   rx   )r0   ÚinputsÚexpert_sizeÚ
input_listÚoutput_listÚiÚresultss          r3   rB   zJetMoeParallelExperts.forwardž   sq   € ð —\‘\ +°1�\Ó5ˆ
ØˆÜ�t×'Ñ'Ó(ò 	HˆAØ×ÑœqŸx™x¨
°1©°t·{±{À1±~ÓFÕGð	Hä—)‘)˜K¨QÔ/ˆØˆr4   ©rG   rH   rI   r…   r*   rB   rL   rM   s   @r3   rˆ   rˆ   †   s)   ø„ ð' Cð '°Sð 'Àsð 'Ètõ 'ö.r4   rˆ   c                   ó2   ‡ — e Zd Zdededefˆ fd„Zd„ Zˆ xZS )ÚJetMoeTopKGatingrŠ   r‰   Útop_kc                 ó†   •— t         ‰| �  «        || _        || _        || _        t        j                  ||d¬«      | _        y)a  
        Initialize the top-k gating mechanism.

        Args:
            input_size (`int`):
                Size of the input.
            num_experts (`int`):
                Number of experts.
            top_k (`int`):
                Number of top experts to select.
        F©ÚbiasN)r)   r*   r‰   rŠ   r�   r   ÚLinearÚlayer)r0   rŠ   r‰   r�   r2   s       €r3   r*   zJetMoeTopKGating.__init__´   s:   ø€ ô 	‰ÑÔà&ˆÔØ$ˆŒØˆŒ
ä—Y‘Y˜z¨;¸UÔCˆ�
r4   c                 ó˜  — | j                  |«      j                  «       }|j                  | j                  d¬«      \  }}t	        j
                  |d¬«      j                  |«      }t	        j                  |j                  d«      | j                  g|j                  |j                  ¬«      }|j                  d|d«      }|j                  «       j                  d«      }|j                  «       }|j!                  «       }	|	j#                  d«      \  }
}|j%                  | j                  d¬«      }|j!                  «       }||   }|||||fS )Nr!   rr   r   ©r:   r_   Útrunc)Úrounding_mode)r¢   rJ   Útopkr�   r,   ÚsoftmaxÚtype_asÚzerosÚsizer‰   r:   r_   ÚscatterÚlongÚsumÚtolistÚflattenÚsortÚdiv)r0   r5   ÚlogitsÚtop_k_logitsÚtop_k_indicesÚtop_k_gatesrª   Úgatesr•   Útop_k_expertsÚ_Úindex_sorted_expertsÚbatch_indexÚbatch_gatess                 r3   rB   zJetMoeTopKGating.forwardÈ   s.  € à—‘˜MÓ*×0Ñ0Ó2ˆØ&,§k¡k°$·*±*À! kÓ&DÑ#ˆ�mÜ—m‘m L°aÔ8×@Ñ@ÀÓOˆô —‘Ø×Ñ˜aÓ  $×"2Ñ"2Ð3¸;×;LÑ;LÐU`×UgÑUgô
ˆð —‘˜a °Ó2ˆØ—j‘j“l×&Ñ& qÓ)ˆð "×(Ñ(Ó*ˆð &×-Ñ-Ó/ˆØ"/×"4Ñ"4°QÓ"7ÑˆÐØ*×.Ñ.¨t¯z©zÈÐ.ÓQˆð "×)Ñ)Ó+ˆØ!Ð"6Ñ7ˆà# [°+¸{ÈFÐRÐRr4   rš   rM   s   @r3   rœ   rœ   ³   s'   ø„ ðD 3ð D°Sð DÀõ Dö(Sr4   rœ   c                   ó.   ‡ — e Zd ZdZdefˆ fd„Zd„ Zˆ xZS )Ú	JetMoeMoEzº
    A Sparsely gated mixture of experts layer with 1-layer Feed-Forward networks as experts.

    Args:
        config:
            Configuration object with model hyperparameters.
    rQ   c                 ó@  •— t         ‰| �  «        |j                  | _        |j                  | _        t
        |j                     | _        t        j                  j                  t        j                  | j                  «      «      | _        t        |j                  | j                  | j                  dz  «      | _        t        |j                  | j                  | j                  «      | _        t#        | j                  |j                  |j$                  ¬«      | _        y )Nr7   ©rŠ   r‰   r�   )r)   r*   r1   rŠ   Úintermediate_sizer	   Úactivation_functionÚ
activationr,   r   r+   r�   r    rˆ   Únum_local_expertsÚinput_linearÚoutput_linearrœ   Únum_experts_per_tokÚrouter©r0   rQ   r2   s     €r3   r*   zJetMoeMoE.__init__í   sÏ   ø€ Ü‰ÑÔà ×,Ñ,ˆŒØ!×3Ñ3ˆÔÜ  ×!;Ñ!;Ñ<ˆŒÜ—H‘H×&Ñ&¤u§{¡{°4·?±?Ó'CÓDˆŒ	Ü1°&×2JÑ2JÈDÏOÉOÐ]a×]mÑ]mÐpqÑ]qÓrˆÔÜ2°6×3KÑ3KÈT×M]ÑM]Ð_c×_nÑ_nÓoˆÔä&Ø—‘Ø×0Ñ0Ø×,Ñ,ô
ˆ�r4   c                 ó8  — |j                  «       \  }}}|j                  d|«      }| j                  |«      \  }}}}}	||   }
| j                  |
|«      }|j	                  dd¬«      }| j                  |d   «      |d   z  }| j                  ||«      }||dd…df   z  }t        j                  ||z  | j                  f|j                  |j                  ¬«      }|j                  d||«      }|j                  ||| j                  «      }|| j                  z   }|S )a  
        Forward pass of the mixture of experts layer.

        Args:
            layer_input (Tensor):
                Input tensor.

        Returns:
            Tensor:
                Output tensor.
            Tensor:
                Router logits.
        r8   r7   rr   r   r!   Nr¤   )r«   ÚreshaperÈ   rÅ   ÚchunkrÃ   rÆ   r,   rª   rŠ   r:   r_   Ú	index_addÚviewr    )r0   Úlayer_inputÚbszÚlengthÚemb_sizer¹   r»   r¼   r•   Úrouter_logitsÚexpert_inputsr5   Úchunked_hidden_statesÚexpert_outputsrª   Úlayer_outputs                   r3   rB   zJetMoeMoE.forwardý   s%  € ð !,× 0Ñ 0Ó 2ÑˆˆV�XØ!×)Ñ)¨"¨hÓ7ˆØBFÇ+Á+ÈkÓBZÑ?ˆˆ;˜ [°-à# KÑ0ˆØ×)Ñ)¨-¸ÓEˆØ -× 3Ñ 3°A¸2Ð 3Ó >ÐØŸ™Ð(=¸aÑ(@ÓAÐDYÐZ[ÑD\Ñ\ˆØ×+Ñ+¨M¸;ÓGˆà'¨+²a¸°gÑ*>Ñ>ˆä—‘˜S 6™\¨4¯?©?Ð;À>×CWÑCWÐ`n×`uÑ`uÔvˆØ—‘ q¨+°~ÓFˆØ#×(Ñ(¨¨f°d·o±oÓFˆØ# d§i¡iÑ/ˆØÐr4   )rG   rH   rI   Ú__doc__r"   r*   rB   rL   rM   s   @r3   r¾   r¾   ä   s   ø„ ñð
˜|õ 
ö r4   r¾   c                   ó:   ‡ — e Zd ZdZdefˆ fd„Zd„ Zd„ Zd„ Zˆ xZ	S )Ú	JetMoeMoAzÅ
    A Sparsely gated mixture of attention layer with pairs of query- and output-projections as experts.

    Args:
        config:
            Configuration object with model hyperparameters.
    rQ   c                 óh  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  |j                  z  | _        |j                  | _	        t        j                  j                  t        j                  | j
                  «      «      | _        t        | j                  | j
                  | j                  «      | _        t        | j                  | j                  | j
                  «      | _        t%        | j
                  | j                  | j                  ¬«      | _        y )NrÀ   )r)   r*   rÄ   r‰   r1   rŠ   Úkv_channelsÚnum_key_value_headsrÇ   r�   r,   r   r+   r�   r    rˆ   rÅ   rÆ   rœ   rÈ   rÉ   s     €r3   r*   zJetMoeMoA.__init__'  sÛ   ø€ Ü‰ÑÔà!×3Ñ3ˆÔØ ×,Ñ,ˆŒØ!×-Ñ-°×0JÑ0JÑJˆÔØ×/Ñ/ˆŒ
Ü—H‘H×&Ñ&¤u§{¡{°4·?±?Ó'CÓDˆŒ	ä1°$×2BÑ2BÀDÇOÁOÐUY×UeÑUeÓfˆÔÜ2°4×3CÑ3CÀT×EUÑEUÐW[×WfÑWfÓgˆÔä&Ø—‘Ø×(Ñ(Ø—*‘*ô
ˆ�r4   c                 ó²  — |j                  «       \  }}}|j                  d|«      }| j                  |«      \  }}}}}	||||f}
||   }| j                  ||«      }t	        j
                  ||z  | j                  z  | j                  f|j                  |j                  ¬«      }|j                  d||«      }|j                  ||| j                  d«      }||	|
fS )z�
        Map inputs to attention experts according to routing decision and compute query projection inside each experts.
        r8   r¤   r   )r«   rË   rÈ   rÅ   r,   rª   r�   r1   r:   r_   rÍ   rÎ   )r0   rÏ   rÐ   rÑ   rÒ   rº   r»   r¼   r•   rÓ   Ú	topo_inforÔ   rÖ   rª   r×   s                  r3   ÚmapzJetMoeMoA.map9  sì   € ð !,× 0Ñ 0Ó 2ÑˆˆV�XØ!×)Ñ)¨"¨hÓ7ˆØUY×U`ÑU`ÐalÓUmÑRÐ˜k¨;¸À]Ø)¨;¸À[ÐQˆ	ð $ KÑ0ˆØ×*Ñ*¨=¸+ÓFˆô —‘Ø�6‰\˜DŸJ™JÑ&¨×(8Ñ(8Ð9À×AUÑAUÐ^l×^sÑ^sô
ˆð —‘ qÐ*>ÀÓOˆØ#×(Ñ(¨¨f°d·j±jÀ"ÓEˆØ˜]¨IÐ5Ð5r4   c                 óœ  — |j                  «       \  }}}}|j                  d|«      }|\  }}}	}
||   }| j                  ||
«      }||	dd…df   z  }t        j                  ||z  | j
                  f|j                  |j                  ¬«      }|j                  d||«      }|j                  ||| j
                  «      }|| j                  z   }|S )zu
        Compute output projection inside each attention experts and merge the outputs of different experts.
        r8   Nr¤   r   )r«   rË   rÆ   r,   rª   rŠ   r:   r_   rÍ   rÎ   r    )r0   rÏ   rß   rÐ   rÑ   Úkr1   rº   r»   r¼   r•   rÔ   rÖ   rª   r×   s                  r3   ÚreducezJetMoeMoA.reduceP  sÜ   € ð '2×&6Ñ&6Ó&8Ñ#ˆˆV�Q˜Ø!×)Ñ)¨"¨kÓ:ˆØFOÑCÐ˜k¨;¸ð $Ð$8Ñ9ˆØ×+Ñ+¨M¸;ÓGˆð (¨+²a¸°gÑ*>Ñ>ˆô —‘˜S 6™\¨4¯?©?Ð;À>×CWÑCWÐ`n×`uÑ`uÔvˆØ—‘ q¨+°~ÓFˆØ#×(Ñ(¨¨f°d·o±oÓFˆØ# d§i¡iÑ/ˆØÐr4   c                 ó   — t        d«      ‚)Nz-This module doesn't support call and forward.)ÚNotImplementedError)r0   rÏ   s     r3   rB   zJetMoeMoA.forwardf  s   € Ü!Ð"QÓRÐRr4   )
rG   rH   rI   rØ   r"   r*   rà   rã   rB   rL   rM   s   @r3   rÚ   rÚ     s$   ø„ ñð
˜|õ 
ò$6ò.ö,Sr4   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..Nr8   r7   rr   )rE   r,   rx   )r{   Úx1Úx2s      r3   Úrotate_halfré   j  sZ   € à	
ˆ3Ð"�!—'‘'˜"‘+ Ñ"Ð"Ð"Ñ	#€BØ	
ˆ3�—‘˜‘˜qÑ Ñ"Ð"Ñ	#€BÜ�9‰9�r�c˜2�Y BÔ'Ð'r4   Úrotary_pos_embc                 óž   — |j                  |«      }|j                  |«      }| |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.
    )Ú	unsqueezeré   )Úqrâ   ry   rz   Úunsqueeze_dimÚq_embedÚk_embeds          r3   Úapply_rotary_pos_embrñ   q  sY   € ð& �-‰-˜Ó
&€CØ
�-‰-˜Ó
&€CØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�GÐÐr4   r5   Ún_repr'   c                 óª   — | j                   \  }}}}|dk(  r| S | dd…dd…ddd…dd…f   j                  |||||«      } | j                  |||z  ||«      S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r!   N)rE   rs   rË   )r5   rò   ÚbatchrÝ   Úslenrd   s         r3   Ú	repeat_kvrö   ‹  so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTr4   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t        || j                  «      }t        || j                  «      }	t        j                  ||j	                  dd«      «      |z  }
|�|
|z   }
t
        j                  j                  |
dt        j                  ¬«      j                  |j                  «      }
t
        j                  j                  |
|| j                  ¬«      }
t        j                  |
|	«      }|j	                  dd«      j                  «       }||
fS )Nr7   r   r8   )rk   r:   )ÚpÚtrainingr!   )rö   Únum_key_value_groupsr,   Úmatmulrw   r   r   r¨   r<   r;   r:   rý   r  Ú
contiguous)r÷   rø   rù   rú   rû   rü   rý   rþ   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r3   Úeager_attention_forwardr	  —  sà   € ô ˜3 × ;Ñ ;Ó<€JÜ˜U F×$?Ñ$?Ó@€Lä—<‘<  z×';Ñ';¸A¸qÓ'AÓBÀWÑL€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r4   c                   ó   ‡ — e Zd ZdZddededz  fˆ fd„Z	 	 	 ddej                  dej                  dz  dej                  dz  d	e
dz  d
eej                  ej                  dz  eej                     dz  f   f
d„Zˆ xZS )ÚJetMoeAttentionzH
    Multi-headed attention from 'Attention Is All You Need' paper.
    NrQ   Ú	layer_idxc                 ób  •— t         ‰| �  «        || _        || _        d| _        |€-t
        j                  d| j                  j                  › d�«       d| _	        |j                  | _        |j                  | _        |j                  |j                  z  | _        |j                  | _        |j                   | _        |j                  | _        | j$                  dz  | _        t)        |«      | _        t,        j.                  j1                  |j2                  | j                  dz  d¬	«      | _        y)
zä
        Initialize the JetMoeAttention module.

        Args:
            config:
                Configuration object with model hyperparameters.
            layer_idx:
                Index of the layer in the model.
        TNz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.r!   g      à¿r7   FrŸ   )r)   r*   rQ   r  Ú	is_causalÚloggerÚwarning_oncer2   rG   r  rÇ   r�   Úattention_dropoutrÜ   rÝ   Úkv_projection_sizerg   Ú	num_headsrd   rü   rÚ   Úexpertsr,   r   r¡   r1   Úkv_proj©r0   rQ   r  r2   s      €r3   r*   zJetMoeAttention.__init__µ  s  ø€ ô 	‰ÑÔØˆŒØ"ˆŒØˆŒØÐÜ×ÑØ  §¡×!8Ñ!8Ð 9ð :,ð ,ôð %&ˆÔ!Ø×/Ñ/ˆŒ
Ø!'×!9Ñ!9ˆÔØ"(×"4Ñ"4°v×7QÑ7QÑ"QˆÔØ#)×#=Ñ#=ˆÔ Ø×3Ñ3ˆŒØ×*Ñ*ˆŒØ—}‘} dÑ*ˆŒÜ  Ó(ˆŒä—x‘x—‘ v×'9Ñ'9¸4×;RÑ;RÐUVÑ;VÐ]b�Ócˆ�r4   r5   rû   Úposition_embeddingsÚpast_key_valuesr'   c                 óì  — |j                   d d }g |¢d‘| j                  ‘­}| j                  j                  |«      \  }}	}
| j	                  |«      j                  dd¬«      \  }}|j                  |«      j                  dd«      }|j                  |«      j                  dd«      }|j                  |«      j                  dd«      }|\  }}t        ||||«      \  }}|� |j                  ||| j                  «      \  }}t        j                  | j                  j                  t        «      }|j!                  d| j"                  dd«      }|j!                  d| j"                  dd«      } || ||||f| j$                  sdn| j&                  | j(                  dœ|¤Ž\  }} |j                  g |¢| j"                  ‘d‘­Ž }| j                  j+                  ||
«      } |j                  g |¢d‘­Ž }|||	fS )Nr8   r7   rr   r!   ç        )rý   rü   )rE   rd   r  rà   r  rÌ   rÎ   rw   rñ   Úupdater  r   Úget_interfacerQ   Ú_attn_implementationr	  Úrepeatr�   r  r  rü   rã   )r0   r5   rû   r  r  rþ   Úinput_shapeÚhidden_shapeÚquery_statesrÓ   rß   r  r  ry   rz   Úattention_interfacer  r  s                     r3   rB   zJetMoeAttention.forwardÖ  s  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà15·±×1AÑ1AÀ-Ó1PÑ.ˆ�m YØ#'§<¡<°Ó#>×#DÑ#DÀQÈBÐ#DÓ#OÑ ˆ
�Là#×(Ñ(¨Ó6×@Ñ@ÀÀAÓFˆØ—_‘_ \Ó2×<Ñ<¸QÀÓBˆ
Ø#×(Ñ(¨Ó6×@Ñ@ÀÀAÓFˆà&‰ˆˆSÜ#7¸ÀjÐRUÐWZÓ#[Ñ ˆ�jàÐ&Ø'6×'=Ñ'=¸jÈ,ÐX\×XfÑXfÓ'gÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðð  ×&Ñ& q¨$¯*©*°a¸Ó;ˆ
Ø#×*Ñ*¨1¨d¯j©j¸!¸QÓ?ˆá$7ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð '�k×&Ñ&ÐD¨ÐD°T·Z±ZÐDÀÒDˆØ—l‘l×)Ñ)¨+°yÓAˆØ&�k×&Ñ&Ð8¨Ð8°RÒ8ˆØ˜L¨-Ð7Ð7r4   r�   r‚   )rG   rH   rI   rØ   r"   r…   r*   r,   rK   Ú
LongTensorr
   rD   rB   rL   rM   s   @r3   r  r  °  s¦   ø„ ññd˜|ð d¸¸d¹
õ dðH /3Ø7;Ø(,ñ/8à—|‘|ð/8ð Ÿ™ tÑ+ð/8ð #×-Ñ-°Ñ4ð	/8ð
  ™ð/8ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	M÷/8r4   r  c                   ó
  ‡ — e Zd Zddededz  fˆ fd„Z	 	 	 	 	 ddej                  dej                  dz  dej                  dz  de	dz  d	e
dz  d
eej                  ej                  f   dz  dee   dej                  fd„Zˆ xZS )ÚJetMoeDecoderLayerNrQ   r  c                 óî   •— t         ‰| �  «        |j                  | _        t        |«      | _        t        |j                  «      | _        t        |j                  «      | _        t        ||«      | _	        y r�   )
r)   r*   r1   r¾   Úmlpr%   Úinput_layernormÚpost_attention_layernormr  Úself_attentionr  s      €r3   r*   zJetMoeDecoderLayer.__init__	  s]   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔÜ˜VÓ$ˆŒÜ,¨V×-?Ñ-?Ó@ˆÔÜ(5°f×6HÑ6HÓ(IˆÔ%Ü-¨f°iÓ@ˆÕr4   r5   rû   r|   r  Ú	use_cacher  rþ   r'   c           
      óÂ   — |}| j                  |«      } | j                  d||||||dœ|¤Ž\  }}	}	||z   }|}| j                  |«      }| j                  |«      }||z   }|S )N)r5   rû   r|   r  r+  r  © )r(  r*  r)  r'  )
r0   r5   rû   r|   r  r+  r  rþ   Úresidualr¹   s
             r3   rB   zJetMoeDecoderLayer.forward  s”   € ð !ˆØ×,Ñ,¨]Ó;ˆà1˜d×1Ñ1ð 
Ø'Ø)Ø%Ø+ØØ 3ñ
ð ñ
Ñˆ�q˜!ð ! =Ñ0ˆð !ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ  =Ñ0ˆØÐr4   r�   )NNNFN)rG   rH   rI   r"   r…   r*   r,   rK   r#  r
   ÚboolrD   r   r   rB   rL   rM   s   @r3   r%  r%    sÂ   ø„ ñA˜|ð A¸¸d¹
õ Að /3Ø04Ø(,Ø!&ØHLñà—|‘|ðð Ÿ™ tÑ+ðð ×&Ñ&¨Ñ-ð	ð
  ™ðð ˜$‘;ðð # 5§<¡<°·±Ð#=Ñ>ÀÑEðð Ð+Ñ,ðð 
�‰÷r4   r%  c                   óº   ‡ — e Zd ZU eed<   dZdZdgZdgZdZ	dZ
dZdZdZ eed¬«       eed	¬«      ge eed
¬«      dœZ ej(                  «       ˆ fd„«       Zˆ xZS )ÚJetMoePreTrainedModelrQ   ÚmodelFr%  r  Tr7   )Úindexé   r!   )rÓ   r5   Ú
attentionsc                 ó   •— t         ‰| �  |«       t        |t        «      r7t	        j
                  |j                  d| j                  j                  ¬«       yt        |t        t        z  «      r t	        j                  |j                  «       yy)zInitialize the weights.r  )r>   ÚstdN)r)   Ú_init_weightsrt   rˆ   ÚinitÚnormal_r.   rQ   Úinitializer_rangerÚ   r¾   Úzeros_r    )r0   r÷   r2   s     €r3   r8  z#JetMoePreTrainedModel._init_weightsC  s_   ø€ ô 	‰Ñ˜fÔ%Ü�fÔ3Ô4Ü�L‰L˜Ÿ™¨S°d·k±k×6SÑ6SÖTÜ˜¤	¬IÑ 5Ô6Ü�K‰K˜Ÿ™Õ$ð 7r4   )rG   rH   rI   r"   rƒ   Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphÚ_supports_attention_backendr   r  rœ   r%  Ú_can_record_outputsr,   r†   r8  rL   rM   s   @r3   r1  r1  1  s�   ø… àÓØÐØ&+Ð#Ø-Ð.ÐØ#4Ð"5ÐØÐØ€NØÐØ"ÐØ"&Ðá(¨ÀÔBÁNÐScÐklÔDmÐnØ+Ù$ _¸AÔ>ñÐð €U‡]�]ƒ_ó%ó ô%r4   r1  c                   óò   ‡ — e Zd Zdefˆ fd„Zeee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dedz  dej                  dz  d	edz  d
ee   defd„«       «       «       Zˆ xZS )ÚJetMoeModelrQ   c           	      ó.  •— t         ‰| �  |«       |j                  | _        |j                  | _        t        j                  |j                  |j                  | j                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        t        |j                  |j                  ¬«      | _        t#        |¬«      | _        d| _        |j(                  | _        | j+                  «        y c c}w )N)r&   ©rQ   F)r)   r*   Úpad_token_idÚpadding_idxÚ
vocab_sizer   Ú	Embeddingr1   Úembed_tokensÚ
ModuleListr�   Únum_hidden_layersr%  Úlayersr%   Úrms_norm_epsÚnormrO   Ú
rotary_embÚgradient_checkpointingr  Ú	post_initr  s      €r3   r*   zJetMoeModel.__init__O  sÔ   ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒäŸL™L¨×):Ñ):¸F×<NÑ<NÐPT×P`ÑP`ÓaˆÔÜ—m‘mÜDIÈ&×JbÑJbÓDcÖd°yÔ ¨	Õ2Òdó
ˆŒô " &×"4Ñ"4¸&×:MÑ:MÔNˆŒ	Ü/°vÔ>ˆŒØ&+ˆÔ#Ø$*×$?Ñ$?ˆÔ!ð 	�‰Õùò es   ÂDNÚ	input_idsrû   r|   r  Úinputs_embedsr+  rþ   r'   c           
      ó:  — |d u |d uz  rt        d«      ‚|r|€t        | j                  ¬«      }|€| j                  |«      }|€V|�|j	                  «       nd}t        j                  |j                  d   |j                  ¬«      |z   }|j                  d«      }t        | j                  ||||¬«      }	|}
| j                  |
|«      }| j                  d | j                  j                   D ]  } ||
f||	|||dœ|¤Ž}
Œ | j                  |
«      }
t        |
|¬«      S )	Nz:You must specify exactly one of input_ids or inputs_embedsrJ  r   r!   )r_   )rQ   rY  rû   r  r|   )r  rû   r  r+  r|   )Úlast_hidden_stater  )Ú
ValueErrorr   rQ   rO  Úget_seq_lengthr,   rh   rE   r_   rì   r   rU  rR  rQ  rT  r   )r0   rX  rû   r|   r  rY  r+  rþ   Úpast_seen_tokensÚcausal_maskr5   r  Údecoder_layers                r3   rB   zJetMoeModel.forward`  sL  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZá˜Ð0Ü*°$·+±+Ô>ˆOàÐ Ø ×-Ñ-¨iÓ8ˆMàÐØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\Ð_oÑoˆLØ'×1Ñ1°!Ó4ˆLä(Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆð &ˆð #Ÿo™o¨m¸\ÓJÐà!Ÿ[™[Ð)H¨4¯;©;×+HÑ+HÐIò 		ˆMÙ)Øðà$7Ø*Ø /Ø#Ø)ñð ñ‰Mð		ð Ÿ	™	 -Ó0ˆä%Ø+Ø+ô
ð 	
r4   )NNNNNN)rG   rH   rI   r"   r*   r   r    r   r,   r#  rK   r
   ÚFloatTensorr/  r   r   r   rB   rL   rM   s   @r3   rH  rH  M  sÍ   ø„ ð˜|õ ð"  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ñ5
à×#Ñ# dÑ*ð5
ð Ÿ™ tÑ+ð5
ð ×&Ñ&¨Ñ-ð	5
ð
  ™ð5
ð ×(Ñ(¨4Ñ/ð5
ð ˜$‘;ð5
ð Ð+Ñ,ð5
ð 
 ò5
ó ó ó  ô5
r4   rH  Úgate_logitsr‰   c                 ó¾  — | �t        | t        «      syt        | t        «      rC| d   j                  }t        j                  | D �cg c]  }|j                  |«      ‘Œ c}d¬«      }t        j                  j                  j                  d¬«      }t        j                  ||d¬«      \  }}	t        j                  j                  j                  |	|«      }
|€>t        j                  |
j                  «       d¬«      }t        j                  |d¬«      }�n|j                  \  }}|j                  d   ||z  z  }|ddd…dd…ddf   j                  |||||f«      j                  d||«      j                  «      }t        j                   |
j                  «       |z  d¬«      t        j                   |d¬«      z  }|ddd…dd…df   j                  ||||f«      j                  d|«      j                  |«      }t        j                   ||z  d¬«      t        j                   |d¬«      z  }t        j                   ||j#                  d«      z  «      }||z  S c c}w )aÄ  
    Computes auxiliary load balancing loss as in Switch Transformer - implemented in Pytorch.

    See Switch Transformer (https://huggingface.co/papers/2101.03961) for more details. This function implements the loss
    function presented in equations (4) - (6) of the paper. It aims at penalizing cases where the routing between
    experts is too unbalanced.

    Args:
        gate_logits:
            Logits from the `gate`, should be a tuple of model.config.num_hidden_layers tensors of
            shape [batch_size X sequence_length, num_experts].
        num_experts:
            Number of experts
        top_k:
            The number of experts to route per-token, can be also interpreted as the `top-k` routing
            parameter.
        attention_mask (`torch.Tensor`, *optional*):
            The attention_mask used in forward function
            shape [batch_size X sequence_length] if not None.

    Returns:
        The auxiliary loss.
    Nr   rr   r8   )rt   rD   r_   r,   rx   r;   r   r   r¨   r§   Úone_hotr>   rJ   rE   rs   rË   r®   rì   )rb  r‰   r�   rû   Úcompute_deviceÚ
layer_gateÚconcatenated_gate_logitsÚrouting_weightsr¹   Úselected_expertsÚexpert_maskÚtokens_per_expertÚrouter_prob_per_expertÚ
batch_sizeÚsequence_lengthrQ  Úexpert_attention_maskÚ router_per_expert_attention_maskÚoverall_losss                      r3   Úload_balancing_loss_funcrr  ›  s9  € ð: Ð¤*¨[¼%Ô"@Øä�+œuÔ%Ø$ Q™×.Ñ.ˆÜ#(§9¡9Ð^iÖ-jÐPZ¨j¯m©m¸NÕ.KÒ-jÐpqÔ#rÐ ä—h‘h×)Ñ)×1Ñ1Ð2JÐPRÐ1ÓS€OäŸ*™* _°eÀÔDÑ€AÐä—(‘(×%Ñ%×-Ñ-Ð.>ÀÓL€KàÐä!ŸJ™J {×'8Ñ'8Ó':ÀÔBÐô "'§¡¨OÀÔ!CÒà&4×&:Ñ&:Ñ#ˆ
�OØ4×:Ñ:¸1Ñ=À*ÈÑB^Ñ_Ðð ˜4¢¢A t¨TÐ1Ñ2ß‰VÐ&¨
°OÀUÈKÐXÓYß‰W�R˜ Ó,ß‰R�Óð	 	ô "ŸI™I k×&7Ñ&7Ó&9Ð<QÑ&QÐWXÔYÔ\a×\eÑ\eØ! qô]
ñ 
Ðð ˜4¢¢A tÐ+Ñ,ß‰VÐ&¨
°OÀ[ÐQÓRß‰W�R˜Ó%ß‰R�Óð	 	)ô "'§¡¨?Ð=]Ñ+]ÐcdÔ!eÔhm×hqÑhqØ,°!ôi
ñ "
Ðô —9‘9Ð.Ð1G×1QÑ1QÐRSÓ1TÑTÓU€LØ˜+Ñ%Ð%ùò[ .ks   ÁIc                   ó,  ‡ — e Zd ZddiZˆ fd„Zee	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  de
dz  d	ej                  dz  d
ej                  dz  dedz  deej                  z  dedz  defd„«       «       Zˆ xZS )ÚJetMoeForCausalLMzlm_head.weightzmodel.embed_tokens.weightc                 óp  •— t         ‰| �  |«       t        |«      | _        |j                  | _        |j
                  | _        t        j                  |j                  |j                  d¬«      | _	        |j                  | _
        |j                  | _        |j                  | _        | j                  «        y )NFrŸ   )r)   r*   rH  r2  rM  Úaux_loss_coefr   r¡   r1   Úlm_headÚtie_word_embeddingsrÄ   r‰   rÇ   rW  rÉ   s     €r3   r*   zJetMoeForCausalLM.__init__ð  s�   ø€ Ü‰Ñ˜Ô Ü  Ó(ˆŒ
Ø ×+Ñ+ˆŒØ#×1Ñ1ˆÔÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒØ#)×#=Ñ#=ˆÔ Ø!×3Ñ3ˆÔØ#)×#=Ñ#=ˆÔ ð 	�‰Õr4   NrX  rû   r|   r  rY  Úlabelsr+  Úlogits_to_keepÚoutput_router_logitsr'   c
                 óL  —  | j                   d|||||||	dœ|
¤Ž}|j                  }t        |t        «      rt	        | d «      n|}| j                  |d d …|d d …f   «      }d }|�* | j                  ||fd| j                  j                  i|
¤Ž}d }|	rYt        |j                  | j                  | j                  |«      }|�+|| j                  |j                  |j                  «      z  z  }t!        ||||j"                  |j$                  |j&                  |j                  ¬«      S )N)rX  rû   r|   r  rY  r+  r{  rM  )ÚlossÚaux_lossr³   r  r5   r5  rÓ   r-  )r2  r[  rt   r…   Úslicerw  Úloss_functionrQ   rM  rr  rÓ   r‰   rÇ   rv  r;   r_   r   r  r5   r5  )r0   rX  rû   r|   r  rY  ry  r+  rz  r{  rþ   Úoutputsr5   Úslice_indicesr³   r}  r~  s                    r3   rB   zJetMoeForCausalLM.forwardý  sQ  € ð +5¨$¯*©*ð 	+
ØØ)Ø%Ø+Ø'ØØ!5ñ	+
ð ñ	+
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%ØØñð  Ÿ;™;×1Ñ1ðð ñ	ˆDð ˆÙÜ/Ø×%Ñ%Ø× Ñ Ø×(Ñ(Øó	ˆHð Ð!Ø˜×*Ñ*¨X¯[©[¸¿¹Ó-EÑEÑE�ä(ØØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø!×/Ñ/ô
ð 	
r4   )	NNNNNNNr   F)rG   rH   rI   Ú_tied_weights_keysr*   r   r   r,   r#  rK   r
   ra  r/  r…   r   rB   rL   rM   s   @r3   rt  rt  í  sù   ø„ Ø*Ð,GÐHÐôð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.Ø,1ñ9
à×#Ñ# dÑ*ð9
ð Ÿ™ tÑ+ð9
ð ×&Ñ&¨Ñ-ð	9
ð
  ™ð9
ð ×(Ñ(¨4Ñ/ð9
ð × Ñ  4Ñ'ð9
ð ˜$‘;ð9
ð ˜eŸl™lÑ*ð9
ð # T™kð9
ð 
#ò9
ó ó ô9
r4   rt  c                   ó   — e Zd Zy)ÚJetMoeForSequenceClassificationN)rG   rH   rI   r-  r4   r3   r…  r…  ;  s   … r4   r…  )rt  rH  r1  r…  )r!   )r  )Nr7   N)MÚcollections.abcr   Útypingr   r,   r   Útorch.nnr   r’   Ú r   r9  Úactivationsr	   Úcache_utilsr
   r   Ú
generationr   Úintegrationsr   r   Úmasking_utilsr   Úmodeling_layersr   r   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   r    Úconfiguration_jetmoer"   Ú
get_loggerrG   r  ÚModuler%   rO   rˆ   rœ   r¾   rÚ   ré   rñ   rK   r…   rö   rJ   r	  r  r%  r1  rH  rD   rr  rt  r…  Ú__all__r-  r4   r3   ú<module>r›     s‚  ðõ* %Ý ã Ý Ý $å &Ý !ß .Ý )ß QÝ /ß [ß Qß Kß FÝ &ß RÓ Rß Gß EÝ .ð 
ˆ×	Ñ	˜HÓ	%€ñ ˜YÓ'ôJ�B—I‘Ió Jó (ðJô(><˜BŸI™Iô ><ôB*˜BŸI™Iô *ôZ.S�r—y‘yô .Sôb7�—	‘	ô 7ôtIS�—	‘	ô ISòX(ñ Ð*Ó+òó ,ðð2	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uð& ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ð%ð Ð'Ñ(ó%ô2U8�b—i‘iô U8ôp&Ð3ô &ðR ô%˜Oó %ó ð%ð6 ôJ
Ð'ó J
ó ðJ
ð^ #Ø
Ø*.ñ	O&Ø—‘  e§l¡lÑ 3Ñ3°dÑ:ðO&à�t‘ðO&ð —L‘L 4Ñ'ð	O&ð
 ‡\�\�CÑóO&ôdK
Ð-¨ô K
ô\ dÐ&FÐH]Ô cò k�r4   