Ë
    îÿæiX:  ã                   ó  — d dl mZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZ ddlmZ ddlmZmZmZ ddlmZmZ dd	lmZ dd
lmZ e G d„ de«      «       Zej:                  d„ «       Z G d„ de
j>                  «      Z  G d„ de
j>                  «      Z! G d„ de
j>                  «      Z" G d„ de
j>                  «      Z# G d„ de
j>                  «      Z$ G d„ de
j>                  «      Z% G d„ de
j>                  «      Z&y)é    )Ú	dataclass)ÚAnyÚListÚOptionalN)Úshard_inplaceÚshard_linearÚsum_gradientsé   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)ÚKVCacheÚRotatingKVCache)Úinitialize_rope)Ú	SwitchGLUc                   ób  — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   eed
<   eed<   eed<   eed<   eed<   eed<   ee   ed<   ee   ed<   dZ	eed<   dZ
eed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZee   ed <   dZee   ed!<   d"Zeed#<   d$„ Zy)%Ú	ModelArgsÚ
model_typeÚ
vocab_sizeÚhidden_sizeÚintermediate_sizeÚmoe_intermediate_sizeÚnum_hidden_layersÚnum_attention_headsÚnum_key_value_headsÚhead_dimÚnum_expertsÚnum_experts_per_tokÚnum_shared_expertsÚrms_norm_epsÚmax_position_embeddingsÚsliding_windowÚlayer_typesÚis_moe_layerr
   Ún_groupÚ
topk_groupg      @Úrouted_scaling_factorTÚnorm_topk_probÚsigmoidÚscoring_funcÚnoaux_tcÚtopk_methodg    €„.AÚ
rope_thetaNÚrope_scalingÚrope_parametersFÚtie_word_embeddingsc                 ód   — | j                   �$d| j                   v r| j                   d   | _        y y y )Nr.   )r0   r.   ©Úselfs    úm/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/exaone_moe.pyÚ__post_init__zModelArgs.__post_init__/   s6   € Ø×ÑÐ+°À×@TÑ@TÑ0TØ"×2Ñ2°<Ñ@ˆD�Oð 1UÐ+ó    )Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   Úboolr&   r'   r(   r)   r+   r-   r.   r/   r   Údictr0   r1   r6   © r7   r5   r   r      sá   … àƒOØƒOØÓØÓØÓØÓØÓØÓØƒMØÓØÓØÓØÓØ Ó ØÓØ�c‘ÓØ�t‘*ÓØ€GˆSÓØ€J�ÓØ#&Ð˜5Ó&Ø€N�DÓØ!€L�#Ó!Ø!€K�Ó!Ø!€J�Ó!Ø#'€L�(˜4‘.Ó'Ø&*€O�X˜d‘^Ó*Ø %Ð˜Ó%óAr7   r   c                 óÔ  — t        j                  | j                  t         j                  «      «      }|}||z   }|dkD  rÃt        j                  |d|df¬«      }t        j
                  |dd¬«      j                  dd¬«      }	||z
  }
t        j                  |	|
dz
  d¬	«      d
d |
…d d …f   }t        j                  |t        j                  |«      t        j                  d«      d¬«      }t        j                  |dd«      }|}
t        j                  | |
dz
  d¬	«      d
d |
…f   }t        j                  ||d¬«      }|dkD  r|r|j                  dd¬«      }||dz   z  }||z  }||fS )Nr
   éÿÿÿÿ)ÚaxisÚshapeé   ©rD   T)rD   Úkeepdimséþÿÿÿ)ÚkthrD   .g        g#B’¡œÇ;)Úmxr*   ÚastypeÚfloat32Ú	unflattenÚtopkÚsumÚargpartitionÚput_along_axisÚstop_gradientÚarrayÚflattenÚtake_along_axis)ÚgatesÚe_score_correction_biasÚtop_kr&   r'   r(   r)   ÚscoresÚorig_scoresÚgroup_scoresÚkÚ	group_idxÚindsÚdenominators                 r5   Úgroup_expert_selectra   4   sZ  € ô �Z‰Z˜Ÿ™¤R§Z¡ZÓ0Ó1€FØ€KØÐ-Ñ-€Fà�‚{Ü—‘˜f¨2°g¸r°]ÔCˆÜ—w‘w˜v q¨rÔ2×6Ñ6¸BÈÐ6ÓNˆØ�jÑ ˆÜ—O‘O L°a¸!±eÀ"ÔEÀcÈ2ÈAÈ2ÊqÀjÑQˆ	Ü×"Ñ"Ø”B×$Ñ$ YÓ/´·±¸#³ÀRô
