+
    UV-j<  ã                   ó
  € R t ^ RIt^ RIHtHtHtHt ^ RIHt	 ^ RI
Ht ^RIHt ^RIHtHtHtHt  ! R R]P&                  4      t ! R R]P&                  4      t ! R	 R
]P&                  4      t ! R R]P&                  4      t ! R R]P&                  4      t ! R R]P&                  4      t ! R R]P&                  4      t ! R R]P&                  4      t ! R R]P&                  4      t ! R R]P&                  4      tR# )ztSAM3 Tracker: SAM2-style memory-based tracker for video segmentation.

Weight keys: tracker_model.*, tracker_neck.*
N)ÚDictÚListÚOptionalÚTuple©ÚTrackerConfig)ÚLayerNorm2dÚRoPEAttentionÚSAMMaskDecoderÚSAMPromptEncoderc                   ó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	# )ÚSimpleMaskDownSamplerzoProgressive conv downsampling for mask encoding.

Weight keys: tracker_model.memory_encoder.mask_downsampler.*
c                ó    <€ V ^8„  d   QhRS[ /# ©é   Úconfigr   )ÚformatÚ__classdict__s   "€Úl/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/sam3/tracker.pyÚ__annotate__Ú"SimpleMaskDownSampler.__annotate__   s   ø€ ÷ Tñ T™}ñ Tó    c           
     ót  <€ \         SV `  4        VP                  pVP                  pVP                  pVP
                  p^^^^@V.p. V n        \        ^4       F=  pV P                  P                  \        Wg,          Wg^,           ,          W4V4      4       K?  	  \        P                  ! W"^RR7      V n        R# ©é   T)Úkernel_sizeÚbiasN)ÚsuperÚ__init__Úmask_downsampler_embed_dimÚmask_downsampler_kernel_sizeÚmask_downsampler_strideÚmask_downsampler_paddingÚlayersÚrangeÚappendÚDownsampleConvBlockÚnnÚConv2dÚ
final_conv)	Úselfr   Ú	embed_dimr   ÚstrideÚpaddingÚchannelsÚiÚ	__class__s	   &&      €r   r   ÚSimpleMaskDownSampler.__init__   s¢   ø€ Ü‰ÑÔØ×5Ñ5ˆ	Ø×9Ñ9ˆØ×/Ñ/ˆØ×1Ñ1ˆð �q˜"˜b )Ð,ˆØˆŒÜ�q–ˆAØ�K‰K×ÑÜ#Ø•K ¨a­%¥°+Àwóöñ ô Ÿ)š) IÀaÈdÔSˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   ÚmasksÚreturn©ÚmxÚarray)r   r   s   "€r   r   r   -   s#   ø€ ÷ ñ ™bŸh™hð ©2¯8©8ñ r   c                ób   € TpV P                    F  pV! V4      pK  	  V P                  V4      pV# )zj
Args:
    masks: (B, H, W, 1) binary masks
Returns:
    (B, H', W', embed_dim) downsampled mask features
)r#   r)   )r*   r3   ÚxÚlayers   &&  r   Ú__call__ÚSimpleMaskDownSampler.__call__-   s3   € ð ˆØ—[”[ˆEÙ�a“ŠAñ !à�O‰O˜AÓˆØˆr   )r)   r#   ©
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r;   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r0   r   s   @@r   r   r      s%   ù‡ € ñ÷
Tó T÷&÷ ð 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	# )r&   z%Single conv + layernorm + GELU block.c          
      ó8   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[ /# )r   Úin_chÚout_chr   r,   r-   ©Úint)r   r   s   "€r   r   Ú DownsampleConvBlock.__annotate__>   s5   ø€ ÷ .ñ .Ùð.Ù"%ð.Ù47ð.ÙADð.ÙORñ.r   c                ó€   <€ \         SV `  4        \        P                  ! WW4VR 7      V n        \        V4      V n        R# ))r,   r-   N)r   r   r'   r(   Úconvr   Ú
layer_norm)r*   rI   rJ   r   r,   r-   r0   s   &&&&&&€r   r   ÚDownsampleConvBlock.__init__>   s5   ø€ ô 	‰ÑÔÜ—I’IØ˜;¸wô
ˆŒ	ô & fÓ-ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r   r9   r4   r5   )r   r   s   "€r   r   rM   G   s#   ø€ ÷ ñ ™"Ÿ(™(ð ¡r§x¡xñ r   c                óv   € V P                  V4      pV P                  V4      p\        P                  ! V4      pV# ©N)rO   rP   r'   Úgelu)r*   r9   s   &&r   r;   ÚDownsampleConvBlock.__call__G   s/   € Ø�I‰I�a‹LˆØ�O‰O˜AÓˆÜ�GŠG�A‹JˆØˆr   )rO   rP   r=   rF   s   @@r   r&   r&   ;   s!   ù‡ € Ù/÷.ó .÷÷ ð r   r&   c                   óT   a a€ ] tR t^Nt 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	# )ÚCXBlockzkConvNeXt-style block with depthwise conv.

Weight keys: tracker_model.memory_encoder.memory_fuser.layers.*
c                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   ÚCXBlock.__annotate__T   s   ø€ ÷ Rñ R™}ñ Rr   c                ó¸  <€ \         SV `  4        VP                  pVP                  pVP                  p\
        P                  ! W"W4VR 7      V n        \        V4      V n	        \
        P                  ! W!P                  4      V n        \
        P                  ! VP                  V4      V n        \        P                  ! V34      VP                   ,          V n        R# ))r   r-   ÚgroupsN)r   r   Úmemory_fuser_embed_dimÚmemory_fuser_kernel_sizeÚmemory_fuser_paddingr'   r(   Údepthwise_convr   rP   ÚLinearÚmemory_fuser_intermediate_dimÚpointwise_conv1Úpointwise_conv2r6   ÚonesÚ#memory_fuser_layer_scale_init_valueÚscale)r*   r   Údimr   r-   r0   s   &&   €r   r   ÚCXBlock.__init__T   s¡   ø€ Ü‰ÑÔØ×+Ñ+ˆØ×5Ñ5ˆØ×-Ñ-ˆä ŸišiØ +Àsô
ˆÔô & cÓ*ˆŒÜ!Ÿyšy¨×.RÑ.RÓSˆÔÜ!Ÿyšy¨×)MÑ)MÈsÓSˆÔÜ—W’W˜c˜V“_ v×'QÑ'QÕQˆŽ
r   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rS   r5   )r   r   s   "€r   r   r[   b   s#   ø€ ÷ ñ ™"Ÿ(™(ð ¡r§x¡xñ r   c                óp  € TpV P                  V4      pV P                  V4      pVP                  w  r4rVVP                  W4,          V,          V4      pV P	                  V4      p\
        P                  ! V4      pV P                  V4      pVP                  W4WV4      pV P                  V,          pW!,           # )z
Args:
    x: (B, H, W, C)
)	ra   rP   ÚshapeÚreshaperd   r'   rV   re   rh   )r*   r9   ÚresidualÚBÚHÚWÚCs   &&     r   r;   ÚCXBlock.__call__b   sœ   € ð
 ˆØ×Ñ Ó"ˆØ�O‰O˜AÓˆØ—W‘W‰
ˆˆaØ�I‰I�a•e˜a•i Ó#ˆØ× Ñ  Ó#ˆÜ�GŠG�A‹JˆØ× Ñ  Ó#ˆØ�I‰I�a˜AÓ!ˆØ�J‰J˜�NˆØ�|Ðr   )ra   rP   rd   re   rh   r=   rF   s   @@r   rY   rY   N   s%   ù‡ € ñ÷
Ró R÷÷ ð r   rY   c                   óT   a a€ ] tR t^tt 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	# )ÚMemoryFuserzpStack of CXBlocks for fusing mask and image features.

Weight keys: tracker_model.memory_encoder.memory_fuser.*
c                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   ÚMemoryFuser.__annotate__z   s   ø€ ÷ Wñ W™}ñ Wr   c                ó”   <€ \         SV `  4        \        VP                  4       Uu. uF  p\	        V4      NK  	  upV n        R # u upi rU   )r   r   r$   Úmemory_fuser_num_layersrY   r#   ©r*   r   Ú_r0   s   && €r   r   ÚMemoryFuser.__init__z   s8   ø€ Ü‰ÑÔÜ05°f×6TÑ6TÔ0UÓVÑ0U¨1”w˜v–Ñ0UÑVˆŽùÒVs   §Ac                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rS   r5   )r   r   s   "€r   r   rx   ~   s#   ø€ ÷ ñ ™"Ÿ(™(ð ¡r§x¡xñ r   c                ó<   € V P                    F  pV! V4      pK  	  V# rU   ©r#   ©r*   r9   r:   s   && r   r;   ÚMemoryFuser.__call__~   s   € Ø—[”[ˆEÙ�a“ŠAñ !àˆr   r€   r=   rF   s   @@r   rv   rv   t   s%   ù‡ € ñ÷
Wó W÷÷ ð r   rv   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	# )ÚMemoryEncoderzcEncodes image features + mask into compressed memory.

Weight keys: tracker_model.memory_encoder.*
c                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   ÚMemoryEncoder.__annotate__Š   s   ø€ ÷ Lñ L™}ñ Lr   c                ó  <€ \         SV `  4        VP                  pVP                  p\	        V4      V n        \        V4      V n        \        P                  ! W"^RR7      V n
        \        P                  ! W#^RR7      V n        R# r   )r   r   Úmemory_encoder_hidden_sizeÚmemory_encoder_output_channelsr   Úmask_downsamplerrv   Úmemory_fuserr'   r(   Úfeature_projectionÚ
projection)r*   r   ri   Úout_dimr0   s   &&  €r   r   ÚMemoryEncoder.__init__Š   sg   ø€ Ü‰ÑÔØ×/Ñ/ˆØ×7Ñ7ˆä 5°fÓ =ˆÔÜ'¨Ó/ˆÔÜ"$§)¢)¨CÀ!È$Ô"OˆÔÜŸ)š) C¸aÀdÔKˆŽr   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r   Úfeaturesr3   r4   r5   )r   r   s   "€r   r   r†   ”   s5   ø€ ÷ ñ á—(‘(ðñ �x‰xðñ 
�‰ñ	r   c                óž   € V P                  V4      pV P                  V4      pW,           pV P                  V4      pV P                  V4      pV# )zš
Args:
    features: (B, H, W, D) backbone features
    masks: (B, H_mask, W_mask, 1) predicted masks
Returns:
    (B, H', W', out_dim) compressed memory
)rŠ   rŒ   r‹   r�   )r*   r‘   r3   Úmask_featuresÚfusedÚmemorys   &&&   r   r;   ÚMemoryEncoder.__call__”   sQ   € ð ×-Ñ-¨eÓ4ˆð ×*Ñ*¨8Ó4ˆØÕ(ˆà×!Ñ! %Ó(ˆØ—‘ Ó'ˆàˆr   )rŒ   rŠ   r‹   r�   r=   rF   s   @@r   r„   r„   „   s%   ù‡ € ñ÷
Ló L÷÷ ð 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	# )ÚMemoryAttentionLayeraQ  Single layer of memory attention: self-attn (RoPE) + cross-attn (RoPE) + FFN.

Weight keys per layer:
    self_attn.{q,k,v,o}_proj.{weight,bias}
    cross_attn_image.{q,k,v,o}_proj.{weight,bias}
    layer_norm1.{weight,bias}
    layer_norm2.{weight,bias}
    layer_norm3.{weight,bias}
    linear1.{weight,bias}
    linear2.{weight,bias}
c                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   Ú!MemoryAttentionLayer.__annotate__¾   s   ø€ ÷ Vñ V™}ñ Vr   c           
     ó¤  <€ \         SV `  4        VP                  p\        VVP                  VP
                  \        VP                  4      VP                  R 7      V n	        \        VVP                  VP
                  \        VP                  4      VP                  VP                  RR7      V n        \        P                  ! V4      V n        \        P                  ! V4      V n        \        P                  ! V4      V n        \        P"                  ! W!P$                  4      V n        \        P"                  ! VP$                  V4      V n        R# ))Úhidden_sizeÚ	num_headsÚdownsample_rateÚ
