
    |2g                     L    d dl mZ ddedefdZ G d dej
                        Zy)	    )nn	drop_probtrainingc                     |dk(  s|s| S d|z
  }| j                   d   fd| j                  dz
  z  z   }| j                  |      j                  |      }|dkD  r|j	                  |       | |z  }|S )N           r   )r   )shapendim	new_empty
bernoulli_div_)xr   r   	keep_probr	   random_tensoroutputs          M/home/cameronsmith/repos/FeatUp/featup/featurizers/dinov2/layers/drop_path.py	drop_pathr      sx    CxIIWWQZMDAFFQJ//EKK&11)<M39%FM    c                   *     e Zd ZdZd fd	Zd Z xZS )DropPathzXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).c                 8    t         t        |           || _        y N)superr   __init__r   )selfr   	__class__s     r   r   zDropPath.__init__   s    h&("r   c                 D    t        || j                  | j                        S r   )r   r   r   )r   r   s     r   forwardzDropPath.forward!   s    DNNDMM::r   r   )__name__
__module____qualname____doc__r   r   __classcell__)r   s   @r   r   r      s    b#;r   r   N)r   F)torchr   floatboolr   Moduler    r   r   <module>r)      s-    	E 	4 	;ryy ;r   