
    ^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	   TNg      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     ||~Bv}}566t9DQJkk$4.GAt668Dggfkk!R(22489G
C 7BQK$$R(..044Q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3c9;;=188&&225$dTabb#AudLAEKK,-\0BB 55##//t\4Q^__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    	A1A	
S	B
a%3	B99R"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1BIIaO#gs   #%)super__init__
num_layersr   
ModuleListziplayers)self	input_dim
hidden_dim
output_dimrP   h	__class__s         r)   rO   zMLP.__init__H   sS    $LJN+mm#gYKRSOUVZdYeUe@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HAu$%!(;$;uQx qA	Jr+   )__name__
__module____qualname____doc__rO   r`   __classcell__)rY   s   @r)   rG   rG   E   s    >hr+   rG   ))r	   )NNnearestN)gh㈵>)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<< uS#X Z^_d_k_kZl  ( !%$($(``
49
` 5/` 	`
 D>` `&u|| % 5<< ")) r+   