feat_sizesÚ
rope_thetaT)rœ   r�   rž   rŸ   r    Úkv_dimÚrope_k_repeatN)r   r   Úmemory_attention_hidden_sizer	   Ú$memory_attention_num_attention_headsÚ memory_attention_downsample_rateÚtupleÚ memory_attention_rope_feat_sizesÚmemory_attention_rope_thetaÚ	self_attnr‰   Úcross_attn_imager'   Ú	LayerNormÚlayer_norm1Úlayer_norm2Úlayer_norm3rb   Ú)memory_attention_feed_forward_hidden_sizeÚlinear1Úlinear2)r*   r   Údr0   s   && €r   r   ÚMemoryAttentionLayer.__init__¾   sù   ø€ Ü‰ÑÔØ×/Ñ/ˆä&ØØ×AÑAØ"×CÑCÜ˜V×DÑDÓEØ×9Ñ9ô
ˆŒô !.ØØ×AÑAØ"×CÑCÜ˜V×DÑDÓEØ×9Ñ9Ø×8Ñ8Øô!
ˆÔô Ÿ<š<¨›?ˆÔÜŸ<š<¨›?ˆÔÜŸ<š<¨›?ˆÔä—y’y ×$TÑ$TÓUˆŒÜ—y’y ×!QÑ!QÐSTÓUˆŽr   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# ©r   Úsrcr•   r4   r5   )r   r   s   "€r   r   rš   Ú   s5   ø€ ÷ ñ á�X‰Xðñ —‘ðñ 
�‰ñ	r   c                óL  € V P                  WV4      pW,           pV P                  V4      pV P                  WV4      pW,           pV P                  V4      pV P	                  \
        P                  ! V P                  V4      4      4      pW,           pV P                  V4      pV# )zb
