§
    ù²Åjz  ã                   ó>  — 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                             d¦  «          G d„ dej        ¦  «        Ze j                             d¦  «          G d„ de¦  «        ZdS )é    N)ÚnnÚTensoré   )Ú_log_api_usage_onceFç�íµ ÷Æ°>TÚinputÚpÚ
block_sizeÚinplaceÚepsÚtrainingÚreturnc                 óœ  — t           j                             ¦   «         s2t           j                             ¦   «         st	          t
          ¦  «         |dk     s|dk    rt          d|› d�¦  «        ‚| j        dk    rt          d| j        › d�¦  «        ‚|r|dk    r| S |                      ¦   «         \  }}}}	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        ¬
¦  «        }|                     |
¦  «         t          j        ||dz  gdz  d¬¦  «        }t          j        |d||f|dz  ¬¦  «        }d	|z
  }|                     ¦   «         ||                     ¦   «         z   z  }|r)|                      |¦  «                             |¦  «         n| |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                úKC:\Projects\Historical\venv\Lib\site-packages\torchvision/ops/drop_block.pyr$   r$   	   sõ  € õ& Œ9×!Ò!Ñ#Ô#ð *­E¬I×,@Ò,@Ñ,BÔ,Bð *Ý�LÑ)Ô)Ð)Øˆ3‚w€w�!�c’'�'ÝÐTÐPQÐTÐTÐTÑUÔUÐUØ„z�Q‚€ÝÐW¸u¼zÐWÐWÐWÑXÔXÐXØð �q˜C’x�xØˆà—’‘”�J€A€qˆ!ˆQÝ�Z  AÑ&Ô&€Jà�‰U�Q‰Y˜J¨™M¨q°:©~ÀÑ/AÀaÈ*ÁnÐWXÑFXÑ.YÑZÑ[€EÝŒK˜˜A˜q :™~°Ñ1°1°z±>ÀAÑ3EÐFÈeÌkÐbgÔbnÐoÑoÔo€EØ	×Ò�UÑÔÐåŒE�%˜*¨™/Ð*¨QÑ.°aÐ8Ñ8Ô8€EÝŒL˜ v¸JÈ
Ð;SÐ]gÐklÑ]lÐmÑmÔm€EØ�‰I€EØ—k’k‘m”m s¨U¯YªY©[¬[Ñ'8Ñ9€OØð 0Ø�
Š
�5ÑÔ×Ò˜Ñ/Ô/Ð/Ð/à˜‘ Ñ/ˆØ€Ló    c                 óÈ  — t           j                             ¦   «         s2t           j                             ¦   «         st	          t
          ¦  «         |dk     s|dk    rt          d|› d�¦  «        ‚| j        dk    rt          d| j        › d�¦  «        ‚|r|dk    r| S |                      ¦   «         \  }}}}	}
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        ¬
¦  «        }|                     |¦  «         t          j        ||dz  gdz  d¬¦  «        }t          j        |d|||f|dz  ¬¦  «        }d	|z
  }|                     ¦   «         ||                     ¦   «         z   z  }|r)|                      |¦  «                             |¦  «         n| |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/   r0   )r   r	   r
   r   r   r   r1   r2   ÚDr3   r4   r5   r6   r7   s                 r8   r>   r>   7   s0  € õ& Œ9×!Ò!Ñ#Ô#ð *­E¬I×,@Ò,@Ñ,BÔ,Bð *Ý�LÑ)Ô)Ð)Øˆ3‚w€w�!�c’'�'ÝÐTÐPQÐTÐTÐTÑUÔUÐUØ„z�Q‚€ÝÐW¸u¼zÐWÐWÐWÑXÔXÐXØð �q˜C’x�xØˆà—J’J‘L”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Ø	
