o
    ®åÀi…  ã                   @   s6   d dl mZ ddedefdd„ZG dd	„ d	ejƒZd
S )é    )Únnç        FÚ	drop_probÚtrainingc                 C   s`   |dks|s| S d| }| j d fd| jd   }|  |¡ |¡}|dkr*| |¡ | | }|S )Nr   é   r   )r   )ÚshapeÚndimÚ	new_emptyÚ
bernoulli_Údiv_)Úxr   r   Z	keep_probr   Zrandom_tensorÚoutput© r   ú=/data/cameron/moge_repo/moge/model/dinov2/layers/drop_path.pyÚ	drop_path   s   
r   c                       s*   e Zd ZdZd‡ fdd„	Zdd„ Z‡  ZS )ÚDropPathzXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).Nc                    s   t t| ƒ ¡  || _d S ©N)Úsuperr   Ú__init__r   )Úselfr   ©Ú	__class__r   r   r      s   
zDropPath.__init__c                 C   s   t || j| jƒS r   )r   r   r   )r   r   r   r   r   Úforward!   s   zDropPath.forwardr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__classcell__r   r   r   r   r      s    r   N)r   F)Útorchr   ÚfloatÚboolr   ÚModuler   r   r   r   r   Ú<module>   s   