ˆô —‘˜F B¨Ó+ˆà€AÜ�?‰?˜F˜7¨¨A©°BÔ7¸¸R¸a¸R¸Ñ@€DÜ×Ñ ¨T¸Ô;€Fàˆq‚y‘^Ø—j‘j b°4�jÓ8ˆØ˜;¨Ñ.Ñ/ˆàÐ+Ñ+€FØ�ˆ<Ðr7   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚMoEGateÚargsc                 óÄ  •— t         ‰| �  «        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _	        t        j                  | j                  |j                  f«      | _        t        j                  | j                  f«      | _        |j                  dk(  sJ d«       ‚y )Nr,   zUnsupported topk method.)ÚsuperÚ__init__r   rY   r)   r   Ún_routed_expertsr(   r&   r'   rK   Úzerosr   ÚweightrX   r-   ©r4   rd   Ú	__class__s     €r5   rg   zMoEGate.__init__Y   s°   ø€ Ü‰ÑÔØ×-Ñ-ˆŒ
Ø"×1Ñ1ˆÔØ $× 0Ñ 0ˆÔØ%)×%?Ñ%?ˆÔ"Ø—|‘|ˆŒØŸ/™/ˆŒÜ—h‘h × 5Ñ 5°t×7GÑ7GÐHÓIˆŒÜ')§x¡x°×1FÑ1FÐ0HÓ'IˆÔ$Ø×Ñ :Ò-ÐIÐ/IÓIÑ-r7   c           	      óÊ   — t        || j                  j                  z  | j                  | j                  | j
                  | j                  | j                  | j                  «      S ©N)	ra   rj   ÚTrX   rY   r&   r'   r(   r)   ©r4   Úxs     r5   Ú__call__zMoEGate.__call__e   sO   € Ü"Ø�—‘—‘ÑØ×(Ñ(Ø�J‰JØ�L‰LØ�O‰OØ×&Ñ&Ø×Ñó
ð 	
r7   ©r8   r9   r:   r   rg   rr   Ú__classcell__©rl   s   @r5   rc   rc   X   s   ø„ ð
J˜Yõ 
Jö	
r7   rc   c                   ó6   ‡ — e Zd Zddedee   fˆ fd„Zd„ Zˆ xZS )ÚMLPrd   r   c                 ó  •— t         ‰| �  «        |j                  }|xs |j                  }t	        j
                  ||d¬«      | _        t	        j
                  ||d¬«      | _        t	        j
                  ||d¬«      | _        y ©NF©Úbias)	rf   rg   r   r   ÚnnÚLinearÚ	gate_projÚup_projÚ	down_proj)r4   rd   r   r   rl   s       €r5   rg   zMLP.__init__r   si   ø€ Ü‰ÑÔØ×&Ñ&ˆØ-ÒG°×1GÑ1GÐÜŸ™ ;Ð0AÈÔNˆŒÜ—y‘y Ð.?ÀeÔLˆŒÜŸ™Ð#4°kÈÔNˆ�r7   c                 ót   — | j                  t        | j                  |«      | j                  |«      «      «      S rn   )r€   r   r~   r   rp   s     r5   rr   zMLP.__call__z   s)   € Ø�~‰~œf T§^¡^°AÓ%6¸¿¹ÀQ»ÓHÓIÐIr7   rn   )	r8   r9   r:   r   r   r=   rg   rr   rt   ru   s   @r5   rw   rw   q   s#   ø„ ñO˜Yð O¸8ÀC¹=õ OöJr7   rw   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚMoErd   c                 ó<  •— t         ‰| �  «        t        |j                  |j                  |j
                  «      | _        t        |«      | _        |j                  �3|j                  dkD  r$t        ||j                  |j                  z  ¬«      nd | _        d | _        y )Nr   )r   )rf   rg   r   r   r   r   Ú
