Ë
    ÛÓ^jíC  ã                   ód  — 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	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 ddlmZmZ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(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0  ejb                  e2«      Z3 G d„ de)«      Z4 G d„ de%«      Z5 G d„ de.«      Z6 G d„ dejn                  «      Z8 G d„ d e-«      Z9 G d!„ d"ejn                  «      Z: G d#„ d$e'«      Z; G d%„ d&e«      Z< G d'„ d(e«      Z=e G d)„ d*e=«      «       Z> G d+„ d,e(e=e«      Z?g d-¢Z@y).zPyTorch AFMoE model.é    )ÚCallableN)Únné   )Úinitialization)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_maskÚ!create_sliding_window_causal_mask)ÚGradientCheckpointingLayer)ÚMoeCausalLMOutputWithPastÚMoeModelOutputWithPast)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )ÚGptOssRMSNorm)ÚLlamaAttentionÚLlamaForCausalLMÚLlamaRotaryEmbeddingÚapply_rotary_pos_embÚeager_attention_forward)ÚQwen2MoeExpertsÚQwen2MoeMLPé   )ÚAfmoeConfigc                   ó   — e Zd Zy)ÚAfmoeRotaryEmbeddingN©Ú__name__Ú
__module__Ú__qualname__© ó    úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/afmoe/modular_afmoe.pyr%   r%   /   ó   „ Ør+   r%   c                   ó   — e Zd Zy)ÚAfmoeRMSNormNr&   r*   r+   r,   r/   r/   3   r-   r+   r/   c                   ó   — e Zd Zy)ÚAfmoeMLPNr&   r*   r+   r,   r1   r1   7   r-   r+   r1   c                   óZ   ‡ — e Zd ZdZˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚAfmoeTokenChoiceRouterz©
    Token-choice top-K router for MoE routing.

    This router assigns each token to the top-K experts based on sigmoid scores, matching the released checkpoints.
    c                 óø   •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        |j                  | _        t        j                  |j                  |j
                  d¬«      | _
        y ©NF©Úbias)ÚsuperÚ__init__ÚconfigÚnum_experts_per_tokÚtop_kÚnum_expertsÚroute_scaler   ÚLinearÚhidden_sizeÚgate©Úselfr:   Ú	__class__s     €r,   r9   zAfmoeTokenChoiceRouter.__init__B   s^   ø€ Ü‰ÑÔØˆŒØ×/Ñ/ˆŒ
Ø!×-Ñ-ˆÔØ!×-Ñ-ˆÔÜ—I‘I˜f×0Ñ0°&×2DÑ2DÈ5ÔQˆ�	r+   Úhidden_statesÚexpert_biasc                 ó   — |j                   \  }}}|j                  d|«      }| j                  |«      j                  t        j
                  «      }t	        j                  |«      }t	        j                  ||z   | j                  d¬«      \  }}|j                  d|¬«      }|j                  dd¬«      dz   }	||	z  }|| j                  z  }|||fS )Néÿÿÿÿr"   )ÚkÚdim)rJ   ÚindexT)rJ   Úkeepdimg#B’¡œÇ;)ÚshapeÚviewrA   ÚtoÚtorchÚfloat32ÚsigmoidÚtopkr<   ÚgatherÚsumr>   )
rC   rE   rF   Ú_Ú
hidden_dimÚrouter_logitsÚscoresÚselected_expertsÚ
top_scoresÚdenominators
             r,   ÚforwardzAfmoeTokenChoiceRouter.forwardJ   sÅ   € Ø(×.Ñ.Ñˆˆ1ˆjØ%×*Ñ*¨2¨zÓ:ˆàŸ	™	 -Ó0×3Ñ3´E·M±MÓBˆÜ—‘˜}Ó-ˆä#Ÿj™j¨°+Ñ)=ÀÇÁÐQRÔSÑˆÐØ—]‘] qÐ0@�]ÓAˆ
