Ë
    DêñiÇ  ã                   ó>  — 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                 ó   — 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        ||	|«      }|dz  d	k(  rt        d
|› d�«      ‚||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   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                ú\/var/www/pod-logistic/pod-ai/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Ø�A�~˜ÒÜÐ9¸*¸À_ÐUÓVÐVð �‰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        |||	|
«      }|dz  d	k(  rt        d
|› d�«      ‚||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#   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Üœ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Ø�A�~˜ÒÜÐ9¸*¸À_ÐUÓVÐVð �‰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ð ˜‘ Ñ/ˆØ€Lr:   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        €r9   rG   zDropBlock2d.__init__w   s*   ø€ Ü‰ÑÔàˆŒØ$ˆŒØˆŒØˆ�r:   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   ©rI   r   s     r9   ÚforwardzDropBlock2d.forward   ó0   € ô ˜E 4§6¡6¨4¯?©?¸D¿L¹LÈ$Ï(É(ÐTX×TaÑTaÓbÐbr:   c                 ó†   — | j                   j                  › d| j                  › d| j                  › d| j                  › d�}|S )Nz(p=z, block_size=z
, inplace=ú))rJ   Ú__name__r   r	   r
   )rI   Úss     r9   Ú__repr__zDropBlock2d.__repr__‰   sC   € Ø�~‰~×&Ñ&Ð' s¨4¯6©6¨(°-ÀÇÁÐ?PÐPZÐ[_×[gÑ[gÐZhÐhiÐjˆØˆr:   ©Fç�íµ ÷Æ°>)rR   Ú
__module__Ú__qualname__Ú__doc__ÚfloatÚintÚboolrG   r   rN   ÚstrrT   Ú__classcell__©rJ   s   @r9   rC   rC   r   sS   ø„ ññ˜%ð ¨Sð ¸4ð Èeð Ð`dõ ðc˜Vð c¨ó cð˜#÷ r:   rC   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 rE   )rF   rG   rH   s        €r9   rG   zDropBlock3d.__init__–   s   ø€ Ü‰Ñ˜˜J¨°Õ5r:   r   c                 ó†   — t        || j                  | j                  | j                  | j                  | j
                  «      S rL   )r?   r   r	   r
   r   r   rM   s     r9   rN   zDropBlock3d.forward™   rO   r:   rU   )rR   rW   rX   rY   rZ   r[   r\   rG   r   rN   r^   r_   s   @r9   ra   ra   ‘   sG   ø„ ññ6˜%ð 6¨Sð 6¸4ð 6Èeð 6Ð`dõ 6ðc˜Vð c¨÷ cr:   ra   )FrV   T)r!   Útorch.fxÚtorch.nn.functionalr   Ú
functionalr,   r   Úutilsr   rZ   r[   r\   r%   r?   ÚfxÚwrapÚModulerC   ra   © r:   r9   ú<module>rl      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:   