switch_mlprc   Úgater    rw   Úshared_expertsÚsharding_grouprk   s     €r5   rg   zMoE.__init__   s–   ø€ Ü‰ÑÔÜ#Ø×ÑØ×&Ñ&Ø×Ñó
ˆŒô ˜D“MˆŒ	ð ×&Ñ&Ð2°t×7NÑ7NÐQRÒ7Rô	 ØØ"&×"<Ñ"<¸t×?VÑ?VÑ"Võð
 ð 	Ôð #ˆÕr7   c                 ó°  — | j                   � t        | j                   «      |«      }| j                  |«      \  }}| j                  ||«      }||d   z  j	                  d¬«      j                  |j                  «      }| j                  �|| j                  |«      z   }| j                   �+t        j                  j                  || j                   ¬«      }|S )N).NrI   rG   ©Úgroup)rˆ   r	   r†   r…   rP   rL   Údtyper‡   rK   ÚdistributedÚall_sum)r4   rq   r_   rZ   Úys        r5   rr   zMoE.__call__”   sÃ   € Ø×ÑÐ*Ø2”˜d×1Ñ1Ó2°1Ó5ˆAà—y‘y “|‰ˆˆfØ�O‰O˜A˜tÓ$ˆØ�˜	Ñ"Ñ"×'Ñ'¨RÐ'Ó0×7Ñ7¸¿¹Ó@ˆØ×ÑÐ*Ø�D×'Ñ'¨Ó*Ñ*ˆAà×ÑÐ*Ü—‘×&Ñ& q°×0CÑ0CÐ&ÓDˆAàˆr7   rs   ru   s   @r5   rƒ   rƒ   ~   s   ø„ ð#˜Yõ #ö*r7   rƒ   c            	       óŽ   ‡ — e Zd Zdedefˆ fd„Z	 	 d	dej                  deej                     dee	   dej                  fd„Z
ˆ xZS )
Ú	Attentionrd   Ú	layer_idxc                 ó¨  •— t         ‰| �  «        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        | j                  dz  | _        t        j                  | j                  | j                  | j                  z  d¬«      | _        t        j                  | j                  | j                  | j                  z  d¬«      | _        t        j                  | j                  | j                  | j                  z  d¬«      | _        t        j                  | j                  | j                  z  | j                  d¬«      | _        t        j                  | j                  |j                   ¬«      | _        t        j                  | j                  |j                   ¬«      | _        |j&                  |   dk(  | _        d|j&                  v| _        | j(                  xs | j*                  | _        | j,                  r>t/        | j                  |j0                  d|j2                  |j4                  ¬«      | _        y y )Ng      à¿Frz   ©ÚepsÚsliding_attention)ÚbaseÚtraditionalÚscaling_configr"   )rf   rg   r   r   Ún_headsr   Ú
n_kv_headsr   Úscaler|   r}   Úq_projÚk_projÚv_projÚo_projÚRMSNormr!   Úq_normÚk_normr$   Úis_sliding_windowÚapply_rope_all_layersÚuse_roper   r.   r/   r"   Úrope©r4   rd   r’   rl   s      €r5   rg   zAttention.__init__¥   s¸  ø€ Ü‰ÑÔà×+Ñ+ˆÔØ×/Ñ/ˆŒØ×2Ñ2ˆŒØŸ™ˆŒØ—]‘] DÑ(ˆŒ
ä—i‘iØ×Ñ˜dŸl™l¨T¯]©]Ñ:Àô
ˆŒô —i‘iØ×Ñ˜dŸo™o°·±Ñ=ÀEô
ˆŒô —i‘iØ×Ñ˜dŸo™o°·±Ñ=ÀEô
ˆŒô —i‘iØ�L‰L˜4Ÿ=™=Ñ(¨$×*:Ñ*:Àô
ˆŒô —j‘j §¡°D×4EÑ4EÔFˆŒÜ—j‘j §¡°D×4EÑ4EÔFˆŒà!%×!1Ñ!1°)Ñ!<Ð@SÑ!SˆÔØ%8À×@PÑ@PÐ%PˆÔ"Ø×.Ñ.ÒL°$×2LÑ2LˆŒà�=Š=Ü'Ø—‘Ø—_‘_Ø!Ø#×0Ñ0Ø(,×(DÑ(DôˆD�Ið r7   rq   ÚmaskÚcacheÚreturnc                 óž  — |j                   \  }}}| j                  |«      | j                  |«      | j                  |«      }	}}| j	                  |j                  ||| j                  d«      «      j                  dddd«      }| j                  |j                  ||| j                  d«      «      j                  dddd«      }|	j                  ||| j                  d«      j                  dddd«      }	|�\| j                  r:| j                  ||j                  ¬«      }| j                  ||j                  ¬«      }|j                  ||	«      \  }}	n.| j                  r"| j                  |«      }| j                  |«      }t        |||	|| j                  |¬«      }
|
j                  dddd«      j                  ||d«      }
| j!                  |
«      S )NrC   r   rF   r
   é   )Úoffset)rª   rœ   r©   )rE   r�   rž   rŸ   r¢   Úreshaperš   Ú	transposer£   r›   r¦   r§   r®   Úupdate_and_fetchr   rœ   r    )r4   rq   r©   rª   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r5   rr   zAttention.__call__Ë   s‘  € ð —'‘'‰ˆˆ1ˆaà $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆà—+‘+˜gŸo™o¨a°°D·L±LÀ"ÓEÓF×PÑPØˆq�!�Qó