Args:
    src: (B, HW, D) current frame features
    memory: (B, N_mem, mem_dim) memory features
)	r©   r¬   rª   r­   r±   r'   Úrelur°   r®   )r*   r¶   r•   Úsrc2s   &&& r   r;   ÚMemoryAttentionLayer.__call__Ú   s”   € ð �~‰~˜c¨Ó,ˆØ�jˆØ×Ñ˜sÓ#ˆð ×$Ñ$ S°&Ó9ˆØ�jˆØ×Ñ˜sÓ#ˆð �|‰|œBŸGšG D§L¡L°Ó$5Ó6Ó7ˆØ�jˆØ×Ñ˜sÓ#ˆàˆ
r   )rª   r¬   r­   r®   r°   r±   r©   r=   rF   s   @@r   r˜   r˜   ±   s%   ù‡ € ñ
÷Vó V÷8÷ ð 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	# )ÚMemoryAttentionz]Memory attention module with multiple layers.

Weight keys: tracker_model.memory_attention.*
c                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   ÚMemoryAttention.__annotate__ü   s   ø€ ÷ Lñ L™}ñ Lr   c                óÞ   <€ \         SV `  4        \        VP                  4       Uu. uF  p\	        V4      NK  	  upV n        \        P                  ! VP                  4      V n	        R # u upi rU   )
r   r   r$   Úmemory_attention_num_layersr˜   r#   r'   r«   r£   rP   r{   s   && €r   r   ÚMemoryAttention.__init__ü   s\   ø€ Ü‰ÑÔô ˜6×=Ñ=Ô>ó
á>�ô ! Ö(Ù>ñ
ˆŒô Ÿ,š, v×'JÑ'JÓKˆŽùò	
s   §A*c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# rµ   r5   )r   r   s   "€r   r   r¾     s5   ø€ ÷ ñ á�X‰Xðñ —‘ðñ 
�‰ñ	r   c                ó^   € V P                    F  pV! W4      pK  	  V P                  V4      pV# )zˆ
Args:
    src: (B, HW, D) current frame features
    memory: (B, N_mem, mem_dim) memory bank
Returns:
    (B, HW, D) attended features
)r#   rP   )r*   r¶   r•   r:   s   &&& r   r;   ÚMemoryAttention.__call__  s/   € ð —[”[ˆEÙ˜Ó$ŠCñ !à�o‰o˜cÓ"ˆØˆ
r   )rP   r#   r=   rF   s   @@r   r¼   r¼   ö   s%   ù‡ € ñ÷
Ló L÷÷ ð r   r¼   c                   óT   a a€ ] tR tR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	# )ÚObjectPointerMLPi  zaProjects SAM output tokens to object pointers.

Weight keys: tracker_model.object_pointer_proj.*
c                ó    <€ V ^8„  d   QhRS[ /# )r   rœ   rK   )r   r   s   "€r   r   ÚObjectPointerMLP.__annotate__!  s   ø€ ÷ <ñ <¡Cñ <r   c                óÈ   <€ \         SV `  4        \        P                  ! W4      V n        \        P                  ! W4      .V n        \        P                  ! W4      V n        R # rU   )r   r   r'   rb   Úproj_inr#   Úproj_out)r*   rœ   r0   s   &&€r   r   ÚObjectPointerMLP.__init__!  sA   ø€ Ü‰ÑÔÜ—y’y Ó:ˆŒÜ—y’y Ó:Ð;ˆŒÜŸ	š	 +Ó;ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rS   r5   )r   r   s   "€r   r   rÈ   '  s#   ø€ ÷  ñ  ™"Ÿ(™(ð  ¡r§x¡xñ  r   c                óÌ   € \         P                  ! V P                  V4      4      pV P                   F  p\         P                  ! V! V4      4      pK!  	  V P	                  V4      # rU   )r'   r¸   rÊ   r#   rË   r�   s   && r   r;   ÚObjectPointerMLP.__call__'  sG   € Ü�GŠG�D—L‘L “OÓ$ˆØ—[”[ˆEÜ—’™˜a›Ó!ŠAñ !à�}‰}˜QÓÐr   )r#   rÊ   rË   r=   rF   s   @@r   rÆ   rÆ     s#   ù‡ € ñ÷
<ó <÷ ÷  ð  r   rÆ   c                   ój   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltR
V3R lR lltR	tVt	V ;t
# )ÚTrackerModeli3  z?SAM2-style memory-based tracker.

