Ë
    þÍ:j5  ã                   óò  — d dl Z d dlmZ d dl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y)é    N)ÚSequence)ÚCallableÚOptionalÚ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
    Únum_featuresÚepsc                 ón  •— t         ‰| �  «        t        | «       || _        | j	                  dt        j                  |«      «       | j	                  dt        j                  |«      «       | j	                  dt        j                  |«      «       | j	                  dt        j                  |«      «       y )NÚweightÚbiasÚrunning_meanÚrunning_var)ÚsuperÚ__init__r	   r   Úregister_bufferÚtorchÚonesÚzeros)Úselfr   r   Ú	__class__s      €úi/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torchvision/ops/misc.pyr   zFrozenBatchNorm2d.__init__   sƒ   ø€ ô
 	‰ÑÔÜ˜DÔ!ØˆŒØ×Ñ˜X¤u§z¡z°,Ó'?Ô@Ø×Ñ˜V¤U§[¡[°Ó%>Ô?Ø×Ñ˜^¬U¯[©[¸Ó-FÔGØ×Ñ˜]¬E¯J©J°|Ó,DÕEó    Ú
state_dictÚprefixÚlocal_metadataÚstrictÚmissing_keysÚunexpected_keysÚ
error_msgsc           	      óH   •— |dz   }||v r||= t         ‰	| �  |||||||«       y )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ØÐ2Ð3ä‰Ñ%Ø˜ °¸ÀoÐWaõ	
r   ÚxÚreturnc                 óR  — | j                   j                  dddd«      }| j                  j                  dddd«      }| j                  j                  dddd«      }| j                  j                  dddd«      }||| j
                  z   j                  «       z  }|||z  z
  }||z  |z   S )Né   éÿÿÿÿ)r   Úreshaper   r   r   r   Úrsqrt)r   r)   ÚwÚbÚrvÚrmÚscaler   s           r   ÚforwardzFrozenBatchNorm2d.forward6   s§   € ð �K‰K×Ñ  2 q¨!Ó,ˆØ�I‰I×Ñ˜a  Q¨Ó*ˆØ×Ñ×%Ñ% a¨¨Q°Ó2ˆØ×Ñ×&Ñ& q¨"¨a°Ó3ˆØ�R˜$Ÿ(™(‘]×)Ñ)Ó+Ñ+ˆØ�2˜‘:‰~ˆØ�5‰y˜4ÑÐr   c                 ó‚   — | 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__A   s;   € Ø—.‘.×)Ñ)Ð*¨!¨D¯K©K×,=Ñ,=¸aÑ,@Ð+AÀÈÏÉÀzÐQRÐSÐSr   )gñhãˆµøä>)r9   Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatr   ÚdictÚstrÚboolÚlistr'   r   r5   r;   Ú__classcell__©r   s   @r   r   r      s�   ø„ ñð ñFàðFð õFð
àð
ð ð
ð ð	
ð
 ð
ð ˜3‘ið
ð ˜c™ð
ð ˜‘Iõ
ð$	 ˜ð 	  Fó 	 ð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           
      óN  •‡‡	— |€ˆ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}|�|j                   ||«      «       |�|
€i nd|
i}|j                   |di |¤Ž«       t        ‰| �$  |Ž  t        | «       || _        | j                  t        k(  rt        j                  d«       y y )Nr,   r   c              3   ó@   •K  — | ]  }‰|   d z
  dz  ‰|   z  –— Œ y­w)r,   r   N© )Ú.0ÚirR   rL   s     €€r   ú	<genexpr>z.ConvNormActivation.__init__.<locals>.<genexpr>]   s(   øè ø€ ÒbÈA ¨Q¡°!Ñ!3¸Ñ 9¸HÀQ¹KÕ GÑbùs   ƒ)rR   rO   r   rS   zhDon't use ConvNormActivation directly, please use Conv2dNormActivation and Conv3dNormActivation instead.rW   )Ú
isinstancer?   r   Úlenr
   ÚtupleÚrangeÚappendr   r   r	   rK   r   rH   ÚwarningsÚwarn)r   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   r   rT   Ú	_conv_dimÚlayersÚparamsr   s      `     `      €r   r   zConvNormActivation.__init__F   s5  ú€ ð  ˆ?Ü˜+¤sÔ+´
