+
    UV-jK  ã                   ó¸   € R t ^ RIHt ^ RIHt ^ RIHt  ! R R]P                  4      t	 ! R R]P                  4      t
 ! R R]P                  4      tR	 R
 ltR# )zRF-DETR Segmentation Head.)ÚTupleNc                   óT   a a€ ] tR t^	t oRtV3R lV 3R lltV3R lR ltRtVtV ;t	# )ÚDepthwiseConvBlockz+ConvNeXt-style depthwise convolution block.c                ó    <€ V ^8„  d   QhRS[ /# ©é   Údim©Úint)ÚformatÚ__classdict__s   "€Ús/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/rfdetr/segmentation.pyÚ__annotate__ÚDepthwiseConvBlock.__annotate__   s   ø€ ÷ +ñ +™Cñ +ó    c                óÒ   <€ \         SV `  4        \        P                  ! W^^VR7      V n        \        P
                  ! VRR7      V n        \        P                  ! W4      V n        R# )é   )Úkernel_sizeÚpaddingÚgroupsg�íµ ÷Æ°>)ÚepsN)	ÚsuperÚ__init__ÚnnÚConv2dÚdwconvÚ	LayerNormÚnormÚLinearÚpwconv1©Úselfr   Ú	__class__s   &&€r   r   ÚDepthwiseConvBlock.__init__   sF   ø€ Ü‰ÑÔÜ—i’i °aÀÈ3ÔOˆŒÜ—L’L ¨$Ô/ˆŒ	Ü—y’y Ó*ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r   ÚxÚreturn©ÚmxÚarray)r   r   s   "€r   r   r      s#   ø€ ÷ ñ ™"Ÿ(™(ð ¡r§x¡xñ r   c                ó¤   € TpV P                  V4      pV P                  V4      p\        P                  ! V P	                  V4      4      pW!,           # )zx: (B, H, W, C) channel-last.)r   r   r   Úgelur   ©r!   r&   Úresiduals   && r   Ú__call__ÚDepthwiseConvBlock.__call__   s?   € àˆØ�K‰K˜‹NˆØ�I‰I�a‹LˆÜ�GŠG�D—L‘L “OÓ$ˆØ�|Ðr   )r   r   r   ©
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r/   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r"   r   s   @@r   r   r   	   s!   ù‡ € Ù5÷+ó +÷÷ ð r   r   c                   óT   a a€ ] tR t^t oRtV3R lV 3R lltV3R lR ltRtVtV ;t	# )ÚMLPBlockz'MLP block for query feature processing.c                ó    <€ V ^8„  d   QhRS[ /# r   r	   )r   r   s   "€r   r   ÚMLPBlock.__annotate__   s   ø€ ÷ 
ñ 
™Cñ 
r   c                óÜ   <€ \         SV `  4        \        P                  ! V4      V n        \        P
                  ! W^,          4      R\        P
                  ! V^,          V4      .V n        R# )é   N)r   r   r   r   Únorm_inr   Úlayersr    s   &&€r   r   ÚMLPBlock.__init__   sL   ø€ Ü‰ÑÔÜ—|’| CÓ(ˆŒä�IŠI�c �7Ó#ØÜ�IŠI�c˜A•g˜sÓ#ð
ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# r%   r(   )r   r   s   "€r   r   r>   '   s#   ø€ ÷ ñ ™"Ÿ(™(ð ¡r§x¡xñ r   c                óÈ   € TpV P                  V4      pV P                  ^ ,          ! V4      p\        P                  ! V4      pV P                  ^,          ! V4      pW!,           # )zx: (B, N, C).)rA   rB   r   r,   r-   s   && r   r/   ÚMLPBlock.__call__'   sM   € àˆØ�L‰L˜‹OˆØ�K‰K˜ŽN˜1ÓˆÜ�GŠG�A‹JˆØ�K‰K˜ŽN˜1ÓˆØ�|Ðr   )rB   rA   r1   r:   s   @@r   r<   r<      s!   ù‡ € Ù1÷
ó 
÷÷ ð r   r<   c                   óX   a a€ ] tR t^1t 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	# )ÚSegmentationHeadz;Segmentation head that produces per-query mask predictions.c                ó2   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ /# )r   Úin_dimÚ
num_blocksÚbottleneck_ratioÚdownsample_ratior	   )r   r   s   "€r   r   ÚSegmentationHead.__annotate__4   s3   ø€ ÷ #ñ #áð#ñ ð#ñ ð	#ñ
 ñ#r   c                ó”  <€ \         SV `  4        W@n        W,          V n        \	        V4       Uu. uF  p\        V4      NK  	  upV n        \        P                  ! WP                  ^R7      V n	        \        V4      V n        \        P                  ! WP                  4      V n        \        P                  ! R4      V n        R# u upi )é   )r   N)rP   )r   r   rM   Úinteraction_dimÚranger   Úblocksr   r   Úspatial_features_projr<   Úquery_features_blockr   Úquery_features_projr)   ÚzerosÚbias)r!   rJ   rK   rL   rM   Ú_r"   s   &&&&& €r   r   ÚSegmentationHead.__init__4   s¢   ø€ ô 	‰ÑÔØ 0ÔØ%Õ9ˆÔô <AÀÔ;LÓMÑ;L°aÔ)¨&Ö1Ñ;LÑMˆŒô &(§Y¢YØ×(Ñ(°aô&
