+
    œ°³jŒ�  ã                   ód  € ^ RI t ^ RIHt ^ RIHt ^ RIt^ RIHu Ht	 ^ RIHt ^RI
Ht ^RIHt ^RIHtHt ^RIHt ^R	IHt ^R
IHt ^RIHtHt ^RIHtHt ^RIHtH t  ^RI!H"t"H#t# ^RI$H%t%H&t& ^RI'H(t( ^RI)H*t*H+t+H,t,H-t- ^RI.H/t/ ^RI0H1t1H2t2 ^RI3H4t4H5t5 ^RI6H7t7 ]-! 4       '       d   ^ RI8H9t9 ]! R4       ! R R]Pt                  4      4       t; ! R R]Pt                  4      t<R t=]! R4      R8R l4       t>R R  lt?R9R! R" llt@R:R# R$ lltA]%! 4       tB]A]BR%&    ! R& R']Pt                  4      tC ! R( R)]Pt                  4      tD ! R* R+]Pt                  4      tE ! R, R-]4      tF]+ ! R. R/]&4      4       tG]+ ! R0 R1]G4      4       tHR;R2 R3 lltI]+ ! R4 R5]G]4      4       tJ ! R6 R7]]G4      tK. R<OtLR# )=é    N)ÚCallable)ÚUnion)Únn)Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úuse_kernel_forward_from_hub)Úcompile_friendly_flex_attention)Úcreate_causal_maskÚ!create_sliding_window_causal_mask)Ú GenericForSequenceClassificationÚGradientCheckpointingLayer)ÚMoeCausalLMOutputWithPastÚMoeModelOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚAttentionInterfaceÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚis_torch_flex_attn_available)Údeprecate_kwarg)Úmaybe_autocastÚmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputs©Ú
DogeConfig)Ú	BlockMaskÚRMSNormc                   óZ   a a€ ] tR t^6t oRV3R lV 3R llltV3R lR ltR tRtVtV ;t	# )ÚDogeRMSNormc                ó$   <€ V ^8„  d   QhRS[ RR/# )é   ÚepsÚreturnN)Úfloat)ÚformatÚ__classdict__s   "€Úg/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/doge/modeling_doge.pyÚ__annotate__ÚDogeRMSNorm.__annotate__8   s   ø€ ÷ $ñ $©ð $¸$ñ $ó    c                óŽ   <€ \         SV `  4        \        P                  ! \        P
                  ! V4      4      V n        W n        R# )z*
DogeRMSNorm is equivalent to T5LayerNorm
N)ÚsuperÚ__init__r   Ú	ParameterÚtorchÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizer)   Ú	__class__s   &&&€r.   r4   ÚDogeRMSNorm.__init__8   s/   ø€ ô 	‰ÑÔÜ—l’l¤5§:¢:¨kÓ#:Ó;ˆŒØ #Ör1   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r(   Úhidden_statesr*   ©r6   ÚTensor)r,   r-   s   "€r.   r/   r0   @   s#   ø€ ÷ ;ñ ;¡U§\¡\ð ;±e·l±lñ ;r1   c                ó:  € VP                   pVP                  \        P                  4      pVP	                  ^4      P                  RRR7      pV\        P                  ! W0P                  ,           4      ,          pV P                  VP                  V4      ,          # )r(   T)Úkeepdiméÿÿÿÿ)	ÚdtypeÚtor6   Úfloat32ÚpowÚmeanÚrsqrtr9   r8   )r:   r@   Úinput_dtypeÚvariances   &&  r.   ÚforwardÚDogeRMSNorm.forward@   sw   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯ª°H×?TÑ?TÕ4TÓ(UÕUˆØ�{‰{˜]×-Ñ-¨kÓ:Õ:Ð:r1   c                ó^   € \        V P                  P                  4       R V P                   2# )z, eps=)Útupler8   Úshaper9   )r:   s   &r.   Ú
extra_reprÚDogeRMSNorm.extra_reprG   s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr1   )r9   r8   )g�íµ ÷Æ°>)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r4   rN   rS   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r<   r-   s   @@r.   r&   r&   6   s%   ù‡ € ÷$õ $÷;ð ;÷Jò Jr1   r&   c                   óÎ   a a€ ] tR t^Kt o]! RRR7      R
V3R lV 3R lll4       t]]! RRR7      R
V3R lR ll4       4       t]P                  ! 4       ]
R 4       4       tR	tVtV ;t# )ÚDogeRotaryEmbeddingÚdevicez5.18)Úversionc                ó    <€ V ^8„  d   QhRS[ /# ©r(   Úconfigr!   )r,   r-   s   "€r.   r/   Ú DogeRotaryEmbedding.__annotate__M   s   ø€ ÷ Oñ O™zñ Or1   c                óä  <€ \         SV `  4        VP                  V n        VP                  V n        Wn        V P
                  P                  R ,          V n        V P                  pV P                  R8w  d   \        V P                  ,          pV! V P
                  V4      w  q@n
        \        P                  ! VRR7      V n        \        P                  ! VP                  4       RR7      V n        R# )Ú	rope_typeÚdefaultF)Ú
