
    h                     F   S SK r S SKr S SKJs  Jr  S SK JrJr  SSKJr   SS\S\	S\
S\S	\	S
\S\4S jjr SS\S\	S\
S\S	\	S
\S\4S jjr\ R                  R                  S5         " S S\R                   5      r\ R                  R                  S5         " S S\5      rg)    N)nnTensor   )_log_api_usage_onceinputp
block_sizeinplaceepstrainingreturnc                 |   [         R                  R                  5       (       d2  [         R                  R                  5       (       d  [	        [
        5        US:  d  US:  a  [        SU S35      eU R                  S:w  a  [        SU R                   S35      eU(       a  US:X  a  U $ U R                  5       u  pgp[        X)U5      nX-  U	-  US-  X-
  S	-   X-
  S	-   -  -  -  n
[         R                  " XgX-
  S	-   X-
  S	-   4U R                  U R                  S
9nUR                  U
5        [        R                  " XS-  /S-  SS9n[        R                   " USX"4US-  S9nS	U-
  nUR#                  5       XKR%                  5       -   -  nU(       a"  U R'                  U5      R'                  U5        U $ X-  U-  n U $ )a  
Implements DropBlock2d from `"DropBlock: A regularization method for convolutional networks"
<https://arxiv.org/abs/1810.12890>`.

Args:
    input (Tensor[N, C, H, W]): The input tensor or 4-dimensions with the first one
                being its batch i.e. a batch with ``N`` rows.
    p (float): Probability of an element to be dropped.
    block_size (int): Size of the block to drop.
    inplace (bool): If set to ``True``, will do this operation in-place. Default: ``False``.
    eps (float): A value added to the denominator for numerical stability. Default: 1e-6.
    training (bool): apply dropblock if is ``True``. Default: ``True``.

Returns:
    Tensor[N, C, H, W]: The randomly zeroed tensor after dropblock.
              ?4drop probability has to be between 0 and 1, but got .   z#input should be 4 dimensional. Got  dimensions.r      dtypedevicer   value)r   r   stridekernel_sizepadding)torchjitis_scripting
is_tracingr   drop_block2d
ValueErrorndimsizeminemptyr   r   
bernoulli_Fpad
max_pool2dnumelsummul_)r   r   r	   r
   r   r   NCHWgammanoisenormalize_scales                R/var/www/auris/envauris/lib/python3.13/site-packages/torchvision/ops/drop_block.pyr#   r#   	   s   & 99!!##EII,@,@,B,BL)3w!c'OPQsRSTUUzzQ>uzzl,WXXqCxJA!ZA&JUQYJMq~/AanWXFX.YZ[EKKq~11>A3EFekkbgbnbnoE	UEE%/*Q.a8ELLvJ;S]gkl]lmEIEkkmsYY['89O

5/ L /L    c                    [         R                  R                  5       (       d2  [         R                  R                  5       (       d  [	        [
        5        US:  d  US:  a  [        SU S35      eU R                  S:w  a  [        SU R                   S35      eU(       a  US:X  a  U $ U R                  5       u  pgpn
[        X(X5      nX-  U	-  U
-  US-  X-
  S	-   X-
  S	-   -  X-
  S	-   -  -  -  n[         R                  " XgX-
  S	-   X-
  S	-   X-
  S	-   4U R                  U R                  S
9nUR                  U5        [        R                  " XS-  /S-  SS9n[        R                   " USX"U4US-  S9nS	U-
  nUR#                  5       XLR%                  5       -   -  nU(       a"  U R'                  U5      R'                  U5        U $ X-  U-  n U $ )a  
Implements DropBlock3d from `"DropBlock: A regularization method for convolutional networks"
<https://arxiv.org/abs/1810.12890>`.

Args:
    input (Tensor[N, C, D, H, W]): The input tensor or 5-dimensions with the first one
                being its batch i.e. a batch with ``N`` rows.
    p (float): Probability of an element to be dropped.
    block_size (int): Size of the block to drop.
    inplace (bool): If set to ``True``, will do this operation in-place. Default: ``False``.
    eps (float): A value added to the denominator for numerical stability. Default: 1e-6.
    training (bool): apply dropblock if is ``True``. Default: ``True``.

Returns:
    Tensor[N, C, D, H, W]: The randomly zeroed tensor after dropblock.
r   r   r   r      z#input should be 5 dimensional. Got r      r   r   r      r   r   )r   r   r   r   )r   r    r!   r"   r   drop_block3dr$   r%   r&   r'   r(   r   r   r)   r*   r+   
max_pool3dr-   r.   r/   )r   r   r	   r
   r   r   r0   r1   Dr2   r3   r4   r5   r6   s                 r7   r=   r=   7   s   & 99!!##EII,@,@,B,BL)3w!c'OPQsRSTUUzzQ>uzzl,WXXqCxJJLMA!ZA)JUQY]
A1>A3E!.[\J\2]abaorsas2tuvEKK	
q~!1>A#5q~7IJRWR]R]fkfrfrE 
UEE%/*Q.a8ELLijj-Q[eij[jE IEkkmsYY['89O

5/ L /Lr8   r#   c                   h   ^  \ rS rSrSrSS\S\S\S\SS4
U 4S	 jjjrS
\	S\	4S jr
S\4S jrSrU =r$ )DropBlock2dl   z
See :func:`drop_block2d`.
r   r	   r
   r   r   Nc                 R   > [         TU ]  5         Xl        X l        X0l        X@l        g N)super__init__r   r	   r
   r   selfr   r	   r
   r   	__class__s        r7   rF   DropBlock2d.__init__q   s"    $r8   r   c                     [        XR                  U R                  U R                  U R                  U R
                  5      $ z
Args:
    input (Tensor): Input feature map on which some areas will be randomly
        dropped.
Returns:
    Tensor: The tensor after DropBlock layer.
)r#   r   r	   r
   r   r   rH   r   s     r7   forwardDropBlock2d.forwardy   .     E664??DLL$((TXTaTabbr8   c                     U R                   R                   SU R                   SU R                   SU R                   S3nU$ )Nz(p=z, block_size=z
, inplace=))rI   __name__r   r	   r
   )rH   ss     r7   __repr__DropBlock2d.__repr__   sC    ~~&&'s466(-?PPZ[_[g[gZhhijr8   )r	   r   r
   r   Fư>)rS   
__module____qualname____firstlineno____doc__floatintboolrF   r   rN   strrU   __static_attributes____classcell__rI   s   @r7   rA   rA   l   s]    % S 4 e `d  cV c c#  r8   rA   r=   c                   Z   ^  \ rS rSrSrSS\S\S\S\SS4
U 4S	 jjjrS
\	S\	4S jr
SrU =r$ )DropBlock3d   z
See :func:`drop_block3d`.
r   r	   r
   r   r   Nc                 &   > [         TU ]  XX45        g rD   )rE   rF   rG   s        r7   rF   DropBlock3d.__init__   s    5r8   r   c                     [        XR                  U R                  U R                  U R                  U R
                  5      $ rL   )r=   r   r	   r
   r   r   rM   s     r7   rN   DropBlock3d.forward   rP   r8    rW   )rS   rY   rZ   r[   r\   r]   r^   r_   rF   r   rN   ra   rb   rc   s   @r7   re   re      sR    6% 6S 64 6e 6`d 6 6cV c c cr8   re   )FrX   T)r   torch.fxtorch.nn.functionalr   
functionalr*   r   utilsr   r]   r^   r_   r#   r=   fxwrapModulerA   re   rk   r8   r7   <module>rs      s         ' ko+++),+7;+JO+cg++^ ko///),/7;/JO/cg//d n ")) 8 n c+ cr8   