+
    UV-jL}  ã                   ó  € ^ RI Ht ^ RIHt ^ RIHtHtHtHt ^ RI	H
t ^ RIHt ^ RIHtHtHtHt ^RIHtHt  ! R R]P,                  4      t ! R	 R
]P,                  4      tR3R R llt ! R R]P4                  4      t ! R R]P,                  4      t ! R R]P,                  4      tR5R R lltR R ltR6R R llt R4R lt!R4R lt" ! R R]PF                  4      t$ ! R R]P,                  4      t% ! R R ]P,                  4      t&R7R! lt'R" t( ! R# R$]P,                  4      t) ! R% R&]P,                  4      t*R' R( lt+R8R) R* llt,R9R+ lt-R9R, lt.R:R- lt/R. t0 ! R/ R0]P,                  4      t1 ! R1 R2]P,                  4      t2R# );é    )ÚSequence)Úsqrt)ÚDictÚListÚOptionalÚTupleN)ÚEdgeResidualConfigÚMultiQueryAttentionBlockConfigÚUniversalInvertedResidualConfigÚVisionConfig)Úbicubic_interpolateÚnearest_interpolatec                   óX   a a€ ] tR t^t oRtRV3R lV 3R llltV3R lR ltRtVtV ;t	# )Ú"MobileNetV5MultiScaleFusionAdaptera  Multi-layer fusion token adapter.
Attributes:
  out_filters: The number of output filters.
  output_resolution: The output resolution.
  activation: The activation function.
  expansion_ratio: The expansion ratio.
  upsampling_interpolation: The upsampling interpolation.
  use_layer_scale: Whether to use layer scale.
  layer_scale_init_value: The initial value of the layer scale.
  skip_projection: Whether to skip the projection.
  name: The name of the module.
  upsize: The upsampling fn.
  downsize: The downsampling fn.
c                óZ   <€ V ^8„  d   QhRS[ S[,          RS[RS[RS[RS[RS[RS[RS[/# )	é   Úin_chsÚout_chsÚoutput_resolutionÚexpansion_ratioÚinterpolation_modeÚuse_layer_scaleÚlayer_scale_init_valueÚnoskip)r   ÚintÚfloatÚstrÚbool)ÚformatÚ__classdict__s   "€Ún/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/gemma3n/vision.pyÚ__annotate__Ú/MobileNetV5MultiScaleFusionAdapter.__annotate__#   si   ø€ ÷ "Mñ "Má‘S•	ð"Mñ ð"Mñ ð	"Mñ
 ð"Mñ  ð"Mñ ð"Mñ !&ð"Mñ ñ"Mó    c	           
     óÖ  <€ \         S
V `  4        \        V\        4      '       d   \	        V4      MTV n        W n        \        V4      V n        W@n	        WPn
        W`n        Wpn        W€n        \        p	\        V P
                  V P                  ^ V P                  T	V P                  V P                  '       d   V P                  MRR7      V n        V	! V P                  RRR7      V n        R# )r   N)r   r   Údw_kernel_size_midÚ	exp_ratioÚ
norm_layerr   r   ç�íµ ÷Æ°>F©ÚepsÚ	apply_act)ÚsuperÚ__init__Ú
isinstancer   ÚsumÚin_channelsÚout_channelsÚ	to_2tupler   r   r   r   r   r   ÚRMSNormAct2dÚUniversalInvertedResidualÚffnÚnorm)Úselfr   r   r   r   r   r   r   r   r(   Ú	__class__s   &&&&&&&&& €r!   r.   Ú+MobileNetV5MultiScaleFusionAdapter.__init__#   sÂ   ø€ ô 	‰ÑÔÜ*4°V¼X×*FÒ*Fœ3˜vœ;ÈFˆÔØ#ÔÜ!*Ð+<Ó!=ˆÔØ.ÔØ"4ÔØ.ÔØ&<Ô#ØŒä!ˆ
Ü,Ø×#Ñ#Ø×%Ñ%Ø Ø×*Ñ*Ø!Ø—;‘;à/3×/C×/CÐ/C�×+Ò+Èô

ˆŒñ ˜t×0Ñ0°dÀeÔLˆŽ	r$   c                ó^   <€ V ^8„  d   QhRS[ S[P                  ,          RS[P                  /# )r   ÚinputsÚreturn)ÚlistÚmxÚarray)r   r    s   "€r!   r"   r#   G   s'   ø€ ÷ #ñ #™t¡B§H¡H�~ð #±"·(±(ñ #r$   c           	     ór  € V Uu. uF  q"P                  ^ ^^^4      NK  	  ppV^ ,          P                  RR p. p\        V4       F`  w  rV\        \	        VP                  RR V4       UUu. uF	  w  rxWx8  NK  	  upp4      '       d   \        WcR7      pVP                  V4       Kb  	  \        P                  ! V^R7      p	V P                  V	P                  ^^4      4      P                  ^^4      p\        \	        W0P                  4       U
Uu. uF	  w  r«W«8g  NK  	  upp
4      '       dú   V^ ,          V P                  ^ ,          ,          ^ 8w  g'   V^,          V P                  ^,          ,          ^ 8w  d   \        W`P                  4      pMrV^ ,          V P                  ^ ,          ,          pV^,          V P                  ^,          ,          p\        P                  ! WÍ3WÍ3R7      ! VP                  ^^4      4      pV P                  '       d   V P!                  V4      MTpV# u upi u uppi u upp
i )r   N)Úsize)Úaxis)Úkernel_sizeÚstrideéþÿÿÿ)Ú	transposeÚshapeÚ	enumerateÚanyÚzipr   Úappendr?   Úconcatenater6   Úswapaxesr   r   ÚnnÚ	AvgPool2dr   r7   )r8   r<   ÚiÚhigh_resolutionÚresized_inputsÚ_ÚimgÚrÚhrÚchannel_cat_imgsÚroÚrhÚ	h_stridesÚ	w_stridess   &&            r!   Ú__call__Ú+MobileNetV5MultiScaleFusionAdapter.__call__G   sä  € Ù39Ó:±6¨a—+‘+˜a  A qÖ)±6ˆÐ:Ø  �)Ÿ/™/ØˆCð
ˆð ˆä Ö'‰FˆAÜ¬¨C¯I©I°b°c¨N¸OÔ(LÔMÑ(L™u˜q�A”FÑ(LÒM×NÒNÜ)¨#ÔD�à×!Ñ! #Ö&ñ	 (ô Ÿ>š>Ø ô
Ðð �h‰hÐ'×0Ñ0°°AÓ6Ó7×@Ñ@ÀÀAÓFˆä¤s¨?×<RÑ<RÔ'SÔTÑ'S™V˜R�”Ñ'SÒT×UÒUà Õ" T×%;Ñ%;¸AÕ%>Õ>À!ÔCØ" 1Õ%¨×(>Ñ(>¸qÕ(AÕAÀQÔFä)¨#×/EÑ/EÓF‘à+¨AÕ.°$×2HÑ2HÈÕ2KÕK�	Ø+¨AÕ.°$×2HÑ2HÈÕ2KÕK�	ä—l’lØ!*Ð 6Ø%Ð1õð —,‘,˜q !Ó$ó&�ð
 %)§K§K K�$—)‘)˜C”.°SˆCàˆ
ùòE ;ùó Nùó Us   …H(Á,H-ÄH3
)
r   r6   r1   r   r   r7   r   r2   r   r   )ç       @ÚnearestFçñhãˆµøä>T)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r.   r]   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r9   r    s   @@r!   r   r      s&   ù‡ € ñ÷"Mõ "M÷H#÷ #ð #r$   r   c                   óT   a a€ ] tR t^nt oRV3R lV 3R llltV3R lR ltRtVtV ;t# )ÚLayerScale2dc                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   ÚdimÚinit_valuesÚinplace)r   r   r   )r   r    s   "€r!   r"   ÚLayerScale2d.__annotate__o   s"   ø€ ÷ 3ñ 3™Cð 3©eð 3ÁTñ 3r$   c                óv   <€ \         SV `  4        W0n        V\        P                  ! V34      ,          V n        R # ©N)r-   r.   rp   r?   ÚonesÚgamma)r8   rn   ro   rp   r9   s   &&&&€r!   r.   ÚLayerScale2d.__init__o   s)   ø€ Ü‰ÑÔØŒØ ¤2§7¢7¨C¨6£?Õ2ˆŽ
r$   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r   Úxr=   ©r?   r@   )r   r    s   "€r!   r"   rq   t   s'   ø€ ÷ Fñ F™"Ÿ(™(ð F¡r§x¡xñ Fr$   c                ó€   € V P                   '       d   VP                  V P                  4      # WP                  ,          # rs   )rp   Úmul_ru   ©r8   ry   s   &&r!   r]   ÚLayerScale2d.__call__t   s(   € Ø%)§\§\ \ˆq�v‰v�d—j‘jÓ!ÐE°q¿:¹:µ~ÐEr$   )ru   rp   )ra   F©	rb   rc   rd   re   r.   r]   rg   rh   ri   rj   s   @@r!   rl   rl   n   s!   ù‡ € ÷3õ 3÷
F÷ Fð Fr$   rl   c                óœ   € V ^8„  d   QhR\         P                  R\        \        ,          R\        \         P                  ,          R\
        /# )r   ry   Únormalized_shapeÚweightr+   )r?   r@   r   r   r   r   )r   s   "r!   r"   r"   x   sA   € ÷ ñ Ü	‡x�xðäœ3•iðô ”R—X‘XÕðô 
ñ	r$   c                 óD  € \        V4      ^8X  g   Q hV P                  p\        P                  ! V ^4      p\        P                  ! V^RR7      pV \        P
                  ! WS,           4      ,          p Ve+   V P                  V4      VP                  ^R^^4      ,          p V # )é   T)rC   Úkeepdimséÿÿÿÿ)ÚlenÚdtyper?   ÚpowerÚmeanÚrsqrtÚastypeÚreshape)ry   r�   r‚   r+   rˆ   Úvs   &&&&  r!   Ú
rms_norm2dr�   x   sƒ   € ô ÐÓ  AÔ%Ð%Ð%Ø�G‰G€EÜ
�Š��A‹€AÜ
�Š�˜ DÔ)€AØ	ŒB�HŠH�Q•WÓÕ€AØÒØ�H‰H�U‹O˜fŸn™n¨Q°°A°qÓ9Õ9ˆØ€Hr$   c                   óT   a a€ ] tR t^‰t oRV3R lV 3R llltV3R lR ltRtVtV ;t# )r4   c                ó    <€ V ^8„  d   QhRS[ /# )r   r,   )r   )r   r    s   "€r!   r"   ÚRMSNormAct2d.__annotate__Š   s   ø€ ÷ 	=ñ 	=ñ ñ		=r$   c                óè   <€ \         SV `  WR 7       V.V n        \        P                  ! 4       V n        V'       d   \        P                  ! 4       V n        R# \        P                  ! 4       V n        R# ))Údimsr+   N)r-   r.   r�   rO   ÚIdentityÚdropÚGELUÚact)r8   Únum_channelsr+   r,   r9   s   &&&&€r!   r.   ÚRMSNormAct2d.__init__Š   sG   ø€ ô 	‰Ñ˜lÐÔ4Ø!- ˆÔÜ—K’K“MˆŒ	ß )”2—7’7“9ˆŽ¬r¯{ª{«}ˆŽr$   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rx   rz   )r   r    s   "€r!   r"   r’   •   ó#   ø€ ÷ ñ ™"Ÿ(™(ð ¡r§x¡xñ r$   c                óð   € VP                  ^ ^^^4      p\        WP                  V P                  V P                  4      pV P                  V4      pV P                  V4      pVP                  ^ ^^^4      pV# ©r   )rG   r�   r�   r‚   r+   r–   r˜   r}   s   &&r!   r]   ÚRMSNormAct2d.__call__•   se   € à�K‰K˜˜1˜a Ó#ˆÜ�q×/Ñ/°·±¸d¿h¹hÓGˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØ�K‰K˜˜1˜a Ó#ˆØˆr$   )r˜   r–   r�   )r)   Tr   rj   s   @@r!   r4   r4   ‰   s   ù‡ € ÷	=õ 	=÷÷ ð r$   r4   c                   ón   a a€ ] tR t^ t o^ ^^ ^^^RRR]RRR3V3R lV 3R llltV3R	 lR
 ltRtVtV ;t	# )r5   Ú Fç      ð?Nç        ra   c                óŽ   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[ RS[ RS[ RS[ R	S[R
S[RS[RS[S[,          RS[RS[S[,          /# )r   r   r   Údw_kernel_size_startr&   Údw_kernel_size_endrE   ÚdilationÚ
group_sizeÚpad_typer   r'   Úconv_kwargsÚdrop_path_rater   )r   r   r   r   r   r   )r   r    s   "€r!   r"   Ú&UniversalInvertedResidual.__annotate__¡   s¯   ø€ ÷ W-ñ W-áðW-ñ ðW-ñ "ð	W-ñ
  ðW-ñ  ðW-ñ ðW-ñ ðW-ñ ðW-ñ ðW-ñ ðW-ñ ðW-ñ ™d•^ðW-ñ ðW-ñ  !)©¥ñ!W-r$   c                óL  <€ \         SV `  4        W8H  ;'       d    V^8H  ;'       d    V
'       * V n        V^8”  d   V'       g   V'       g   V'       g   Q hV'       dP   V'       g   TM^p\        W�4      p\	        \
        P                  VVVVV^,
          ^,          VVRRRR7      V n        M\
        P                  ! 4       V n        \        W,          4      p\	        \
        P                  VV^^^ ^RRR7	      V n
        V'       d,   \        VV4      p\	        \        VVVV^ VVRRR7
      V n        M\
        P                  ! 4       V n        \	        \
        P                  VV^^^ ^RRRR7
      V n        Ve   \        W/4      V n        R# \
        P                  ! 4       V n        R# )r„   Fra   )rD   rE   Úpaddingr§   ÚgroupsÚbiasr,   r+   )rD   rE   r®   r¯   r°   r+   )rD   rE   r®   r§   r¯   r°   r+   )rD   rE   r®   r¯   r°   r,   r+   N)r-   r.   Úhas_skipÚ
num_groupsÚConvNormActrO   ÚConv2dÚdw_startr•   Úmake_divisibleÚpw_expÚ
Conv2dSameÚdw_midÚpw_projrl   Úlayer_scale)r8   r   r   r¥   r&   r¦   rE   r§   r¨   r©   r   r'   r(   rª   r«   r   Údw_start_strideÚdw_start_groupsÚmid_chsÚdw_mid_groupsr9   s   &&&&&&&&&&&&&&&&    €r!   r.   Ú"UniversalInvertedResidual.__init__¡   sy  ø€ ô$ 	‰ÑÔØÑ*×JÐ:¨v¸©{×JÐJÀFÄ
ˆŒØ�AŒ:ß'×+=×ASÐSÐSçß,>™fÀAˆOÜ(¨Ó<ˆOÜ'Ü—	‘	ØØØ0Ø&Ø-°Õ1°aÕ7Ø!Ø&ØØØôˆD�Mô ŸKšK›MˆDŒMä  Õ!3Ó4ˆÜ!Ü�I‰IØØØØØØØØô

ˆŒ÷ Ü& z°7Ó;ˆMÜ%ÜØØØ.ØØØ!Ø$ØØôˆD�Kô Ÿ+š+›-ˆDŒKä"Ü�I‰IØØØØØØØØØô
ˆŒð "Ò-Ü+¨GÓLˆDÖä!Ÿ{š{›}ˆDÖr$   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rx   rz   )r   r    s   "€r!   r"   r¬   ú   ó#   ø€ ÷ 	ñ 	™"Ÿ(™(ð 	¡r§x¡xñ 	r$   c                óè   € TpV P                  V4      pV P                  V4      pV P                  V4      pV P                  V4      pV P	                  V4      pV P
                  '       d	   W,           pV# rs   )rµ   r·   r¹   rº   r»   r±   ©r8   ry   Úshortcuts   && r!   r]   Ú"UniversalInvertedResidual.__call__ú   sa   € ØˆØ�M‰M˜!ÓˆØ�K‰K˜‹NˆØ�K‰K˜‹NˆØ�L‰L˜‹OˆØ×Ñ˜QÓˆØ�=�=ˆ=Ø•ˆAØˆr$   )r¹   rµ   r±   r»   r·   rº   ©
rb   rc   rd   re   r4   r.   r]   rg   rh   ri   rj   s   @@r!   r5   r5       sJ   ù‡ € ð
 %&Ø"#Ø"#ØØØØØØØØ&*Ø #Ø26÷!W-õ W-÷r	÷ 	ð 	r$   r5   c                   óT   a a€ ] tR tRt oRV3R lV 3R llltV3R lR ltRtVtV ;t# )r³   i  c                óV   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[ RS[ RS[ RS[R	S[R
S[/
# )r   r   r   rD   rE   r®   r§   r¯   r°   r,   r+   )r   r   r   )r   r    s   "€r!   r"   ÚConvNormAct.__annotate__  s}   ø€ ÷ Fñ Fñ ðFñ ð	Fñ
 ðFñ ðFñ ðFñ ðFñ ðFñ ðFñ ðFñ ñFr$   c           
     ó~   <€ \         SV `  4        W0n        V! VVVVVWw3VV	4      V n        \	        W;V
R 7      V n        R# )r*   N)r-   r.   r   Úconvr4   Úbn)r8   Úconv_clsr   r   rD   rE   r®   r§   r¯   r°   r,   r+   r9   s   &&&&&&&&&&&&€r!   r.   ÚConvNormAct.__init__  sL   ø€ ô 	‰ÑÔØŒÙØØØØØØÐ ØØó	
ˆŒ	ô ˜w¸9ÔEˆŽr$   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rx   rz   )r   r    s   "€r!   r"   rÊ   $  s#   ø€ ÷ ñ ™"Ÿ(™(ð ¡r§x¡xñ r$   c                óJ   € V P                  V4      pV P                  V4      pV# rs   )rÌ   rÍ   )r8   ry   ÚcrV   s   &&  r!   r]   ÚConvNormAct.__call__$  s!   € Ø�I‰I�a‹LˆØ�G‰G�A‹JˆØˆr$   )rÍ   rÌ   r   )é   r„   r   r„   r„   FTr)   r   rj   s   @@r!   r³   r³     s    ù‡ € ÷Fõ F÷8÷ ð r$   r³   c                óŠ   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\         \        ,          R\        /# )r   rD   rE   r§   Úvalue)r   r   r   )r   s   "r!   r"   r"   *  s>   € ÷ ñ ä”c•ðô ”�Iðô ”3�ið	ô
 ñr$   c                óL  € V P                   R,          w  rV\        WQ^ ,          V^ ,          V^ ,          4      p\        Wa^,          V^,          V^,          4      pRV^,          Ww^,          ,
          3V^,          Wˆ^,          ,
          3R.p	\        P                  ! W	VR7      p V # )z
Input should be in MLX format
ºr„   rÔ   N)Úconstant_values)r   r   )rH   Úget_same_paddingr?   Úpad)
ry   rD   rE   r§   rÖ   ÚihÚiwÚpad_hÚpad_wÚ
pad_widthss
   &&&&&     r!   Úpad_samerá   *  s“   € ð �W‰W�S�\�F€BÜ˜R¨Q¥°¸µ¸HÀQ½KÓH€EÜ˜R¨Q¥°¸µ¸HÀQ½KÓH€Eð
 	Ø	�!��U a�ZÕ'Ð(Ø	�!��U a�ZÕ'Ð(Øð	€Jô 	�Šˆq¨eÔ4€AØ€Hr$   c                óF   € V ^8„  d   QhR\         \         \        3,          /# )r   r=   )r   r   )r   s   "r!   r"   r"   E  s   € ÷ ñ ¼¼uÄd¸{Õ9Kñ r$   c                 óè   € R p\        V \        4      '       dY   V P                  4       p V R8X  d*   \        V3/ VB '       d   \	        V3/ VB p W3# ^ p Rp W3# V R8X  d   ^ p W3# \	        V3/ VB p W3# )FÚsameTÚvalid)r/   r   ÚlowerÚis_static_padÚget_padding)r®   rD   ÚkwargsÚdynamics   &&, r!   Úget_padding_valuerë   E  sœ   € Ø€GÜ�'œ3×Òà—-‘-“/ˆØ�fÔä˜[Ñ3¨F×3Ð3ä% kÑ<°VÑ<�ð ÐÐð �Ø‘ð ÐÐð ˜ÔàˆGð ÐÐô " +Ñ8°Ñ8ˆGØÐÐr$   c          
      óT   € V ^8„  d   QhR\         R\         R\         R\         R\         /# )r   Ú
input_sizerD   rE   r§   r=   )r   )r   s   "r!   r"   r"   \  s4   € ÷ 	ñ 	Üð	Ü"%ð	Ü/2ð	Ü>Að	äñ	r$   c                ó®   € W1^,
          ,          ^,           pW,           ^,
          V,          p\        ^ V^,
          V,          V,           V ,
          4      pV# )z0Calculate padding needed for 'same' output size.)Úmax)rí   rD   rE   r§   Úeffective_kernel_sizeÚoutput_sizeÚtotal_paddings   &&&&   r!   rÚ   rÚ   \  sS   € ð %°a­Õ8¸1Õ<ÐØÕ&¨Õ*¨vÕ5€KÜØ	ˆK˜!�O˜vÕ%Ð(=Õ=À
ÕJó€Mð Ðr$   c                óH  € \        V \        4      '       d   W .p \        V\        4      '       d   W.p\        V\        4      '       d   W".p. p\        W4       F<  w  rVWe^,
          ,          ^,           pV^,
          pVP                  V^,          4       K>  	  \	        V4      # )z,Get symmetric padding for given kernel size.)r/   r   rK   rL   Útuple)	rD   rE   r§   rT   r®   ÚkÚdÚeffective_kÚ	pad_totals	   &&&,     r!   rè   rè   h  s‹   € ä�+œs×#Ò#Ø"Ð0ˆÜ�&œ#×ÒØÐ!ˆÜ�(œC× Ò ØÐ'ˆà€GÜ�KÖ*‰ˆØ˜q�5•k A•oˆØ !•Oˆ	Ø�‰�y A•~Ö&ñ +ô �‹>Ðr$   c                ó   € \        V \        4      '       d   W .p \        V\        4      '       d   W.p\        V\        4      '       d   W".p\        ;QJ d    R V 4       F  '       d   K   R# 	  R# ! R V 4       4      # )z.Check if padding can be calculated statically.c              3   ó*   "  € T F	  q^8H  x € K  	  R# 5i)r„   N© )Ú.0Úss   & r!   Ú	<genexpr>Ú is_static_pad.<locals>.<genexpr>ƒ  s   é € Ð&™v˜!�AŽv›vùs   ‚FT)r/   r   Úall)rD   rE   r§   rT   s   &&&,r!   rç   rç   y  sl   € ä�+œs×#Ò#Ø"Ð0ˆÜ�&œ#×ÒØÐ!ˆÜ�(œC× Ò ØÐ'ˆ÷ ‹3Ñ&™vÓ&�3Œ3Ð&Š3Ð&ˆ3Ñ&™vÓ&Ó&Ð&r$   c                   óD   a a€ ] tR tRt oV 3R ltV3R lR ltRtVtV ;t# )r¸   i†  c                ól   <€ \         SV `  ! V/ VB  V P                  P                  R ,          V n        R# )rØ   N)r-   r.   r‚   rH   rD   )r8   Úargsré   r9   s   &*,€r!   r.   ÚConv2dSame.__init__‡  s,   ø€ Ü‰Ò˜$Ð) &Ò)ØŸ;™;×,Ñ,¨SÕ1ˆÖr$   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rx   rz   )r   r    s   "€r!   r"   ÚConv2dSame.__annotate__‹  rœ   r$   c                ó&  € \        WP                  V P                  V P                  4      p\        P
                  ! WP                  V P                  V P                  V P                  V P                  4      pR V 9   d   W P                  ,           pV# )r°   )
rá   rD   rE   r§   r?   Úconv2dr‚   r®   r¯   r°   )r8   ry   Úys   && r!   r]   ÚConv2dSame.__call__‹  sd   € Ü�Q×(Ñ(¨$¯+©+°t·}±}ÓEˆÜ�IŠIØ�{‰{˜DŸK™K¨¯©°t·}±}ÀdÇkÁkó
ˆð �TŒ>Ø—I‘I•ˆAØˆr$   ©rD   r   rj   s   @@r!   r¸   r¸   †  s   ù‡ € õ2÷÷ ð r$   r¸   c            
       óh   a a€ ] tR tRt o^^^^ R^ RR^]3
V3R lV 3R llltV3R lR ltR	tVtV ;t	# )
ÚEdgeResiduali–  r¡   Fr¢   c                ó\   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[ RS[ RS[RS[ R	S[R
S[RS[ /# )r   r   r   Úexp_kernel_sizerE   r§   r¨   r©   Úforce_in_chsr   Úexpand_ratioÚpw_kernel_size)r   r   r   r   )r   r    s   "€r!   r"   ÚEdgeResidual.__annotate__—  sy   ø€ ÷ 5
ñ 5
áð5
ñ ð5
ñ ð	5
ñ
 ð5
ñ ð5
ñ ð5
ñ ð5
ñ ð5
ñ ð5
ñ ð5
ñ ñ5
r$   c                ó*  <€ \         SV `  4        V^ 8”  d   \        WŠ,          4      pM\        W,          4      p\        Wm4      pW8H  ;'       d    V^8H  ;'       d    V	'       * V n        \        VVVV^ WU3VRR7      V n        V'       d   V! VRR7      M\        P                  ! 4       V n	        V^,
          ^,          p\        P                  ! VVVVRR7      V n        V'       d   V! VRRR7      V n        R# \        P                  ! 4       V n        R# )r   F©rD   rE   r®   r§   r¯   r°   ra   )r+   )rD   r®   r°   r*   N)r-   r.   r¶   r²   r±   r¸   Úconv_exprO   r•   Úbn1r´   Úconv_pwlÚbn2)r8   r   r   r  rE   r§   r¨   r©   r  r   r  r  r(   r¾   r¯   Úpadding_pwlr9   s   &&&&&&&&&&&&&   €r!   r.   ÚEdgeResidual.__init__—  sú   ø€ ô 	‰ÑÔà˜!ÔÜ$ \Õ%@ÓA‰Gä$ VÕ%:Ó;ˆGä˜JÓ0ˆàÑ*×JÐ:¨v¸©{×JÐJÀFÄ
ˆŒä"ØØØ'ØØØÐ)ØØô	
ˆŒ÷ 6@‘:˜g¨5Õ1ÄRÇ[Â[Ã]ˆŒð &¨Õ)¨aÕ/ˆÜŸ	š	ØØØ&ØØô
ˆŒ÷ ñ �w E°UÔ;ð 	Žô —’“ð 	Žr$   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rx   rz   )r   r    s   "€r!   r"   r  Î  s#   ø€ ÷ ñ ™"Ÿ(™(ð ¡r§x¡xñ r$   c                óÆ   € TpV P                  V4      pV P                  V4      pV P                  V4      pV P                  V4      pV P                  '       d	   W,           pV# rs   )r  r  r  r  r±   rÄ   s   && r!   r]   ÚEdgeResidual.__call__Î  sR   € ØˆØ�M‰M˜!ÓˆØ�H‰H�Q‹KˆØ�M‰M˜!ÓˆØ�H‰H�Q‹KˆØ�=�=ˆ=Ø•ˆAØˆr$   )r  r  r  r  r±   rÇ   rj   s   @@r!   r  r  –  s?   ù‡ € ð
  !ØØØØØØØ!ØØ÷5
õ 5
÷n÷ ð r$   r  c                   ó�   a a€ ] tR tRt o^^^^R^^@^@RR^^R]P
                  RRRRRR3V3R lV 3R	 llltV3R
 lR ltRtVt	V ;t
# )ÚMobileAttentioniÚ  r¡   TFNr£   ra   c          (      ó¸   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[ RS[ RS[RS[ R	S[ R
S[ RS[RS[S[ S[ 3,          RS[ RS[ RS[RS[RS[RS[RS[S[,          RS[/# )r   r   r   rE   Údw_kernel_sizer§   r¨   r©   Ú	num_headsÚkey_dimÚ	value_dimÚuse_multi_queryÚquery_stridesÚ	kv_strideÚcpe_dw_kernel_sizer   r«   Ú	attn_dropÚ	proj_dropr   Úuse_bias)r   r   r   r   r   r   )r   r    s   "€r!   r"   ÚMobileAttention.__annotate__Û  sõ   ø€ ÷ D'ñ D'áðD'ñ ðD'ñ ð	D'ñ
 ðD'ñ ðD'ñ ðD'ñ ðD'ñ ðD'ñ ðD'ñ ðD'ñ ðD'ñ ™S¡#˜X•ðD'ñ ðD'ñ  ðD'ñ  ð!D'ñ& ð'D'ñ( ð)D'ñ* ð+D'ñ, !)©¥ð-D'ñ. ñ/D'r$   c                óN  <€ \         SV `  4        V^8H  ;'       d    W8H  ;'       d    V'       * V n        \        V4      V n        WÐn        \        V P                   Uu. uF  pV^8„  NK
  	  up4      V n        \        VRRR7      V n	        Vf   W,          ^ 8X  g   Q hW,          pV'       d   \        VVVV	V
VVVVVVVR7      V n        M\        R4      hVe   \        VV4      V n        M\        P                   ! 4       V n        \        P                   ! 4       V n        R# u upi )r„   ra   Fr*   N)Údim_outr#  r$  r%  r'  r(  r§   r®   r"  r*  r+  zattention not implemented)r-   r.   r±   r3   r'  r(  rJ   Úhas_query_strider4   r7   ÚMultiQueryAttention2dÚattnÚNotImplementedErrorrl   r»   rO   r•   Ú	drop_path)r8   r   r   rE   r"  r§   r¨   r©   r#  r$  r%  r&  r'  r(  r)  r   Ú	act_layerÚaa_layerr«   r*  r+  r   r,  rý   r9   s   &&&&&&&&&&&&&&&&&&&&&&& €r!   r.   ÚMobileAttention.__init__Û  s!  ø€ ô2 	‰ÑÔØ 1™×JÐ:¨Ñ):×JÐJÀFÄ
ˆŒÜ& }Ó5ˆÔØ"ŒÜ #°D×4FÒ4FÓ$GÑ4F¨q Q¨¤UÑ4FÑ$GÓ HˆÔô !ØØØô
ˆŒ	ð ÒØÕ# qÔ(Ð(Ð(ØÕ)ˆI÷ Ü-ØØØ#ØØ#Ø+Ø#Ø!Ø Ø-Ø#Ø#ôˆD�Iô &Ð&AÓBÐBð "Ò-Ü+¨GÐ5KÓLˆDÕä!Ÿ{š{›}ˆDÔô Ÿš›ˆŽùòO %Hs   ÁD"c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rx   rz   )r   r    s   "€r!   r"   r-  !  rÂ   r$   c                óÄ   € TpV P                  V4      pV P                  V4      pV P                  V4      pV P                  '       d   V P	                  V4      V,           pV# rs   )r7   r2  r»   r±   r4  rÄ   s   && r!   r]   ÚMobileAttention.__call__!  sT   € ØˆØ�I‰I�a‹LˆØ�I‰I�a‹LˆØ×Ñ˜QÓˆð �=�=ˆ=Ø—‘˜qÓ! HÕ,ˆAØˆr$   )r2  r4  r0  r±   r(  r»   r7   r'  ©r„   r„   )rb   rc   rd   re   rO   r—   r.   r]   rg   rh   ri   rj   s   @@r!   r   r   Ú  sc   ù‡ € ð
 ØØØØØØØØ $Ø)/ØØ"#ØØ—'‘'ØØ #ØØØ26Ø÷/D'õ D'÷L	÷ 	ð 	r$   r   c                óÜ   € V'       d4   \         P                  ! V VVVV^,
          ^,          V,          VV VR7      # \         P                  ! V VVVV^,
          ^,          V,          VVR7      # )zAHelper function to create a 2D convolution with common parametersr  )rD   rE   r®   r§   r°   )rO   r´   )r1   r2   rD   rE   r§   Ú	depthwiser°   ré   s   &&&&&&&,r!   Úcreate_conv2dr>  -  st   € ÷ ä�yŠyØØØ#ØØ  1•_¨Õ*¨XÕ5ØØØô	
ð 		
ô �yŠyØØØ#ØØ  1•_¨Õ*¨XÕ5ØØô
ð 	
r$   c                ó8   € \        V \        4      '       d   V # W 3# )zConvert input to 2-tuple)r/   rô   )ry   s   &r!   r3   r3   Q  s   € ä�!”U×ÒØˆØˆ6€Mr$   c                   ó>   a a€ ] tR tRt oV 3R ltR tR tRtVtV ;t	# )ÚNamedSequentialiX  c                ó2   <€ \         SV `  4        . V n        R # rs   )r-   r.   Ú_order)r8   r9   s   &€r!   r.   ÚNamedSequential.__init__Y  s   ø€ Ü‰ÑÔØˆŽr$   c                óT   € \        WV4       V P                  P                  V4       R # rs   )ÚsetattrrC  rL   )r8   ÚnameÚmodules   &&&r!   Ú
add_moduleÚNamedSequential.add_module]  s   € Ü�˜FÔ#Ø�‰×Ñ˜4Ö r$   c                óN   € V P                    F  p\        W4      ! V4      pK  	  V# rs   )rC  Úgetattr)r8   ry   rG  s   && r!   r]   ÚNamedSequential.__call__a  s$   € Ø—K”KˆDÜ˜Ô# AÓ&ŠAñ  àˆr$   )rC  )
rb   rc   rd   re   r.   rI  r]   rg   rh   ri   rj   s   @@r!   rA  rA  X  s   ù‡ € õò!÷ò r$   rA  c                   óŽ   a a€ ] tR tRt oRV3R lV 3R llltV3R lR ltV3R lR ltV3R lR	 ltRV3R
 lR lltRt	Vt
V ;t# )r1  ih  c                óˆ   <€ V ^8„  d   QhRS[ RS[S[ ,          RS[ RS[ RS[ RS[S[ S[ 3,          RS[ RS[ R	S[R
S[ RS[RS[/# )r   rn   r/  r#  r$  r%  r'  r(  r§   r®   r"  r*  r+  )r   r   r   r   r   )r   r    s   "€r!   r"   Ú"MultiQueryAttention2d.__annotate__i  s«   ø€ ÷ XSñ XSáðXSñ ™#•ðXSñ ð	XSñ
 ðXSñ ðXSñ ™S¡#˜X•ðXSñ ðXSñ ðXSñ ðXSñ ðXSñ ðXSñ ñXSr$   c                ó  <€ \         SV `  4        T;'       g    TpW0n        \        V4      V n        Wpn        R V n        W@n        WPn        TpVR,          V n	        \        4       V n        V P                  P                  R\        VV P                  V P                  ,          ^R7      4       \        4       V n        V^8”  dU   V P                  P                  R\        VVV
VVV	R R7      4       V P                  P                  R\        VRRR7      4       V P                  P                  R\        W^RR	7      4       \        4       V n        V^8”  dU   V P                   P                  R\        VVV
VVV	R R7      4       V P                   P                  R\        VRRR7      4       V P                   P                  R\        W^RR	7      4       V^ 8”  d   \"        P$                  ! V4      M\"        P&                  ! 4       V n        \        4       V n        V P*                  P                  R\        WS,          V^^RR
7      4       V^ 8”  d   \"        P$                  ! V4      V n        R# \"        P&                  ! 4       V n        R# )TÚprojr  Ú	down_conv)rD   rE   r§   r®   r=  r7   r)   Fr*   )rD   r°   )rD   rE   r°   Ng      à¿)r-   r.   r#  r3   r'  r(  Ú
fused_attnr$  r%  ÚscalerA  ÚqueryrI  r>  Úkeyr4   rÖ   rO   ÚDropoutr•   r*  Úoutputr+  )r8   rn   r/  r#  r$  r%  r'  r(  r§   r®   r"  r*  r+  Úhead_dimr9   s   &&&&&&&&&&&&& €r!   r.   ÚMultiQueryAttention2d.__init__i  s  ø€ ô 	‰ÑÔØ—.�.˜SˆØ"ŒÜ& }Ó5ˆÔØ"ŒØˆŒØŒØ"ŒØˆØ˜t•^ˆŒ
ä$Ó&ˆŒ
Ø�
‰
×ÑØÜØØ—‘ §¡Õ-Øôô	
ô #Ó$ˆŒØ�qŒ=Ø�H‰H×ÑØÜØØØ .Ø$Ø%Ø#Ø"ôôð �H‰H×Ñ ¬°S¸dÈeÔ(TÔUØ�‰×ÑØ”M #¸AÀEÔJô	
ô %Ó&ˆŒ
Ø�qŒ=Ø�J‰J×!Ñ!ØÜØØØ .Ø$Ø%Ø#Ø"ôôð �J‰J×!Ñ! &¬,°sÀÐPUÔ*VÔWØ�
‰
×ÑØ”M #¸aÀeÔLô	
ð
 3<¸a´-œŸš IÔ.ÄRÇ[Â[Ã]ˆŒô &Ó'ˆŒØ�‰×ÑØÜØÕ%ØØØØôô		
ð 3<¸a´-œŸš IÓ.ˆŽÄRÇ[Â[Ã]ˆŽr$   c                ó4   <€ V ^8„  d   QhRS[ P                  /# )r   Útrz   )r   r    s   "€r!   r"   rP  Ã  s   ø€ ÷ ñ ¡§¡ñ r$   c                ón   € VP                   pVP                  V^ ,          RV^,          4      R,          pV# )zÖ
Input shape MLX: [B, H, W, C]
Input shape PyTorch: [B, C, H, W]

PyTorch Reshape: [B, C, H, W] -> [B, C, -1] -> [B, -1, C] -> [B, 1, -1, C] -> SDPA
MLX Reshape: [B, H, W, C] -> [B, -1, C] -> [B, 1, -1, C] -> SDPA
r†   )ºNNNNr_  r_  )rH   r�   )r8   r]  rý   s   && r!   Ú_reshape_inputÚ$MultiQueryAttention2d._reshape_inputÃ  s1   € ð �G‰GˆØ�I‰I�a˜•d˜B  !¥Ó% mÕ4ˆàˆr$   c                ó@   <€ V ^8„  d   QhRS[ P                  RS[RS[/# )r   r]  r#  r$  ©r?   r@   r   )r   r    s   "€r!   r"   rP  Ð  s&   ø€ ÷ 'ñ '©"¯(©(ð '¹sð 'ÉSñ 'r$   c                óz   € VP                   w  rErgVP                  WEV,          W#4      pVP                  ^ ^^^4      # )z=
Input shape MLX: [B, H, W, C] where C = num_heads * key_dim
)rH   r�   rG   )r8   r]  r#  r$  ÚBÚHÚWÚCs   &&&&    r!   Ú_reshape_projected_queryÚ.MultiQueryAttention2d._reshape_projected_queryÐ  s:   € ð —W‘W‰
ˆˆaà�I‰I�a˜Q� 	Ó3ˆØ�{‰{˜1˜a  AÓ&Ð&r$   c                óF   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[/# )r   r]  r#  Úh_pxÚw_pxrc  )r   r    s   "€r!   r"   rP  Ù  s-   ø€ ÷ 
ñ 
¡§¡ð 
±cð 
Áð 
ÉCñ 
r$   c                ó~   € VP                   w  rVrxVP                  ^ ^^^4      pVP                  WSWFV,          4      pV# )zb
Input shape: [B, NH, L, D] where L = h_px * w_px
Output shape MLX: [B, H, W, C] where C = NH * D
)rH   rG   r�   )	r8   r]  r#  rl  rm  re  ÚNHÚLÚDs	   &&&&&    r!   Ú_reshape_outputÚ%MultiQueryAttention2d._reshape_outputÙ  s>   € ð
 —g‘g‰ˆˆqà�K‰K˜˜1˜a Ó#ˆà�I‰I�a˜t¨!¥VÓ,ˆØˆr$   c                óx   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  ,          RS[ P                  /# )r   ry   Ú	attn_maskr=   )r?   r@   r   )r   r    s   "€r!   r"   rP  å  s3   ø€ ÷ ñ ™"Ÿ(™(ð ©x¹¿¹Õ/Að ÉRÏXÉXñ r$   c           
     ó–  € VP                   w  r4rVV P                  V4      pV P                  WpP                  V P                  4      pV P                  V4      pV P                  V4      pV P                  V4      p	V P                  V	4      p	V P                  '       dF   \        P                  P                  VVV	R \        VP                   R,          4      ,          R7      p
M\        R4      hV P                  W P                  W@P                  ^ ,          ,          WPP                  ^,          ,          4      p
V P!                  V
4      pV# )r¢   )rU  z!unfused attention not implementedr†   )rH   rV  ri  r#  r$  rW  r`  rÖ   rT  r?   ÚfastÚscaled_dot_product_attentionr   r3  rr  r'  rY  )r8   ry   ru  re  rf  rg  rh  Úqrõ   rŽ   Úos   &&&        r!   r]   ÚMultiQueryAttention2d.__call__å  s
  € Ø—W‘W‰
ˆˆaØ�J‰J�q‹MˆØ×)Ñ)¨!¯^©^¸T¿\¹\ÓJˆà�H‰H�Q‹KˆØ×Ñ Ó"ˆà�J‰J�q‹MˆØ×Ñ Ó"ˆà�?�?ˆ?Ü—‘×4Ñ4ØØØØœD §¡¨¥Ó-Õ-ð	 5ó ‰Aô &Ð&IÓJÐJà× Ñ Ø�~‰~˜q×$6Ñ$6°qÕ$9Õ9¸1×@RÑ@RÐSTÕ@UÕ;Uó
ˆð �K‰K˜‹NˆØˆr$   )r*  rT  rW  r$  r(  r#  rY  r+  rV  r'  rU  rÖ   r%  )Né   é@   r}  r;  r„   r„   r¡   rÔ   r£   r£   rs   )rb   rc   rd   re   r.   r`  ri  rr  r]   rg   rh   ri   rj   s   @@r!   r1  r1  h  sA   ù‡ € ÷XSõ XS÷tð ÷'ð '÷
ð 
÷÷ ò r$   r1  c                óR   € V ^8„  d   QhR\         \        ,          R\        R\        /# )r   r¨   Úchannelsr=   )r   r   )r   s   "r!   r"   r"     s%   € ÷ &ñ &œ8¤C�=ð &´Cð &¼Cñ &r$   c                 óD   € V '       g   ^# W,          ^ 8X  g   Q hW,          # ©r„   rû   )r¨   r  s   &&r!   r²   r²     s$   € ßÙð Õ$¨Ô)Ð)Ð)ØÕ%Ð%r$   c                ó0   € V ^8„  d   QhR\         R\        /# )r   ÚdivisorÚround_limit)r   r   )r   s   "r!   r"   r"   
  s   € ÷ ñ œsð ÄUñ r$   c                 ó¨   € T;'       g    Tp\        V\        W^,          ,           4      V,          V,          4      pWCV ,          8  d	   WA,          pV# )r   )rï   r   )rŽ   rƒ  Ú	min_valuer„  Únew_vs   &&&& r!   r¶   r¶   
  sG   € Ø×$Ð$˜W€IÜ�	œ3˜q¨Q¥;�Ó/°7Õ:¸WÕDÓE€Eà˜Q�ÔØÕˆØ€Lr$   c                 ó"   € \        V VVVVR 7      # )©rD   ÚfiltersÚstridesr  Úis_multiscale)r	   r‰  s   &&&&&r!   Ú_err�    s   € ÜØØØØ!Ø#ôð r$   c           	      ó$   € \        V VVVVVR 7      # )©Ústart_dw_kernel_sizeÚmid_dw_kernel_sizerŠ  r‹  r  rŒ  )r   r�  s   &&&&&&r!   Ú_uirr’    s#   € ô +Ø1Ø-ØØØ!Ø#ôð r$   c                 ó&   € \        V VVVVR 7      pV# ))r#  Úkv_dimÚ
kv_stridesÚmmqa_avg_pool_kvrŒ  )r
   )r#  r”  r•  r–  rŒ  Úconfs   &&&&& r!   Ú_mmqar˜  /  s$   € ô *ØØØØ)Ø#ô€Dð €Kr$   c                  ó†  € \        ^^€^4      .\        ^^€^4      .^,          ,           \        ^^R^R4      .R	 U u. uF  p \        V ^ R4      NK  	  up ,           \        ^^R^R4      .\        ^^ R4      .^,          ,           \        ^ ^ R^R4      .,           \        ^^@^4      \        ^ ^ R^R4      .^,          ,           \        ^^@^4      \        ^ ^ R^RRR7      .,           \        ^^R^R4      .\        ^^`^4      \        ^ ^ R^R4      .^,          ,           \        ^^`^4      \        ^ ^ R^RRR7      .,           .# u up i )
rÔ   é   g      @i€  r¢   r_   T)rŒ  i   )é   rÔ   r›  rÔ   )r�  r’  r˜  )rõ   s    r!   Úgemma3n_mobilenet_defrœ  A  s^  € ô 
ˆQ��Q‹ÐœC  3¨›NÐ+¨aÕ/Õ/ä	ˆa��C˜˜CÓ	 Ð!¹lÓ$K¹l¸¤T¨!¨Q°¦_¹lÑ$KÕKä	ˆa��C˜˜CÓ	 Ð!Ü��1�c‹?Ð
˜aÕ
õ	 ä��1�c˜1˜cÓ"Ð
#õ	$ô ��R˜ÓœT ! Q¨¨Q°Ó4Ð
5¸Õ
:õ	;ô ��R˜ÓœT ! Q¨¨Q°À4ÔHÐ
Iõ		Jô 
ˆa��D˜!˜SÓ	!Ð"Ü��R˜ÓœT ! Q¨¨a°Ó5Ð
6¸Õ
;õ	<ä��R˜ÓœT ! Q¨¨a°ÀDÔIÐ
Jõ	Kðð ùò %Ls   »D>c                   óZ   a a€ ] tR tRt oV3R lV 3R lltR tRV3R lR lltRtVtV ;t	# )	ÚVisionToweriT  c                ó    <€ V ^8„  d   QhRS[ /# ©r   Úconfig©r   )r   r    s   "€r!   r"   ÚVisionTower.__annotate__U  s   ø€ ÷ 
ñ 
™|ñ 
r$   c                ó  <€ \         SV `  4        \        \        ^^@^^^ RRR7      V n        RpR	pV P                  4       w  q@n        V;V n        V n        W n	        W0n
        \        R.RV P                  R7      V n        R# )
rÔ   ra   T)r   r   rD   rE   r®   r+   r°   i€  i   )r   r   r   N)rÔ   é   )é   r¦  )r-   r.   r³   r¸   Ú	conv_stemÚbuildÚblocksÚnum_featuresÚhead_hidden_sizeÚmsfa_indicesÚmsfa_output_resolutionr   Úmsfa)r8   r¡  r¬  r­  rª  r9   s   &&   €r!   r.   ÚVisionTower.__init__U  sŒ   ø€ Ü‰ÑÔÜ$ÜØØØØØØØô	
ˆŒð ˆØ!)Ðà&*§j¡j£lÑ#ˆ”{àð	
ˆÔ˜DÔ1ð )ÔØ&<Ô#ä6Ø�6ØØ"×9Ñ9ô
ˆŽ	r$   c                ó  € . pV P                   P                  p\        \        4       4       FÙ  w  r4. pV F»  pT;\        R c;e-   w   rxršp \        VVVV	V
R7      pTpVP                  V4       K<   ;\        R c;e3   w        rÞr‰r« \        VVVVV	V
R7      pTpVP                  V4       K{   \        R c;e3   w       ppppp\        VV^VVVVRR7      pVP                  V4       K¹    K½  	  VP                  V4       KÛ  	  W!3# )rû   N)r  r   r   rE   r  )r   r   r¥   r&   rE   r'   )r   r   rE   r#  r$  r%  r(  r5  )r§  r   rI   rœ  r	   r  rL   r   r5   r
   r   )r8   r©  r   ÚstageÚblock_configÚblock_groupr¡  rD   rŠ  r‹  r  rŒ  ry   r�  r‘  r#  r”  r•  r–  s   &                  r!   r¨  ÚVisionTower.buildq  sa  € ØˆØ—‘×'Ñ'ˆÜ#,Ô-BÓ-DÖ#EÑˆEØˆKÛ&�ØðÔ+÷ ØERòõ )Ø,7Ø#)Ø$+Ø#*Ø)5ô˜ð ")˜Ø#×*Ñ*¨1Ö-ððÔ8÷ Ø,Ø*ØØØ$Ø%òõ 6Ø#)Ø$+Ø1EØ/AØ#*Ø&2ô˜ð ")˜Ø#×*Ñ*¨1Ö-ð#ô$ 8÷ Ø!ØØ"Ø(Ø%ôô ,Ø#)Ø$*Ø#$Ø&/Ø$*Ø&,Ø&0Ø&*ô	˜ð $×*Ñ*¨1Ö-ð#ð$ Ù ñg 'ðh �M‰M˜+Ö&ñm $Fðn ÐÐr$   c                ód   <€ V ^8„  d   QhRS[ P                  RS[S[,          RS[ P                  /# ©r   ry   Úoutput_hidden_statesr=   ©r?   r@   r   r   )r   r    s   "€r!   r"   r£  ­  s1   ø€ ÷ ñ Ù—‘ðÙ19¹$µðá	�‰ñr$   c                ó\  € ^ pVP                  ^ ^^^4      pV P                  V4      p. pW0P                  9   d   VP                  V4       V P                   F@  pV^,          pV F  pV! V4      pK  	  W0P                  9   g   K/  VP                  V4       KB  	  V P                  V4      pV# rž   )rG   r§  r¬  rL   r©  r®  )r8   ry   r·  Úfeat_idxÚintermediatesr³  Úblocks   &&&    r!   r]   ÚVisionTower.__call__­  s§   € ð ˆØ�K‰K˜˜1˜a Ó#ˆØ�N‰N˜1ÓˆØˆà×(Ñ(Ô(Ø× Ñ  Ô#ð  Ÿ;œ;ˆKØ˜�MˆHÛ$�Ù˜!“H’ñ %ð ×,Ñ,Ö,Ø×$Ñ$ QÖ'ñ 'ð �I‰I�mÓ$ˆØˆr$   )r©  r§  r«  r®  r¬  r­  rª  rs   )
rb   rc   rd   re   r.   r¨  r]   rg   rh   ri   rj   s   @@r!   rž  rž  T  s$   ù‡ € ÷
ó 
ò8: ÷x÷ ò r$   rž  c                   óZ   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tR tRtVtV ;t	# )	ÚVisionModeliÅ  c                ó    <€ V ^8„  d   QhRS[ /# r   r¢  )r   r    s   "€r!   r"   ÚVisionModel.__annotate__Æ  s   ø€ ÷ .ñ .™|ñ .r$   c                ó¸   <€ \         SV `  4        VP                  V n        V P                  R9  d   \        RV P                   24      h\	        V4      V n        R# )Úgemma3zUnsupported model type: N)rÃ  Úgemma3_visionÚgemma3n_vision)r-   r.   Ú
model_typeÚ
ValueErrorrž  Ú
timm_model)r8   r¡  r9   s   &&€r!   r.   ÚVisionModel.__init__Æ  sL   ø€ Ü‰ÑÔØ ×+Ñ+ˆŒØ�?‰?Ð"OÔOÜÐ7¸¿¹Ð7HÐIÓJÐJä% fÓ-ˆŽr$   c                ód   <€ V ^8„  d   QhRS[ P                  RS[S[,          RS[ P                  /# r¶  r¸  )r   r    s   "€r!   r"   rÁ  Î  s1   ø€ ÷ 8ñ 8Ù—‘ð8Ù19¹$µð8á	�‰ñ8r$   c                ó$   € V P                  W4      # rs   )rÈ  )r8   ry   r·  s   &&&r!   r]   ÚVisionModel.__call__Î  s   € ð �‰˜qÓ7Ð7r$   c                ó  € / pR pVR,          P                   w  rErFWe8”  d   RpVP                  4        FT  w  rxRV9   d   RV9   g   RT9   d7   \        VP                   4      ^8X  d   V'       g   VP                  ^ ^^^4      pW‚V&   KV  	  V# )Fz2vision_tower.timm_model.blocks.0.0.conv_exp.weightTrÌ   r‚   zproj.weight)rH   Úitemsr‡   rG   )	r8   ÚweightsÚsanitized_weightsÚskip_transposerT   rf  rh  rõ   rŽ   s	   &&       r!   ÚsanitizeÚVisionModel.sanitizeÓ  s‹   € ØÐØˆØÐQÕR×XÑX‰
ˆˆaØŒ5Ø!ˆNà—M‘M–O‰DˆAð ˜!” ¨A¤¸mÐPQÔ2QÜ�q—w‘w“< 1Ô$¯^ØŸ™ A q¨!¨QÓ/�AØ#$˜aÓ ñ $ð !Ð r$   )rÆ  rÈ  rs   )
rb   rc   rd   re   r.   r]   rÒ  rg   rh   ri   rj   s   @@r!   r¿  r¿  Å  s#   ù‡ € ÷.ó .÷8ò 8÷
!ò !r$   r¿  )Nra   r;  )r;  r   r�  )r„   r„   FF)r|  NgÍÌÌÌÌÌì?)r„   g      @F)FF)3Úcollections.abcr   Úmathr   Útypingr   r   r   r   Úmlx.coreÚcorer?   Úmlx.nnrO   Úmlx_vlm.models.gemma3n.configr	   r
   r   r   Úkernelsr   r   ÚModuler   rl   r�   ÚRMSNormr4   r5   r³   rá   rë   rÚ   rè   rç   r´   r¸   r  r   r>  r3   rA  r1  r²   r¶   r�  r’  r˜  rœ  rž  r¿  rû   r$   r!   Ú<module>rÞ     sB  ðÝ $Ý ß .Ó .å Ý ÷ó ÷ ?ôW¨¯©ô WôvF�2—9‘9ô F÷ô"�2—:‘:ô ô.c §	¡	ô côN �"—)‘)ô  ÷Fõ6÷.	ôô"
'ô�—‘ô ô @�2—9‘9ô @ôHP�b—i‘iô Pôf!
òHô�b—i‘iô ô V˜BŸI™Iô Võr&÷ôôô$ò$ô&n�"—)‘)ô nôb!�"—)‘)ö !r$   