persistentN)r3   r4   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenrc   Úrope_parametersrf   Úcompute_default_rope_parametersr   Úattention_scalingr   ÚBufferÚinv_freqÚcloneÚoriginal_inv_freq)r:   rc   r_   Úrope_init_fnrp   r<   s   &&&  €r.   r4   ÚDogeRotaryEmbedding.__init__L   s¬   ø€ ä‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àŒàŸ™×4Ñ4°[ÕAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÔ&Ü.¨t¯~©~Õ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆÔ(äŸ	š	 (°uÔ=ˆŒÜ!#§¢¨8¯>©>Ó+;ÈÔ!NˆÖr1   c                óP   <€ V ^8„  d   QhRS[ RS[S[P                  S[3,          /# )r(   rc   r*   )r"   rQ   r6   rB   r+   )r,   r-   s   "€r.   r/   rd   _   s.   ø€ ÷ 5ñ 5±
ð 5ÑV[Ñ\a×\hÑ\hÑjoÐ\oÕVpñ 5r1   c           	     ó0  € V P                   R,          p\        V RR4      ;'       g    V P                  V P                  ,          pRpRV\        P
                  ! ^ V^\        P                  R7      V,          ,          ,          pVP                  V4      V3# )a~  
Computes the inverse frequencies according to the original RoPE implementation
Args:
    config ([`~transformers.PreTrainedConfig`]):
        The model configuration.
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ç      ð?©rF   )rl   Úgetattrr;   Únum_attention_headsr6   Úaranger+   rG   )rc   r_   ÚkwargsÚbaseÚdimÚattention_factorrp   s   &&,    r.   rm   Ú3DogeRotaryEmbedding.compute_default_rope_parameters]   s~   € ð ×%Ñ% lÕ3ˆÜ�f˜j¨$Ó/×cÐc°6×3EÑ3EÈ×IcÑIcÕ3cˆàÐà˜$¤5§<¢<°°3¸ÄÇÁÔ#MÐPSÕ#SÕTÕUˆØ�{‰{˜6Ó"Ð$4Ð4Ð4r1   c                ó^  € V P                   R,          P                  VP                  ^ ,          R	^4      P                  \        P
                  VP                  R7      pVR
,          P                  4       p\        VP                  P                  \        4      '       d2   VP                  P                  R8w  d   VP                  P                  MRp\        VRR7      ;_uu_ 4        W4,          P                  ^^4      p\        P                  ! Wf3R	R7      pVP                  4       V P                  ,          pVP                  4       V P                  ,          p	R R R 4       XP                  VP                   R7      X	P                  VP                   R7      3#   + '       g   i     LH; i)N©rF   r_   ÚmpsÚcpuF)Údevice_typeÚenabled©r€   rz   )NºNNNNrE   )rŠ   NrŠ   )rp   ÚexpandrR   rG   r6   r+   r_   Ú
isinstanceÚtypeÚstrr   Ú	transposeÚcatÚcosrn   ÚsinrF   )
r:   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedr‡   ÚfreqsÚembr‘   r’   s
   &&&       r.   rN   ÚDogeRotaryEmbedding.forwardq   s2  € ð �M‰M˜-Õ(×/Ñ/°×0BÑ0BÀ1Õ0EÀrÈ1ÓM×PÑPÔW\×WbÑWbÐkl×ksÑksÐPÓtð 	ð !-¨ZÕ 8× >Ñ >Ó @Ðä'1°!·(±(·-±-Ä×'EÒ'EÈ!Ï(É(Ï-É-Ð[`ÔJ`�a—h‘h—m’mÐfkˆä¨¸U×CÖCØ&Õ>×IÑIÈ!ÈQÓOˆEÜ—)’)˜U˜N°Ô3ˆCØ—'‘'“)˜d×4Ñ4Õ4ˆCØ—'‘'“)˜d×4Ñ4Õ4ˆC÷	 Dð �v‰v˜AŸG™GˆvÓ$ c§f¡f°1·7±7 fÓ&;Ð;Ð;÷ D×Cús   Ã(A4FÆF,	)rn   rc   rp   rj   rr   rk   rf   ©N)rU   rV   rW   rX   r   r4   Ústaticmethodrm   r6   Úno_gradr   rN   rY   rZ   r[   r\   s   @@r.   r^   r^   K   su   ù‡ € Ù�X vÔ.÷Oô Oó /ðOð  Ù�X vÔ.÷5ñ 5ó /ó ð5ð$ ‡]‚]ƒ_Øñ<ó ó ÷<ð <r1   r^   c                óÌ   € V RRV P                   R,          ^,          13,          pV RV P                   R,          ^,          R13,          p\        P                  ! V) V3RR7      # )z*Rotates half the hidden dims of the input..Nr‰   rE   )rR   r6   r�   )r“   Úx1Úx2s   &  r.   Úrotate_halfr    „   sZ   € à	
ˆ3Ð"�!—'‘'˜"•+ Õ"Ð"Ð"Õ	#€BØ	
ˆ3�—‘˜•˜qÕ Ñ"Ð"Õ	#€BÜ�9Š9�r�c˜2�Y BÔ'Ð'r1   Úrotary_pos_embc                óÈ   € VP                  V4      pVP                  V4      pW,          \        V 4      V,          ,           pW,          \        V4      V,          ,           pWV3# )aI  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    )ÚqÚkr‘   r’   Úunsqueeze_dimÚq_embedÚk_embeds   &&&&&  r.   Úapply_rotary_pos_embr©   ‹   sS   € ð& �-‰-˜Ó
&€CØ
�-‰-˜Ó
&€CØ�wœ; q›>¨CÕ/Õ0€GØ�wœ; q›>¨CÕ/Õ0€GØÐÐr1   c                ód   € V ^8„  d   QhR\         P                  R\        R\         P                  /# )r(   r@   Ún_repr*   ©r6   rB   Úint)r,   s   "r.   r/   r/   ¥   s.   € ÷ 	Uñ 	UœUŸ\™\ð 	U´#ð 	U¼%¿,¹,ñ 	Ur1   c                ó˜   € V P                   w  r#rEV^8X  d   V # V R,          P                  W#WV4      p V P                  W#V,          WE4      # )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Š   rŠ   NrŠ   rŠ   )rR   r‹   Úreshape)r@   r«   ÚbatchÚnum_key_value_headsÚslenrx   s   &&    r.   Ú	repeat_kvr³   ¥   sU   € ð
 2?×1DÑ1DÑ.€E Ø�„zØÐØ!Ð"2Õ3×:Ñ:¸5ÐW\ÐdlÓm€MØ× Ñ  ¸eÕ(CÀTÓTÐTr1   c                ó   € V ^8„  d   QhR\         P                  R\        P                  R\        P                  R\        P                  R\        P                  R,          R\        R\        R	\
        \        ,          /# )
r(   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskNÚscalingÚdropoutr~   )r   ÚModuler6   rB   r+   r   r   )r,   s   "r.   r/   r/   ±   sw   € ÷ %ñ %Ü�I‰Ið%ä�<‰<ð%ô 
�‰ð%ô �<‰<ð	%ô
 —L‘L 4Õ'ð%ô ð%ô ð%ô Ô'Õ(ñ%r1   c                 ó"  € \        W P                  4      p\        W0P                  4      p	\        P                  ! WP	                  ^^4      4      V,          p
Ve	   W¤,           p
\
        P                  P                  V
R\        P                  R7      P                  VP                  4      p
\
        P                  P                  W¦V P                  R7      p
\        P                  ! W©4      pVP	                  ^^4      P                  4       pWº3# )r(   )r€   rF   ©ÚpÚtrainingrE   )r³   Únum_key_value_groupsr6   Úmatmulr�   r   Ú
functionalÚsoftmaxrH   rG   rF   r»   rÀ   Ú
contiguous)rµ   r¶   r·   r¸   r¹   rº   r»   r~   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs   &&&&&&&,    r.   Úeager_attention_forwardrÊ   ±   sÒ   € ô ˜3× ;Ñ ;Ó<€JÜ˜U×$?Ñ$?Ó@€Lä—<’< ×';Ñ';¸A¸qÓ'AÓBÀWÕL€LØÒ!Ø#Õ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨È6Ï?É?Ð(Ó[€LÜ—,’,˜|Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ$Ð$r1   c                ó\  € V ^8„  d   QhR\         P                  R\        P                  R\        P                  R\        P                  R\        \        P                  R3,          R\
        R,          R	\
        R,          R
\        \        P                  \        P                  3,          /# )r(   rµ   r¶   r·   r¸   r¹   r#   rº   NÚsoftcapr*   )r   r¼   r6   rB   r   r+   rQ   )r,   s   "r.   r/   r/   Ê   s�   € ÷ +*ñ +*Ü�I‰Ið+*ä�<‰<ð+*ô 
�‰ð+*ô �<‰<ð	+*ô
 œ%Ÿ,™,¨Ð3Õ4ð+*ô �T�\ð+*ô �T�\ð+*ô Œ5�<‰<œŸ™Ð%Õ&ñ+*r1   c                 ó@  aa€ R pR o\        V\        4      '       d   TpMVoSe!   SRRRR VP                  R,          13,          oVV3R lp	\        VVVV	VRVRR7      w  r«VP	                  VP
                  4      pV
