a
    d                     @   s>   d dl mZmZmZ d dlZd dlmZ G dd dejZdS )    )OptionalTupleUnionNc                       sh   e Zd ZU dZejje ed< de	e
eed fddZeejeejeej f f d	d
dZ  ZS )PatchDropoutz*
    https://arxiv.org/abs/2212.00794
    return_indices      ?   F)probnum_prefix_tokensorderedr   c                    s@   t    d|  krdk s$n J || _|| _|| _|| _d S )Nr         ?)super__init__r	   r
   r   r   )selfr	   r
   r   r   	__class__ b/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/layers/patch_dropout.pyr      s    
zPatchDropout.__init__)returnc              	   C   s   | j r| jdkr"| jr|d fS |S | jrX|d d d | jf |d d | jd f  }}nd }|jd }|jd }tdt|d| j  }tjtj	|||j
dddd d d |f }| jr|jddd }|d|dd|jd	d   }|d urtj||fdd}| jr||fS |S )
Ng        r   r   r   )device)Zdim)r   r      )Ztrainingr	   r   r
   shapemaxinttorchZargsortZrandnr   r   sortZgatherZ	unsqueezeexpandcat)r   xZprefix_tokensBLZnum_keepZkeep_indicesr   r   r   forward   s&    0

,&
zPatchDropout.forward)r   r   FF)__name__
__module____qualname____doc__r   ZjitFinalbool__annotations__floatr   r   r   ZTensorr   r   r"   __classcell__r   r   r   r   r      s   
    r   )	typingr   r   r   r   Ztorch.nnnnModuler   r   r   r   r   <module>   s   