ó
    EñiÇ  ã                   ó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US-  S	:X  a  [        S
U S35      e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                  " X²S-  /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   r   úblock size should be odd. Got ú which is even.é   ©ÚdtypeÚdevice©Ú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                ÚW/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/ops/drop_block.pyr%   r%   	   sÂ  € ô& �9‰9×!Ñ!×#Ñ#¬E¯I©I×,@Ñ,@×,BÑ,BÜœLÔ)Øˆ3ƒw�!�c“'ÜÐOÐPQÈsÐRSÐTÓUÐUØ‡z�z�QƒÜÐ>¸u¿z¹z¸lÈ,ÐWÓXÐXÞ�q˜C“xØˆà—‘“�J€Aˆ!Ü�Z AÓ&€JØ�A�~˜ÓÜÐ9¸*¸À_ÐUÓVÐVð ‰U�Q‰Y˜J¨™M¨q©~ÀÑ/AÀaÁnÐWXÑFXÑ.YÑZÑ[€EÜ�KŠK˜˜q™~°Ñ1°1±>ÀAÑ3EÐFÈeÏkÉkÐbg×bnÑbnÑo€EØ	×Ñ�UÔä�EŠE�%¨™/Ð*¨QÑ.°aÑ8€EÜ�LŠL˜ v¸JÐ;SÐ]gÐklÑ]lÑm€EØ�‰I€EØ—k‘k“m s¯Y©Y«[Ñ'8Ñ9€OÞØ�
‰
�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  pgp‰n
[        X(Xš5      nUS-  S	:X  a  [        S
U S35      e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                  " XÂS-  /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#   r$   r   Údrop_block3dr&   r'   r(   r)   r*   r   r   r+   r,   r-   Ú
max_pool3dr/   r0   r1   )r   r   r	   r
   r   r   r2   r3   ÚDr4   r5   r6   r7   r8   s                 r9   r?   r?   :   sï  € ô& �9‰9×!Ñ!×#Ñ#¬E¯I©I×,@Ñ,@×,BÑ,BÜœLÔ)Øˆ3ƒw�!�c“'ÜÐOÐPQÈsÐRSÐTÓUÐUØ‡z�z�QƒÜÐ>¸u¿z¹z¸lÈ,ÐWÓXÐXÞ�q˜C“xØˆà—J‘J“L�M€Aˆ!�Ü�Z AÓ)€JØ�A�~˜ÓÜÐ9¸*¸À_ÐUÓVÐVð ‰U�Q‰Y˜‰] 
¨A¡°1±>ÀAÑ3EÈ!É.Ð[\ÑJ\Ñ2]ÐabÑaoÐrsÑasÑ2tÑuÑv€EÜ�KŠKØ	
ˆq‰~ Ñ! 1¡>°AÑ#5°q±~ÈÑ7IÐJÐRW×R]ÑR]Ðfk×frÑfrñ€Eð 
×Ñ�UÔä�EŠE�%¨™/Ð*¨QÑ.°aÑ8€EÜ�LŠLØ�i¨jÀjÐ-QÐ[eÐijÑ[jñ€Eð �‰I€EØ—k‘k“m s¯Y©Y«[Ñ'8Ñ9€OÞØ�
‰
�5Ó×Ñ˜Ô/ð €Lð ‘ Ñ/ˆØ€Lr:   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$ )ÚDropBlock2dér   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        €r9   rH   ÚDropBlock2d.__init__w   s"   ø€ Ü‰ÑÔàŒØ$ŒØŒØ�r:   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   ©rJ   r   s     r9   ÚforwardÚDropBlock2d.forward   ó.   € ô ˜E§6¡6¨4¯?©?¸D¿L¹LÈ$Ï(É(ÐTX×TaÑTaÓbÐbr:   c                 ó†   • U R                   R                   SU R                   SU R                   SU R                   S3nU$ )Nz(p=z, block_size=z
, inplace=Ú))rK   Ú__name__r   r	   r
   )rJ   Úss     r9   Ú__repr__ÚDropBlock2d.__repr__‰   sC   € Ø�~‰~×&Ñ&Ð' s¨4¯6©6¨(°-ÀÇÁÐ?PÐPZÐ[_×[gÑ[gÐZhÐhiÐjˆØˆr:   )r	   r   r
   r   ©Fç�íµ ÷Æ°>)rU   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚfloatÚintÚboolrH   r   rP   ÚstrrW   Ú__static_attributes__Ú__classcell__©rK   s   @r9   rC   rC   r   s]   ø† ññ˜%ð ¨Sð ¸4ð Èeð Ð`d÷ ð ðc˜Vð c¨ô cð˜#÷ ò r:   rC   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 rF   )rG   rH   rI   s        €r9   rH   ÚDropBlock3d.__init__–   s   ø€ Ü‰Ñ˜¨Õ5r:   r   c                 ó„   • [        XR                  U R                  U R                  U R                  U R
                  5      $ rN   )r?   r   r	   r
   r   r   rO   s     r9   rP   ÚDropBlock3d.forward™   rR   r:   © rY   )rU   r[   r\   r]   r^   r_   r`   ra   rH   r   rP   rc   rd   re   s   @r9   rg   rg   ‘   sR   ø† ññ6˜%ð 6¨Sð 6¸4ð 6Èeð 6Ð`d÷ 6ð 6ðc˜Vð c¨÷ cò cr:   rg   )FrZ   T)r!   Útorch.fxÚtorch.nn.functionalr   Ú
functionalr,   r   Úutilsr   r_   r`   ra   r%   r?   ÚfxÚwrapÚModulerC   rg   rm   r:   r9   Ú<module>ru      sã   ðÛ Û ß Ð ß å 'ð koñ.Øð.Øð.Ø),ð.Ø7;ð.ØJOð.Øcgð.àõ.ðd koñ2Øð2Øð2Ø),ð2Ø7;ð2ØJOð2Øcgð2àõ2ðj ‡�‡�ˆnÔ ô�"—)‘)ô ð8 ‡�‡�ˆnÔ ôc�+õ cr:   