P                  ^^4      P                  4       p
W«3# )NrŠ   c                 óª   <€ Se%   S\         P                  ! V S,          4      ,          p Se&   V SV,          V,          V,          V,          ,           p V # rš   )r6   Útanh)ÚscoreÚ	batch_idxÚhead_idxÚq_idxÚkv_idxÚcausal_maskrÌ   s   &&&&&€€r.   Ú	score_modÚ)flex_attention_forward.<locals>.score_modÞ   sI   ø€ ØÒØœeŸjšj¨°­Ó9Õ9ˆEØÒ"Ø˜K¨	Õ2°8Õ<¸UÕCÀFÕKÕKˆEØˆr1   T)rÖ   Ú
block_maskÚ
enable_gqaÚscaleÚ
return_lseéþÿÿÿ)rŒ   r#   rR   r   rG   rF   r�   rÅ   )rµ   r¶   r·   r¸   r¹   rº   rÌ   r~   rØ   rÖ   rÉ   Úattention_weightsrÕ   s   &&&&&&f,    @r.   Úflex_attention_forwardrÞ   Ê   sµ   ù€ ð €JØ€KÜ�.¤)×,Ò,Ø#‰
à$ˆàÒØ! ! Q¨¨?¨S¯Y©Y°r­]¨?Ð":Õ;ˆöô &EØØØØØØØð ô&Ñ"€Kð *×,Ñ,¨U¯[©[Ó9ÐØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ)Ð)r1   Údoge_flex_attentionc                   ón   a a€ ] tR t^üt oRV3R lV 3R llltR	V3R lR lltR
V3R lR lltRtVtV ;t	# )ÚDogeAttentionc                ó4   <€ V ^8„  d   QhRS[ RS[R,          /# ©r(   rc   Ú	layer_idxN©r"   r­   )r,   r-   s   "€r.   r/   ÚDogeAttention.__annotate__ý   s#   ø€ ÷ Jñ J™zð J±c¸Dµjñ Jr1   c                óZ  <€ \         SV `  4        Wn        W n        \	        VR VP
                  VP                  ,          4      V n        VP                  VP                  ,          V n	        V P                  R,          V n
        VP                  V n        VP                  V n        \        P                  ! VP
                  VP                  V P                  ,          VP                  R7      V n        \        P                  ! VP
                  VP                  V P                  ,          VP                  R7      V n        \        P                  ! VP
                  VP                  V P                  ,          VP                  R7      V n        \        P&                  ! \(        P*                  ! VP                  4      4      V n        \        P                  ! VP                  V P                  ,          VP                  VP                  R7      V n        \        P                  ! VP                  V P                  ,          VP
                  VP                  R7      V n        \3        V P                  VP4                  R7      V n        \3        V P                  VP4                  R7      V n        R# )rx   ©Úbias©r)   Ng      à¿)r3   r4   rc   rä   r{   r;   r|   rx   r±   rÁ   rº   Úattention_dropoutÚkeep_window_sizer   ÚLinearÚattention_biasÚq_projÚk_projÚv_projr5   r6   ÚzerosÚAÚdt_projÚo_projr&   Úrms_norm_epsÚq_normÚk_norm©r:   rc   rä   r<   s   &&&€r.   r4   ÚDogeAttention.__init__ý   sÖ  ø€ Ü‰ÑÔØŒØ"ŒÜ ¨
°F×4FÑ4FÈ&×JdÑJdÕ4dÓeˆŒØ$*×$>Ñ$>À&×B\ÑB\Õ$\ˆÔ!Ø—}‘} dÕ*ˆŒØ!'×!9Ñ!9ˆÔØ &× 7Ñ 7ˆÔä—i’iØ×Ñ × :Ñ :¸T¿]¹]Õ JÐQW×QfÑQfô
ˆŒô —i’iØ×Ñ × :Ñ :¸T¿]¹]Õ JÐQW×QfÑQfô
ˆŒô —i’iØ×Ñ × :Ñ :¸T¿]¹]Õ JÐQW×QfÑQfô
ˆŒô —’œeŸkšk¨&×*DÑ*DÓEÓFˆŒÜ—y’yØ×&Ñ&¨¯©Õ6¸×8RÑ8RÐY_×YnÑYnô
ˆŒô —i’iØ×&Ñ&¨¯©Õ6¸×8JÑ8JÐQW×QfÑQfô
ˆŒô " $§-¡-°V×5HÑ5HÔIˆŒÜ! $§-¡-°V×5HÑ5HÔIˆŽr1   c                ó<  <€ V ^8„  d   QhRS[ P                  RS[S[ P                  S[ P                  3,          RS[ P                  R,          RS[R,          RS[S[ P                  S[ P                  R,          S[S[ P                  ,          R,          3,          /# )r(   r@   Úposition_embeddingsr¹   NÚpast_key_valuesr*   )r6   rB   rQ   r   )r,   r-   s   "€r.   r/   ræ     s‡   ø€ ÷ 3)ñ 3)á—|‘|ð3)ñ #¡5§<¡<±·±Ð#=Õ>ð3)ñ Ÿ™ tÕ+ð	3)ñ
  �ð3)ñ 
‰u�|‰|™UŸ\™\¨DÕ0±%¹¿¹Õ2EÈÕ2LÐLÕ	Mñ3)r1   c           	     óö  € VP                   R R p. VORNV P                  N5pV P                  V P                  V4      P	                  V4      4      P                  ^^4      pV P                  V P                  V4      P	                  V4      4      P                  ^^4      p	V P                  V4      P	                  V4      P                  ^^4      p
Vw  r¼\        W‰W¼4      w  r‰Ve   VP                  WšV P                  4      w  ršV P                  V
P                  ^^4      P                  V
P                   ^ ,          V
P                   R,          R4      4      p\        P                  ! V P                   \"        P$                  ! V4      ,          4      P                  RR4      pV P'                  VVV P(                  VR7      p\+        WàP,                  4      p\.        P1                  V P2                  P4                  \6        4      pT! V VV	V
3RTRV P8                  '       g   RMV P:                  RV P<                  /VB w  ppVP                  ! . VORN5!  P?                  4       pV PA                  V4      pVV3# )N)r@   Ú	dt_statesrì   r¹   r¹   r»   ç        rº   rE   rÜ   )!rR   rx   r÷   rï   Úviewr�   rø   rð   rñ   r©   Úupdaterä   rô   r¯   r6   Úexpró   ÚFÚsoftplusÚprepare_dynamic_maskrì   r³   rÁ   ÚALL_ATTENTION_FUNCTIONSÚget_interfacerc   Ú_attn_implementationrÊ   rÀ   rë   rº   rÅ   rõ   )r:   r@   rü   r¹   rý   r~   Úinput_shapeÚhidden_shapeÚquery_statesrÆ   rÇ   r‘   r’   rÿ   Ú	attn_maskÚattention_interfacerÉ   rÈ   s   &&&&&,            r.   rN   ÚDogeAttention.forward  sU  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ 4§;¡;¨}Ó#=×#BÑ#BÀ<Ó#PÓQ×[Ñ[Ð\]Ð_`ÓaˆØ—[‘[ §¡¨]Ó!;×!@Ñ!@ÀÓ!NÓO×YÑYÐZ[Ð]^Ó_ˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆà&‰ˆÜ#7¸ÐRUÓ#[Ñ ˆàÒ&Ø'6×'=Ñ'=¸jÐX\×XfÑXfÓ'gÑ$ˆJð —L‘LØ×"Ñ" 1 aÓ(×0Ñ0°×1CÑ1CÀAÕ1FÈ×HZÑHZÐ[]ÕH^Ð`bÓcó
ˆ	ô —I’I˜dŸf™f¤q§z¢z°)Ó'<Õ<Ó=×GÑGÈÈBÓOˆ	Ø×-Ñ-Ø'ØØ!×2Ñ2Ø)ð	 .ó 
ˆ	ô ˜i×)BÑ)BÓCˆ	ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØñ		%
ð
 %ð	%
