§
    ù²ÅjD6  ã                   óœ  — d dl Z d dlmZmZmZmZmZmZ d dlZd dlm	Z	 ddl
mZmZ ej        j        j        Z G d„ dej        j        ¦  «        Z G d„ d	ej        j        ¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Z G d„ dej        j        ¦  «        Z G d„ dej        j        ¦  «        Z G d„ dej        j        ¦  «        ZdS )é    N)ÚCallableÚListÚOptionalÚSequenceÚTupleÚUnion)ÚTensoré   )Ú_log_api_usage_onceÚ_make_ntuplec                   ó˜   ‡ — e Zd ZdZ	 ddedefˆ fd„Zdededed	e	d
e
e         de
e         de
e         fˆ fd„Zdedefd„Zdefd„Zˆ xZS )ÚFrozenBatchNorm2da!  
    BatchNorm2d where the batch statistics and the affine parameters are fixed

    Args:
        num_features (int): Number of features ``C`` from an expected input of size ``(N, C, H, W)``
        eps (float): a value added to the denominator for numerical stability. Default: 1e-5
    çñhãˆµøä>Únum_featuresÚepsc                 ó´  •— t          ¦   «                              ¦   «          t          | ¦  «         || _        |                      dt          j        |¦  «        ¦  «         |                      dt          j        |¦  «        ¦  «         |                      dt          j        |¦  «        ¦  «         |                      dt          j        |¦  «        ¦  «         d S )NÚweightÚbiasÚrunning_meanÚrunning_var)ÚsuperÚ__init__r   r   Úregister_bufferÚtorchÚonesÚzeros)Úselfr   r   Ú	__class__s      €úEC:\Projects\Historical\venv\Lib\site-packages\torchvision/ops/misc.pyr   zFrozenBatchNorm2d.__init__   s¶   ø€ õ
 	‰Œ×ÒÑÔÐÝ˜DÑ!Ô!Ð!ØˆŒØ×Ò˜X¥u¤z°,Ñ'?Ô'?Ñ@Ô@Ð@Ø×Ò˜V¥U¤[°Ñ%>Ô%>Ñ?Ô?Ð?Ø×Ò˜^­U¬[¸Ñ-FÔ-FÑGÔGÐGØ×Ò˜]­E¬J°|Ñ,DÔ,DÑEÔEÐEÐEÐEó    Ú
state_dictÚprefixÚlocal_metadataÚstrictÚmissing_keysÚunexpected_keysÚ
error_msgsc           	      ón   •— |dz   }||v r||= t          ¦   «                              |||||||¦  «         d S )NÚnum_batches_tracked)r   Ú_load_from_state_dict)
r   r!   r"   r#   r$   r%   r&   r'   Únum_batches_tracked_keyr   s
            €r   r*   z'FrozenBatchNorm2d._load_from_state_dict#   s[   ø€ ð #)Ð+@Ñ"@ÐØ" jÐ0Ð0ØÐ2Ð3å‰Œ×%Ò%Ø˜ °¸ÀoÐWañ	
ô 	
ð 	
ð 	
ð 	
r    ÚxÚreturnc                 óH  — | j                              dddd¦  «        }| j                             dddd¦  «        }| j                             dddd¦  «        }| j                             dddd¦  «        }||| j        z                        ¦   «         z  }|||z  z
  }||z  |z   S )Né   éÿÿÿÿ)r   Úreshaper   r   r   r   Úrsqrt)r   r,   ÚwÚbÚrvÚrmÚscaler   s           r   ÚforwardzFrozenBatchNorm2d.forward5   sª   € ð ŒK×Ò  2 q¨!Ñ,Ô,ˆØŒI×Ò˜a  Q¨Ñ*Ô*ˆØÔ×%Ò% a¨¨Q°Ñ2Ô2ˆØÔ×&Ò& q¨"¨a°Ñ3Ô3ˆØ�R˜$œ(‘]×)Ò)Ñ+Ô+Ñ+ˆØ�2˜‘:‰~ˆØ�5‰y˜4ÑÐr    c                 óV   — | j         j        › d| j        j        d         › d| j        › d�S )Nú(r   z, eps=ú))r   Ú__name__r   Úshaper   )r   s    r   Ú__repr__zFrozenBatchNorm2d.__repr__@   s2   € Ø”.Ô)ÐSÐS¨D¬KÔ,=¸aÔ,@ÐSÐSÈÌÐSÐSÐSÐSr    )r   )r<   Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatr   ÚdictÚstrÚboolr   r*   r	   r8   r>   Ú__classcell__©r   s   @r   r   r      s   ø€ € € € € ðð ð ðFð FàðFð ðFð Fð Fð Fð Fð Fð
