Ë
    þÍ:jß  ã                   ó>  — d dl Z d dlZ d dlmc mZ d dl mZmZ ddlmZ 	 ddede	de
ded	e	d
edefd„Z	 ddede	de
ded	e	d
edefd„Ze j                  j                  d«        G d„ dej                   «      Ze j                  j                  d«        G d„ de«      Zy)é    N)ÚnnÚTensoré   )Ú_log_api_usage_onceÚinputÚpÚ
block_sizeÚinplaceÚepsÚtrainingÚreturnc                 ór  — t         j                  j                  «       s-t         j                  j                  «       st	        t
        «       |dk  s|dkD  rt        d|› d�«      ‚| j                  dk7  rt        d| j                  › d�«      ‚|r|dk(  r| S | j                  «       \  }}}}	t        ||	|«      }||z  |	z  |dz  ||z
  d	z   |	|z
  d	z   z  z  z  }
t        j                  ||||z
  d	z   |	|z
  d	z   f| j                  | j                  ¬
«      }|j                  |
«       t        j                  ||dz  gdz  d¬«      }t        j                   |d||f|dz  ¬«      }d	|z
  }|j#                  «       ||j%                  «       z   z  }|r"| j'                  |«      j'                  |«       | S | |z  |z  } | S )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                úo/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torchvision/ops/drop_block.pyr#   r#   	   s³  € ô& �9‰9×!Ñ!Ô#¬E¯I©I×,@Ñ,@Ô,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€qˆ!ˆQÜ�Z  AÓ&€Jà�‰U�Q‰Y˜J¨™M¨q°:©~ÀÑ/AÀaÈ*ÁnÐWXÑFXÑ.YÑZÑ[€EÜ�K‰K˜˜A˜q :™~°Ñ1°1°z±>À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¨U¯Y©Y«[Ñ'8Ñ9€OÙØ�
‰
�5Ó×Ñ˜Ô/ð €Lð ˜‘ Ñ/ˆØ€Ló    c                 óž  — t         j                  j                  «       s-t         j                  j                  «       st	        t
        «       |dk  s|dkD  rt        d|› d�«      ‚| j                  dk7  rt        d| j                  › d�«      ‚|r|dk(  r| S | j                  «       \  }}}}	}
t        |||	|
«      }||z  |	z  |
z  |dz  ||z
  d	z   |	|z
  d	z   z  |
|z
  d	z   z  z  z  }t        j                  ||||z
  d	z   |	|z
  d	z   |
|z
  d	z   f| j                  | j                  ¬
«      }|j                  |«       t        j                  ||dz  gdz  d¬«      }t        j                   |d|||f|dz  ¬«      }d	|z
  }|j#                  «       ||j%                  «       z   z  }|r"| j'                  |«      j'                  |«       | S | |z  |z  } | S )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ç  € ô& �9‰9×!Ñ!Ô#¬E¯I©I×,@Ñ,@Ô,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€qˆ!ˆQ�Ü�Z  A qÓ)€Jà�‰U�Q‰Y˜‰] 
¨A¡°1°z±>ÀAÑ3EÈ!ÈjÉ.Ð[\ÑJ\Ñ2]ÐabÐeoÑaoÐrsÑasÑ2tÑuÑv€EÜ�K‰KØ	
ˆAˆq�:‰~ Ñ! 1 z¡>°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¨U¯Y©Y«[Ñ'8Ñ9€OÙØ�
‰
�5Ó×Ñ˜Ô/ð €Lð ˜‘ Ñ/ˆØ€Lr8   r#   c                   óV   ‡ — e Zd ZdZddededededdf
ˆ fd„Zd	edefd
„Z	de
fd„Zˆ xZS )ÚDropBlock2dz#
    See :func:`drop_block2d`.
    r   r	   r
   r   r   Nc                 óZ   •— t         ‰| �  «        || _        || _        || _        || _        y ©N)ÚsuperÚ__init__r   r	   r
   r   ©Úselfr   r	   r
   r   Ú	__class__s        €r7   rE   zDropBlock2d.__init__q   s*   ø€ Ü‰ÑÔàˆŒØ$ˆŒØˆŒØˆ�r8   r   c                 ó†   — t        || j                  | j                  | j                  | j                  | j
                  «      S ©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   ©rG   r   s     r7   ÚforwardzDropBlock2d.forwardy   ó0   € ô ˜E 4§6¡6¨4¯?©?¸D¿L¹LÈ$Ï(É(ÐTX×TaÑTaÓbÐbr8   c                 ó†   — | j                   j                  › d| j                  › d| j                  › d| j                  › d�}|S )Nz(p=z, block_size=z
, inplace=ú))rH   Ú__name__r   r	   r
   )rG   Úss     r7   Ú__repr__zDropBlock2d.__repr__ƒ   sC   € Ø�~‰~×&Ñ&Ð' s¨4¯6©6¨(°-ÀÇÁÐ?PÐPZÐ[_×[gÑ[gÐZhÐhiÐjˆØˆr8   ©Fç�íµ ÷Æ°>)rP   Ú
__module__Ú__qualname__Ú__doc__ÚfloatÚintÚboolrE   r   rL   ÚstrrR   Ú__classcell__©rH   s   @r7   rA   rA   l   sS   ø„ ññ˜%ð ¨Sð ¸4ð Èeð Ð`dõ ðc˜Vð c¨ó cð˜#÷ r8   rA   r=   c                   óJ   ‡ — e Zd ZdZddededededdf
ˆ fd„Zd	edefd
„Z	ˆ xZ
S )ÚDropBlock3dz#
    See :func:`drop_block3d`.
    r   r	   r
   r   r   Nc                 ó*   •— t         ‰| �  ||||«       y rC   )rD   rE   rF   s        €r7   rE   zDropBlock3d.__init__�   s   ø€ Ü‰Ñ˜˜J¨°Õ5r8   r   c                 ó†   — t        || j                  | j                  | j                  | j                  | j
                  «      S rJ   )r=   r   r	   r
   r   r   rK   s     r7   rL   zDropBlock3d.forward“   rM   r8   rS   )rP   rU   rV   rW   rX   rY   rZ   rE   r   rL   r\   r]   s   @r7   r_   r_   ‹   sG   ø„ ññ6˜%ð 6¨Sð 6¸4ð 6Èeð 6Ð`dõ 6ðc˜Vð c¨÷ cr8   r_   )FrT   T)r   Útorch.fxÚtorch.nn.functionalr   Ú
functionalr*   r   Úutilsr   rX   rY   rZ   r#   r=   ÚfxÚwrapÚModulerA   r_   © r8   r7   ú<module>rj      sã   ðÛ Û ß Ð ß å 'ð koñ+Øð+Øð+Ø),ð+Ø7;ð+ØJOð+Øcgð+àó+ð^ koñ/Øð/Øð/Ø),ð/Ø7;ð/ØJOð/Øcgð/àó/ðd ‡�‡�ˆnÔ ô�"—)‘)ô ð8 ‡�‡�ˆnÔ ôc�+õ cr8   