+
    UV-jï0  ã                   óÔ   € ^ RI Ht ^ RIHt ^ RI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 R	 t ! R
 R]P,                  4      t ! R R]P,                  4      tR# )é    )ÚOptionalN)ÚInputEmbeddingsFeatures)Úprocessing_gemma3n)Ú
AudioModel©ÚModelConfigÚ
TextConfig)ÚGemma3nRMSNormÚLanguageModel)ÚVisionModelc                óF  € VP                  \        P                  4      pVP                  4       '       g!   \        P                  ! WP
                  4      # VP
                  p\        P                  ! W4      P                  4       pVP                  4       pVP                  4       p\        P                  ! VP                  \        P                  4      4      ^,
          p\        V4      pWx,          p	Wi,          p
\        P                  ! WZV4      pVP                  V4      # )z.MLX implementation of PyTorch's masked_scatter)ÚastypeÚmxÚbool_ÚanyÚbroadcast_toÚshapeÚflattenÚcumsumÚint32ÚlenÚwhereÚreshape)Úinput_tensorÚmaskÚsourceÚinput_shapeÚresult_flatÚ	mask_flatÚsource_flatÚselection_maskÚ
source_lenÚbounded_indicesÚselected_valuess   &&&        Úo/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/gemma3n/gemma3n.pyÚmasked_scatterr&      sÒ   € ð �;‰;”r—x‘xÓ €Dð �8‰8�:Š:Ü�Š˜|¯Z©ZÓ8Ð8ð —*‘*€KÜ—/’/ ,Ó<×DÑDÓF€KØ—‘“€IØ—.‘.Ó"€Kô —Y’Y˜y×/Ñ/´·±Ó9Ó:¸QÕ>€Nô �[Ó!€JØ$Õ1€Oð "Õ2€Oä—(’(˜9°{ÓC€Kà×Ñ˜{Ó+Ð+ó    c                   óX   a a€ ] tR t^-t oRtV3R lV 3R lltRV3R lR lltRtVtV ;t	# )ÚGemma3nMultimodalEmbedderz:Embeds token ids or soft tokens into language model space.c                ó&   <€ V ^8„  d   QhRS[ RS[/# )é   Úmultimodal_configÚtext_configr   )ÚformatÚ__classdict__s   "€r%   Ú__annotate__Ú&Gemma3nMultimodalEmbedder.__annotate__0   s   ø€ ÷ 
ñ 
©+ð 
ÁJñ 
r'   c                óx  <€ \         SV `  4        VP                  V n        VP                  V n        VP                  V n        VP                  V n        VP                  V n        \        P                  ! V P                  V P                  4      V n        \        V P                  V P
                  R 7      V n        \        V P                  V P
                  R 7      V n        \        P                  ! V P                  V P                  RR7      V n        \        V P                  V P
                  RR7      V n        R# ))ÚepsF)Úbias)r3   Ú
with_scaleN)ÚsuperÚ__init__Úhidden_sizeÚmultimodal_hidden_sizeÚrms_norm_epsr3   Úvocab_offsetÚ
vocab_sizeÚtext_hidden_sizeÚnnÚ	EmbeddingÚ	embeddingr
   Úhard_embedding_normÚsoft_embedding_normÚLinearÚembedding_projectionÚembedding_post_projection_norm)Úselfr,   r-   Ú	__class__s   &&&€r%   r7   Ú"Gemma3nMultimodalEmbedder.__init__0   sî   ø€ Ü‰ÑÔà&7×&CÑ&CˆÔ#Ø$×1Ñ1ˆŒØ-×:Ñ:ˆÔØ+×6Ñ6ˆŒØ +× 7Ñ 7ˆÔäŸš d§o¡o°t×7RÑ7RÓSˆŒÜ#1Ø×'Ñ'¨T¯X©Xô$
ˆÔ ô $2Ø×'Ñ'¨T¯X©Xô$
ˆÔ ô %'§I¢IØ×'Ñ'¨×)>Ñ)>ÀUô%
ˆÔ!ô /=Ø×!Ñ! t§x¡x¸Eô/
ˆÖ+r'   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r+   Ú	input_idsÚinputs_embedsÚreturn)r   Úarray)r.   r/   s   "€r%   r0   r1   G   s1   ø€ ÷ ñ ÙŸ™ðÙ9;¿¹ðá	�‰ñr'   c                ó  € VR J VR J,          '       d   \        R4      hVe   V P                  V4      pM2V P                  WP                  ,
          4      pV P	                  V4      pV P                  V4      pV P                  V4      pV# )Nz:You must specify exactly one of input_ids or inputs_embeds)Ú
ValueErrorrB   r@   r;   rA   rD   rE   )rF   rJ   rK   Úemb_normÚhard_embÚemb_norm_projÚ	projecteds   &&&    r%   Ú__call__Ú"Gemma3nMultimodalEmbedder.__call__G   s�   € ð ˜Ð -°tÐ";×<Ô<ÜØLóð ð Ò$Ø×/Ñ/°Ó>‰Hð —~‘~ i×2CÑ2CÕ&CÓDˆHØ×/Ñ/°Ó9ˆHà×1Ñ1°(Ó;ˆØ×7Ñ7¸ÓFˆ	ØÐr'   )
r@   rE   rD   r3   rA   r9   rB   r=   r;   r<   ©NN)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r7   rT   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©rG   r/   s   @@r%   r)   r)   -   s!   ù‡ € ÙD÷
ó 
÷.÷ ò r'   r)   c                   óº   a a€ ] tR t^[t oV3R lV 3R lltRV3R lR lltR t]R 4       tRR lt	]RR l4       t
RV3R	 lR
 lltR tR t]R 4       tRtVtV ;t# )ÚModelc                ó    <€ V ^8„  d   QhRS[ /# )r+   Úconfig)r   )r.   r/   s   "€r%   r0   ÚModel.__annotate__\   s   ø€ ÷ 