àð
ð ð
ð ð	
ð
 ð
ð ˜3”ið
ð ˜cœð
ð ˜”Ið
ð 
ð 
ð 
ð 
ð 
ð$	 ˜ð 	  Fð 	 ð 	 ð 	 ð 	 ðT˜#ð Tð Tð Tð Tð Tð Tð Tð Tr    r   c                   óÐ  ‡ — e Zd Zddddej        j        ej        j        dddej        j        f
dedede	ee
edf         f         d	e	ee
edf         f         d
ee	ee
edf         ef                  dedeedej        j        f                  deedej        j        f                  de	ee
edf         f         dee         dee         dedej        j        f         ddfˆ fd„Zˆ xZS )ÚConvNormActivationé   r/   NTÚin_channelsÚout_channelsÚkernel_size.ÚstrideÚpaddingÚgroupsÚ
norm_layerÚactivation_layerÚdilationÚinplacer   Ú
conv_layerr-   c           
      óÖ  •‡‡	— |€²t          ‰t          ¦  «        r!t          ‰	t          ¦  «        r‰dz
  dz  ‰	z  }n|t          ‰t          ¦  «        rt          ‰¦  «        nt          ‰	¦  «        }t	          ‰|¦  «        Št	          ‰	|¦  «        Š	t          ˆ	ˆfd„t          |¦  «        D ¦   «         ¦  «        }|€|d u } |||‰||‰	||¬¦  «        g}|�|                      ||¦  «        ¦  «         |�#|
€i nd|
i}|                      |di |¤Ž¦  «          t          ¦   «         j	        |Ž  t          | ¦  «         || _        | j        t          k    rt          j        d¦  «         d S d S )Nr/   r
   c              3   óF   •K  — | ]}‰|         d z
  dz  ‰|         z  V — ŒdS )r/   r
   N© )Ú.0ÚirT   rN   s     €€r   ú	<genexpr>z.ConvNormActivation.__init__.<locals>.<genexpr>\   s:   øè è € ÐbÐbÈA ¨Q¤°!Ñ!3¸Ñ 9¸HÀQ¼KÑ GÐbÐbÐbÐbÐbÐbr    )rT   rQ   r   rU   zhDon't use ConvNormActivation directly, please use Conv2dNormActivation and Conv3dNormActivation instead.rY   )Ú