ð  $Ÿ}Ÿ}˜}‘C°$×2HÑ2Hð	%
ð —L‘Lð	%
ð ñ	%
Ñ!ˆ�\ð "×)Ò)Ð;¨;Ð;¸Ó;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r1   c          	      ó|   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[RS[ P                  R,          /# )r(   r@   rÿ   rì   r¹   Nr¬   )r,   r-   s   "€r.   r/   ræ   P  sD   ø€ ÷ #ñ #á—|‘|ð#ñ —<‘<ð#ñ ð	#ñ
 Ÿ™ tÕ+ñ#r1   c           
     ó:  € \         P                  ! VP                  4      P                  pVP                  pVR
,          P	                  RRVP
                  ^,          R4      pVe¯   \        V\        4      '       g™   VP                  \         P                  8X  dG   VP                  p\         P                  ! V\         P                  ! RRVP                  VR7      V4      pVP                  VRRRRVP
                  R,          13,          ^ 8g  V4      pVP
                  R,          V8”  do   \         P                  ! WvVP                  R7      p\         P                  ! WsRRRR7      P                  p	VP!                  RV	R	4      pVP                  VR8H  V4      pV# )aø  
The core idea of DMA is to calculate the dynamic attention mask to mask the tokens that should be masked, so as to form sparse attention.

Combine `dt_states` with `attention_mask` to generate the final `attn_mask`.

Args:
    hidden_states (`torch.Tensor`): The input hidden_states, used to determine the minimum value of the current input precision.
    dt_states (`torch.Tensor`): dt_states of shape `(batch_size, num_heads, key_sequence_length)`.
    keep_window_size (`int`): The window size of tokens that are not dynamically masked, and dynamic masking is only performed when the sequence length exceeds this value.
    attention_mask (`torch.Tensor`, *optional*): attention mask of shape `(batch_size, 1, query_sequence_length, key_sequence_length)`.
rŠ   Nr   )r_   rF   r„   TF)r€   ÚlargestÚsortedry   )rŠ   rŠ   NrŠ   rE   © )r6   ÚfinforF   Úminr‹   rR   rŒ   r#   ÚboolÚwhereÚfullr_   Úmasked_fillÚ
zeros_likeÚtopkÚindicesÚscatter)
r:   r@   rÿ   rì   r¹   Ú	min_dtyperF   r  Úactive_maskÚtopk_indicess
   &&&&&     r.   r  Ú"DogeAttention.prepare_dynamic_maskP  s_  € ô$ —K’K × 3Ñ 3Ó4×8Ñ8ˆ	Ø×#Ñ#ˆØ˜mÕ,×3Ñ3Ø��M×'Ñ'¨Õ*¨Bó
ˆ	ð Ò%¬j¸Ì×.SÒ.SØ×#Ñ#¤u§z¡zÔ1Ø%×+Ñ+�Ü!&§¢Ø"¤E§J¢J¨r°3¸~×?TÑ?TÐ\aÔ$bÐdmó"�ð "×-Ñ-¨n¸QÀÀ1ÐF[È	ÏÉÐXZÕH[ÐF[Ð=[Õ.\Ð`aÑ.aÐclÓmˆIØ�?‰?˜2ÕÐ!1Ô1Ü×*Ò*¨9È)×JZÑJZÔ[ˆKÜ Ÿ:š: iÀrÐSWÐ`eÔf×nÑnˆLØ%×-Ñ-¨b°,ÀÓDˆKØ!×-Ñ-¨k¸SÑ.@À)ÓLˆIØÐr1   )ró   rë   rc   rô   rx   rø   rð   rì   rä   rÁ   rõ   r÷   rï   rº   rñ   rš   ©NN)i   N)
rU   rV   rW   rX   r4   rN   r  rY   rZ   r[   r\   s   @@r.   rá   rá   ü   s+   ù‡ € ÷Jõ J÷<3)ò 3)÷j#÷ #ò #r1   rá   c                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )ÚDogeMLPiv  c                ó  <€ \         SV `  4        Wn        VP                  V n        VP                  V n        \
        P                  ! V P                  V P                  VP                  R 7      V n        \
        P                  ! V P                  V P                  VP                  R 7      V n	        \
        P                  ! V P                  V P                  VP                  R 7      V n
        \        VP                  ,          V n        R# )rè   N)r3   r4   rc   r;   Úintermediate_sizer   rí   Úmlp_biasÚ	gate_projÚup_projÚ	down_projr   Ú
hidden_actÚact_fn©r:   rc   r<   s   &&€r.   r4   ÚDogeMLP.__init__w  s¶   ø€ Ü‰ÑÔØŒØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜŸš 4×#3Ñ#3°T×5KÑ5KÐRX×RaÑRaÔbˆŒÜ—y’y ×!1Ñ!1°4×3IÑ3IÐPV×P_ÑP_Ô`ˆŒÜŸš 4×#9Ñ#9¸4×;KÑ;KÐRX×RaÑRaÔbˆŒÜ˜V×.Ñ.Õ/ˆŽr1   c                ó�   € V P                  V P                  V P                  V4      4      V P                  V4      ,          4      pV# rš   )r+  r-  r)  r*  )r:   r“   r+  s   && r.   rN   ÚDogeMLP.forward�  s6   € Ø—N‘N 4§;¡;¨t¯~©~¸aÓ/@Ó#AÀDÇLÁLÐQRÃOÕ#SÓTˆ	ØÐr1   )r-  rc   r+  r)  r;   r'  r*  ©	rU   rV   rW   rX   r4   rN   rY   rZ   r[   r\   s   @@r.   r%  r%  v  s   ù‡ € õ0÷ò r1   r%  c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )Ú	DogeCDMoEi†  c                ó    <€ V ^8„  d   QhRS[ /# rb   r!   )r,   r-   s   "€r.   r/   ÚDogeCDMoE.__annotate__‡  s   ø€ ÷ Iñ I™zñ Ir1   c                ó  <€ \         SV `  4        VP                  V n        VP                  V n        \        VP
                  ,          V n        VP                  V n        \        P                  ! \        P                  ! V P                  4      4      V n        VP                  V n        VP                  V n        \        P                   ! V P                  V P                  VP"                  R 7      V n        \        P                   ! V P                  V P                  VP"                  R 7      V n        \        P                   ! V P                  V P                  VP"                  R 7      V n        \        P                   ! V P                  V P                  ^,          RR 7      V n        \        P,                  ! V P                  V P                  4      V n        \        P,                  ! V P                  V P                  4      V n        R# )rè   FN)r3   r4   r;   r'  r   r,  r-  Únum_expertsÚmathÚfloorÚsqrtÚnum_keysÚnum_experts_per_tokÚtop_kÚnorm_topk_probr   rí   r(  r)  r*  r+  Úrouter_gateÚ	EmbeddingÚ
