Ë
    éÓ^j×  ã                   óì   — d dl mZmZmZ d dlZd dlmZ dej                  dede	de
de
deej                  eej                     f   fd	„Z G d
„ dej                  «      Z G d„ dej                  «      Zy)é    )ÚOptionalÚTupleÚUnionNÚxÚprobÚnum_prefix_tokensÚorderedÚtrainingÚreturnc           	      ó,  — |r|dk(  r| dfS |r| dd…d|…f   | dd…|d…f   } }nd}| j                   d   }| j                   d   }t        dt        |d|z
  z  «      «      }t        j                  t        j
                  ||| j                  ¬«      d¬«      dd…d|…f   }	|r|	j                  d¬«      d   }	| j                  d|	j                  d«      j                  d	| j                   d
d z   «      «      } |�t        j                  || fd¬«      } | |	fS )ai  
    Common forward logic for patch dropout.

    Args:
        x: Input tensor of shape (B, L, D)
        prob: Dropout probability
        num_prefix_tokens: Number of prefix tokens to preserve
        ordered: Whether to maintain patch order
        training: Whether in training mode

    Returns:
        Tuple of (output tensor, keep_indices or None)
    g        Nr   é   ç      ð?)Údeviceéÿÿÿÿ)Údim)r   r   é   )ÚshapeÚmaxÚintÚtorchÚargsortÚrandnr   ÚsortÚgatherÚ	unsqueezeÚexpandÚcat)
r   r   r   r	   r
   Úprefix_tokensÚBÚLÚnum_keepÚkeep_indicess
             úd/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/layers/patch_dropout.pyÚpatch_dropout_forwardr$      s!  € ñ( �t˜r’zØ�$ˆwˆáØšQÐ 2Ð!2Ð 2Ð2Ñ3°Q²qÐ:KÑ:LÐ7LÑ5M�q‰àˆà	�‰�‰
€AØ	�‰�‰
€AÜ�1”c˜!˜r D™y™/Ó*Ó+€HÜ—=‘=¤§¡¨Q°¸!¿(¹(Ô!CÈÔLÊQÐPYÐQYÐPYÈ\ÑZ€Láð $×(Ñ(¨RÐ(Ó0°Ñ3ˆà	�‰��L×*Ñ*¨2Ó.×5Ñ5°hÀÇÁÈÈÀÑ6LÓMÓN€AàÐ Ü�I‰I�} aÐ(¨aÔ0ˆàˆlˆ?Ðó    c                   óp   ‡ — e Zd ZdZ	 	 	 d	dededefˆ fd„Zdej                  dej                  fd„Z
ˆ xZS )
ÚPatchDropoutz|
    Patch Dropout without returning indices.
    https://arxiv.org/abs/2212.00794 and https://arxiv.org/pdf/2208.07220
    r   r   r	   c                 ól   •— t         ‰| �  «        d|cxk  rdk  sJ ‚ J ‚|| _        || _        || _        y ©Nr   r   ©ÚsuperÚ__init__r   r   r	   ©Úselfr   r   r	   Ú	__class__s       €r#   r,   zPatchDropout.__init__;   ó;   ø€ ô 	‰ÑÔØ�DŒ~˜2Š~Ð‰~Ðˆ~ØˆŒ	Ø!2ˆÔØˆ�r%   r   r   c                 óz   — t        || j                  | j                  | j                  | j                  «      \  }}|S ©N©r$   r   r   r	   r
   )r.   r   ÚoutputÚ_s       r#   ÚforwardzPatchDropout.forwardG   s8   € Ü)ØØ�I‰IØ×"Ñ"Ø�L‰LØ�M‰Mó
‰	ˆ�ð ˆr%   ©g      à?r   F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úfloatr   Úboolr,   r   ÚTensorr6   Ú__classcell__©r/   s   @r#   r'   r'   5   sO   ø„ ñð Ø%&Ø!ñ	
àð
ð  #ð
ð õ	
ð˜Ÿ™ð ¨%¯,©,÷ r%   r'   c                   ó”   ‡ — e Zd ZdZ	 	 	 d	dededefˆ fd„Zdej                  de
ej                  eej                     f   fd„Zˆ xZS )
ÚPatchDropoutWithIndiceszŒ
    Patch Dropout that returns both output and keep indices.
    https://arxiv.org/abs/2212.00794 and https://arxiv.org/pdf/2208.07220
    r   r   r	   c                 ól   •— t         ‰| �  «        d|cxk  rdk  sJ ‚ J ‚|| _        || _        || _        y r)   r*   r-   s       €r#   r,   z PatchDropoutWithIndices.__init__X   r0   r%   r   r   c                 óp   — t        || j                  | j                  | j                  | j                  «      S r2   r3   )r.   r   s     r#   r6   zPatchDropoutWithIndices.forwardd   s0   € Ü$ØØ�I‰IØ×"Ñ"Ø�L‰LØ�M‰Mó
ð 	
r%   r7   )r8   r9   r:   r;   r<   r   r=   r,   r   r>   r   r   r6   r?   r@   s   @r#   rB   rB   R   sb   ø„ ñð Ø%&Ø!ñ	
àð
ð  #ð
ð õ	
ð
˜Ÿ™ð 
¨%°·±¸hÀuÇ|Á|Ñ>TÐ0TÑ*U÷ 
r%   rB   )Útypingr   r   r   r   Útorch.nnÚnnr>   r<   r   r=   r$   ÚModuler'   rB   © r%   r#   ú<module>rJ      sŠ   ðß )Ñ )ã Ý ð+Ø�<‰<ð+àð+ð ð+ð ð	+ð
 ð+ð ˆ5�<‰<˜ %§,¡,Ñ/Ð/Ñ0ó+ô\�2—9‘9ô ô:
˜bŸi™iõ 
r%   