ˆð �{‰{˜4Ÿ<™<¨¨1¨d¯o©o¸rÓBÓC×MÑMØˆq�!�Qó
ˆð —‘  1 d§o¡o°rÓ:×DÑDÀQÈÈ1ÈaÓPˆàÐØ�}Š}ØŸ)™) G°E·L±L˜)ÓA�Ø—y‘y ¨e¯l©l�yÓ;�Ø ×1Ñ1°$¸Ó?‰LˆD‘&Ø�]Š]Ø—i‘i Ó(ˆGØ—9‘9˜T“?ˆDä-Ø�T˜6¨°d·j±jÀtô
ˆð ×!Ñ! ! Q¨¨1Ó-×5Ñ5°a¸¸BÓ?ˆØ�{‰{˜6Ó"Ð"r7   ©NN©r8   r9   r:   r   r=   rg   rK   rT   r   r   rr   rt   ru   s   @r5   r‘   r‘   ¤   s_   ø„ ð$˜Yð $°3õ $ðR $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r7   r‘   c            	       óŽ   ‡ — e Zd Zdedefˆ fd„Z	 	 d	dej                  deej                     dee	   dej                  fd„Z
ˆ xZS )
ÚDecoderLayerrd   r’   c                 óŽ  •— t         ‰| �  «        t        ||«      | _        |j                  |   rt        |«      n
t        |«      | _        | j                  j                  | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        y ©Nr”   )rf   rg   r‘   Ú	self_attnr%   rƒ   rw   Úmlpr¤   r|   r¡   r   r!   Úinput_layernormÚpost_attention_layernormr¨   s      €r5   rg   zDecoderLayer.__init__î   s�   ø€ Ü‰ÑÔä" 4¨Ó3ˆŒØ $× 1Ñ 1°)Ò <”3�t”9Ä#ÀdÃ)ˆŒØ!%§¡×!AÑ!AˆÔä!Ÿz™z¨$×*:Ñ*:À×@QÑ@QÔRˆÔÜ(*¯
©
Ø×Ñ $×"3Ñ"3ô)
ˆÕ%r7   rq   r©   rª   r«   c                 óš   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   S rn   )r¿   rÁ   rÀ   rÂ   )r4   rq   r©   rª   ÚrÚhs         r5   rr   zDecoderLayer.__call__ú   sL   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�1‰uˆr7   r¹   rº   ru   s   @r5   r¼   r¼   í   s^   ø„ ð

