Ë
    ëÓ^jL  ã                   óŠ   — d Z ddlZddlZddlmZ ddlmZ  G d„ dej                  «      Z G d„ dej                  «      Zd	„ Z	y)
z1Various positional encodings for the transformer.é    N)Únn)ÚNestedTensorc                   óZ   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd	defd„Zd	dej                  fd„Z
ˆ xZS )
ÚPositionEmbeddingSinez¢This is a more standard version of the position embedding, very similar to the one used by the Attention is all
    you need paper, generalized to work on images.c                 ó´   •— t         ‰| �  «        || _        || _        || _        |�|du rt        d«      ‚|€dt        j                  z  }|| _        d| _	        y )NFz+normalize should be True if scale is passedé   )
ÚsuperÚ__init__Únum_pos_featsÚtemperatureÚ	normalizeÚ
ValueErrorÚmathÚpiÚscaleÚ_export)Úselfr   r   r   r   Ú	__class__s        €új/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/rfdetr/models/position_encoding.pyr
   zPositionEmbeddingSine.__init__   s^   ø€ Ü‰ÑÔØ*ˆÔØ&ˆÔØ"ˆŒØÐ ¨eÑ!3ÜÐJÓKÐKØˆ=ØœŸ™‘KˆEØˆŒ
Øˆ�ó    c                 óV   — d| _         | j                  | _        | j                  | _        y )NT)r   ÚforwardÚ_forward_originÚforward_export©r   s    r   ÚexportzPositionEmbeddingSine.export)   s"   € ØˆŒØ#Ÿ|™|ˆÔØ×*Ñ*ˆ�r   Útensor_listc           
      ó¬  — |j                   }|j                  }|€J ‚| }|j                  dt        j                  ¬«      }|j                  dt        j                  ¬«      }| j
                  rDd}||d d …dd …d d …f   |z   z  | j                  z  }||d d …d d …dd …f   |z   z  | j                  z  }t        j                  | j                  t        j                  |j                  ¬«      }	| j                  d|	dz  z  | j                  z  z  }	|d d …d d …d d …d f   |	z  }
|d d …d d …d d …d f   |	z  }t        j                  |
d d …d d …d d …dd d…f   j                  «       |
d d …d d …d d …dd d…f   j                  «       fd¬	«      j                  d
«      }
t        j                  |d d …d d …d d …dd d…f   j                  «       |d d …d d …d d …dd d…f   j                  «       fd¬	«      j                  d
«      }|r-t        j                  ||
fd
¬	«      j!                  dddd
«      }|S t        j                  ||
fd
¬	«      j!                  dd
dd«      }|S ©Né   )Údtyper   g�íµ ÷Æ°>éÿÿÿÿ)r!   Údevicer   é   ©Údimé   )ÚtensorsÚmaskÚcumsumÚtorchÚfloat32r   r   Úaranger   r#   r   ÚstackÚsinÚcosÚflattenÚcatÚpermute)r   r   Úalign_dim_ordersÚxr)   Únot_maskÚy_embedÚx_embedÚepsÚdim_tÚpos_xÚpos_yÚposs                r   r   zPositionEmbeddingSine.forward.   s.  € Ø×ÑˆØ×ÑˆØÐÐÐØ�5ˆØ—/‘/ !¬5¯=©=�/Ó9ˆØ—/‘/ !¬5¯=©=�/Ó9ˆØ�>Š>ØˆCØ ª¨B©C²¨Ñ!3°cÑ!9Ñ:¸T¿Z¹ZÑGˆGØ ªªA¨r©s¨Ñ!3°cÑ!9Ñ:¸T¿Z¹ZÑGˆGä—‘˜T×/Ñ/´u·}±}ÈQÏXÉXÔVˆØ× Ñ  Q¨%°1©*Ñ%5¸×8JÑ8JÑ%JÑKˆàšš1ša ˜Ñ&¨Ñ.ˆØšš1ša ˜Ñ&¨Ñ.ˆÜ—‘˜U¢1¢aª¨A¨D¨q¨D =Ñ1×5Ñ5Ó7¸ºqÂ!ÂQÈÈÈ1È¸}Ñ9M×9QÑ9QÓ9SÐTÐZ[Ô\×dÑdÐefÓgˆÜ—‘˜U¢1¢aª¨A¨D¨q¨D =Ñ1×5Ñ5Ó7¸ºqÂ!ÂQÈÈÈ1È¸}Ñ9M×9QÑ9QÓ9SÐTÐZ[Ô\×dÑdÐefÓgˆÙÜ—)‘)˜U E˜N°Ô2×:Ñ:¸1¸aÀÀAÓFˆCð
 ˆ
ô —)‘)˜U E˜N°Ô2×:Ñ:¸1¸aÀÀAÓFˆCàˆ
r   r)   c           
      ó|  — |€J ‚| }|j                  dt        j                  ¬«      }|j                  dt        j                  ¬«      }| j                  rDd}||d d …dd …d d …f   |z   z  | j                  z  }||d d …d d …dd …f   |z   z  | j                  z  }t        j
                  | j                  t        j                  |j                  ¬«      }| j                  d|dz  z  | j                  z  z  }|d d …d d …d d …d f   |z  }|d d …d d …d d …d f   |z  }	t        j                  |d d …d d …d d …dd d…f   j                  «       |d d …d d …d d …dd d…f   j                  «       fd¬	«      j                  d
