+
    UV-jU  ã                   óž   € R t ^ RIHt ^ RIHt ^ RIHt ^RIH	t	 ^RI
HtHt  ! R R]P                  4      t ! R R]P                  4      tR# )	ziSAM3 Geometry Encoder for box/point/mask visual prompts.

Weight keys: detector_model.geometry_encoder.*
)ÚOptionalN©ÚGeometryEncoderConfig)ÚMLPÚMultiheadAttentionc                   ó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	# )ÚGeometryEncoderLayera.  Transformer encoder layer for geometry features.

Weight keys per layer:
    self_attn.{q,k,v,o}_proj.{weight,bias}
    cross_attn.{q,k,v,o}_proj.{weight,bias}
    layer_norm1.{weight,bias}
    layer_norm2.{weight,bias}
    layer_norm3.{weight,bias}
    mlp.fc1.{weight,bias}
    mlp.fc2.{weight,bias}
c                ó    <€ V ^8„  d   QhRS[ /# ©é   Úconfigr   )ÚformatÚ__classdict__s   "€Úm/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/sam3/geometry.pyÚ__annotate__Ú!GeometryEncoderLayer.__annotate__   s   ø€ ÷ Gñ GÑ4ñ Gó    c                óþ  <€ \         SV `  4        VP                  p\        W!P                  VP
                  4      V n        \        W!P                  VP
                  4      V n        \        P                  ! W!P                  R 7      V n        \        P                  ! W!P                  R 7      V n        \        P                  ! W!P                  R 7      V n        \        W!P                  VP                   4      V n        R# )©ÚepsN)ÚsuperÚ__init__Úhidden_sizer   Únum_attention_headsÚdropoutÚ	self_attnÚ
cross_attnÚnnÚ	LayerNormÚlayer_norm_epsÚlayer_norm1Úlayer_norm2Úlayer_norm3r   Úintermediate_sizeÚ
hidden_actÚmlp)Úselfr   ÚdÚ	__class__s   && €r   r   ÚGeometryEncoderLayer.__init__   s²   ø€ Ü‰ÑÔØ×Ñˆä+Ø×)Ñ)¨6¯>©>ó
ˆŒô -Ø×)Ñ)¨6¯>©>ó
ˆŒô Ÿ<š<¨×/DÑ/DÔEˆÔÜŸ<š<¨×/DÑ/DÔEˆÔÜŸ<š<¨×/DÑ/DÔEˆÔä�q×2Ñ2°F×4EÑ4EÓFˆŽr   c                ó’   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[S[ P                  ,          RS[ P                  /# )r   ÚsrcÚmemoryÚ
memory_posÚreturn)ÚmxÚarrayr   )r   r   s   "€r   r   r   -   sH   ø€ ÷ ñ á�X‰Xðñ —‘ðñ ™RŸX™XÕ&ð	ñ
 
�‰ñr   c                ó"  € V P                  WV4      pW,           pV P                  V4      pVe	   W#,           MTpV P                  WV4      pW,           pV P                  V4      pV P	                  V4      pW,           pV P                  V4      pV# )z“
Args:
    src: (B, N, D) prompt features
    memory: (B, HW, D) image features for cross-attention
    memory_pos: (B, HW, D) positional encoding
)r   r    r   r!   r%   r"   )r&   r+   r,   r-   Úsrc2Úkeys   &&&&  r   Ú__call__ÚGeometryEncoderLayer.__call__-   sŽ   € ð �~‰~˜c¨Ó,ˆØ�jˆØ×Ñ˜sÓ#ˆð &0Ò%;ˆfÖ!ÀˆØ�‰˜s¨Ó0ˆØ�jˆØ×Ñ˜sÓ#ˆð �x‰x˜‹}ˆØ�jˆØ×Ñ˜sÓ#ˆàˆ
r   )r   r    r!   r"   r%   r   )N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r4   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r(   r   s   @@r   r   r      s%   ù‡ € ñ
÷Gó G÷"÷ ò r   r   c                   ój   a a€ ] tR t^Lt 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
# )
ÚGeometryEncoderzpEncodes geometric prompts (boxes, points) into feature vectors.

Weight keys: detector_model.geometry_encoder.*
c                ó    <€ V ^8„  d   QhRS[ /# r
   r   )r   r   s   "€r   r   ÚGeometryEncoder.__annotate__R   s   ø€ ÷ Lñ LÑ4ñ Lr   c                ó  <€ \         SV `  4        VP                  p\        P                  ! ^V4      V n        \        P                  ! W"VP                  RR7      V n        \        P                  ! V^,           V4      V n	        \        P                  ! ^V4      V n        \        P                  ! ^V4      V n        \        P                  ! W"4      V n        \        VP                  4       Uu. uF  p\!        V4      NK  	  upV n        \        P$                  ! W!P&                  R7      V n        \        P$                  ! W!P&                  R7      V n        \        P$                  ! W!P&                  R7      V n        R# u upi )é   T)Úkernel_sizeÚbiasr   N)r   r   r   r   ÚLinearÚboxes_direct_projectÚConv2dÚroi_sizeÚboxes_pool_projectÚboxes_pos_enc_projectÚ	EmbeddingÚlabel_embedÚ	cls_embedÚ