˜Yð 

°3õ 

ð $(Ø#ñ		à�8‰8ð	ð �r—x‘xÑ ð	ð ˜‰}ð		ð
 
�‰÷	r7   r¼   c                   ój   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dee   dej                  fd„Z	ˆ xZ
S )ÚExaoneMoEModelrd   c                 óv  •— t         ‰| �  «        || _        |j                  | _        t	        j
                  |j                  |j                  «      | _        t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}| _        t	        j                  |j                  |j                  ¬«      | _        d | _        d | _        t#        | j                  «      D ]E  \  }}|j$                  r| j                  €|| _        |j$                  rŒ2| j                   �Œ?|| _        ŒG |j&                  | _        y c c}w r¾   )rf   rg   rd   r   r|   Ú	Embeddingr   Úembed_tokensÚranger   r¼   Úlayersr¡   r!   ÚnormÚswa_idxÚga_idxÚ	enumerater¤   r#   Úwindow_size)r4   rd   ÚidxÚiÚlayerrl   s        €r5   rg   zExaoneMoEModel.__init__  sò   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔÜ:?À×@VÑ@VÔ:WÓXÑ:W°3”| D¨#Õ.Ð:WÑXˆŒÜ—J‘J˜t×/Ñ/°T×5FÑ5FÔGˆŒ	àˆŒØˆŒÜ! $§+¡+Ö.‰HˆAˆuØ×&Ò&¨4¯<©<Ð+?Ø �”Ø×*Ó*¨t¯{©{Ñ/BØ�•ð	 /ð  ×.Ñ.ˆÕùò Ys   Á.D6Úinputsrª   r«   c                 ó¬  — | j                  |«      }|€d gt        | j                  «      z  }t        || j                  �|| j                     n|d   «      }t        || j
                  �|| j
                     n|d   | j                  ¬«      }t        | j                  |«      D ]  \  }}|j                  r|n|} ||||«      }Œ! | j                  |«      S )Nr   )rÑ   )
rÊ   ÚlenrÌ   r   rÏ   rÎ   rÑ   Úzipr¤   rÍ   )	r4   rÕ   rª   rÅ   Úglobal_maskÚswa_maskrÔ   Úcr©   s	            r5   rr   zExaoneMoEModel.__call__  sÐ   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä+Ø T§[¡[Ð%<ˆu�T—[‘[Ò!À%ÈÁ(ó
ˆô )ØØ#'§<¡<Ð#;ˆE�$—,‘,ÒÀÀqÁØ×(Ñ(ô
ˆô ˜DŸK™K¨Ö/‰HˆE�1Ø$×6Ò6‘8¸KˆDÙ�a˜˜qÓ!‰Að 0ð �y‰y˜‹|Ðr7   rn   )r8   r9   r:   r   rg   rK   rT   r   r   rr   rt   ru   s   @r5   rÇ   rÇ     sA   ø„ ð/˜Yõ /ð*  $ñà—‘ðð ˜‰}ðð 
�‰÷	r7   rÇ   c                   óº   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dee   fd„Z	d„ Z
ed„ «       Zed„ «       Zd	„ Zdd
eej                  j                      fd„Zˆ xZS )ÚModelrd   c                 óî   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  s2t        j                  |j                  |j                  d¬«      | _        y y ry   )rf   rg   rd   r   rÇ   Úmodelr1   r|   r}   r   r   Úlm_headrk   s     €r5   rg   zModel.__init__4  sX   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ# DÓ)ˆŒ
à×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆD�Lð (r7   rÕ   rª   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S rn   )rß   rd   r1   rÊ   Ú	as_linearrà   )r4   rÕ   rª   Úouts       r5   rr   zModel.__call__=  sW   € ð
 �j‰j˜ Ó'ˆØ�9‰9×(Ò(Ø—*‘*×)Ñ)×3Ñ3°CÓ8ˆCð ˆ