Ø —n‘n¨°T�nÓ:¸UÑBˆØ +Ñ-ˆ
Ø $×"2Ñ"2Ñ2ˆ
Ø˜jÐ*:Ð:Ð:r+   )	r'   r(   r)   Ú__doc__r9   rP   ÚTensorr]   Ú__classcell__©rD   s   @r,   r3   r3   ;   s)   ø„ ñôRð; U§\¡\ð ;ÀÇÁ÷ ;r+   r3   c                   ó   — e Zd Zy)ÚAfmoeExpertsNr&   r*   r+   r,   rc   rc   Y   r-   r+   rc   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚAfmoeSparseMoeBlockzÎ
    Mixture of Experts (MoE) module for AFMoE.

    This module implements a sparse MoE layer with both shared experts (always active) and
    routed experts (activated based on token-choice routing).
    c                 ó2  •— t         ‰| �  «        || _        t        |«      | _        t        ||j                  |j                  z  «      | _        t        |«      | _
        t        j                  t        j                  |j                  «      d¬«      | _        y )NF)Úrequires_grad)r8   r9   r:   r3   Úrouterr1   Úmoe_intermediate_sizeÚnum_shared_expertsÚshared_expertsrc   Úexpertsr   Ú	ParameterrP   Úzerosr=   rF   rB   s     €r,   r9   zAfmoeSparseMoeBlock.__init__e   sp   ø€ Ü‰ÑÔØˆŒÜ,¨VÓ4ˆŒÜ& v¨v×/KÑ/KÈf×NgÑNgÑ/gÓhˆÔÜ# FÓ+ˆŒÜŸ<™<¬¯©°F×4FÑ4FÓ(GÐW\Ô]ˆÕr+   c                 ó  — |j                   \  }}}|j                  d|«      }| j                  || j                  «      \  }}}| j	                  |«      j                  |||«      }	| j                  |||«      j                  |||«      }
|	|
z   S )NrH   )rM   rN   rh   rF   rk   rl   )rC   rE   Ú
batch_sizeÚseq_lenrW   Úhidden_states_flatrV   r[   rZ   Úshared_outputÚrouted_outputs              r,   r]   zAfmoeSparseMoeBlock.forwardm   sž   € Ø*7×*=Ñ*=Ñ'ˆ
�G˜ZØ*×/Ñ/°°JÓ?Ðð +/¯+©+°mÀT×EUÑEUÓ*VÑ'ˆˆ:Ð'ð ×+Ñ+Ð,>Ó?×DÑDÀZÐQXÐZdÓeˆØŸ™Ð%7Ð9IÈ:ÓV×[Ñ[Ø˜ ó
ˆð ˜}Ñ,Ð,r+   )r'   r(   r)   r^   r9   r]   r`   ra   s   @r,   re   re   ]   s   ø„ ñô^ö-r+   re   c                   óî   ‡ — e Zd ZdZdedefˆ fd„Z	 ddej                  de	ej                  ej                  f   dej                  dz  d	e
dz  d
ee   de	ej                  ej                  f   fd„Zˆ xZS )ÚAfmoeAttentionaJ  
    Multi-headed attention module with optional sliding window and gating.

    This attention mechanism supports both full attention and sliding window attention,
    and includes Q/K normalization and gating of the output. It inherits from [`LlamaAttention`] to minimize the amount
    of custom logic we need to maintain.
    r:   Ú	layer_idxc                 ó¦  •— t         ‰| �  ||«       |j                  |   dk(  | _        | j                  r|j                  nd | _        t        | j                  |j                  ¬«      | _        t        | j                  |j                  ¬«      | _	        t        j                  |j                  |j                  | j                  z  d¬«      | _        y )NÚsliding_attention©ÚepsFr6   )r8   r9   Úlayer_typesÚis_local_attentionÚsliding_windowr/   Úhead_dimÚrms_norm_epsÚq_normÚk_normr   r?   r@   Únum_attention_headsÚ	gate_proj©rC   r:   rw   rD   s      €r,   r9   zAfmoeAttention.__init__…   s£   ø€ Ü‰Ñ˜ Ô+ð #)×"4Ñ"4°YÑ"?ÐCVÑ"VˆÔØ7;×7NÒ7N˜f×3Ò3ÐTXˆÔä" 4§=¡=°f×6IÑ6IÔJˆŒÜ" 4§=¡=°f×6IÑ6IÔJˆŒÜŸ™ 6×#5Ñ#5°v×7QÑ7QÐTX×TaÑTaÑ7aÐhmÔnˆ�r+   NrE   Úposition_embeddingsÚattention_maskÚpast_key_valueÚkwargsÚreturnc                 óÒ  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      }| j	                  |«      j                  |«      }	| j                  |«      j                  |«      }