ˆAˆq�:‰~ Ñ! 1 z¡>°AÑ#5°q¸:±~ÈÑ7IÐJÐRWÔR]ÐfkÔfrðñ ô €Eð 
×Ò�UÑÔÐåŒE�%˜*¨™/Ð*¨QÑ.°aÐ8Ñ8Ô8€EÝŒLØ�i¨j¸*ÀjÐ-QÐ[eÐijÑ[jðñ ô €Eð �‰I€EØ—k’k‘m”m s¨U¯YªY©[¬[Ñ'8Ñ9€OØð 0Ø�
Š
�5ÑÔ×Ò˜Ñ/Ô/Ð/Ð/à˜‘ Ñ/ˆØ€Lr9   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`.
    Fr   r	   r
   r   r   r   Nc                 ó€   •— t          ¦   «                              ¦   «          || _        || _        || _        || _        d S ©N)ÚsuperÚ__init__r	   r
   r   r   ©Úselfr	   r
   r   r   Ú	__class__s        €r8   rF   zDropBlock2d.__init__q   s9   ø€ Ý‰Œ×ÒÑÔÐàˆŒØ$ˆŒØˆŒØˆŒˆˆr9   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   ©rH   r   s     r8   ÚforwardzDropBlock2d.forwardy   ó(   € õ ˜E 4¤6¨4¬?¸D¼LÈ$Ì(ÐTXÔTaÑbÔbÐbr9   c                 óT   — | j         j        › d| j        › d| j        › d| j        › d�}|S )Nz(p=z, block_size=z
, inplace=ú))rI   Ú__name__r	   r
   r   )rH   Úss     r8   Ú__repr__zDropBlock2d.__repr__ƒ   s:   € ØŒ~Ô&ÐjÐj¨4¬6ÐjÐjÀÄÐjÐjÐ[_Ô[gÐjÐjÐjˆØˆr9   ©Fr   )rQ   Ú
__module__Ú__qualname__Ú__doc__ÚfloatÚintÚboolrF   r   rM   ÚstrrS   Ú__classcell__©rI   s   @r8   rB   rB   l   s³   ø€ € € € € ðð ðð ˜%ð ¨Sð ¸4ð Èeð Ð`dð ð ð ð ð ð ðc˜Vð c¨ð cð cð cð cð˜#ð ð ð ð ð ð ð ð r9   rB   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`.
    Fr   r	   r
   r   r   r   Nc                 óP   •— t          ¦   «                              ||||¦  «         d S rD   )rE   rF   rG   s        €r8   rF   zDropBlock3d.__init__�   s'   ø€ Ý‰Œ×Ò˜˜J¨°Ñ5Ô5Ð5Ð5Ð5r9   r   c                 ó\   — t          || j        | j        | j        | j        | j        ¦  «        S rK   )r>   r	   r
   r   r   r   rL   s     r8   rM   zDropBlock3d.forward“   rN   r9   rT   )rQ   rU   rV   rW   rX   rY   rZ   rF   r   rM   r\   r]   s   @r8   r_   r_   ‹   sœ   ø€ € € € € ðð ð6ð 6˜%ð 6¨Sð 6¸4ð 6Èeð 6Ð`dð 6ð 6ð 6ð 6ð 6ð 6ðc˜Vð c¨ð cð cð cð cð cð cð cð cr9   r_   )Fr   T)r    Útorch.fxÚtorch.nn.functionalr   Ú
functionalr+   r   Úutilsr   rX   rY   rZ   r$   r>   ÚfxÚwrapÚModulerB   r_   © r9   r8   ú<module>rj      s¤  ðØ €€€Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'ð koð+ð +Øð+Øð+Ø),ð+Ø7;ð+ØJOð+Øcgð+àð+ð +ð +ð +ð^ koð/ð /Øð/Øð/Ø),ð/Ø7;ð/ØJOð/Øcgð/àð/ð /ð /ð /ðd „‡‚ˆnÑ Ô Ð ðð ð ð ð �"”)ñ ô ð ð8 „‡‚ˆnÑ Ô Ð ðcð cð cð cð c�+ñ cô cð cð cð cr9   