Weight keys: tracker_model.*
c                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   ÚTrackerModel.__annotate__9  s   ø€ ÷ (Pñ (P™}ñ (Pr   c                ó–  <€ \         SV `  4        Wn        VP                  pVP                  pVP
                  pWAP                  P                  P                  ,          p\        VP                  4      V n        \        VP                  4      V n        \        V4      V n        \#        V4      V n        \&        P(                  ! ^^V34      V n        \&        P(                  ! ^^V34      V n        \&        P(                  ! ^V34      V n        \&        P(                  ! VP0                  ^^V34      V n        \5        V4      V n        \8        P:                  ! ^^^^RR7      V n        \8        P>                  ! W#4      V n         \C        V^,          4      V n"        VPF                  '       d    \&        P(                  ! ^V34      V n$        R# R# )r   T)r   r,   r   N)%r   r   r   r£   r‰   Ú
image_sizeÚvision_configÚbackbone_configÚ
patch_sizer   Úprompt_encoder_configÚprompt_encoderr
   Úmask_decoder_configÚmask_decoderr¼   Úmemory_attentionr„   Úmemory_encoderr6   ÚzerosÚno_memory_embeddingÚno_memory_positional_encodingÚno_object_pointerÚnum_maskmemÚ#memory_temporal_positional_encodingrÆ   Úobject_pointer_projr'   r(   Úmask_downsamplerb   Ú-temporal_positional_encoding_projection_layerÚSharedImageEmbeddingÚshared_image_embeddingÚ"enable_occlusion_spatial_embeddingÚ%occlusion_spatial_embedding_parameter)r*   r   r²   Úmem_dimrÕ   Ú	feat_sizer0   s   &&    €r   r   ÚTrackerModel.__init__9  su  ø€ Ü‰ÑÔØŒØ×/Ñ/ˆØ×7Ñ7ˆØ×&Ñ&ˆ
Ø×"6Ñ"6×"FÑ"F×"QÑ"QÕQˆ	ô /¨v×/KÑ/KÓLˆÔÜ*¨6×+EÑ+EÓFˆÔô !0°Ó 7ˆÔÜ+¨FÓ3ˆÔô $&§8¢8¨Q°°1¨IÓ#6ˆÔ Ü-/¯XªX°q¸!¸Q°iÓ-@ˆÔ*Ü!#§¢¨1¨a¨&Ó!1ˆÔô 46·8²8Ø×Ñ  A wÐ/ó4
ˆÔ0ô
 $4°AÓ#6ˆÔ ô  "Ÿyšy¨¨A¸1ÀQÈTÔRˆÔô >@¿YºYÀqÓ=RˆÔ:ô ';¸1À½6Ó&BˆÔ#ð ×4×4Ð4Ü9;¿ºÀ1ÀgÀ,Ó9OˆDÖ6ñ 5r   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   Úbackbone_featuresr4   r5   )r   r   s   "€r   r   rÓ   c  s#   ø€ ÷ 6ñ 6©b¯h©hð 6¹2¿8¹8ñ 6r   c                óR   € VP                   w  r#rEVP                  W#V,          V4      # )z/Flatten backbone features for memory attention.)rm   rn   )r*   rð   rp   rq   rr   rs   s   &&    r   Úencode_imageÚTrackerModel.encode_imagec  s(   € à&×,Ñ,‰
ˆˆaØ ×(Ñ(¨°­E°1Ó5Ð5r   c                óÀ  <€ V ^8„  d   QhRS[ P                  RS[S[S[ P                  ,          ,          RS[S[S[ P                  ,          ,          RS[S[S[ P                  S[ P                  3,          ,          RS[S[ P                  ,          RS[S[ P                  ,          RS[RS[S[S[ P                  ,          ,          R	S[S[S[ P                  3,          /	# )
r   Úcurrent_featuresÚmemory_bankÚ
memory_posÚprompt_pointsÚprompt_boxesÚprompt_masksÚmultimask_outputÚhigh_res_featuresr4   )r6   r7   r   r   r   Úboolr   Ústr)r   r   s   "€r   r   rÓ   h  sÑ   ø€ ÷ Q
ñ Q
áŸ(™(ðQ
ñ ™d¡2§8¡8�nÕ-ðQ
ñ ™T¡"§(¡(�^Õ,ð	Q
ñ
  ¡¡b§h¡h±·±Ð&8Õ 9Õ:ðQ
ñ ™rŸx™xÕ(ðQ
ñ ™rŸx™xÕ(ðQ
ñ ðQ
ñ $¡D©¯©¥NÕ3ðQ
ñ 
‰c‘2—8‘8ˆmÕ	ñQ
r   c	           
     ó€  € VP                   w  ršr¼VP                  WšV,          V4      pV'       d:   \        V4      ^ 8”  d*   \        P                  ! V^R7      pV P                  WÞ4      pV P                  P                  4       p\        P                  ! WùW«,          V34      pV P                  VVVR7      w  ppV P                  VVVVVVR7      w  ppppV P                  VR,          4      pVR,          pVP                  ^ ^^^4      pRpVP                   ^,          V8w  dS   \        P                  ! VVP                   ^,          ,          VVP                   ^,          ,          3RR7      pV! V4      pV P                  VV4      pVP                   w  ppppVP                  VVV,          V4      pRVRVR	VR
VRV/# )a[  Run one tracking step.

Args:
    current_features: (B, H, W, D) backbone features for current frame
    memory_bank: list of (B, HW, mem_dim) past memory features
    memory_pos: list of temporal positional encodings
    prompt_*: optional prompt inputs for this frame
Returns:
    dict with masks, iou_scores, obj_scores, object_pointer, memory
©Úaxis)ÚpointsÚboxesr3   )Úimage_embeddingsÚimage_peÚsparse_prompt_embeddingsÚdense_prompt_embeddingsrû   rü   i€  Únearest)Úscale_factorÚmodeÚ
pred_masksÚ
iou_scoresÚ
obj_scoresÚobject_pointerr•   )ºNNNé    )r  :r  r   N)rm   rn   Úlenr6   ÚconcatenaterÝ   rÚ   Úget_dense_peÚbroadcast_torÜ   rå   Ú	transposer'   ÚUpsamplerÞ   )r*   rõ   rö   r÷   rø   rù   rú   rû   rü   rp   rq   rr   ÚDr¶   r•   r  Ú
sparse_embÚ	dense_embr3   Úiou_predÚ
sam_tokensÚ	obj_scoreÚobj_ptrÚmask_for_memÚtargetÚupÚB_mÚH_mÚW_mÚC_ms   &&&&&&&&&                     r   Ú
track_stepÚTrackerModel.track_steph  sÜ  € ð* &×+Ñ+‰
ˆˆað ×&Ñ& q¨a­%°Ó3ˆ÷ œ3˜{Ó+¨aÔ/Ü—^’^ K°aÔ8ˆFØ×'Ñ'¨Ó4ˆCð ×&Ñ&×3Ñ3Ó5ˆÜ—?’? 8°µ¸¨]Ó;ˆð !%× 3Ñ 3Ø ØØð !4ó !
Ñˆ
�Ið 26×1BÑ1BØ ØØ%/Ø$-Ø-Ø/ð 2Có 2
Ñ.ˆˆx˜ Yð ×*Ñ*¨:°dÕ+;Ó<ˆð ˜V•}ˆØ#×-Ñ-¨a°°A°qÓ9ˆð ˆØ×Ñ˜aÕ  FÔ*Ü—’à˜\×/Ñ/°Õ2Õ2Ø˜\×/Ñ/°Õ2Õ2ðð ôˆBñ ˜lÓ+ˆLà×$Ñ$Ð%5°|ÓDˆØ#Ÿ\™\ÑˆˆS�#�sØ—‘  S¨3¥Y°Ó4ˆð ˜%Ø˜(Ø˜)Ø˜gØ�fð
ð 	
r   )r   rÜ   ræ   rÝ   rÞ   rä   rà   rá   râ   rå   rë   rÚ   ré   rç   )NNNNNFN)r>   r?   r@   rA   rB   r   rò   r%  rC   rD   rE   rF   s   @@r   rÑ   rÑ   3  s3   ù‡ € ñ÷
(Pó (P÷T6ð 6÷
Q
÷ Q
ò Q
r   rÑ   c                   óX   a a€ ] tR tR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	# )	rè   i¼  zqShared positional embedding for tracker.

Weight keys: tracker_model.shared_image_embedding.positional_embedding
c                ó    <€ V ^8„  d   QhRS[ /# )r   Únum_pos_featsrK   )r   r   s   "€r   r   Ú!SharedImageEmbedding.__annotate__Â  s   ø€ ÷ Añ A¡cñ Ar   c                ó^   <€ \         SV `  4        \        P                  ! ^V34      V n        R# )r   N)r   r   r6   rß   Úpositional_embedding)r*   r)  r0   s   &&€r   r   ÚSharedImageEmbedding.__init__Â  s$   ø€ Ü‰ÑÔÜ$&§H¢H¨a°Ð-?Ó$@ˆÖ!r   c                óP   <€ V ^8„  d   QhRS[ S[S[3,          RS[P                  /# )r   Úsizer4   )r   rL   r6   r7   )r   r   s   "€r   r   r*  Æ  s+   ø€ ÷ 	Iñ 	I™U¡3© 8�_ð 	I±·±ñ 	Ir   c                óš  € Vw  r#\         P                  ! V4      P                  \         P                  4      V,          p\         P                  ! V4      P                  \         P                  4      V,          p\         P                  ! WER R7      w  rg\         P
                  ! VP                  R4      VP                  R4      .RR7      p^V,          ^,
          pW€P                  ,          p^\        P                  ,          V,          p\         P                  ! \         P                  ! V4      \         P                  ! V4      .RR7      # )Úij)Úindexingr   éÿÿÿÿ)r6   ÚarangeÚastypeÚfloat32ÚmeshgridÚstackrn   r,  ÚmathÚpir  ÚsinÚcos)	r*   r/  rq   rr   Úgrid_yÚgrid_xÚgyÚgxÚcoordss	   &&       r   r;   ÚSharedImageEmbedding.__call__Æ  sÕ   € Ø‰ˆÜ—’˜1“×$Ñ$¤R§Z¡ZÓ0°1Õ4ˆÜ—’˜1“×$Ñ$¤R§Z¡ZÓ0°1Õ4ˆÜ—’˜V°dÔ;‰ˆÜ—’˜2Ÿ:™: b›>¨2¯:©:°b«>Ð:ÀÔDˆØ�V•˜a•ˆØ×3Ñ3Õ3ˆØ”T—W‘W•˜vÕ%ˆÜ�~Š~œrŸvšv f›~¬r¯vªv°f«~Ð>ÀRÔHÐHr   )r,  )é€   r=   rF   s   @@r   rè   rè   ¼  s(   ù‡ € ñ÷
Aõ A÷	I÷ 	Ið 	Ir   rè   )rB   r9  Útypingr   r   r   r   Úmlx.coreÚcorer6   Úmlx.nnr'   r   r   Úsam_componentsr   r	   r
   r   ÚModuler   r&   rY   rv   r„   r˜   r¼   rÆ   rÑ   rè   © r   r   Ú<module>rK     sÐ   ðñó
 ß .Ó .å Ý å !ß XÓ Xô$˜BŸI™Iô $ôN˜"Ÿ)™)ô ô&#ˆb�i‰iô #ôL�"—)‘)ô ô %�B—I‘Iô %ôZB˜2Ÿ9™9ô BôJ�b—i‘iô ôJ �r—y‘yô  ô0F
�2—9‘9ô F
ôRI˜2Ÿ9™9ö Ir   