ð —,‘,˜sÓ#ˆCØˆ
r7   c                 óø  — |j                  «       D ��ci c]  \  }}|j                  d«      rŒ||“Œ }}}|}t        | j                  j                  «      D ]í  }| j                  j
                  |   sŒd|› �}|› d�}||v r|j                  |«      ||› d�<   dD ]§  }dD ]   }|› d|› d|› �}	|› d	| j                  j                  d
z
  › d|› d|› �}
|	|v sŒ6|
|v sŒ;t        | j                  j                  «      D �cg c]  }|j                  |› d	|› d|› d|› �«      ‘Œ  }}t        j                  |«      ||› d|› d|› �<   Œ¢ Œ© Œï | j                  j                  r|j                  dd «       |S c c}}w c c}w )Nzmtp.zmodel.layers.z.mlp.e_score_correction_biasz!.mlp.gate.e_score_correction_bias)r~   r€   r   )rj   ÚscalesÚbiasesz.mlp.experts.0.Ú.z.mlp.experts.r
   z.mlp.switch_mlp.zlm_head.weight)ÚitemsÚ
startswithrË   rd   r   r%   Úpopr   rK   Ústackr1   )r4   Úweightsr]   ÚvÚnew_weightsÚlÚprefixÚbias_keyÚmÚ	first_keyÚlast_keyÚeÚto_joins                r5   ÚsanitizezModel.sanitizeI  s·  € Ø(/¯©¬ÔT©¡  1¸q¿|¹|ÈFÕ?S�q˜!‘t¨ˆÑTØˆä�t—y‘y×2Ñ2Ö3ˆAØ—9‘9×)Ñ)¨!Ò,Øà$ Q CÐ(ˆFà ˜Ð!=Ð>ˆHØ˜7Ñ"ØHOÏÉØóI�˜6˜(Ð"CÐDÑEó ;�Û7�AØ#) (¨/¸!¸¸A¸a¸SÐ A�Ià!˜( -°·	±	×0EÑ0EÈÑ0IÐ/JÈ!ÈAÈ3ÈaÐPQÈsÐSð ð ! GÒ+°¸GÒ0Cô &+¨4¯9©9×+@Ñ+@Ô%Aó#á%A ð $ŸK™K¨6¨(°-À¸sÀ!ÀAÀ3ÀaÈÀsÐ(KÕLØ%Að  ð #ô GIÇhÁhÈwÓFW˜ 6 (Ð*:¸1¸#¸Q¸q¸cÐ BÒCñ 8ñ ;ð 4ð2 �9‰9×(Ò(Ø�K‰KÐ(¨$Ô/àˆùó? Uùò,#s   ”E1®E1Ã<#E7
c                 ó.   — | j                   j                  S rn   )rß   rÌ   r3   s    r5   rÌ   zModel.layersk  s   € à�z‰z× Ñ Ð r7   c                 ó   — d„ }|S )Nc                 ó
   — d| vS )NrX   rA   )r]   s    r5   Ú	predicatez'Model.cast_predicate.<locals>.predicateq  s   € Ø,°AÐ5Ð5r7   rA   )r4   rû   s     r5   Úcast_predicatezModel.cast_predicateo  s   € ò	6ð Ðr7   c                 óØ   — g }| j                   D ]X  }|j                  r1|j                  t        | j                  j
                  d¬«      «       Œ@|j                  t        «       «       ŒZ |S )Nr   )Úmax_sizeÚkeep)rÌ   r¤   Úappendr   rd   r#   r   )r4   ÚcachesrÔ   s      r5   Ú