final_projÚrangeÚ
num_layersr   Úlayersr   r   Úoutput_layer_normÚprompt_layer_normÚvision_layer_norm)r&   r   r'   Ú_r(   s   &&  €r   r   ÚGeometryEncoder.__init__R   s  ø€ Ü‰ÑÔØ×Ñˆô %'§I¢I¨a°£OˆÔ!Ü"$§)¢)Ø˜fŸo™o°Dô#
ˆÔô &(§Y¢Y¨q°1­u°aÓ%8ˆÔ"ô Ÿ<š<¨¨1Ó-ˆÔÜŸš a¨Ó+ˆŒô Ÿ)š) A›/ˆŒô >CÀ6×CTÑCTÔ=UÓVÑ=U¸Ô+¨FÖ3Ñ=UÑVˆŒä!#§¢¨a×5JÑ5JÔ!KˆÔÜ!#§¢¨a×5JÑ5JÔ!KˆÔÜ!#§¢¨a×5JÑ5JÔ!KˆÖùò	 Ws   Ã-E=c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   Úboxesr.   )r/   r0   )r   r   s   "€r   r   rB   k   s#   ø€ ÷ 0ñ 0¡"§(¡(ð 0©r¯x©xñ 0r   c                ó$   € V P                  V4      # )zŽEncode box prompts.

Args:
    boxes: (B, N_box, 4) normalized box coordinates [cx, cy, w, h]
Returns:
    (B, N_box, D) encoded box features
)rH   )r&   rZ   s   &&r   Úencode_boxesÚGeometryEncoder.encode_boxesk   s   € ð ×(Ñ(¨Ó/Ð/r   c                ó²   <€ V ^8„  d   QhRS[ S[P                  ,          RS[ S[P                  ,          RS[ S[P                  ,          RS[P                  /# )r   rZ   r,   r-   r.   )r   r/   r0   )r   r   s   "€r   r   rB   u   sR   ø€ ÷ %ñ %á™Ÿ™Õ!ð%ñ ™Ÿ™Õ"ð%ñ ™RŸX™XÕ&ð	%ñ
 
�‰ñ%r   c                ó`  € Ve   VP                   ^ ,          MVP                   ^ ,          pV P                  P                  P                   R,          p. p\        P                  ! V P                  P                  R,          V^V34      pVP                  V4       Ve;   VP                   ^,          ^ 8”  d#   V P                  V4      pVP                  V4       \        P                  ! V^R7      p	V P                   F  p
V
! W’V4      p	K  	  V P                  V	4      p	V P                  V	4      p	V	# )z·
Args:
    boxes: (B, N_box, 4) box prompts
    memory: (B, HW, D) image features
    memory_pos: (B, HW, D) positional encoding
Returns:
    (B, N_prompt, D) encoded prompt features
N)Úaxiséÿÿÿÿ)ÚshaperO   Úweightr/   Úbroadcast_toÚappendr\   ÚconcatenaterS   rT   rP   )r&   rZ   r,   r-   ÚBr'   ÚtokensÚclsÚ	box_featsr+   Úlayers   &&&&       r   r4   ÚGeometryEncoder.__call__u   sö   € ð  &Ò1ˆF�L‰L˜ŽO°u·{±{À1µ~ˆØ�N‰N×!Ñ!×'Ñ'¨Õ+ˆàˆô �oŠo˜dŸn™n×3Ñ3°DÕ9¸A¸qÀ!¸9ÓEˆØ�‰�cÔð Ò §¡¨Q¥°!Ô!3Ø×)Ñ)¨%Ó0ˆIØ�M‰M˜)Ô$ä�nŠn˜V¨!Ô,ˆð —[”[ˆEÙ˜ ZÓ0ŠCñ !ð ×$Ñ$ SÓ)ˆØ�o‰o˜cÓ"ˆàˆ
r   )
rH   rK   rL   rO   rP   rN   rS   rT   rU   rV   )NNN)r6   r7   r8   r9   r:   r   r\   r4   r;   r<   r=   r>   s   @@r   r@   r@   L   s/   ù‡ € ñ÷
Ló L÷20ð 0÷%÷ %ò %r   r@   )r:   Útypingr   Úmlx.coreÚcorer/   Úmlx.nnr   r   r   Úencoderr   r   ÚModuler   r@   © r   r   Ú<module>rt      s>   ðñõ
 å Ý å )ß ,ô:˜2Ÿ9™9ô :ôzN�b—i‘iö Nr   