down_embedÚup_embedr.  s   &&€r.   r4   ÚDogeCDMoE.__init__‡  s_  ø€ Ü‰ÑÔØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜ˜V×.Ñ.Õ/ˆŒà!×-Ñ-ˆÔÜŸ
š
¤4§9¢9¨T×-=Ñ-=Ó#>Ó?ˆŒØ×/Ñ/ˆŒ
Ø$×3Ñ3ˆÔô Ÿš 4×#3Ñ#3°T×5KÑ5KÐRX×RaÑRaÔbˆŒÜ—y’y ×!1Ñ!1°4×3IÑ3IÐPV×P_ÑP_Ô`ˆŒÜŸš 4×#9Ñ#9¸4×;KÑ;KÐRX×RaÑRaÔbˆŒô Ÿ9š9 T×%5Ñ%5°t·}±}ÀqÕ7HÈuÔUˆÔô Ÿ,š, t×'7Ñ'7¸×9IÑ9IÓJˆŒÜŸš T×%5Ñ%5°t×7GÑ7GÓHˆŽr1   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# r?   rA   )r,   r-   s   "€r.   r/   r6  ž  s'   ø€ ÷ ,ñ ,á—|‘|ð,ñ 
�‰ñ	,r1   c                ó  € VP                   w  r4pV P                  V4      P                  ^W4,          R4      pVP                  V P                  RR7      w  w  rxw  ršVP                  R4      VP                  R4      ,           pV	P                  R4      V P                  ,          V
P                  R4      ,           pVP                  ! . VP                   RR ORN5!  pVP                  ! . VP                   RR ORN5!  pVP                  V P                  RR7      w  rÞVP                  RV4      p\        P                  ! VRR7      pV P                  '       d   VVP                  RRR7      ,          pV P                  V4      pV P                  V4      p\        P                  ! VVP                  W4,          R^4      4      P                  W4,          R4      pV P!                  V4      V,          p\        P                  ! VP                  W4,          ^R4      V4      P                  W4R4      pV P#                  V P!                  V P%                  V4      4      V P'                  V4      ,          4      pVV,           pW3# )r(   r‰   NT)r€   rD   rE   rÜ   )rR   r@  r  r  r<  r£   r>  Úgatherr  rÄ   r?  ÚsumrB  rC  r6   rÂ   r-  r+  r)  r*  )r:   r@   r~   ÚbszÚseq_lenÚ_Úrouter_logitsÚscores_xÚscores_yÚ	indices_xÚ	indices_yÚ
all_scoresÚall_indicesÚscoresÚposition_indicesr  Úrouting_weightsrB  rC  Úexperts_weightsÚexperts_statess   &&,                  r.   rN   ÚDogeCDMoE.forwardž  s.  € ð
 (×-Ñ-‰ˆ�að ×(Ñ(¨Ó7×<Ñ<¸QÀÅÈrÓRˆð 8E×7IÑ7IÈ$Ï-É-Ð]_Ð7IÓ7`Ñ4ÑˆÑ4˜yØ×'Ñ'¨Ó+¨h×.@Ñ.@ÀÓ.DÕDˆ
Ø×)Ñ)¨"Ó-°·±Õ=À	×@SÑ@SÐTVÓ@WÕWˆØ—_’_Ð@ j×&6Ñ&6°s¸Ð&;Ð@¸RÓ@ˆ
Ø!×&Ò&ÐC¨×(9Ñ(9¸#¸2Ð(>ÐCÀÓCˆØ#-§?¡?°4·:±:À2 ?Ó#FÑ ˆØ×$Ñ$ RÐ)9Ó:ˆÜŸ)š) F°Ô3ˆØ××ÐØ˜×2Ñ2°rÀ4Ð2ÓHÕHˆOð —_‘_ WÓ-ˆ
Ø—=‘= Ó)ˆÜŸ,š, z°=×3EÑ3EÀcÅmÐUWÐYZÓ3[Ó\×aÑaÐbeÕboÐqsÓtˆØŸ+™+ oÓ6¸ÕHˆÜŸš o×&:Ñ&:¸3½=È!ÈRÓ&PÐRZÓ[×`Ñ`ÐadÐoqÓrˆØŸ™ t§{¡{°4·>±>À-Ó3PÓ'QÐTX×T`ÑT`ÐanÓToÕ'oÓpˆØ%¨Õ6ˆØÐ+Ð+r1   )r-  rB  r+  r)  r;   r'  r?  r8  r<  r@  r>  rC  r*  r2  r\   s   @@r.   r4  r4  †  s    ù‡ € ÷Ió I÷.,÷ ,ð ,r1   r4  c                   óX   a a€ ] tR tRt oRV3R lV 3R llltRV3R lR lltRtVtV ;t# )	ÚDogeDecoderLayeri¿  c                ó4   <€ V ^8„  d   QhRS[ RS[R,          /# rã   rå   )r,   r-   s   "€r.   r/   ÚDogeDecoderLayer.__annotate__À  s#   ø€ ÷ 
Tñ 
T™zð 
T±c¸Dµjñ 
Tr1   c                ó>  <€ \         SV `  4        VP                  V n        \        VP                  VP
                  R 7      V n        \        WR7      V n        \        P                  ! \        P                  ! VP                  4      4      V n        \        VP                  VP
                  R 7      V n        VP                  '       g   \!        V4      M
\#        V4      V n        \        P                  ! \        P                  ! VP                  4      4      V n        R# )rê   )rc   rä   N)r3   r4   Úhidden_dropoutr&   r;   rö   Úinput_layernormrá   Ú	self_attnr   r5   r6   r7   Úinput_residualÚpost_attention_layernormÚis_moer%  r4  ÚmlpÚpost_attention_residualrù   s   &&&€r.   r4   ÚDogeDecoderLayer.__init__À  s¸   ø€ Ü‰ÑÔØ$×3Ñ3ˆÔä*¨6×+=Ñ+=À6×CVÑCVÔWˆÔÜ&¨fÔJˆŒÜ Ÿlšl¬5¯:ª:°f×6HÑ6HÓ+IÓJˆÔä(3°F×4FÑ4FÈF×L_ÑL_Ô(`ˆÔ%Ø*0¯-¯-¨-”7˜6”?¼YÀvÓ=NˆŒÜ')§|¢|´E·J²J¸v×?QÑ?QÓ4RÓ'SˆÖ$r1   c                ó�  <€ V ^8„  d   QhRS[ P                  RS[S[ P                  S[ P                  3,          R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[R,          RS[S[,          R	S[S[ P                  S[S[ P                  S[ P                  3,          R,          3,          /# )
r(   r@   rü   Nr¹   r”   rý   Ú	use_cacher~   r*   )	r6   rB   rQ   Ú
LongTensorr   r  r   r   ÚFloatTensor)r,   r-   s   "€r.   r/   r\  Ì  sÄ   ø€ ÷  ñ  á—|‘|ð ñ #¡5§<¡<±·±Ð#=Õ>ÀÕEð ñ Ÿ™ tÕ+ð	 ñ
 ×&Ñ&¨Õ-ð ñ  �ð ñ ˜$•;ð ñ Ñ+Õ,ð ñ 
‰u× Ñ ¡%©×(9Ñ(9¹5×;LÑ;LÐ(LÕ"MÐPTÕ"TÐTÕ	Uñ r1   c                óÌ  € TpV P                  V4      pV P                  ! RR VRVRVRVRVRV/VB w  r\        P                  ! WP                  V P
                  R7      pV P                  V,          V,           pTpV P                  V4      pV P                  V4      p\        P                  ! WP                  V P
                  R7      pV P                  V,          V,           pV# )r@   rü   r¹   r”   rý   rh  r¾   r  )
r_  r`  r  r»   r^  rÀ   ra  rb  rd  re  )
r:   r@   rü   r¹   r”   rý   rh  r~   ÚresidualÚself_attn_weightss
   &&&&&&&,  r.   rN   ÚDogeDecoderLayer.forwardÌ  sý   € ð !ˆØ×,Ñ,¨]Ó;ˆØ+/¯>ª>ñ ,
Ø'ð,
à 3ð,
ð *ð,
ð &ð	,
ð
 ,ð,
ð  ð,
ð ñ,
Ñ(ˆô Ÿ	š	 -×3FÑ3FÐQU×Q^ÑQ^Ô_ˆØ×+Ñ+¨hÕ6¸ÕFˆð !ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆÜŸ	š	 -×3FÑ3FÐQU×Q^ÑQ^Ô_ˆØ×4Ñ4°xÕ?À-ÕOˆàÐr1   )r^  r_  ra  rd  rb  re  r`  rš   )NNNNFr2  r\   s   @@r.   rZ  rZ  ¿  s    ù‡ € ÷
Tõ 
T÷ ÷  ò  r1   rZ  c                   ó®   a a€ ] tR tRt oRtRtR.tR.tRtRt	Rt
RtRtR]! ]^R7      R	]R
]/t]P&                  ! 4       V 3R l4       tV3R ltRtVtV ;t# )ÚDogePreTrainedModeliï  ÚmodelTrZ  rý   FrL  )Úindexr@   Ú
attentionsc                óº  <€ \         SV `  V4       \        V\        4      '       d7   \	        VR4      '       d#   \
        P                  ! VP                  4       R# R# \        V\        4      '       di   \	        VR4      '       d!   \
        P                  ! VP                  4       \	        VR4      '       d#   \
        P                  ! VP                  4       R# R# R# )zInitialize the weightsró   ra  re  N)r3   Ú_init_weightsrŒ   rá   ÚhasattrÚinitÚzeros_ró   rZ  Úones_ra  re  )r:   rµ   r<   s   &&€r.   ru  Ú!DogePreTrainedModel._init_weights  s™   ø€ ô 	‰Ñ˜fÔ%Ü�fœm×,Ò,Ü�v˜s×#Ò#Ü—’˜FŸH™HÖ%ñ $ä˜Ô 0×1Ò1Ü�vÐ/×0Ò0Ü—
’
˜6×0Ñ0Ô1Ü�vÐ8×9Ò9Ü—
’
˜6×9Ñ9Ö:ñ :ñ 2r1   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # rb   r!   )r,   r-   s   "€r.   r/   Ú DogePreTrainedModel.__annotate__ï  s   ø‡ ‚ áÑò r1   r  )rU   rV   rW   rX   Ú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   r4  rZ  rá   Ú_can_record_outputsr6   rœ   ru  Ú__annotate_func__rY   rZ   r[   r\   s   @@r.   rp  rp  ï  s‚   ù‡ € ð  ÐØ&*Ð#Ø+Ð,ÐØ#4Ð"5ÐØ ÐØ€NØÐØ"ÐØ"&Ðà™¨	¸Ô;ØÐ)Ø�mðÐð ‡]‚]ƒ_ô
;ó ð
;÷' … r1   rp  c                   ór   a a€ ] tR tRt oV3R lV 3R llt]]]RV3R lR ll4       4       4       tRt	Vt
V ;t# )Ú	DogeModeli  c                ó    <€ V ^8„  d   QhRS[ /# rb   r!   )r,   r-   s   "€r.   r/   ÚDogeModel.__annotate__  s   ø€ ÷ ñ ™zñ r1   c           	     ó  <€ \         SV `  V4       VP                  V n        VP                  V n        \
        P                  ! VP                  VP                  V P                  4      V n        \
        P                  ! \        VP                  4       Uu. uF  p\        W4      NK  	  up4      V n        \        VP                  VP                  R 7      V n        \#        VR7      V n        RV n        V P)                  4        R# u upi )rê   ©rc   FN)r3   r4   Úpad_token_idÚpadding_idxÚ