isinstancerB   r   Úlenr   ÚtupleÚrangeÚappendr   r   r   rM   r   rJ   ÚwarningsÚwarn)r   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   r   rV   Ú	_conv_dimÚlayersÚparamsr   s      `     `      €r   r   zConvNormActivation.__init__E   sÃ  øøø€ ð  ˆ?Ý˜+¥sÑ+Ô+ð cµ
¸8ÅSÑ0IÔ0Ið cØ&¨™?¨qÑ0°8Ñ;��å0:¸;ÍÑ0QÔ0QÐd�C Ñ,Ô,Ð,ÕWZÐ[cÑWdÔWd�	Ý*¨;¸	ÑBÔB�Ý'¨°)Ñ<Ô<�ÝÐbÐbÐbÐbÐbÕQVÐW`ÑQaÔQaÐbÑbÔbÑbÔb�Øˆ<Ø Ð%ˆDð ˆJØØØØØØ!ØØð	ñ 	ô 	ð
ˆð Ð!Ø�MŠM˜*˜* \Ñ2Ô2Ñ3Ô3Ð3àÐ'Ø"˜?�R�R°¸GÐ0DˆFØ�MŠMÐ*Ð*Ð4Ð4¨VÐ4Ð4Ñ5Ô5Ð5Ø�‰ŒÔ˜&Ð!Ð!Ý˜DÑ!Ô!Ð!Ø(ˆÔàŒ>Õ/Ò/Ð/ÝŒMØzñô ð ð ð ð 0Ð/r    )r<   r?   r@   r   ÚnnÚBatchNorm2dÚReLUÚConv2drB   r   r   r   rE   r   ÚModulerF   r   rG   rH   s   @r   rJ   rJ   D   sz  ø€ € € € € ð
 45Ø./Ø>BØØ?D¼xÔ?SØEJÄXÄ]Ø01Ø"&Ø#Ø5:´X´_ð5ð 5àð5ð ð5ð ˜3  c¨3 h¤Ð/Ô0ð	5ð
 �c˜5  c œ?Ð*Ô+ð5ð ˜%  U¨3°¨8¤_°cÐ 9Ô:Ô;ð5ð ð5ð ˜X c¨5¬8¬?Ð&:Ô;Ô<ð5ð # 8¨C°´´Ð,@Ô#AÔBð5ð ˜˜U 3¨ 8œ_Ð,Ô-ð5ð ˜$”ð5ð �tŒnð5ð ˜S %¤(¤/Ð1Ô2ð5ð 
ð5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5r    rJ   c                   ó–  ‡ — e Zd ZdZddddej        j        ej        j        dddf	dedede	ee
eef         f         d	e	ee
eef         f         d
ee	ee
eef         ef                  dedeedej        j        f                  deedej        j        f                  de	ee
eef         f         dee         dee         ddfˆ fd„Zˆ xZS )ÚConv2dNormActivationaë  
    Configurable block used for Convolution2d-Normalization-Activation blocks.

    Args:
        in_channels (int): Number of channels in the input image
        out_channels (int): Number of channels produced by the Convolution-Normalization-Activation block
        kernel_size: (int, optional): Size of the convolving kernel. Default: 3
        stride (int, optional): Stride of the convolution. Default: 1
        padding (int, tuple or str, optional): Padding added to all four sides of the input. Default: None, in which case it will be calculated as ``padding = (kernel_size - 1) // 2 * dilation``
        groups (int, optional): Number of blocked connections from input channels to output channels. Default: 1
        norm_layer (Callable[..., torch.nn.Module], optional): Norm layer that will be stacked on top of the convolution layer. If ``None`` this layer won't be used. Default: ``torch.nn.BatchNorm2d``
        activation_layer (Callable[..., torch.nn.Module], optional): Activation function which will be stacked on top of the normalization layer (if not None), otherwise on top of the conv layer. If ``None`` this layer won't be used. Default: ``torch.nn.ReLU``
        dilation (int): Spacing between kernel elements. Default: 1
        inplace (bool): Parameter for the activation layer, which can optionally do the operation in-place. Default ``True``
        bias (bool, optional): Whether to use bias in the convolution layer. By default, biases are included if ``norm_layer is None``.

    rK   r/   NTrL   rM   rN   rO   rP   rQ   rR   .rS   rT   rU   r   r-   c                 ó~   •— t          ¦   «                              |||||||||	|
|t          j        j        ¦  «         d S ©N)r   r   r   rg   rj   ©r   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   r   r   s               €r   r   zConv2dNormActivation.__init__�   óS   ø€ õ 	‰Œ×ÒØØØØØØØØØØØÝŒHŒOñ	
ô 	
ð 	
ð 	
ð 	
r    )r<   r?   r@   rA   r   rg   rh   ri   rB   r   r   r   rE   r   rk   rF   r   rG   rH   s   @r   rm   rm   }   se  ø€ € € € € ðð ð, 45Ø./Ø>BØØ?D¼xÔ?SØEJÄXÄ]Ø01Ø"&Ø#ð
ð 
àð
ð ð
ð ˜3  c¨3 h¤Ð/Ô0ð	
ð
 �c˜5  c œ?Ð*Ô+ð