ñ 
™{ñ 
r'   c                óò  <€ \         SV `  4        VP                  V n        Wn        \	        VP
                  4      V n        VP
                  P                  V n        VP
                  P                  V n        \        VP                  4      V n        \        VP                  VP
                  R 7      V n        \        VP                  4      V n        \        VP                  VP
                  R 7      V n        R# ))r-   N)r6   r7   Ú
model_typerc   r   r-   Úlanguage_modelr<   Úvocab_size_per_layer_inputr   Úvision_configÚvision_towerr)   Úembed_visionr   Úaudio_configÚaudio_towerÚembed_audio)rF   rc   rG   s   &&€r%   r7   ÚModel.__init__\   sÂ   ø€ Ü‰ÑÔØ ×+Ñ+ˆŒØŒô ,¨F×,>Ñ,>Ó?ˆÔØ ×,Ñ,×7Ñ7ˆŒØ*0×*<Ñ*<×*WÑ*WˆÔ'ô (¨×(<Ñ(<Ó=ˆÔÜ5Ø× Ñ ¨f×.@Ñ.@ô
ˆÔô
 & f×&9Ñ&9Ó:ˆÔÜ4Ø×Ñ¨V×-?Ñ-?ô
ˆÖr'   c                ón   <€ V ^8„  d   QhRS[ S[P                  ,          RS[ S[P                  ,          /# )r+   rJ   Úpixel_values)r   r   rM   )r.   r/   s   "€r%   r0   rd   r   s5   ø€ ÷ s
ñ s
á™BŸH™HÕ%ðs
ñ ™rŸx™xÕ(ñs
r'   c                óÂ  € VP                  R R4      pVP                  RR4      pV P                  P                  P                  V4      p\        P
                  ! V^ 8¬  WP                  8  4      p\        P                  ! Wq\        P                  ! V4      4      pV P                  P                  P                  V4      p	Vf   Vf   \        WiR7      # VEe\   \        P
                  ! WP                  P                  8¬  WP                  P                  8  4      p
V P                  P                  V P                  P                  ,           ^,
          p\        P                  ! W¡V4      pV P                  VR7      p\        P                  ! V
R
,          WÖ4      pWP                  P                  8¬  pV P                  P                  V P                  P                  ,           ^,
          p\        P                  ! WáV4      pV P                  VR7      p\        P                  ! VR
,          VV4      pMRp	Ve‰   VP                  RR4      pVe   TpM1V P                  W P                   V P"                  V P                  4      pRpV P%                  VVV P'                  VVV P"                  P(                  VR7      VR7      pVEe   V P+                  WE( 4      w  pp\        P,                  ! V P                  ^,
          ..4      pV P                  VR7      p\        P                  ! VR
,          VV4      pVP.                  w  pppV P"                  P0                  V,
          p\        P2                  ! VVVV34      p\        P4                  ! VV3^R7      pR	pV P%                  VVV P'                  VVV P"                  P6                  VR7      VR7      p\        WiR7      # )Úinput_featuresNÚinput_features_mask)rK   Úper_layer_inputs©rJ   Úcached_image_featuresÚimage)Úmodality)ÚaxisÚaudio).N)Úgetrg   ÚmodelÚembed_tokensr   Úlogical_andrh   r   Ú
zeros_likeÚget_per_layer_inputsr   rk   r;   rn   r<   Úget_image_featuresrj   rc   Úmerge_multimodal_and_textÚconstruct_special_modality_maskÚimage_token_idÚget_audio_featuresrM   r   Úaudio_soft_tokens_per_imager   ÚconcatenateÚaudio_token_id)rF   rJ   rq   Úkwargsrs   rt   rK   Úper_layer_inputs_maskÚper_layer_inputs_tokensru   Úvision_maskÚdummy_vision_token_idÚvision_tokensÚvision_embeds_flatÚ
audio_maskÚdummy_audio_token_idÚaudio_tokensÚaudio_embeds_flatÚcachedÚimage_featuresry   Úaudio_featuresÚaudio_padding_idsÚaudio_padding_embsÚaudio_batch_sizeÚaudio_seq_lenÚaudio_embed_dimÚextra_padding_tokensÚextra_padding_featuress   &&&,                         r%   Úget_input_embeddingsÚModel.get_input_embeddingsr   sÍ  € ð  Ÿ™Ð$4°dÓ;ˆØ$Ÿj™jÐ)>ÀÓEÐØ×+Ñ+×1Ñ1×>Ñ>¸yÓIˆä "§¢Ø˜‰N˜I×(GÑ(GÑGó!
Ðô #%§(¢(Ø!¬b¯mªm¸IÓ.Fó#
Ðð  ×.Ñ.×4Ñ4×IÑIØ#ó
Ðð Ò NÒ$:Ü*Ø+ôð ð Ó ô Ÿ.š.Ø×.Ñ.×;Ñ;Ñ;Ø×,Ñ,×9Ñ9Ñ9óˆKð
 ×!Ñ!×.Ñ.°×1BÑ1B×1MÑ1MÕMÐPQÕQð "ô ŸHšH [Ð=RÓSˆMØ!%×!2Ñ!2¸]Ð!2Ó!KÐÜŸHšHØ˜IÕ&Ð(:óˆMð
 #×&6Ñ&6×&CÑ&CÑCˆJà× Ñ ×-Ñ-°×0@Ñ0@×0KÑ0KÕKÈaÕOð !ô Ÿ8š8 JÐ;OÓPˆLØ $× 0Ñ 0¸<Ð 0Ó HÐÜŸHšHØ˜9Õ%Ð'8¸-ó‰Mð  $Ðð Ò#Ø—Z‘ZÐ 7¸Ó>ˆFØÒ!Ø!'‘à!%×!8Ñ!8Ø ×"3Ñ"3°T·[±[À$×BSÑBSó"�ð ˆHØ ×:Ñ:ØØØ×4Ñ4ØØ!Ø—K‘K×.Ñ.Ø%ð	 5ó ð "ð ;ó 
ˆMð Ó%Ø)-×)@Ñ)@ØÐ 4ó*Ñ&ˆN˜Jô !#§¢¨4¯?©?¸QÕ+>Ð*?Ð)@Ó AÐØ!%×!1Ñ!1Ð<MÐ!1Ó!NÐÜŸXšXØ˜9Õ%Ð'9¸>óˆNð @N×?SÑ?SÑ<Ð˜m¨_à—‘×7Ñ7¸-ÕGð !ô &(§_¢_Ø"Ø!Ð#7¸ÐIó&Ð"ô
  Ÿ^š^ØÐ!7Ð8¸qôˆNð ˆHØ ×:Ñ:ØØØ×4Ñ4ØØ!Ø—K‘K×.Ñ.Ø%ð	 5ó ð "ð ;ó 
