Ë
    ëÓ^jÏ  ã                   óì  — d Z ddlmZmZmZ ddlZddlmc mZ	 ddl
Z
ddlmZmZ  ee
j                  j                  d«      d   «      dk  rddlmZ dd	lmZ  ej&                  «       dd
ej                  dej                  deedf   deej                     fd„«       Z	 	 	 	 ddedeee      dee   dedee   defd„Zddej                  dedej                  fd„Z G d„ dej4                  «      Zy)zJMathematical building blocks: MLP, inverse_sigmoid, accuracy, interpolate.é    )ÚListÚOptionalÚTupleN)ÚTensorÚnnú.é   ç      @)Ú_new_empty_tensor)Ú_output_sizeÚoutputÚtargetÚtopk.Úreturnc                 ó  — |j                  «       dk(  r"t        j                  g | j                  ¬«      gS t	        |«      }|j                  d«      }| j                  |ddd«      \  }}|j                  «       }|j                  |j                  dd«      j                  |«      «      }g }|D ]V  }	|d|	 j                  d«      j                  «       j                  d«      }
|j                  |
j                  d|z  «      «       ŒX |S )z7Computes the precision@k for the specified values of k.r   )Údevicer	   TéÿÿÿÿNg      Y@)ÚnumelÚtorchÚzerosr   ÚmaxÚsizer   ÚtÚeqÚviewÚ	expand_asÚfloatÚsumÚappendÚmul_)r   r   r   ÚmaxkÚ
batch_sizeÚ_ÚpredÚcorrectÚresÚkÚ	correct_ks              ú]/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/rfdetr/models/math.pyÚaccuracyr*      sæ   € ð ‡|�|ƒ~˜ÒÜ—‘˜B v§}¡}Ô5Ð6Ð6Üˆt‹9€DØ—‘˜Q“€Jà�k‰k˜$  4¨Ó.�G€A€tØ�6‰6‹8€DØ�g‰g�f—k‘k ! RÓ(×2Ñ2°4Ó8Ó9€Gà
€CØò 7ˆØ˜B˜Q�K×$Ñ$ RÓ(×.Ñ.Ó0×4Ñ4°QÓ7ˆ	Ø�
‰
�9—>‘> %¨*Ñ"4Ó5Õ6ð7ð €Jó    Úinputr   Úscale_factorÚmodeÚalign_cornersc                 ó´  — t        t        j                  j                  d«      d   «      dk  r~| j	                  «       dkD  r-t
        j                  j                  j                  | ||||«      S t        d| ||«      }t        | j                  dd «      t        |«      z   }t        | |«      S t        j                  j                  j                  | ||||«      S )zPEquivalent to nn.functional.interpolate, but with support for empty batch sizes.r   r	   r
   r   é   Néþÿÿÿ)r   ÚtorchvisionÚ__version__Úsplitr   r   r   Ú
functionalÚinterpolater   ÚlistÚshaper   ÚopsÚmisc)r,   r   r-   r.   r/   Úoutput_shapes         r)   r7   r7   +   s¹   € ô Œ[×$Ñ$×*Ñ*¨3Ó/°Ñ2Ó3°cÒ9Ø�;‰;‹=˜1ÒÜ—8‘8×&Ñ&×2Ñ2°5¸$ÀÈdÐTaÓbÐbä# A u¨d°LÓAˆÜ˜EŸK™K¨¨Ð,Ó-´°\Ó0BÑBˆÜ  ¨Ó5Ð5ä�‰×#Ñ#×/Ñ/°°t¸\È4ÐQ^Ó_Ð_r+   ÚxÚepsc                 ó¦   — | j                  dd¬«      } | j                  |¬«      }d| z
  j                  |¬«      }t        j                  ||z  «      S )Nr   r	   )Úminr   )r@   )Úclampr   Úlog)r=   r>   Úx1Úx2s       r)   Úinverse_sigmoidrE   >   sK   € Ø	�‰�A˜1ˆÓ€AØ	
�‰�SˆÓ	€BØ
ˆa‰%�‰˜3ˆÓ	€BÜ�9‰9�R˜"‘WÓÐr+   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚMLPz4Very simple multi-layer perceptron (also called FFN)c                 ó¨   •— t         ‰| �  «        || _        |g|dz
  z  }t        j                  d„ t        |g|z   ||gz   «      D «       «      | _        y )Nr	   c              3   óN   K  — | ]  \  }}t        j                  ||«      –— Œ y ­w)N)r   ÚLinear)Ú.0Únr'   s      r)   ú	<genexpr>zMLP.__init__.<locals>.<genexpr>L   s   è ø€ Ò#g¹¸¸1¤B§I¡I¨a°§OÑ#gùs   ‚#%)ÚsuperÚ__init__Ú
num_layersr   Ú
ModuleListÚzipÚlayers)ÚselfÚ	input_dimÚ
hidden_dimÚ
output_dimrP   ÚhÚ	__class__s         €r)   rO   zMLP.__init__H   sS   ø€ Ü‰ÑÔØ$ˆŒØˆL˜J¨™NÑ+ˆÜ—m‘mÑ#gÄÀYÀKÐRSÁOÐUVÐZdÐYeÑUeÓ@fÔ#gÓgˆ�r+   c                 óª   — t        | j                  «      D ]:  \  }}|| j                  dz
  k  rt        j                   ||«      «      n ||«      }Œ< |S )Nr	   )Ú	enumeraterS   rP   ÚFÚrelu)rT   r=   ÚiÚlayers       r)   ÚforwardzMLP.forwardN   sM   € Ü! $§+¡+Ó.ò 	J‰HˆAˆuØ$%¨¯©¸!Ñ(;Ò$;”—‘‘u˜Q“xÔ ÁÀqÃ‰Að	Jàˆr+   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rO   r`   Ú__classcell__)rY   s   @r)   rG   rG   E   s   ø„ Ù>ôhör+   rG   ))r	   )NNÚnearestN)gñhãˆµøä>)rd   Útypingr   r   r   r   Útorch.nn.functionalr   r6   r\   r3   r   r   r4   r5   Útorchvision.opsr   Útorchvision.ops.miscr   Úno_gradÚintr*   ÚstrÚboolr7   rE   ÚModulerG   © r+   r)   ú<module>rq      s3  ðñ Qç (Ñ (ã ß Ð Û ß áˆ×	 Ñ	 ×	&Ñ	& sÓ	+¨AÑ	.Ó/°#Ò5Ý1Ý1ð €‡�ƒñ�U—\‘\ð ¨5¯<©<ð ¸uÀSÈ#ÀX¹ð ÐZ^Ð_d×_kÑ_kÑZlò ó ðð( !%Ø$(ØØ$(ñ`Øð`à
�4˜‘9Ñ
ð`ð ˜5‘/ð`ð ð	`ð
 ˜D‘>ð`ð ó`ñ&�u—|‘|ð ¨%ð ¸5¿<¹<ó ôˆ"�)‰)õ r+   