vocab_sizer   rA  r;   Úembed_tokensÚ
ModuleListÚrangeÚnum_hidden_layersrZ  Úlayersr&   rö   Únormr^   Ú
rotary_embÚgradient_checkpointingÚ	post_initrù   s   && €r.   r4   ÚDogeModel.__init__  sÊ   ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒäŸLšL¨×):Ñ):¸F×<NÑ<NÐPT×P`ÑP`ÓaˆÔÜ—m’mÜBGÈ×H`ÑH`ÔBaÓbÑBa°YÔ˜fÖ0ÑBaÑbó
ˆŒô   × 2Ñ 2¸×8KÑ8KÔLˆŒ	Ü-°VÔ<ˆŒØ&+ˆÔ#ð 	�‰Öùò cs   ÂDc                óþ   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          RS[R,          RS[S[,          R	S[/# )
r(   Ú	input_idsNr¹   r”   rý   Úinputs_embedsrh  r~   r*   )	r6   ri  rB   r   rj  r  r   r   r   )r,   r-   s   "€r.   r/   r‹  $  s“   ø€ ÷ 4
ñ 4
á×#Ñ# dÕ*ð4
ñ Ÿ™ tÕ+ð4
ñ ×&Ñ&¨Õ-ð	4
ñ
  �ð4