¸8ÄSÔ0IØ&¨™?¨qÑ0°8Ñ;‘ä0:¸;ÌÔ0QœC Ô,ÔWZÐ[cÓWd�	Ü*¨;¸	ÓB�Ü'¨°)Ó<�ÜÔbÔQVÐW`ÓQaÔbÓb�Øˆ<Ø Ð%ˆDñ ØØØØØØ!ØØô	ð
ˆð Ð!Ø�M‰M™* \Ó2Ô3àÐ'Ø"˜?‘R°¸GÐ0DˆFØ�M‰MÑ*Ñ4¨VÑ4Ô5Ü‰Ñ˜&Ñ!Ü˜DÔ!Ø(ˆÔà�>‰>Ô/Ò/Ü�M‰MØzõð 0r   )r9   r<   r=   r   ÚnnÚBatchNorm2dÚReLUÚConv2dr?   r   r]   r   rB   r   ÚModulerC   r   rE   rF   s   @r   rH   rH   E   s^  ø„ ð
 45Ø./Ø>BØØ?D¿x¹x×?SÑ?SØEJÇXÁXÇ]Á]Ø01Ø"&Ø#Ø5:·X±X·_±_ñ5àð5ð ð5ð ˜3  c¨3 h¡Ð/Ñ0ð	5ð
 �c˜5  c ™?Ð*Ñ+ð5ð ˜%  U¨3°¨8¡_°cÐ 9Ñ:Ñ;ð5ð ð5ð ˜X c¨5¯8©8¯?©?Ð&:Ñ;Ñ<ð5ð # 8¨C°·±·±Ð,@Ñ#AÑBð5ð ˜˜U 3¨ 8™_Ð,Ñ-ð5ð ˜$‘ð5ð �t‰nð5ð ˜S %§(¡(§/¡/Ð1Ñ2ð5ð 
÷5ñ 5r   rH   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``.

    rI   r,   NTrJ   rK   rL   rM   rN   rO   rP   .rQ   rR   rS   r   r*   c                 ój   •— t         ‰| �  |||||||||	|
|t        j                  j                  «       y ©N)r   r   r   re   rh   ©r   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   r   r   s               €r   r   zConv2dNormActivation.__init__‘   ó>   ø€ ô 	‰ÑØØØØØØØØØØØÜ�H‰H�O‰Oõ	
r   )r9   r<   r=   r>   r   re   rf   rg   r?   r   r]   r   rB   r   ri   rC   r   rE   rF   s   @r   rk   rk   ~   s<  ø„ ñð, 45Ø./Ø>BØØ?D¿x¹x×?SÑ?SØEJÇXÁXÇ]Á]Ø01Ø"&Ø#ñ
àð
ð ð
ð ˜3  c¨3 h¡Ð/Ñ0ð	
ð
 �c˜5  c ™?Ð*Ñ+ð
ð ˜%  U¨3°¨8¡_°cÐ 9Ñ:Ñ;ð
ð ð
ð ˜X c¨5¯8©8¯?©?Ð&:Ñ;Ñ<ð
ð # 8¨C°·±·±Ð,@Ñ#AÑBð
ð ˜˜U 3¨ 8™_Ð,Ñ-ð
ð ˜$‘ð
ð �t‰nð
ð 
÷
ñ 
r   rk   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``.
    rI   r,   NTrJ   rK   rL   rM   rN   rO   rP   .rQ   rR   rS   r   r*   c                 ój   •— t         ‰| �  |||||||||	|
|t        j                  j                  «       y rm   )r   r   r   re   ÚConv3drn   s               €r   r   zConv3dNormActivation.__init__Â   ro   r   )r9   r<   r=   r>   r   re   ÚBatchNorm3drg   r?   r   r]   r   rB   r   ri   rC   r   rE   rF   s   @r   rq   rq   °   sH  ø„ ñð* 9:Ø34ØCGØØ?D¿x¹x×?SÑ?SØEJÇXÁXÇ]Á]Ø56Ø"&Ø#ñ
àð
ð ð
ð ˜3  c¨3° mÑ 4Ð4Ñ5ð	
ð
 �c˜5  c¨3 Ñ/Ð/Ñ0ð
ð ˜%  U¨3°°S¨=Ñ%9¸3Ð >Ñ?Ñ@ð
ð ð
ð ˜X c¨5¯8©8¯?©?Ð&:Ñ;Ñ<ð
ð # 8¨C°·±·±Ð,@Ñ#AÑBð
ð ˜˜U 3¨¨S =Ñ1Ð1Ñ2ð
ð ˜$‘ð
ð �t‰nð
ð 
÷
ñ 
r   rq   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                 óH  •— t         ‰| �  «        t        | «       t        j                  j                  d«      | _        t        j                  j                  ||d«      | _        t        j                  j                  ||d«      | _	         |«       | _
         |«       | _        y )Nr,   )r   r   r	   r   re   ÚAdaptiveAvgPool2dÚavgpoolrh   Úfc1Úfc2ry   rz   )r   rw   rx   ry   rz   r   s        €r   r   zSqueezeExcitation.__init__í   st   ø€ ô 	‰ÑÔÜ˜DÔ!Ü—x‘x×1Ñ1°!Ó4ˆŒÜ—8‘8—?‘? >Ð3CÀQÓGˆŒÜ—8‘8—?‘?Ð#3°^ÀQÓGˆŒÙ$›,ˆŒÙ 0Ó 2ˆÕr   Úinputc                 ó¬   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      S rm   )r}   r~   ry   r   rz   ©r   r€   r4   s      r   Ú_scalezSqueezeExcitation._scaleü   sI   € Ø—‘˜UÓ#ˆØ—‘˜“ˆØ—‘ Ó&ˆØ—‘˜“ˆØ×$Ñ$ UÓ+Ð+r   c                 ó.   — | j                  |«      }||z  S rm   )rƒ   r‚   s      r   r5   zSqueezeExcitation.forward  s   € Ø—‘˜EÓ"ˆØ�u‰}Ðr   )r9   r<   r=   r>   r   re   rg   ÚSigmoidr?   r   ri   r   r   rƒ   r5   rE   rF   s   @r   rv   rv   á   s¡   ø„ ñ	ð 6;·X±X·]±]Ø;@¿8¹8×;KÑ;Kñ3àð3ð ð3ð ˜S %§(¡(§/¡/Ð1Ñ2ð	3ð
 # 3¨¯©¯©Ð#7Ñ8ð3ð 
