ó
    Eñi¼  ã                   ó²   • S SK r S SKr S SK JrJr  SSKJr  SS\S\S\S\S	\4
S
 jjr	\ R                  R                  S5         " S S\R                  5      rg)é    N)ÚnnÚTensoré   )Ú_log_api_usage_onceÚinputÚpÚmodeÚtrainingÚreturnc                 óP  • [         R                  R                  5       (       d2  [         R                  R                  5       (       d  [	        [
        5        US:  d  US:”  a  [        SU 35      eUS;  a  [        SU 35      eU(       a  US:X  a  U $ SU-
  nUS:X  a%  U R                  S   /S/U R                  S-
  -  -   nOS/U R                  -  n[         R                  " XPR                  U R                  S	9nUR                  U5      nUS:”  a  UR                  U5        X-  $ )
a¾  
Implements the Stochastic Depth from `"Deep Networks with Stochastic Depth"
<https://arxiv.org/abs/1603.09382>`_ used for randomly dropping residual
branches of residual architectures.

Args:
    input (Tensor[N, ...]): The input tensor or arbitrary dimensions with the first one
                being its batch i.e. a batch with ``N`` rows.
    p (float): probability of the input to be zeroed.
    mode (str): ``"batch"`` or ``"row"``.
                ``"batch"`` randomly zeroes the entire input, ``"row"`` zeroes
                randomly selected rows from the batch.
    training: apply stochastic depth if is ``True``. Default: ``True``

Returns:
    Tensor[N, ...]: The randomly zeroed tensor.
g        g      ð?z4drop probability has to be between 0 and 1, but got )ÚbatchÚrowz0mode has to be either 'batch' or 'row', but got r   r   é   )ÚdtypeÚdevice)ÚtorchÚjitÚis_scriptingÚ
is_tracingr   Ústochastic_depthÚ
ValueErrorÚshapeÚndimÚemptyr   r   Ú
bernoulli_Údiv_)r   r   r	   r
   Úsurvival_rateÚsizeÚnoises          Ú]/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/ops/stochastic_depth.pyr   r      s  € ô$ �9‰9×!Ñ!×#Ñ#¬E¯I©I×,@Ñ,@×,BÑ,BÜÔ,Ô-Øˆ3ƒw�!�c“'ÜÐOÐPQÈsÐSÓTÐTØÐ#Ó#ÜÐKÈDÈ6ÐRÓSÐSÞ�q˜C“xØˆà˜!‘G€MØˆuƒ}Ø—‘˜A‘Ð 1 #¨¯©°a©Ñ"8Ñ8‰àˆs�U—Z‘ZÑˆÜ�KŠK˜§K¡K¸¿¹ÑE€EØ×Ñ˜]Ó+€EØ�sÓØ�
‰
�=Ô!Ø‰=Ðó    r   c                   ó\   ^ • \ rS rSrSrS\S\SS4U 4S jjrS\S\4S	 jr	S\4S
 jr
SrU =r$ )ÚStochasticDepthé2   z
See :func:`stochastic_depth`.
r   r	   r   Nc                 óP   >• [         TU ]  5         [        U 5        Xl        X l        g ©N)ÚsuperÚ__init__r   r   r	   )Úselfr   r	   Ú	__class__s      €r    r(   ÚStochasticDepth.__init__7   s    ø€ Ü‰ÑÔÜ˜DÔ!ØŒØ�	r!   r   c                 óX   • [        XR                  U R                  U R                  5      $ r&   )r   r   r	   r
   )r)   r   s     r    ÚforwardÚStochasticDepth.forward=   s   € Ü §v¡v¨t¯y©y¸$¿-¹-ÓHÐHr!   c                 ól   • U R                   R                   SU R                   SU R                   S3nU$ )Nz(p=z, mode=Ú))r*   Ú__name__r   r	   )r)   Úss     r    Ú__repr__ÚStochasticDepth.__repr__@   s2   € Ø�~‰~×&Ñ&Ð' s¨4¯6©6¨(°'¸$¿)¹)¸ÀAÐFˆØˆr!   )r	   r   )r1   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚfloatÚstrr(   r   r-   r3   Ú__static_attributes__Ú__classcell__)r*   s   @r    r#   r#   2   sI   ø† ñð˜%ð  sð ¨t÷ ðI˜Vð I¨ô Ið˜#÷ ò r!   r#   )T)r   Útorch.fxr   r   Úutilsr   r9   r:   Úboolr   ÚfxÚwrapÚModuler#   © r!   r    Ú<module>rD      s^   ðÛ Û ß å 'ñ$˜Fð $ uð $°Cð $À4ð $ÐSYõ $ðN ‡�‡�Ð Ô !ô�b—i‘iõ r!   