ñ ×(Ñ(¨4Õ/ð4
ñ ˜$•;ð4
ñ Ñ+Õ,ð4
ñ 
 ñ4
r1   c                óÊ  € VR J VR J,          '       d   \        R4      hV'       d   Vf   \        V P                  R7      pVf   V P                  V4      pVfb   Ve   VP	                  4       M^ p\
        P                  ! VP                  ^,          VP                  R7      V,           pVP                  ^ 4      pV P                  P                  f   \        M\        p	V	! V P                  VVVVR7      p
TpV P                  W³R7      pV P                  R V P                  P                    F  pV! V3RV
RVRVR	VR
V/VB pK  	  V P!                  V4      p\#        VVR7      # )Nz:You must specify exactly one of input_ids or inputs_embedsr�  )r_   )rc   r�  r¹   rý   r”   )r”   r¹   r”   rý   rh  rü   )Úlast_hidden_staterý   )Ú
ValueErrorr	   rc   r‘  Úget_seq_lengthr6   r}   rR   r_   r£   Úsliding_windowr   r   r—  r•  r”  r–  r   )r:   rœ  r¹   r”   rý   r�  rh  r~   Úpast_seen_tokensÚmask_functionrÕ   r@   rü   Údecoder_layers   &&&&&&&,      r.   rN   ÚDogeModel.forward!  s}  € ð ˜Ð -°tÐ";×<Ô<ÜÐYÓZÐZç˜Ò0Ü*°$·+±+Ô>ˆOàÒ Ø ×-Ñ-¨iÓ8ˆMàÒØCRÒC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<š<¨×(;Ñ(;¸AÕ(>À}×G[ÑG[Ô\Ð_oÕoˆLØ'×1Ñ1°!Ó4ˆLà.2¯k©k×.HÑ.HÒ.PÕ*ÔVwˆÙ#Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆð &ˆØ"Ÿo™o¨m˜oÓWÐà!Ÿ[™[Ð)H¨4¯;©;×+HÑ+HÓIˆMÙ)Øñà*ðð *ðð !0ð	ð
 $ðð %8ðð ñŠMñ Jð Ÿ	™	 -Ó0ˆä%Ø+Ø+ô
ð 	
r1   )r‘  r˜  r•  r–  r�  r—  r�  )NNNNNN)rU   rV   rW   rX   r4   r   r    r   rN   rY   rZ   r[   r\   s   @@r.   r‰  r‰    s=   ù‡ € ÷ó ð   ØØ÷4
ñ 4
ó ó ó  ÷4
ð 4
r1   r‰  c                ó*  € V ^8„  d   QhR\         P                  \        \         P                  ,          ,          R,          R\        R,          R\        R,          R\        R\         P                  R,          R\         P                  \        ,          /# )r(   Úgate_logitsNr8  r<  r>  r¹   r*   )r6   rB   rQ   r­   )r,   s   "r.   r/   r/   [  s}   € ÷ g&ñ g&Ü—‘¤¤e§l¡lÕ 3Õ3°dÕ:ðg&ä�t•ðg&ô �D�jðg&ô ð	g&ô
 —L‘L 4Õ'ðg&ô ‡\�\”CÕñg&r1   c                óN  € V e   \        V \        4      '       g   ^ # V ^ ,          P                  pV ^ ,          P                  p. p. pV  EF*  p	V	P	                  V4      p	V	P                  VRR7      w  w  r«w  rÍV
P                  R4      VP                  R4      ,           pVP                  R4      V,          VP                  R4      ,           pVP                  ! . VP                  RR ORN5!  pVP                  ! . VP                  RR ORN5!  pVP                  VRR7      w  ppVP                  RV4      p\        P                  ! VRR7      pVP                  V4       VP                  V4       EK-  	  \        P                  ! V^ R7      p\        P                  ! V^ R7      pVf‡   VP                  R4      p\        P                  ! WVR7      p\        P                   ! WuVR7      pVP#                  ^ VV4      VP                  ^ ,          ,          p\        P$                  ! V^ R7      pEMOVP                  w  pp\'        V 4      pVR,          P)                  VVVV34      P+                  R4      P	                  V4      pVP                  R4      VP-                  4       ,          p\        P                  ! WVR7      p\        P                   ! WuVR7      pVP#                  ^ VV4      \        P.                  ! V4      ,          pVR,          P)                  VVVV34      P+                  RV4      P	                  V4      p\        P.                  ! VV,          ^ R7      \        P.                  ! V^ R7      ,          p\        P.                  ! VV,          4      pVV,          # )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 `router_gate`, should be a tuple of model.config.num_hidden_layers tensors of
        shape [2, batch_size * sequence_length, num_keys].
    num_experts:
        Number of experts
    num_keys:
        Number of keys
    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‰   r„   rE   rÜ   )NrŠ   rŠ   N)rŒ   rQ   rF   r_   rG   r  r£   r  rR   rG  r  rÄ   Úappendr6   r�   rò   Ú	ones_likeÚscatter_add_rJ   Úlenr‹   r¯   r  rH  )r¨  r8  r<  r>  r¹   Úcompute_dtypeÚcompute_deviceÚall_expert_indicesÚall_routing_weightsÚlayer_gate_logitsrM  rN  rO  rP  rQ  rR  rK  rT  Úexpert_indicesrU  Útokens_per_expertÚpadÚrouter_prob_per_expertÚ
