+
    UV-j`  ã                   ó4   € ^ RI Ht ^ RItR tRR ltRR ltR# )é    Nc                ó:  a a€ \        ^V,          4      oS^8  d   S # \        P                  ! S) S^,           4      p\        P                  ! V^,          ) ^V^,          ,          ,          4      pV\        P                  ! V4      ,          pV V3R lpV! S WB4      # )zo
Applies a 1D Gaussian blur along the given axis.
This version works for arrays with any number of dimensions.
c                 óð  <€ R.S
P                   ,          pSS3W2&   \        P                  ! WRR7      p\        P                  ! V 4      p\	        R4      .VP                   ,          p\        ^S,          ^,           4       Fr  p\	        WwV P                  V,          ,           4      Wb&   ^.S
P                   ,          pW,          P                  V4      p	WT\        V4      ,          V	,          ,           pKt  	  V# )r   Úedge)ÚmodeN)r   r   )	ÚndimÚmxÚpadÚ
zeros_likeÚsliceÚrangeÚshapeÚreshapeÚtuple)ÚarrayÚkernelÚaxisÚ	pad_widthÚpaddedÚresultÚslicesÚiÚk_shapeÚk_valÚimageÚradiuss   &&&       €€Úk/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/interpolate.pyÚconv_1dÚ#gaussian_blur_axis.<locals>.conv_1d   sÃ   ø€ à�H˜uŸz™zÕ)ˆ	Ø! 6Ð*ˆ	‰Ü—’˜¨vÔ6ˆô —’˜uÓ%ˆÜ˜“+� §¡Õ,ˆä�q˜6•z A•~Ö&ˆAÜ  ¨¯©°DÕ(9Õ$9Ó:ˆF‰Là�c˜EŸJ™JÕ&ˆGØ•I×%Ñ% gÓ.ˆEØ¤U¨6£]Õ3°eÕ;Õ;ŠFñ 'ð ˆó    )Úintr   ÚarangeÚexpÚsum)r   Úsigmar   Úxr   r   r   s   f&&   @r   Úgaussian_blur_axisr&      s{   ù€ ô
 ��U•‹^€FØ�„zØˆÜ
�	Š	�6�'˜6 A�:Ó&€AÜ�VŠV�a˜•d�G˜q 5¨!¥8�|Õ,Ó-€FØ”b—f’f˜V“nÕ$€Föñ& �5˜&Ó'Ð'r   c                óâ  a aaa€ S P                   ^ ,          S P                   ^,          upoS^8X  d   \        P                  ! R.4      pMZV'       d!   \        P                  ! ^ V^,
          S4      pM2\        P                  ! S4      R,           V,          S,          R,
          pS^8X  d   \        P                  ! R.4      pMZV'       d!   \        P                  ! ^ S^,
          S4      pM2\        P                  ! S4      R,           S,          S,          R,
          p\        P
                  ! V4      P                  \        P                  4      p\        P
                  ! V4      P                  \        P                  4      pV^,           p	V^,           p
\        P                  ! V^ V^,
          4      p\        P                  ! V	^ V^,
          4      p	\        P                  ! V^ S^,
          4      p\        P                  ! V
^ S^,
          4      p
WW,
          pWh,
          p\        P                  ! WxRR7      w  rÞ\        P                  ! W˜RR7      w  rþ\        P                  ! WzRR7      w  pp\        P                  ! WšRR7      w  ppS P                  ^,
          pVV VV3R lpV! WÞ4      pV! VV4      pV! Wþ4      pV! VV4      pVP                  ! S^.^.V,          O5!  pVP                  ! ^S.^.V,          O5!  p^V,
          ^V,
          ,          V,          ^V,
          V,          V,          ,           V^V,
          ,          V,          ,           VV,          V,          ,           pV# )zÅ
Performs bilinear interpolation on an array whose spatial dimensions are the first two.
It supports extra dimensions (e.g. channels or batch dimensions that have been moved to the trailing axes).
g        g      à?Úij)Úindexingc                 ó2  <€ V S,          V,           p\         P                  ! SRSP                  R,          ,           4      p\         P                  ! W2P                  R4      ^ R7      p\         P                  ! VSS3SP                  R,          ,           4      # )é   :é   NN©r   éÿÿÿÿ)r.   )r   r   r   Útake)	Úrow_indicesÚcol_indicesÚflat_indicesÚ
flat_imageÚgatheredÚW_inr   Ú
new_heightÚ	new_widths	   &&   €€€€r   Úgather_pixelsÚ+bilinear_interpolate.<locals>.gather_pixels]   sm   ø€ à" TÕ)¨KÕ7ˆÜ—Z’Z  u¨u¯{©{¸2­Õ'>Ó?ˆ
ä—7’7˜:×';Ñ';¸BÓ'?ÀaÔHˆÜ�zŠz˜( Z°Ð$;¸e¿k¹kÈ"½oÕ$MÓNÐNr   )r   r   r   Úlinspacer!   ÚfloorÚastypeÚint32ÚclipÚmeshgridr   r   )r   r6   r7   Úalign_cornersÚH_inÚrow_positionsÚcol_positionsÚ	row_floorÚ	col_floorÚrow_ceilÚcol_ceilÚ
row_weightÚ
col_weightÚrow_floor_gridÚcol_floor_gridÚrow_ceil_gridÚcol_ceil_gridÚ
extra_dimsr8   Útop_leftÚ	top_rightÚbottom_leftÚbottom_rightÚr_weightÚc_weightr   r5   s   fff&                      @r   Úbilinear_interpolaterU   +   s¸  û€ ð —‘˜Q• §¡¨Q¥€J€Dˆ$ð �Q„ÜŸš # ›‰çÜŸKšK¨¨4°!­8°ZÓ@‰MäŸYšY zÓ2°SÕ8¸DÕ@À:ÕMÐPSÕSˆMà�A„~ÜŸš # ›‰çÜŸKšK¨¨4°!­8°YÓ?‰MäŸYšY yÓ1°CÕ7¸4Õ?À)ÕKÈcÕQˆMô —’˜Ó'×.Ñ.¬r¯x©xÓ8€IÜ—’˜Ó'×.Ñ.¬r¯x©xÓ8€IØ˜1�}€HØ˜1�}€Hä—’˜	 1 d¨Q¥hÓ/€IÜ�wŠw�x  D¨1¥HÓ-€HÜ—’˜	 1 d¨Q¥hÓ/€IÜ�wŠw�x  D¨1¥HÓ-€HàÕ*€JØÕ*€Jô &(§[¢[°ÐPTÔ%UÑ"€NÜ$&§K¢K°ÈdÔ$SÑ!€MÜ$&§K¢K°	ÈdÔ$SÑ!€N�MÜ#%§;¢;¨xÈDÔ#QÑ €M�=ð —‘˜a•€J÷Oð Oñ ˜^Ó<€HÙ˜n¨mÓ<€IÙ Ó>€KÙ  °Ó>€Lð ×!Ò! *¨aÐE°A°3¸Õ3CÓE€HØ×!Ò! ! YÐD°1°#¸
Õ2BÓD€Hð 
ˆX�˜!˜h�,Õ'¨(Õ2Øˆx�<˜8Õ
# iÕ
/õ	0à
�a˜(•lÕ
# kÕ
1õ	2ð �XÕ
 Õ
,õ	-ð ð €Mr   c                óÂ  € Vw  rE\        V \        P                  4      '       d   \        P                  ! V 4      p V P
                  ^8X  g   V P
                  ^8X  d¡   T pV P                  R,          w  rxV'       ds   WG8  d4   WG,          p	^V	,          ^,
          R,          p
V
^ 8”  d   \        Wj^ R7      pWX8  d4   WX,          p^V,          ^,
          R,          pV^ 8”  d   \        Wl^R7      p\        WdWRR7      pV# V P
                  ^8X  dÉ   V P                  w  rÞrx\        P                  ! V R4      pTpV'       ds   WG8  d4   WG,          p	^V	,          ^,
          R,          p
V
^ 8”  d   \        Wj^ R7      pWX8  d4   WX,          p^V,          ^,
          R,          pV^ 8”  d   \        Wl^R7      p\        WdWRR7      p\        P                  ! VR4      pV# \        R4      h)zÙ
Resizes an image (or embedding tensor) to new_size=(new_height, new_width)
using bilinear interpolation with MLX.

Supports:
  - 2D: (H, W)
  - 3D: (H, W, C)
  - 4D: (B, C, H, W)  (assumed for typical image batches)
:Nr,   Ng       @r-   )r@   zUnsupported image dimensions.)r,   é   r   r+   )Ú
isinstanceÚnpÚndarrayr   r   r   r   r&   rU   Ú	transposeÚ
ValueError)r   Únew_sizer@   Ú	antialiasr6   r7   ÚresizedrA   r5   Úscale_yÚsigma_yÚscale_xÚsigma_xÚBÚCÚ
image_perms   &&&&            r   Úresize_bilinearrg   x   sŸ  € ð %Ñ€Jô �%œŸ™×$Ò$Ü—’˜“ˆà‡z�z�Q„˜%Ÿ*™*¨œ/àˆØ—[‘[ •_‰
ˆßØÔ Ø$Õ+�Ø˜w�;¨�?¨cÕ1�Ø˜Q”;Ü0°ÈÔJ�GØÔØ#Õ*�Ø˜w�;¨�?¨cÕ1�Ø˜Q”;Ü0°ÈÔJ�GÜ&Ø ô
ˆð ˆà	�‰�qŒà Ÿ;™;Ñˆˆdä—\’\ %¨Ó6ˆ
ØˆßØÔ Ø$Õ+�Ø˜w�;¨�?¨cÕ1�Ø˜Q”;Ü0°ÈÔJ�GØÔØ#Õ*�Ø˜w�;¨�?¨cÕ1�Ø˜Q”;Ü0°ÈÔJ�GÜ&Ø ô
ˆô —,’,˜w¨Ó5ˆØˆô Ð8Ó9Ð9r   )F)FT)Úmlx.coreÚcorer   ÚnumpyrY   r&   rU   rg   © r   r   Ú<module>rl      s   ðÝ Û ò#(ôLJöZ=:r   