make_cachezModel.make_cachev  sU   € ØˆØ—[”[ˆEØ×&Ò&Ø—‘Ü#¨T¯Y©Y×-EÑ-EÈAÔNõð —‘œg›iÕ(ð !ð ˆr7   r‹   c                 ób  — |xs t         j                  j                  «       }|j                  «       }| j                  j
                  D �]ã  }t        |j                  j                  d|¬«      |j                  _        t        |j                  j                  d|¬«      |j                  _	        t        |j                  j                  d|¬«      |j                  _
        t        |j                  j                  d|¬«      |j                  _        |j                  xj                  |z  c_        |j                  xj                  |z  c_        t        |j                  t         «      r•t        |j                  j"                  d|¬«      |j                  _        t        |j                  j$                  d|¬«      |j                  _        t        |j                  j&                  d|¬«      |j                  _        �Œµ||j                  _        |j                  j*                  �„t-        |j                  j*                  j"                  d|¬«       t-        |j                  j*                  j$                  d|¬«       t-        |j                  j*                  j&                  d|¬«       t-        |j                  j.                  j"                  d|¬«       t-        |j                  j.                  j$                  d|¬«       t-        |j                  j.                  j&                  d|¬«       �Œæ y )Nzall-to-shardedrŠ   zsharded-to-all)rK   r�   ÚinitÚsizerß   rÌ   r   r¿   r�   rž   rŸ   r    rš   r›   Ú
isinstancerÀ   rw   r~   r€   r   rˆ   r‡   r   r…   )r4   r‹   ÚNrÔ   s       r5   ÚshardzModel.shard�  s]  € ØÒ.œŸ™×,Ñ,Ó.ˆØ�J‰J‹Lˆà—Z‘Z×&Õ&ˆEÜ%1Ø—‘×&Ñ&Ð(8Àô&ˆE�O‰OÔ"ô &2Ø—‘×&Ñ&Ð(8Àô&ˆE�O‰OÔ"ô &2Ø—‘×&Ñ&Ð(8Àô&ˆE�O‰OÔ"ô &2Ø—‘×&Ñ&Ð(8Àô&ˆE�O‰OÔ"ð �O‰O×#Ò#¨Ñ)Õ#Ø�O‰O×&Ò&¨1Ñ,Õ&ä˜%Ÿ)™)¤SÔ)Ü&2Ø—I‘I×'Ñ'Ð)9Àô'�—	‘	Ô#ô '3Ø—I‘I×'Ñ'Ð)9Àô'�—	‘	Ô#ô %1Ø—I‘I×%Ñ%Ð'7¸uô%�—	‘	Ö!ð ,1�—	‘	Ô(Ø—9‘9×+Ñ+Ð7Ü!ØŸ	™	×0Ñ0×:Ñ:Ø(Ø#õô
 "ØŸ	™	×0Ñ0×:Ñ:Ø(Ø#õô
 "ØŸ	™	×0Ñ0×8Ñ8Ð:JÐRWõô Ø—I‘I×(Ñ(×2Ñ2Ð4DÈEõô Ø—I‘I×(Ñ(×2Ñ2Ð4DÈEõô Ø—I‘I×(Ñ(×0Ñ0Ð2BÈ%÷ña 'r7   rn   )r8   r9   r:   r   rg   rK   rT   r   r   rr   r÷   ÚpropertyrÌ   rü   r  r�   ÚGroupr  rt   ru   s   @r5   rÝ   rÝ   3  sƒ   ø„ ðT˜Yõ Tð  $ñ
à—‘ð
ð ˜‰}ó
ò ðD ñ!ó ð!ð ñó ðò	ñ6˜8 B§N¡N×$8Ñ$8Ñ9÷ 6r7   rÝ   )'Údataclassesr   Útypingr   r   r   Úmlx.coreÚcorerK   Úmlx.nnr|   Úmlx.nn.layers.distributedr   r   r	   Úactivationsr   r—   r   r   r   rª   r   r   Ú
rope_utilsr   Úswitch_layersr   r   Úcompilera   ÚModulerc   rw   rƒ   r‘   r¼   rÇ   rÝ   rA   r7   r5   Ú<module>r     sß   ðõ "ß &Ñ &å Ý ß PÑ På ß TÑ Tß +Ý 'Ý $ð ôA�ó Aó ðAðD ‡�ñ ó ð ôF
ˆb�i‰iô 
ô2
Jˆ"�)‰)ô 
Jô#ˆ"�)‰)ô #ôLF#�—	‘	ô F#ôR�2—9‘9ô ô2*�R—Y‘Yô *ôZDˆB�I‰Iõ Dr7   