«      }t        j                  |	d d …d d …d d …dd d…f   j                  «       |	d d …d d …d d …dd d…f   j                  «       fd¬	«      j                  d
«      }	|r-t        j                  |	|fd
¬	«      j                  dddd
«      }
|
S t        j                  |	|fd
¬	«      j                  dd
dd«      }
|
S r   )r*   r+   r,   r   r   r-   r   r#   r   r.   r/   r0   r1   r2   r3   )r   r)   r4   r6   r7   r8   r9   r:   r;   r<   r=   s              r   r   z$PositionEmbeddingSine.forward_exportI   s  € ØÐÐÐØ�5ˆØ—/‘/ !¬5¯=©=�/Ó9ˆØ—/‘/ !¬5¯=©=�/Ó9ˆØ�>Š>ØˆCØ ª¨B©C²¨Ñ!3°cÑ!9Ñ:¸T¿Z¹ZÑGˆGØ ªªA¨r©s¨Ñ!3°cÑ!9Ñ:¸T¿Z¹ZÑGˆGä—‘˜T×/Ñ/´u·}±}ÈTÏ[É[ÔYˆØ× Ñ  Q¨%°1©*Ñ%5¸×8JÑ8JÑ%JÑKˆàšš1ša ˜Ñ&¨Ñ.ˆØšš1ša ˜Ñ&¨Ñ.ˆÜ—‘˜U¢1¢aª¨A¨D¨q¨D =Ñ1×5Ñ5Ó7¸ºqÂ!ÂQÈÈÈ1È¸}Ñ9M×9QÑ9QÓ9SÐTÐZ[Ô\×dÑdÐefÓgˆÜ—‘˜U¢1¢aª¨A¨D¨q¨D =Ñ1×5Ñ5Ó7¸ºqÂ!ÂQÈÈÈ1È¸}Ñ9M×9QÑ9QÓ9SÐTÐZ[Ô\×dÑdÐefÓgˆÙÜ—)‘)˜U E˜N°Ô2×:Ñ:¸1¸aÀÀAÓFˆCð
 ˆ
ô —)‘)˜U E˜N°Ô2×:Ñ:¸1¸aÀÀAÓFˆCàˆ
r   )é@   i'  FN)T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   r   r+   ÚTensorr   Ú__classcell__©r   s   @r   r   r      s.   ø„ ñ6õ
ò+ñ
 <ó ñ6 5§<¡<÷ r   r   c                   ó<   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zdefd„Zˆ xZ	S )ÚPositionEmbeddingLearnedz Absolute pos embedding, learned.c                 ó¼   •— t         ‰| �  «        t        j                  d|«      | _        t        j                  d|«      | _        | j                  «        d| _        y )Né2   F)r	   r
   r   Ú	EmbeddingÚ	row_embedÚ	col_embedÚreset_parametersr   )r   r   r   s     €r   r
   z!PositionEmbeddingLearned.__init__f   sE   ø€ Ü‰ÑÔÜŸ™ b¨-Ó8ˆŒÜŸ™ b¨-Ó8ˆŒØ×ÑÔØˆ�r   c                 ó   — t         ‚©N)ÚNotImplementedErrorr   s    r   r   zPositionEmbeddingLearned.exportm   s   € Ü!Ð!r   c                 óÐ   — t         j                  j                  | j                  j                  «       t         j                  j                  | j
                  j                  «       y rP   )r   ÚinitÚuniform_rL   ÚweightrM   r   s    r   rN   z)PositionEmbeddingLearned.reset_parametersp   s:   € Ü
�‰×Ñ˜Ÿ™×.Ñ.Ô/Ü
�‰×Ñ˜Ÿ™×.Ñ.Õ/r   r   c                 ó  — |j                   }|j                  d d \  }}t        j                  ||j                  ¬«      }t        j                  ||j                  ¬«      }| j                  |«      }| j                  |«      }t        j                  |j                  d«      j                  |dd«      |j                  d«      j                  d|d«      gd¬«      j                  d«      j                  dd|j                  d   d«      }	|	S )Nr   )r#   r   r    r"   r%   )
r(   Úshaper+   r-   r#   rM   rL   r2   Ú	unsqueezeÚrepeat)
r   r   r5   ÚhÚwÚiÚjÚx_embÚy_embr=   s
             r   r   z PositionEmbeddingLearned.forwardt   sß   € Ø×ÑˆØ�w‰w�r˜ˆ{‰ˆˆ1Ü�L‰L˜ 1§8¡8Ô,ˆÜ�L‰L˜ 1§8¡8Ô,ˆØ—‘˜qÓ!ˆØ—‘˜qÓ!ˆä�I‰Ià—O‘O AÓ&×-Ñ-¨a°°AÓ6Ø—O‘O AÓ&×-Ñ-¨a°°AÓ6ðð ô÷ ‰Y�q‹\ß‰V�A�q˜!Ÿ'™' !™* aÓ(ð 	ð ˆ
r   )é   )
r@   rA   rB   rC   r
   r   rN   r   r   rE   rF   s   @r   rH   rH   c   s!   ø„ Ù*õò"ò0ð <÷ r   rH   c                 óp   — | dz  }|dv rt        |d¬«      }|S |dv rt        |«      }|S t        d|› �«      ‚)Nr   )Úv2ÚsineT)r   )Úv3Úlearnedznot supported )r   rH   r   )Ú
hidden_dimÚposition_embeddingÚ	num_stepss      r   Úbuild_position_encodingri   Š   s\   € Ø˜a‘€IØ˜^Ñ+ä2°9ÈÔMÐð Ðð 
Ð0Ñ	0Ü5°iÓ@Ðð Ðô ˜>Ð*<Ð)=Ð>Ó?Ð?r   )
rC   r   r+   r   Úrfdetr.utilities.tensorsr   ÚModuler   rH   ri   © r   r   ú<module>rm      s?   ðñ 8ã ã Ý å 1ôG˜BŸI™Iô GôT$˜rŸy™yô $óN
r   