ð ˜%  U¨3°¨8¤_°cÐ 9Ô:Ô;ð
ð ð
ð ˜X c¨5¬8¬?Ð&:Ô;Ô<ð
ð # 8¨C°´´Ð,@Ô#AÔBð
ð ˜˜U 3¨ 8œ_Ð,Ô-ð
ð ˜$”ð
ð �tŒnð
ð 
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r    rm   c                   óž  ‡ — e Zd ZdZddddej        j        ej        j        dddf	dedede	ee
eeef         f         d	e	ee
eeef         f         d
ee	ee
eeef         ef                  dedeedej        j        f                  deedej        j        f                  de	ee
eeef         f         dee         dee         ddfˆ fd„Zˆ xZS )ÚConv3dNormActivationaë  
    Configurable block used for Convolution3d-Normalization-Activation blocks.

    Args:
        in_channels (int): Number of channels in the input video.
        out_channels (int): Number of channels produced by the Convolution-Normalization-Activation block
        kernel_size: (int, optional): Size of the convolving kernel. Default: 3
        stride (int, optional): Stride of the convolution. Default: 1
        padding (int, tuple or str, optional): Padding added to all four sides of the input. Default: None, in which case it will be calculated as ``padding = (kernel_size - 1) // 2 * dilation``
        groups (int, optional): Number of blocked connections from input channels to output channels. Default: 1
        norm_layer (Callable[..., torch.nn.Module], optional): Norm layer that will be stacked on top of the convolution layer. If ``None`` this layer won't be used. Default: ``torch.nn.BatchNorm3d``
        activation_layer (Callable[..., torch.nn.Module], optional): Activation function which will be stacked on top of the normalization layer (if not None), otherwise on top of the conv layer. If ``None`` this layer won't be used. Default: ``torch.nn.ReLU``
        dilation (int): Spacing between kernel elements. Default: 1
        inplace (bool): Parameter for the activation layer, which can optionally do the operation in-place. Default ``True``
        bias (bool, optional): Whether to use bias in the convolution layer. By default, biases are included if ``norm_layer is None``.
    rK   r/   NTrL   rM   rN   rO   rP   rQ   rR   .rS   rT   rU   r   r-   c                 ó~   •— t          ¦   «                              |||||||||	|
|t          j        j        ¦  «         d S ro   )r   r   r   rg   ÚConv3drp   s               €r   r   zConv3dNormActivation.__init__Á   rq   r    )r<   r?   r@   rA   r   rg   ÚBatchNorm3dri   rB   r   r   r   rE   r   rk   rF   r   rG   rH   s   @r   rs   rs   ¯   sq  ø€ € € € € ðð ð* 9:Ø34ØCGØØ?D¼xÔ?SØEJÄXÄ]Ø56Ø"&Ø#ð
ð 
àð
ð ð
ð ˜3  c¨3° mÔ 4Ð4Ô5ð	
ð
 �c˜5  c¨3 Ô/Ð/Ô0ð
ð ˜%  U¨3°°S¨=Ô%9¸3Ð >Ô?Ô@ð
ð ð
ð ˜X c¨5¬8¬?Ð&:Ô;Ô<ð
ð # 8¨C°´´Ð,@Ô#AÔBð
ð ˜˜U 3¨¨S =Ô1Ð1Ô2ð
ð ˜$”ð
ð �tŒnð
ð 
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r    rs   c                   óÎ   ‡ — e Zd ZdZej        j        ej        j        fdedede	dej        j
        f         de	dej        j
        f         ddf
ˆ fd	„Zd
edefd„Zd
edefd„Zˆ xZS )ÚSqueezeExcitationaE  
    This block implements the Squeeze-and-Excitation block from https://arxiv.org/abs/1709.01507 (see Fig. 1).
    Parameters ``activation``, and ``scale_activation`` correspond to ``delta`` and ``sigma`` in eq. 3.

    Args:
        input_channels (int): Number of channels in the input image
        squeeze_channels (int): Number of squeeze channels
        activation (Callable[..., torch.nn.Module], optional): ``delta`` activation. Default: ``torch.nn.ReLU``
        scale_activation (Callable[..., torch.nn.Module]): ``sigma`` activation. Default: ``torch.nn.Sigmoid``
    Úinput_channelsÚsqueeze_channelsÚ