| j                  |«      }| j                  |«      j                  dd«      }| j                  |	«      j                  dd«      }	|
j                  dd«      }
| j                  r|\  }}t        ||	||«      \  }}	|� |j                  |	|
| j                  «      \  }	}
t        j                  | j                   j"                  t$        «      } || ||	|
f|| j&                  sdn| j(                  | j*                  | j,                  dœ|¤Ž\  }} |j                  g |¢d‘­Ž j/                  «       }|t1        j2                  |«      z  }| j5                  |«      }||fS )NrH   r"   r   ç        )r‡   ÚdropoutÚscalingr~   )rM   r   Úq_projrN   Úk_projÚv_projr„   r�   Ú	transposer‚   r}   r   Úupdaterw   r   Úget_interfacer:   Ú_attn_implementationr   ÚtrainingÚattention_dropoutrŽ   r~   Ú
contiguousrP   rR   Úo_proj)rC   rE   r†   r‡   rˆ   r‰   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚgate_statesÚcosÚsinÚattention_interfaceÚoutputÚattn_weightsÚattn_outputs                     r,   r]   zAfmoeAttention.forward�   sà  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓDˆØ—[‘[ Ó/×4Ñ4°\ÓBˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓDˆØ—n‘n ]Ó3ˆà—{‘{ <Ó0×:Ñ:¸1¸aÓ@ˆØ—[‘[ Ó,×6Ñ6°q¸!Ó<ˆ
Ø#×-Ñ-¨a°Ó3ˆà×"Ò"Ø*‰HˆC�Ü';¸LÈ*ÐVYÐ[^Ó'_Ñ$ˆL˜*àÐ%Ø'5×'<Ñ'<¸ZÈÐW[×WeÑWeÓ'fÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ  3ØØØØð	
 
ð
 *Ø#Ÿ}š}‘C°$×2HÑ2HØ—L‘LØ×.Ñ.ñ
 
ð ñ
 
Ñˆ�ð �—‘Ð.˜kÐ.¨2Ò.×9Ñ9Ó;ˆØœ%Ÿ-™-¨Ó4Ñ4ˆØ—k‘k &Ó)ˆØ˜LÐ(Ð(r+   )N)r'   r(   r)   r^   r#   Úintr9   rP   r_   Útupler   r   r   r]   r`   ra   s   @r,   rv   rv   |   s�   ø„ ñð	o˜{ð 	o°sõ 	oð  (,ñ.)à—|‘|ð.)ð # 5§<¡<°·±Ð#=Ñ>ð.)ð Ÿ™ tÑ+ð	.)ð
  ™ð.)ð Ð+Ñ,ð.)ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷.)r+   rv   c                   ó  ‡ — e Zd ZdZdede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 )ÚAfmoeDecoderLayerzÌ
    AFMoE decoder layer with dual normalization.

    This layer applies self-attention followed by either a dense MLP or MoE block,
    with dual normalization (pre and post) around each component.
    r:   rw   c                 ó(  •— t         ‰| �  «        |j                  | _        || _        t	        ||¬«      | _        t        |j                  |j                  ¬«      | _        t        |j                  |j                  ¬«      | _	        t        |j                  |j                  ¬«      | _
        t        |j                  |j                  ¬«      | _        ||j                  k\  | _        | j                  rt        |«      | _        y t!        |«      | _        y )N)r:   rw   rz   )r8   r9   r@   rw   rv   Ú	self_attnr/   r€   Úinput_layernormÚpost_attention_layernormÚpre_mlp_layernormÚpost_mlp_layernormÚnum_dense_layersÚmoe_enabledre   Úmlpr1   r…   s      €r,   r9   zAfmoeDecoderLayer.__init__É   s×   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔØ"ˆŒä'¨vÀÔKˆŒô  ,¨F×,>Ñ,>ÀF×DWÑDWÔXˆÔÜ(4°V×5GÑ5GÈV×M`ÑM`Ô(aˆÔ%ô ".¨f×.@Ñ.@Àf×FYÑFYÔ!ZˆÔÜ".¨v×/AÑ/AÀv×GZÑGZÔ"[ˆÔð %¨×(?Ñ(?Ñ?ˆÔØ×ÒÜ*¨6Ó2ˆD�Hä Ó'ˆD�Hr+   NrE   r‡   Úposition_idsrˆ   Ú	use_cacher†   r‰   rŠ   c           
      ó  — |}| j                  |«      } | j                  d||||||dœ|¤Ž\  }}	| j                  |«      }||z   }|}| j                  |«      }| j	                  |«      }| j                  |«      }||z   }|S )N)rE   r‡   r³   rˆ   r´   r†   r*   )r¬   r«   r­   r®   r²   r¯   )