õ3ð,˜Fð , vó ,ð˜Vð ¨÷ r   rv   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        rJ   Úhidden_channelsrP   .rQ   rS   r   Údropoutc                 óJ  •— |€i nd|i}g }	|}
|d d D ]”  }|	j                  t        j                  j                  |
||¬«      «       |�|	j                   ||«      «       |	j                   |di |¤Ž«       |	j                  t        j                  j                  |fi |¤Ž«       |}
Œ– |	j                  t        j                  j                  |
|d   |¬«      «       |	j                  t        j                  j                  |fi |¤Ž«       t        ‰| �  |	Ž  t        | «       y )NrS   r-   )r   rW   )r_   r   re   ÚLinearÚDropoutr   r   r	   )r   rJ   rˆ   rP   rQ   rS   r   r‰   rd   rc   Úin_dimÚ
hidden_dimr   s               €r   r   zMLP.__init__  s   ø€ ð �‘¨Y¸Ð,@ˆàˆØˆØ)¨#¨2Ð.ò 	 ˆJØ�M‰Mœ%Ÿ(™(Ÿ/™/¨&°*À4˜/ÓHÔIØÐ%Ø—‘™j¨Ó4Ô5Ø�M‰MÑ*Ñ4¨VÑ4Ô5Ø�M‰Mœ%Ÿ(™(×*Ñ*¨7Ñ=°fÑ=Ô>Ø‰Fð	 ð 	�‰”e—h‘h—o‘o f¨o¸bÑ.AÈ�oÓMÔNØ�‰”e—h‘h×&Ñ& wÑ9°&Ñ9Ô:ä‰Ñ˜&Ñ!Ü˜DÕ!r   )r9   r<   r=   r>   r   re   rg   r?   rD   r   r   ri   rC   r@   r   rE   rF   s   @r   r‡   r‡     s§   ø„ ñð" @DØEJÇXÁXÇ]Á]Ø"&ØØñ"àð"ð ˜c™ð"ð ˜X c¨5¯8©8¯?©?Ð&:Ñ;Ñ<ð	"ð
 # 8¨C°·±·±Ð,@Ñ#AÑBð"ð ˜$‘ð"ð ð"ð ÷"ñ "r   r‡   c                   ó>   ‡ — 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                 ó0   •— t         ‰| �  «        || _        y rm   )r   r   r‘   )r   r‘   r   s     €r   r   zPermute.__init__<  s   ø€ Ü‰ÑÔØˆ�	r   r)   r*   c                 óB   — t        j                  || j                  «      S rm   )r   Úpermuter‘   )r   r)   s     r   r5   zPermute.forward@  s   € Ü�}‰}˜Q §	¡	Ó*Ð*r   )
r9   r<   r=   r>   rD   r?   r   r   r5   rE   rF   s   @r   r�   r�   5  s+   ø„ ñð˜T #™Yõ ð+˜ð + F÷ +r   r�   )r`   Úcollections.abcr   Útypingr   r   r   r   r   Úutilsr	   r
   re   Ú
functionalÚinterpolateri   r   Ú
SequentialrH   rk   rq   rv   r‡   r�   rW   r   r   ú<module>r›      s»   ðÛ Ý $ß ,Ñ ,ã Ý ç 5ð �h‰h×!Ñ!×-Ñ-€ô4T˜Ÿ™Ÿ™ô 4Tôn6˜Ÿ™×,Ñ,ô 6ôr/
Ð-ô /
ôd.
Ð-ô .
ôb$˜Ÿ™Ÿ™ô $ôN*"ˆ%�(‰(×
Ñ
ô *"ôZ+ˆe�h‰h�o‰oõ +r   