activation.Úscale_activationr-   Nc                 ó‚  •— t          ¦   «                              ¦   «          t          | ¦  «         t          j                             d¦  «        | _        t          j                             ||d¦  «        | _        t          j                             ||d¦  «        | _	         |¦   «         | _
         |¦   «         | _        d S )Nr/   )r   r   r   r   rg   ÚAdaptiveAvgPool2dÚavgpoolrj   Úfc1Úfc2r{   r|   )r   ry   rz   r{   r|   r   s        €r   r   zSqueezeExcitation.__init__ì   s˜   ø€ õ 	‰Œ×ÒÑÔÐÝ˜DÑ!Ô!Ð!Ý”x×1Ò1°!Ñ4Ô4ˆŒÝ”8—?’? >Ð3CÀQÑGÔGˆŒÝ”8—?’?Ð#3°^ÀQÑGÔGˆŒØ$˜*™,œ,ˆŒØ 0Ð 0Ñ 2Ô 2ˆÔÐÐr    Úinputc                 óÔ   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        S ro   )r   r€   r{   r�   r|   ©r   r‚   r7   s      r   Ú_scalezSqueezeExcitation._scaleû   sV   € Ø—’˜UÑ#Ô#ˆØ—’˜‘”ˆØ—’ Ñ&Ô&ˆØ—’˜‘”ˆØ×$Ò$ UÑ+Ô+Ð+r    c                 ó6   — |                       |¦  «        }||z  S ro   )r…   r„   s      r   r8   zSqueezeExcitation.forward  s   € Ø—’˜EÑ"Ô"ˆØ�u‰}Ðr    )r<   r?   r@   rA   r   rg   ri   ÚSigmoidrB   r   rk   r   r	   r…   r8   rG   rH   s   @r   rx   rx   à   sí   ø€ € € € € ð	ð 	ð 6;´X´]Ø;@¼8Ô;Kð3ð 3àð3ð ð3ð ˜S %¤(¤/Ð1Ô2ð	3ð
 # 3¨¬¬Ð#7Ô8ð3ð 
ð3ð 3ð 3ð 3ð 3ð 3ð,˜Fð , vð ,ð ,ð ,ð ,ð˜Vð ¨ð ð ð ð ð ð ð ð r    rx   c                   óØ   ‡ — e Zd ZdZdej        j        dddfdedee         de	e
dej        j        f                  d	e	e
dej        j        f                  d
e	e         dedefˆ fd„Zˆ xZS )ÚMLPa  This block implements the multi-layer perceptron (MLP) module.

    Args:
        in_channels (int): Number of channels of the input
        hidden_channels (List[int]): List of the hidden channel dimensions
        norm_layer (Callable[..., torch.nn.Module], optional): Norm layer that will be stacked on top of the linear layer. If ``None`` this layer won't be used. Default: ``None``
        activation_layer (Callable[..., torch.nn.Module], optional): Activation function which will be stacked on top of the normalization layer (if not None), otherwise on top of the linear layer. If ``None`` this layer won't be used. Default: ``torch.nn.ReLU``
        inplace (bool, optional): Parameter for the activation layer, which can optionally do the operation in-place.
            Default is ``None``, which uses the respective default values of the ``activation_layer`` and Dropout layer.
        bias (bool): Whether to use bias in the linear layer. Default ``True``
        dropout (float): The probability for the dropout layer. Default: 0.0
    NTg        rL   Úhidden_channelsrR   .rS   rU   r   Údropoutc                 ó†  •— |€i nd|i}g }	|}