rC   rE   r‡   r³   rˆ   r´   r†   r‰   ÚresidualrV   s
             r,   r]   zAfmoeDecoderLayer.forwardß   s²   € ð !ˆð ×,Ñ,¨]Ó;ˆØ)˜4Ÿ>™>ð 
Ø'Ø)Ø%Ø)ØØ 3ñ
ð ñ
Ñˆ�qð ×5Ñ5°mÓDˆØ  =Ñ0ˆð !ˆØ×.Ñ.¨}Ó=ˆØŸ™ Ó/ˆØ×/Ñ/°Ó>ˆà  =Ñ0ˆØÐr+   )NNNNN)r'   r(   r)   r^   r#   r¦   r9   rP   r_   Ú
LongTensorr   Úboolr§   r   r   ÚFloatTensorr]   r`   ra   s   @r,   r©   r©   Á   sÂ   ø„ ñð(˜{ð (°sõ (ð2 /3Ø04Ø'+Ø!%ØHLñ!à—|‘|ð!ð Ÿ™ tÑ+ð!ð ×&Ñ&¨Ñ-ð	!ð
  ™ð!ð ˜$‘;ð!ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð!ð Ð+Ñ,ð!ð 
×	Ñ	÷!r+   r©   c                   óz   ‡ — e Zd ZU dZeed<   dZdgZdgZ e	e
d¬«      eedœZg d	¢Zd
Zd
Zd
Zd
Zd
Zd
Zˆ fd„Zˆ xZS )ÚAfmoePreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    r:   Úmodelr©   Úpast_key_valuesr   )rK   )rX   rE   Ú
attentions)r¬   r­   r®   r¯   r�   r‚   ÚnormrF   Tc                 óÎ  •— t         ‰| �  |«       | j                  j                  }t	        |t
        «      rEt        j                  |j                  d|¬«       t        j                  |j                  d|¬«       yt	        |t        «      r*t        j                  |j                  j                  «       yt	        |t        «      r t        j                  |j                  «       yy)zInitialize the weightsrŒ   )ÚmeanÚstdN)r8   Ú_init_weightsr:   Úinitializer_rangeÚ
isinstancerc   ÚinitÚnormal_Úgate_up_projÚ	down_projr3   Úzeros_rA   Úweightre   rF   )rC   ÚmodulerÂ   rD   s      €r,   rÃ   z"AfmoePreTrainedModel._init_weights#  s˜   ø€ ä‰Ñ˜fÔ%Ø�k‰k×+Ñ+ˆÜ�fœlÔ+Ü�L‰L˜×,Ñ,°3¸CÕ@Ü�L‰L˜×)Ñ)°¸Ö=Ü˜Ô 6Ô7Ü�K‰K˜Ÿ™×*Ñ*Õ+Ü˜Ô 3Ô4Ü�K‰K˜×*Ñ*Õ+ð 5r+   )r'   r(   r)   r^   r#   Ú__annotations__Úbase_model_prefixÚ_no_split_modulesÚ_skip_keys_device_placementr   r3   r©   rv   Ú_can_record_outputsÚ_keep_in_fp32_modulesÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_can_compile_fullgraphÚ_supports_attention_backendÚsupports_gradient_checkpointingrÃ   r`   ra   s   @r,   r»   r»     sx   ø… ñð
 ÓØÐØ,Ð-ÐØ#4Ð"5Ðá'Ð(>ÀaÔHØ*Ø$ñÐò
	Ðð €NØÐØÐØ!ÐØ"&ÐØ&*Ð#÷