ˆMô 'Ø'ô
ð 	
r'   c                óP   € V P                  W4      w  r4V P                  VR 7      V3# )©rK   )rm   rn   )rF   rs   rt   Úaudio_outputsr‘   s   &&&  r%   r†   ÚModel.get_audio_featuresç   s3   € Ø$(×$4Ñ$4Øó%
Ñ!ˆð ×Ñ¨mÐÓ<¸jÐHÐHr'   c                ó<  € V! V R R7      pVP                  ^ ^^^4      pVP                  VP                  ^ ,          VP                  P                  VP
                  4      P                  ^ ^^4      pWBP                  P                  R,          ,          pV! VR7      # )T)Úoutput_hidden_statesg      à?r¢   )Ú	transposer   r   ri   r8   Úvision_soft_tokens_per_image)rq   rj   rc   rk   Úvision_outputss   &&&& r%   r‚   ÚModel.get_image_featuresí   s™   € á%ØØ!%ô
ˆð (×1Ñ1°!°Q¸¸1Ó=ˆØ'×/Ñ/Ø× Ñ  Õ#Ø× Ñ ×,Ñ,Ø×/Ñ/ó
÷ ‰)�A�q˜!Ó
ð	 	ð 	×.Ñ.×:Ñ:¸CÕ?Õ?ˆÙ¨.Ô9Ð9r'   c                ó*  € VfV   VR8X  d   V P                   MV P                  P                  P                  pW%! \        P
                  ! V.4      R7      8H  pV# \        P                  ! W8H  R4      p\        P                  ! WbP                  4      pV# )Nr{   rv   éÿÿÿÿ)	rn   rg   r}   r~   r   rM   Úexpand_dimsr   r   )rF   rJ   rK   Útoken_idry   Úembed_fnÚspecial_modality_masks   &&&&&  r%   r„   Ú%Model.construct_special_modality_maskþ   s™   € ð Òð ˜wÔ&ð × Ò à×(Ñ(×.Ñ.×;Ñ;ð ð
 %2°XÜŸ(š( H :Ó.ô6ñ %Ð!ð %Ð$ô	 %'§N¢N°9Ñ3HÈ"Ó$MÐ!Ü$&§O¢OØ%×':Ñ':ó%Ð!ð %Ð$r'   c                óÔ   € VP                  4       pVP                  pWE8w  d   \        R V RV RV RV RV RV R24      hVP                  V P                  4      p\        WV4      p V # )z
Number of z#s does not match number of special z tokens in the input text. Got Ú z tokens in the text and z tokens from z embeddings.)ÚsumÚsizerO   r   Údtyper&   )rK   Úfeaturesr°   ry   Úmodality_tokens_in_textÚfeature_tokenss   &&&&  r%   rƒ   ÚModel.merge_multimodal_and_text  sŽ   € ð
 #8×";Ñ";Ó"=ÐØ!Ÿ™ˆà"Ô4ÜØ˜X˜JÐ&IÈ(Èð TØ.Ð/¨q°°
Ð:RØ!Ð" -°¨z¸ðGóð ð
 —?‘? =×#6Ñ#6Ó7ˆä& }ÈXÓVˆØÐr'   c          	      ó²   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  ,          RS[S[ P                  ,          RS[S[ P                  ,          /# )r+   rJ   rq   r   Úcache)r   rM   r   )r.   r/   s   "€r%   r0   rd   $  sR   ø€ ÷  ñ  á—8‘8ð ñ ™rŸx™xÕ(ð ñ ‘r—x‘xÕ ð	 ñ
 ™Ÿ™Õ!ñ r'   c                ó  € VP                  R R4      pVe/   VP                  RR4      pV P                  ! RRVRVRVR VRV/VB # V P                  ! RRVRV/VB pV P                  RVVP                  VP                  R7      p	V	# )	rK   Nru   rJ   r¼   r   rq   )rJ   r¼   rK   ru   © )Úpoprg   rŸ   rK   ru   )
rF   rJ   rq   r   r¼   rŠ   rK   ru   Úinput_embeddings_featuresÚlogitss
   &&&&&,    r%   rT   ÚModel.__call__$  sÚ   € ð Ÿ
™
 ?°DÓ9ˆØÒ$Ø%Ÿz™zÐ*<¸dÓCÐØ×&Ò&ñ Ø#ðàðð ðð ,ð	ð
 "2ðð ñð ð %)×$=Ò$=ñ %
Øð%
à%ð%
ð ñ%
Ð!ð ×$Ñ$ØØØ3×AÑAØ6×GÑGð	 %ó 
ˆð ˆr'   c                óÈ   € / pVP                  4        FK  w  r4VP                  R 4      '       d,   WBRP                  VP                  R4      R,          4      &   KG  WBV&   KM  	  V# )zmodel.Ú.:é   NN)ÚitemsÚ
startswithÚjoinÚsplit)rF   ÚweightsÚsanitized_weightsÚkÚvs   &&   r%   ÚsanitizeÚModel.sanitizeF  sW   € ØÐØ—M‘M–O‰DˆAà�|‰|˜H×%Ò%Ø@A #§(¡(¨1¯7©7°3«<¸Õ+;Ó"<Ó=à'( !Ó$ñ $ð !Ð r'   c                ó6   € V P                   P                  4       # ©N)rg   Ú
make_cache©rF   s   &r%   rÒ   ÚModel.make_cacheP  s   € Ø×"Ñ"×-Ñ-Ó/Ð/r'   c                óB   € V P                   P                  P                  # rÑ   )rg   r}   ÚlayersrÓ   s   &r%   rÖ   ÚModel.layersS  s   € à×"Ñ"×(Ñ(×/Ñ/Ð/r'   )	rm   rc   rn   rk   rg   rf   rj   r<   rh   rV   )rx   )NNN)rW   rX   rY   rZ   r7   rŸ   r†   Ústaticmethodr‚   r„   rƒ   rT   rÎ   rÒ   ÚpropertyrÖ   r\   r]   r^   r_   s   @@r%   ra   ra   [   s}   ù‡ € ÷
ó 
÷,s
ò s
òjIð ñ:ó ð:ô %ð& óó ð÷$ ò  òD!ò0ð ñ0ó ÷0ð 0r'   ra   )Útypingr   Úmlx.coreÚcorer   Úmlx.nnr>   Úbaser   Ú r   r{   r   rc   r   r	   Úlanguager
   r   Úvisionr   r&   ÚModuler)   ra   r¾   r'   r%   Ú<module>rã      sH   ðÝ å Ý å *Ý  Ý ß +ß 3Ý ò,ô>+ §	¡	ô +ô\z0ˆB�I‰Iö z0r'   