|d d…         D ]ž}|	                      t          j                             |
||¬¦  «        ¦  «         |�|	                       ||¦  «        ¦  «         |	                       |di |¤Ž¦  «         |	                      t          j        j        |fi |¤Ž¦  «         |}
ŒŸ|	                      t          j                             |
|d         |¬¦  «        ¦  «         |	                      t          j        j        |fi |¤Ž¦  «          t          ¦   «         j        |	Ž  t          | ¦  «         d S )NrU   r0   )r   rY   )ra   r   rg   ÚLinearÚDropoutr   r   r   )r   rL   rŠ   rR   rS   rU   r   r‹   rf   re   Úin_dimÚ
hidden_dimr   s               €r   r   zMLP.__init__  sM  ø€ ð ���¨Y¸Ð,@ˆàˆØˆØ)¨#¨2¨#Ô.ð 	 ð 	 ˆJØ�MŠM�%œ(Ÿ/š/¨&°*À4˜/ÑHÔHÑIÔIÐIØÐ%Ø—’˜j˜j¨Ñ4Ô4Ñ5Ô5Ð5Ø�MŠMÐ*Ð*Ð4Ð4¨VÐ4Ð4Ñ5Ô5Ð5Ø�MŠM�%œ(Ô*¨7Ð=Ð=°fÐ=Ð=Ñ>Ô>Ð>ØˆFˆFà�Š•e”h—o’o f¨o¸bÔ.AÈ�oÑMÔMÑNÔNÐNØ�Š•e”hÔ& wÐ9Ð9°&Ð9Ð9Ñ:Ô:Ð:à�‰ŒÔ˜&Ð!Ð!Ý˜DÑ!Ô!Ð!Ð!Ð!r    )r<   r?   r@   rA   r   rg   ri   rB   r   r   r   rk   rF   rC   r   rG   rH   s   @r   r‰   r‰     sÕ   ø€ € € € € ðð ð" @DØEJÄXÄ]Ø"&ØØð"ð "àð"ð ˜cœð"ð ˜X c¨5¬8¬?Ð&:Ô;Ô<ð	"ð
 # 8¨C°´´Ð,@Ô#AÔBð"ð ˜$”ð"ð ð"ð ð"ð "ð "ð "ð "ð "ð "ð "ð "ð "r    r‰   c                   óD   ‡ — e Zd ZdZdee         fˆ fd„Zdedefd„Zˆ xZ	S )ÚPermutez™This module returns a view of the tensor input with its dimensions permuted.

    Args:
        dims (List[int]): The desired ordering of dimensions
    Údimsc                 óV   •— t          ¦   «                              ¦   «          || _        d S ro   )r   r   r“   )r   r“   r   s     €r   r   zPermute.__init__;  s$   ø€ Ý‰Œ×ÒÑÔÐØˆŒ	ˆ	ˆ	r    r,   r-   c                 ó6   — t          j        || j        ¦  «        S ro   )r   Úpermuter“   )r   r,   s     r   r8   zPermute.forward?  s   € ÝŒ}˜Q ¤	Ñ*Ô*Ð*r    )
r<   r?   r@   rA   r   rB   r   r	   r8   rG   rH   s   @r   r’   r’   4  st   ø€ € € € € ðð ð˜T #œYð ð ð ð ð ð ð+˜ð + Fð +ð +ð +ð +ð +ð +ð +ð +r    r’   )rb   Útypingr   r   r   r   r   r   r   r	   Úutilsr   r   rg   Ú
functionalÚinterpolaterk   r   Ú
SequentialrJ   rm   rs   rx   r‰   r’   rY   r    r   ú<module>rœ      sÖ  ðØ €€€Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cà €€€Ø Ð Ð Ð Ð Ð à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5ð ŒhÔ!Ô-€ð4Tð 4Tð 4Tð 4Tð 4T˜œœñ 4Tô 4Tð 4Tðn6ð 6ð 6ð 6ð 6˜œÔ,ñ 6ô 6ð 6ðr/
ð /
ð /
ð /
ð /
Ð-ñ /
ô /
ð /
ðd.
ð .
ð .
ð .
ð .
Ð-ñ .
ô .
ð .
ðb$ð $ð $ð $ð $˜œœñ $ô $ð $ðN*"ð *"ð *"ð *"ð *"ˆ%Œ(Ô
ñ *"ô *"ð *"ðZ+ð +ð +ð +ð +ˆeŒhŒoñ +ô +ð +ð +ð +r    