batch_sizeÚsequence_lengthr”  Úexpert_attention_maskÚ router_per_expert_attention_maskÚoverall_losss   &&&&&                        r.   Úload_balancing_loss_funcr¼  [  sY  € ð@ Ò¤*¨[¼%×"@Ò"@Ùà •N×(Ñ(€MØ  •^×*Ñ*€NØÐØÐä(ÐØ-×0Ñ0°Ó@Ðà7H×7MÑ7MÈhÐ\^Ð7MÓ7_Ñ4ÑˆÑ4˜yà×'Ñ'¨Ó+¨h×.@Ñ.@ÀÓ.DÕDˆ
Ø×)Ñ)¨"Ó-°Õ8¸9×;NÑ;NÈrÓ;RÕRˆØ—_’_Ð@ j×&6Ñ&6°s¸Ð&;Ð@¸RÓ@ˆ
Ø!×&Ò&ÐC¨×(9Ñ(9¸#¸2Ð(>ÐCÀÓCˆà(Ÿo™o¨e¸˜oÓ<ÑˆÐØ$×+Ñ+¨BÐ0@ÓAˆäŸ)š) J°BÔ7ˆà×!Ñ! .Ô1Ø×"Ñ" ?×3ñ! )ô" ŸšÐ#5¸1Ô=ÐÜŸ)š)Ð$7¸QÔ?ÐàÒà/×4Ñ4°RÓ8ÐÜ!ŸKšK¨ÐQ_Ô`ÐÜ�oŠoÐ0ÈnÔ]ˆØ-×:Ñ:¸1Ð>PÐRUÓVÐYk×YqÑYqÐrsÕYtÕtÐô "'§¢Ð,?ÀQÔ!GÒà&4×&:Ñ&:Ñ#ˆ
�OÜ Ó,Ðð Ð+Õ,ß‰VÐ&¨
°OÀUÐKÓLß‰W�R‹[ß‰R�Óð	 	ð 0×4Ñ4°RÓ8Ð9N×9SÑ9SÓ9UÕVÐô "ŸKšK¨ÐQ_Ô`ÐÜ�oŠoÐ0ÈnÔ]ˆØ-×:Ñ:¸1Ð>PÐRUÓVÔY^×YbÒYbØ!óZ
õ 
Ðð Ð+Õ,ß‰VÐ&¨
°OÀ[ÐQÓRß‰W�R˜Ó%ß‰R�Óð	 	)ô "'§¢Ð+>ÐAaÕ+aÐghÔ!iÔlq×luÒluØ,°!ôm
õ "
Ðô —9’9Ð.Ð1GÕGÓH€LØ˜+Õ%Ð%r1   c                   ó„   a a€ ] tR tRt oRR/tRR/tRR.R.3/tRR/tV 3R	 lt]	]
RV3R
 lR ll4       4       tRtVtV ;t# )ÚDogeForCausalLMiÅ  zlm_head.weightzmodel.embed_tokens.weightÚlm_headÚcolwise_gather_outputr@   ÚlogitsÚkeep_full_weightc                óR  <€ \         SV `  V4       \        V4      V n        VP                  V n        \
        P                  ! VP                  VP                  R R7      V n        VP                  V n	        VP                  V n
        VP                  V n        V P                  4        R# )Frè   N)r3   r4   r‰  rq  r�  r   rí   r;   r¿  Úrouter_aux_loss_coefr8  r=  r™  r.  s   &&€r.   r4   ÚDogeForCausalLM.__init__Ì  s   ø€ Ü‰Ñ˜Ô Ü˜vÓ&ˆŒ
Ø ×+Ñ+ˆŒÜ—y’y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒØ$*×$?Ñ$?ˆÔ!Ø!×-Ñ-ˆÔØ#)×#=Ñ#=ˆÔ ð 	�‰Ör1   c                ód  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          RS[ P                  R,          RS[R,          R	S[S[ P                  ,          R
S[R,          RS[S[,          RS[	/# )r(   rœ  Nr¹   r”   rý   r�  Úlabelsrh  Úlogits_to_keepÚoutput_router_logitsr~   r*   )
r6   ri  rB   r   rj  r  r­   r   r   r   )r,   r-   s   "€r.   r/   ÚDogeForCausalLM.__annotate__Ú  sÖ   ø€ ÷ O
ñ O
á×#Ñ# dÕ*ðO
ñ Ÿ™ tÕ+ðO
ñ ×&Ñ&¨Õ-ð	O
ñ
  �ðO
ñ ×(Ñ(¨4Õ/ðO
ñ × Ñ  4Õ'ðO
ñ ˜$•;ðO
ñ ™eŸl™lÕ*ðO
ñ # T�kðO
ñ Ñ+Õ,ðO
ñ 
#ñO
r1   c
                ó  € V	e   T	MV P                   P                  p	V P                  ! R
RVRVRVRVRVRV/V
B pVP                  p\	        V\
        4      '       d   \        V) R4      MTpV P                  VRVR3,          4      pRpVe   V P                  ! WæV P                  3/ V
B pRpV	'       d–   \        VP                  V P                  \        P                  ! \        P                  ! V P                  4      4      V P                   V4      pVe3   WðP"                  VP%                  VP&                  4      ,          ,          p\)        VVVVP*                  VP,                  VP.                  VP                  R	7      # )aè  
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
    config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
    (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

Example:

```python
>>> from transformers import AutoTokenizer, DogeForCausalLM

>>> model = DogeForCausalLM.from_pretrained("SmallDoge/Doge-320M")
>>> tokenizer = AutoTokenizer.from_pretrained("SmallDoge/Doge-320M")

>>> prompt = "Hey, are you conscious? Can you talk to me?"
>>> inputs = tokenizer(prompt, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
```Nrœ  r¹   r”   rý   r�  rh  rŠ   )ÚlossÚaux_lossrÁ  rý   r@   rs  rL  r  )rc   rÉ  rq  rŸ  rŒ   r­   Úslicer¿  Úloss_functionr�  r¼  rL  r8  r9  r:  r;  r=  rÄ  rG   r_   r   rý   r@   rs  )r:   rœ  r¹   r”   rý   r�  rÇ  rh  rÈ  rÉ  r~   Úoutputsr@   Úslice_indicesrÁ  rÌ  rÍ  s   &&&&&&&&&&,      r.   rN   ÚDogeForCausalLM.forwardØ  s‰  € ðL %9Ò$DÑ È$Ï+É+×JjÑJjð 	ð
 +/¯*ª*ñ +
Øð+
à)ð+
ð &ð+
ð ,ð	+
ð
 (ð+
ð  ð+
ð ñ+
ˆð  ×1Ñ1ˆä8BÀ>ÔSV×8WÒ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜m¨A¨}¸aÐ,?Õ@ÓAˆàˆØÒØ×%Ò% f°d·o±oÑPÈÑPˆDàˆßÜ/Ø×%Ñ%Ø× Ñ Ü—
’
œ4Ÿ9š9 T×%5Ñ%5Ó6Ó7Ø×(Ñ(ØóˆHð Ò!Ø×1Ñ1°H·K±KÀÇÁÓ4LÕLÕL�ä(ØØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø!×/Ñ/ô
ð 	
r1   )r¿  rq  r8  r=  rÄ  r�  )	NNNNNNNr   N)rU   rV   rW   rX   Ú_tied_weights_keysÚ_tp_planÚ_pp_planÚ
_fsdp_planr4   r   r   rN   rY   rZ   r[   r\   s   @@r.   r¾  r¾  Å  sj   ù‡ € à*Ð,GÐHÐØÐ2Ð3€HØ˜_Ð-°¨zÐ:Ð;€HØÐ/Ð0€Jõ
ð Ø÷O
ñ O
ó ó ÷O
ð O
r1   r¾  c                   ó   € ] tR tRtRtR# )ÚDogeForSequenceClassificationi,  r  N)rU   rV   rW   rX   rY   r  r1   r.   rØ  rØ  ,  s   † Ûr1   rØ  )é   )r   r#  )NNr(   N)r¾  r‰  rp  rØ  )Mr9  Úcollections.abcr   Útypingr   r6   Útorch.nn.functionalr   rÃ   r  Ú r   rw  Úactivationsr   Úcache_utilsr   r	   Ú
generationr
   Úintegrationsr   Úintegrations.flex_attentionr   Úmasking_utilsr   r   Úmodeling_layersr   r   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.deprecationr   Úutils.genericr   r   Úutils.output_capturingr   r    Úconfiguration_doger"   Ú!torch.nn.attention.flex_attentionr#   r¼   r&   r^   r    r©   r³   rÊ   rÞ   r  rá   r%  r4  rZ  rp  r‰  r¼  r¾  rØ  Ú__all__r  r1   r.   Ú<module>rð     s�  ðó. Ý $Ý ã ß Ð Ý å &Ý !ß .Ý )Ý 7Ý Jß Rß [ß Qß Kß AÝ &ß gÓ gÝ 0ß Gß EÝ *ñ  ×!Ò!Ý;ñ ˜YÓ'ôJ�"—)‘)ó Jó (ðJô(6<˜"Ÿ)™)ô 6<òr(ñ Ð-Ó.óó /ðõ2	U÷%÷2+*ñ\ -Ó.Ð Ø1GÐ Ð-Ñ .ôw�B—I‘Iô wôtˆb�i‰iô ô 6,�—	‘	ô 6,ôr-Ð1ô -ð` ô;˜/ó ;ó ð;ð> ôH
Ð#ó H
ó ðH
÷Vg&ðT ôc
Ð)¨?ó c
ó ðc
ôL	Ð$DÐFYô 	ò c‚r1   