,ð 
,r+   r»   c                   óü   ‡ — e Zd 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	j                  dz  d	edz  d
edz  dee   deez  fd„«       «       «       Zˆ xZS )Ú
AfmoeModelz›
    Transformer decoder consisting of *config.num_hidden_layers* layers. Each layer is a [`AfmoeDecoderLayer`]

    Args:
        config: AfmoeConfig
    r:   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)                  «        y c c}w )Nrz   ©r:   F)r8   r9   Úpad_token_idÚpadding_idxÚ
vocab_sizer   Ú	Embeddingr@   Úembed_tokensÚ
ModuleListÚrangeÚnum_hidden_layersr©   Úlayersr/   r€   r¿   r%   Ú
rotary_embÚgradient_checkpointingÚ	post_initr…   s      €r,   r9   zAfmoeModel.__init__9  sÄ   ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒäŸL™L¨×):Ñ):¸F×<NÑ<NÐPT×P`ÑP`ÓaˆÔÜ—m‘mÜCHÈ×IaÑIaÓCbÖc°iÔ˜v yÕ1Òcó
ˆŒô ! ×!3Ñ!3¸×9LÑ9LÔMˆŒ	Ü.°fÔ=ˆŒØ&+ˆÔ#à�‰Õùò ds   ÂDNÚ	input_idsr‡   Úinputs_embedsr³   r½   r´   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        |x}	t        «      s(| j                  |||dœ}
t        di |
¤Žt        di |
¤Ždœ}	|}| j                  j                  r|| j                  j                  dz  z  }| j!                  ||«      }t#        | j$                  «      D ].  \  }} ||f|	| j                  j&                  |      ||||d	œ|¤Ž}Œ0 | j)                  |«      }t+        ||r|¬
«      S d ¬
«      S )Nz:You must specify exactly one of input_ids or inputs_embedsrÜ   r   r"   )Údevice)r:   rê   r‡   r½   )Úfull_attentionry   g      à?)r‡   r³   rˆ   r´   r†   )Úlast_hidden_stater½   r*   )Ú
ValueErrorr   r:   rá   Úget_seq_lengthrP   ÚarangerM   rì   Ú	unsqueezerÅ   Údictr
   r   Úmup_enabledr@   ræ   Ú	enumeraterå   r|   r¿   r   )rC   ré   r‡   rê   r³   r½   r´   r‰   Úpast_seen_tokensÚcausal_mask_mappingÚmask_kwargsrE   r†   ÚiÚdecoder_layers                  r,   r]   zAfmoeModel.forwardH  s¹  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZá˜Ð0Ü*°$·+±+Ô>ˆOàÐ Ø ×-Ñ-¨iÓ8ˆMàÐØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\Ð_oÑoˆLØ'×1Ñ1°!Ó4ˆLô °Ð?Ð-ÄÔFàŸ+™+Ø!.Ø"0Ø#2ñ	ˆKô #5Ñ"C°{Ñ"CÜ%FÑ%UÈÑ%Uñ#Ðð
 &ˆð �;‰;×"Ò"Ø)¨T¯[©[×-DÑ-DÀcÑ-IÑJˆMà"Ÿo™o¨m¸\ÓJÐä )¨$¯+©+Ó 6ò 		ÑˆAˆ}Ù)Øðà2°4·;±;×3JÑ3JÈ1Ñ3MÑNØ)Ø.Ø#Ø$7ñð ñ‰Mð		ð Ÿ	™	 -Ó0ˆÜ%Ø+Ù/8˜Oô
ð 	
à>Bô
ð 	
r+   )NNNNNN)r'   r(   r)   r^   r#   r9   r   r   r   rP   r·   r_   r¹   r   r¸   r   r   r§   r   r]   r`   ra   s   @r,   rÚ   rÚ   0  sØ   ø„ ñð˜{õ ð ØØð .2Ø.2Ø26Ø04Ø(,Ø!%ñ<
à×#Ñ# dÑ*ð<
ð Ÿ™ tÑ+ð<
ð ×(Ñ(¨4Ñ/ð	<
ð
 ×&Ñ&¨Ñ-ð<
ð  ™ð<
ð ˜$‘;ð<
ð Ð+Ñ,ð<
ð 
Ð'Ñ	'ò<
ó ó  ó ô<
r+   rÚ   c                   óB  — e Zd ZddiZddiZddgdgfiZ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dz  dee	j                  z  dee   defd„«       «       Zy)ÚAfmoeForCausalLMzlm_head.weightzmodel.embed_tokens.weightÚlm_headÚcolwise_gather_outputrE   Úlogitsc                 óô   — t         j                  | |«       t        |«      | _        |j                  | _        t        j                  |j                  |j                  d¬«      | _        | j                  «        y r5   )
r»   r9   rÚ   r¼   rß   r   r?   r@   rý   rè   )rC   r:   s     r,   r9   zAfmoeForCausalLM.__init__�  sU   € Ü×%Ñ% d¨FÔ3Ü Ó'ˆŒ
Ø ×+Ñ+ˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒØ�‰Õr+   Nré   r‡   r³   r½   rê   Úlabelsr´   Úoutput_router_logitsÚlogits_to_keepr‰   rŠ   c
                 ó®  — |�|n| j                   j                  } | j                  d|||||||dœ|