ˆÔ"ô %-¨VÓ$4ˆÔ!Ü#%§9¢9¨V×5IÑ5IÓ#JˆÔ ô —H’H˜T“NˆŽ	ùò Ns   °Cc                ó„   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[S[S[3,          RS[ P                  /# )r   Úspatial_featuresÚquery_featuresÚ
image_sizer'   )r)   r*   r   r
   )r   r   s   "€r   r   rN   L   sG   ø€ ÷ %ñ %áŸ(™(ð%ñ Ÿ™ð%ñ ™#™s˜(•Oð	%ñ
 
�‰ñ%r   c                ó’  € V^ ,          V P                   ,          pV^,          V P                   ,          p\        WV4      pV P                   F  pV! V4      pK  	  V P                  V4      pV P	                  V4      p	V P                  V	4      p
VP                  w  r¼rÞ\        P                  ! RWŠ4      pWðP                  ,           pV# )a  
Args:
    spatial_features: (B, H, W, C) backbone output features (channel-last)
    query_features: (B, N, C) decoder output hidden states
    image_size: (H, W) original image dimensions
Returns:
    mask_logits: (B, N, H', W') where H'=H//downsample_ratio
zbhwc,bnc->bnhw)
rM   Ú_interpolate_spatialrS   rT   rU   rV   Úshaper)   ÚeinsumrX   )r!   r\   r]   r^   Útarget_hÚtarget_wÚsfÚblockÚsf_projÚqfÚqf_projÚBÚHÚWÚCÚmask_logitss   &&&&            r   r/   ÚSegmentationHead.__call__L   s¸   € ð ˜a•= D×$9Ñ$9Õ9ˆØ˜a•= D×$9Ñ$9Õ9ˆÜ!Ð"2¸hÓGˆð —[”[ˆEÙ�r“ŠBñ !ð ×,Ñ,¨RÓ0ˆð ×&Ñ& ~Ó6ˆØ×*Ñ*¨2Ó.ˆð —]‘]‰
ˆˆaä—i’iÐ 0°'ÓCˆØ!§I¡IÕ-ˆàÐr   )rX   rS   rM   rQ   rU   rV   rT   )é   r@   rP   r@   r1   r:   s   @@r   rH   rH   1   s!   ù‡ € ÙE÷#õ #÷0%÷ %ð %r   rH   c                óp   € V ^8„  d   QhR\         P                  R\        R\        R\         P                  /# )r   r&   rc   rd   r'   )r)   r*   r
   )r   s   "r   r   r   t   s0   € ÷ &ñ &œBŸH™Hð &´ð &¼sð &ÄrÇxÁxñ &r   c                óâ  € V P                   w  r4rVWA8X  d	   WR8X  d   V # \        P                  ! ^ V^,
          V4      p\        P                  ! ^ V^,
          V4      p\        P                  ! VR,          W34      p	\        P                  ! VR,          W34      p
\        P                  ! \        P
                  ! V	4      P                  \        P                  4      ^ V^,
          4      p\        P                  ! V^,           ^ V^,
          4      p\        P                  ! \        P
                  ! V
4      P                  \        P                  4      ^ V^,
          4      p\        P                  ! V^,           ^ V^,
          4      pW›P                  V	P                  4      ,
          R,          pW­P                  V
P                  4      ,
          R,          pV RW½R3,          pV RW¾R3,          pV RWÍR3,          pV RWÎR3,          pV^V,
          ,          ^V,
          ,          V^V,
          ,          V,          ,           VV,          ^V,
          ,          ,           VV,          V,          ,           # )zÁBilinear interpolation for spatial feature downsampling.

Args:
    x: (B, H, W, C) channel-last input
    target_h, target_w: target spatial dimensions
Returns:
    (B, target_h, target_w, C)
ºNNN)rs   N)Nrs   ).N)	ra   r)   ÚlinspaceÚbroadcast_toÚclipÚfloorÚastypeÚint32Údtype)r&   rc   rd   rj   rk   rl   rm   Úy_coordsÚx_coordsÚyyÚxxÚy0Úy1Úx0Úx1ÚfyÚfxÚval_00Úval_01Úval_10Úval_11s   &&&                  r   r`   r`   t   sÕ  € ð —‘�J€Aˆ!Ø„}˜œØˆô �{Š{˜1˜a !�e XÓ.€HÜ�{Š{˜1˜a !�e XÓ.€Hä	�Š˜ 'Õ*¨XÐ,@Ó	A€BÜ	�Š˜ 'Õ*¨XÐ,@Ó	A€Bä	�Š”—’˜"“×$Ñ$¤R§X¡XÓ.°°1°qµ5Ó	9€BÜ	�Š��a•˜˜A �EÓ	"€BÜ	�Š”—’˜"“×$Ñ$¤R§X¡XÓ.°°1°qµ5Ó	9€BÜ	�Š��a•˜˜A �EÓ	"€Bà
�y‰y˜Ÿ™Ó"Õ
" IÕ	.€BØ
�y‰y˜Ÿ™Ó"Õ
" IÕ	.€Bàˆq�"˜!ˆ|�_€FØˆq�"˜!ˆ|�_€FØˆq�"˜!ˆ|�_€FØˆq�"˜!ˆ|�_€Fð 	�!�b•&Õ˜Q �VÕ$Ø
�A˜•FÕ
˜bÕ
 õ	!à
�2�+˜˜R�Õ
 õ	!ð �2�+˜Õ
õ	ðr   )r6   Útypingr   Úmlx.coreÚcorer)   Úmlx.nnr   ÚModuler   r<   rH   r`   © r   r   Ú<module>r�      sI   ðÙ  å å Ý ô˜Ÿ™ô ô$ˆr�y‰yô ô,@�r—y‘yô @÷F&r   