Ë
    ëÓ^j­  ã                   ó‚   — d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	  G d„ dej                  «      Z	 dd	efd
„Zy)é    )ÚCallableN)Únn)ÚBackbone)Úbuild_position_encoding)ÚNestedTensorc                   óP   ‡ — e Zd Zˆ fd„Zdefd„Zd„ Zdej                  fd„Z	ˆ xZ
S )ÚJoinerc                 ó4   •— t         ‰| �  ||«       d| _        y )NF)ÚsuperÚ__init__Ú_export)ÚselfÚbackboneÚposition_embeddingÚ	__class__s      €új/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/rfdetr/models/backbone/__init__.pyr   zJoiner.__init__   s   ø€ Ü‰Ñ˜Ð#5Ô6Øˆ�ó    Útensor_listc                 óæ   —  | d   |«      }t        |t        «      r|\  }}n|d}}g }|D ]A  }|j                   | d   |d¬«      j                  |j                  j
                  «      «       ŒC |||fS )Ú r   Né   F©Úalign_dim_orders)Ú
isinstanceÚtupleÚappendÚtoÚtensorsÚdtype)r   r   ÚresultÚxÚcross_attn_xÚposÚx_s          r   ÚforwardzJoiner.forward   s   € à��a‘˜Ó%ˆÜ�fœeÔ$Ø$‰OˆA‰|à$ dˆ|ˆAØˆØò 	QˆBØ�J‰J�w�t˜A‘w˜r°EÔ:×=Ñ=¸b¿j¹j×>NÑ>NÓOÕPð	Qà�#�|Ð#Ð#r   c                 ó*  — d| _         | j                  | _        | j                  | _        | j	                  «       D ]W  \  }}t        |d«      sŒt        |j                  t        «      sŒ.t        |d«      sŒ;|j                   rŒH|j                  «        ŒY y )NTÚexportr   )	r   r%   Ú_forward_originÚforward_exportÚnamed_modulesÚhasattrr   r'   r   )r   ÚnameÚms      r   r'   zJoiner.export%   sr   € ØˆŒØ#Ÿ|™|ˆÔØ×*Ñ*ˆŒØ×)Ñ)Ó+ò 	‰GˆD�!Ü�q˜(Õ#¬
°1·8±8¼XÕ(FÌ7ÐSTÐV_ÕK`Ðij×irÓirØ—‘•
ñ	r   Úinputsc                 óN  —  | d   |«      }t        |«      dk(  r|\  }}}n|\  }}d }g }t        ||«      D ]h  \  }} | d   |d¬«      j                  |j                  «      }	|€*|	j                  dk(  r|	j
                  d   dk(  r	|	d d …df   }	|j                  |	«       Œj ||||fS )Nr   é   r   Fr   é   )ÚlenÚzipr   r   ÚndimÚshaper   )
r   r.   r    ÚfeatsÚmasksÚcross_attn_featsÚpossÚfeatÚmaskr#   s
             r   r)   zJoiner.forward_export-   sÃ   € Ø��a‘˜“ˆÜˆv‹;˜!ÒØ-3Ñ*ˆE�5Ñ*à!‰LˆE�5Ø#ÐØˆÜ˜e UÓ+ò 	‰JˆD�$Ø�$�q‘'˜$°Ô7×:Ñ:¸4¿:¹:ÓFˆCØÐ'¨C¯H©H¸ªM¸c¿i¹iÈ¹lÈaÒ>OØš!˜Q˜$‘i�Ø�K‰K˜Õð		ð
 �e˜TÐ#3Ð3Ð3r   )Ú__name__Ú
__module__Ú__qualname__r   r   r%   r'   ÚtorchÚTensorr)   Ú__classcell__)r   s   @r   r	   r	      s)   ø„ ôð
$ <ó 
$òð4 U§\¡\÷ 4r   r	   Údual_projectorc                 ó²   — t        |	|
«      }
t        | |fi d|“d|“d|“d|“d|“d|“d|“d|“d	|“d
|“d|“d|“d|“d|“d|“d|“d|“Ž}t        ||
«      }|S )z�
    Useful args:
        - encoder: encoder name
        - lr_encoder:
        - dilation
        - use_checkpoint: for swin only for now

    Úwindow_block_indexesÚ	drop_pathÚout_channelsÚout_feature_indexesÚprojector_scaleÚuse_cls_tokenÚ
layer_normÚfreeze_encoderÚtarget_shapeÚrms_normÚbackbone_loraÚgradient_checkpointingÚload_dinov2_weightsÚ
patch_sizeÚnum_windowsÚpositional_encoding_sizerB   )r   r   r	   )ÚencoderÚvit_encoder_num_layersÚpretrained_encoderrD   rE   rF   rG   rH   rI   Ú
hidden_dimr   rK   rJ   rL   rM   rN   Úforce_no_pretrainrO   rP   rQ   rR   rS   rB   r   Úmodels                            r   Úbuild_backbonerZ   =   sá   € ôB 1°Ð=OÓPÐäØØòñ 2ðñ ð	ñ
 "ðñ 0ðñ (ðñ $ðñ ðñ &ðñ "ðñ ðñ $ðñ  6ðñ 0ðñ  ð!ñ"  ð#ñ$ ":ð%ñ& &ð'€Hô, �8Ð/Ó0€EØ€Lr   )F)Útypingr   r?   r   Úrfdetr.models.backbone.backboner   Úrfdetr.models.position_encodingr   Úrfdetr.utilities.tensorsr   Ú
Sequentialr	   ÚboolrZ   © r   r   ú<module>rb      s>   ðõ ã Ý å 4Ý CÝ 1ô&4ˆR�]‰]ô &4ð@ !ñ/:ð. ô/:r   