¤Ž}|j                  }t	        |	t
        «      rt        |	 d «      n|	}| j                  |d d …|d d …f   «      }d }|� | j                  ||| j                  fi |
¤Ž}t        |||j                  |j                  |j                  |j                  ¬«      S )N)ré   r‡   r³   r½   rê   r´   r  )Úlossrÿ   r½   rE   r¾   rX   r*   )r:   r  r¼   rî   rÅ   r¦   Úslicerý   Úloss_functionrß   r   r½   rE   r¾   rX   )rC   ré   r‡   r³   r½   rê   r  r´   r  r  r‰   ÚoutputsrE   Úslice_indicesrÿ   r  s                   r,   r]   zAfmoeForCausalLM.forward–  s÷   € ð  %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð +5¨$¯*©*ð 	+
ØØ)Ø%Ø+Ø'ØØ!5ñ	+
ð ñ	+
ˆð  ×1Ñ1ˆÜ8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ% f¨f°d·o±oÑPÈÑPˆDä(ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø!×/Ñ/ô
ð 	
r+   )	NNNNNNNNr   )r'   r(   r)   Ú_tied_weights_keysÚ_tp_planÚ_pp_planr9   r   r   rP   r·   r_   r   r¹   r¸   r¦   r   r   r   r]   r*   r+   r,   rü   rü   Š  s'  „ Ø*Ð,GÐHÐØÐ2Ð3€HØ˜_Ð-°¨zÐ:Ð;€Hòð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø,0Ø-.ñ+
à×#Ñ# dÑ*ð+
ð Ÿ™ tÑ+ð+
ð ×&Ñ&¨Ñ-ð	+
ð
  ™ð+
ð ×(Ñ(¨4Ñ/ð+
ð × Ñ  4Ñ'ð+
ð ˜$‘;ð+
ð # T™kð+
ð ˜eŸl™lÑ*ð+
ð Ð+Ñ,ð+
ð 
#ò+
ó ó ñ+
r+   rü   )rü   rÚ   r»   )Ar^   Úcollections.abcr   rP   r   Ú r   rÆ   Úcache_utilsr   r   Ú
generationr	   Úmasking_utilsr
   r   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   r   Úgpt_oss.modeling_gpt_ossr   Úllama.modeling_llamar   r   r   r   r   Úqwen2_moe.modeling_qwen2_moer    r!   Úconfiguration_afmoer#   Ú
get_loggerr'   Úloggerr%   r/   r1   ÚModuler3   rc   re   rv   r©   r»   rÚ   rü   Ú__all__r*   r+   r,   ú<module>r!     s  ðñ å $ã Ý å &ß .Ý )ß RÝ 9ß Qß FÝ &ß RÓ RÝ 7ß EÝ 4÷õ ÷ HÝ ,ð 
ˆ×	Ñ	˜HÓ	%€ô	Ð/ô 	ô	�=ô 	ô	ˆ{ô 	ô;˜RŸY™Yô ;ô<	�?ô 	ô-˜"Ÿ)™)ô -ô>B)�^ô B)ôJ?Ð2ô ?ôD*,˜?ô *,ðZ ôV
Ð%ó V
ó ðV
ôr9
Ð'Ð)=¸ô 9
òx�r+   