
    %`il                        d dl mZ d dlmZmZm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lmZ dd	lmZmZmZ dd
lmZ ddlmZmZ ddlmZmZ g dZdee         dee         dee         deee         ee         f         fdZ ej!        "                    d           dej        dej        dee         defdZ#ej!        "                    d           deeeef         deeeef         deeeef         fdZ$ej!        "                    d           dedeeeef         deeeef         deeeef         def
dZ%ej!        "                    d           	 	 	 	 	 dHd ed!ed"ed#edee         d$edee         d%e&d&e&d'ee         d(ee         d)e'defd*Z(ej!        "                    d+            G d, d-ej)                  Z* G d. d/ej)                  Z+ G d0 d1ej)                  Z,dee         d2ed3ee         d$ee         dee         d4e&d5ee         d6e'd7ede,fd8Z-ed9d:d;Z. G d< d=e          Z/ G d> d?e          Z0 G d@ dAe          Z1 e             edBe/j2        fC          dddDd5ee/         d6e'd7ede,fdE                        Z3 e             edBe0j2        fC          dddDd5ee0         d6e'd7ede,fdF                        Z4 e             edBe1j2        fC          dddDd5ee1         d6e'd7ede,fdG                        Z5dS )I    )partial)AnyCallableOptionalN)nnTensor   )VideoClassification)_log_api_usage_once   )register_modelWeightsWeightsEnum)_KINETICS400_CATEGORIES)_ovewrite_named_paramhandle_legacy_interface)PatchMergingSwinTransformerBlock)SwinTransformer3dSwin3D_T_WeightsSwin3D_S_WeightsSwin3D_B_Weightsswin3d_tswin3d_sswin3d_b
shift_sizesize_dhwwindow_sizereturnc                 r    t          d          D ]$}||         ||         k    r||         ||<   d| |<   %|| fS )Nr	   r   range)r   r   r   is       }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchvision/models/video/swin_transformer.py_get_window_and_shift_sizer%       sN     1XX  A;+a.((%a[KNJqM
""    r%   relative_position_bias_tablerelative_position_indexc                 ,   |d         |d         z  |d         z  }| |d |d |f                                                   }|                    ||d          }|                    ddd                                                              d          }|S )Nr      r   )flattenviewpermute
contiguous	unsqueeze)r'   r(   r   
window_volrelative_position_biass        r$   _get_relative_position_biasr3   /   s     Q+a.0;q>AJ9[j[ 89AACC 488ZQSTT3;;Aq!DDOOQQ[[\]^^!!r&   r3   
patch_sizec                 l      fdt          d          D             }|d         |d         |d         fS )Nc                 V    g | ]%}|         |         |         z  z
  |         z  &S  r7   ).0r#   r4   r   s     r$   
<listcomp>z(_compute_pad_size_3d.<locals>.<listcomp>@   s9    ```RSA!z!}!<<
1M```r&   r	   r   r*   r   r!   )r   r4   pad_sizes   `` r$   _compute_pad_size_3dr;   ?   sC    `````W\]^W_W_```HA;Xa[00r&   r;   xc           
          | j         | }|d         d         z  |d         d         z  z  |d         d         z  z  }fdt          d          D             }d}|d         D ]O}|d         D ]D}	|d         D ]9}
|||d         |d         |	d         |	d         |
d         |
d         f<   |dz  }:EP|                    |d         d         z  d         |d         d         z  d         |d         d         z  d                   }|                    dddddd                              |d         d         z  d         z            }|                    d          |                    d          z
  }|                    |dk    t          d                                        |dk    t          d	                    }|S )
Nr   r*   r   c                 ^    g | ])}d |          f|          |          f|          dff*S )r   Nr7   )r8   r#   r   r   s     r$   r9   z._compute_attention_mask_3d.<locals>.<listcomp>P   s]        	 Q !n_z!}n-m^T"	
  r&   r	         g      Y        )	new_zerosr"   r-   r.   reshaper0   masked_fillfloat)r<   r   r   r   	attn_masknum_windowsslicescountdhws     ``       r$   _compute_attention_mask_3drM   G   s"    X&IA;+a.0Xa[KPQN5RSW_`aWbfqrsftWtuK     q  F EAY   	 	AAY  CH	!A$1+qtad{AaD1Q4K?@
	 {1~%A{1~%A{1~%A I !!!Q1a33;;[^k!n4{1~E I ##A&&)<)<Q)?)??I%%i1neFmmDDPPQZ^_Q_afgjakakllIr&   rM   rA   Tinput
qkv_weightproj_weightr2   	num_headsattention_dropoutdropoutqkv_bias	proj_biastrainingc                 \
   | j         \  }}}}}t          |||f|d         |d         |d         f          }t          j        | ddd|d         d|d         d|d         f          }|j         \  }}}}}|||f}t	          |          dk    r/t          j        ||d          |d          |d          fd          }|d         |d         z  |d         |d         z  z  |d         |d         z  z  }|                    ||d         |d         z  |d         |d         |d         z  |d         |d         |d         z  |d         |          }|                    ddddddd	d
          	                    ||z  |d         |d         z  |d         z  |          }t          j
        |||	          }|	                    |                    d          |                    d          d|||z                                ddddd          }|d         |d         |d         }}}|||z  dz  z  }|                    |                    dd                    }||z   }t	          |          dk    rt          ||d         |d         |d         f|d         |d         |d         f|d         |d         |d         f          }|                    |                    d          |z  |||                    d          |                    d                    }||                    d                              d          z   }|                    d||                    d          |                    d                    }t          j        |d          }t          j        |||          }|                    |                              dd          	                    |                    d          |                    d          |          }t          j
        |||
          }t          j        |||          }|                    ||d         |d         z  |d         |d         z  |d         |d         z  |d         |d         |d         |          }|                    ddddddd	d
          	                    |||||          }t	          |          dk    r,t          j        ||d         |d         |d         fd          }|ddd|d|d|ddf                                         }|S )a  
    Window based multi-head self attention (W-MSA) module with relative position bias.
    It supports both of shifted and non-shifted window.
    Args:
        input (Tensor[B, T, H, W, C]): The input tensor, 5-dimensions.
        qkv_weight (Tensor[in_dim, out_dim]): The weight tensor of query, key, value.
        proj_weight (Tensor[out_dim, out_dim]): The weight tensor of projection.
        relative_position_bias (Tensor): The learned relative position bias added to attention.
        window_size (List[int]): 3-dimensions window size, T, H, W .
        num_heads (int): Number of attention heads.
        shift_size (List[int]): Shift size for shifted window attention (T, H, W).
        attention_dropout (float): Dropout ratio of attention weight. Default: 0.0.
        dropout (float): Dropout ratio of output. Default: 0.0.
        qkv_bias (Tensor[out_dim], optional): The bias tensor of query, key, value. Default: None.
        proj_bias (Tensor[out_dim], optional): The bias tensor of projection. Default: None.
        training (bool, optional): Training flag used by the dropout parameters. Default: True.
    Returns:
        Tensor[B, T, H, W, C]: The output tensor after shifted window attention.
    r   r*   r   )r*   r   r	   )shiftsdimsr	   r@   r?         g      r+   )dim)prV   N)shaper;   Fpadsumtorchrollr-   r.   rC   linearsizematmul	transposerM   r0   softmaxrS   r/   )rN   rO   rP   r2   r   rQ   r   rR   rS   rT   rU   rV   btrK   rL   cr:   r<   _tphpwppadded_sizerG   qkvqkvattnrF   s                                  r$   shifted_window_attention_3drw   s   s   B KMAq!Q#Q1IAAP[\]P^/_``H	eaAx{Ax{Ax{KLLAwAr2r1r2,K :Jq:a=.:a=.:a=.!QXabbb 
Q;q>	)k!nA.NOS^_`SaepqresSst  	
	A+a.(AA+a.(AA+a.(A			 		A 	
		!Q1aAq))11	KQ+a.8;q>I1	 	A
 (1j(
+
+C
++affQiiAy!y.
I
I
Q
QRSUVXY[\^_
`
`C!fc!fc!f!qA	Q)^$$A88AKKB''((D((D
:.^[^[^<^[^[^<]JqM:a=9	
 
	 yyk1;	166RS99VWV\V\]^V_V_``i))!,,66q999yyYq		166!99==9Tr"""D9T.BBBDA  A&&..qvvayy!&&))QGGA	K++A		!w222A 	
	A+a.(A+a.(A+a.(AAA			 		A 	
		!Q1aAq))11!RRCCA :Jq*Q-A
1!NU^___ 	
!!!RaR!RaR
&&((AHr&   rw   c                        e Zd ZdZ	 	 	 	 ddedee         dee         deded	ed
ededdf fdZddZ	ddZ
dee         dej        fdZdedefdZ xZS )ShiftedWindowAttention3dz2
    See :func:`shifted_window_attention_3d`.
    TrA   r]   r   r   rQ   rT   rU   rR   rS   r   Nc	                    t                                                       t          |          dk    st          |          dk    rt          d          || _        || _        || _        || _        || _        t          j
        ||dz  |          | _        t          j
        |||          | _        |                                  |                                  d S )Nr	   z.window_size and shift_size must be of length 2)bias)super__init__len
ValueErrorr   r   rQ   rR   rS   r   Linearrr   proj#define_relative_position_bias_tabledefine_relative_position_index)
selfr]   r   r   rQ   rT   rU   rR   rS   	__class__s
            r$   r}   z!ShiftedWindowAttention3d.__init__   s     	{q  C
OOq$8$8MNNN&$"!29S#'999Ic3Y777	00222++-----r&   c                 &   t          j        t          j        d| j        d         z  dz
  d| j        d         z  dz
  z  d| j        d         z  dz
  z  | j                            | _        t           j                            | j        d           d S )Nr   r   r*   {Gz?std)	r   	Parameterrc   zerosr   rQ   r'   inittrunc_normal_)r   s    r$   r   z<ShiftedWindowAttention3d.define_relative_position_bias_table  s    ,.LKT%a((1,T5Ea5H1H11LMQRUYUefgUhQhklQlm -
 -
) 	d?TJJJJJr&   c                 l     fdt          d          D             }t          j        t          j        |d         |d         |d         d                    }t          j        |d          }|d d d d d f         |d d d d d f         z
  }|                    ddd                                          }|d d d d dfxx          j        d         dz
  z  cc<   |d d d d dfxx          j        d         dz
  z  cc<   |d d d d dfxx          j        d         dz
  z  cc<   |d d d d dfxx         d j        d         z  dz
  d j        d         z  dz
  z  z  cc<   |d d d d dfxx         d j        d         z  dz
  z  cc<   |                    d          } 	                    d	|           d S )
Nc                 N    g | ]!}t          j        j        |                   "S r7   )rc   aranger   )r8   r#   r   s     r$   r9   zKShiftedWindowAttention3d.define_relative_position_index.<locals>.<listcomp>  s+    JJJAel4#3A#677JJJr&   r	   r   r*   r   ij)indexingr+   r(   )
r"   rc   stackmeshgridr,   r.   r/   r   rb   register_buffer)r   
coords_dhwcoordscoords_flattenrelative_coordsr(   s   `     r$   r   z7ShiftedWindowAttention3d.define_relative_position_index  s$   JJJJqJJJ
N:a=*Q-AQUVVV
 
 vq11(AAAt4~aaaqqqj7QQ)11!Q::EEGG111a   D$4Q$7!$;;   111a   D$4Q$7!$;;   111a   D$4Q$7!$;;   111a   Q)9!)<%<q%@QIYZ[I\E\_`E`$aa   111a   A(8(;$;a$??   "1"5"5b"9"968OPPPPPr&   c                 8    t          | j        | j        |          S )N)r3   r'   r(   )r   r   s     r$   get_relative_position_biasz3ShiftedWindowAttention3d.get_relative_position_bias#  s    *4+LdNjlwxxxr&   r<   c                    |j         \  }}}}}|||g}| j                                        | j                                        }}t	          |||          \  }}|                     |          }	t          || j        j        | j	        j        |	|| j
        || j        | j        | j        j        | j	        j        | j                  S )N)r   rR   rS   rT   rU   rV   )r_   r   copyr   r%   r   rw   rr   weightr   rQ   rR   rS   r{   rV   )
r   r<   rm   rk   rK   rL   r   r   r   r2   s
             r$   forwardz ShiftedWindowAttention3d.forward&  s    1aAq!9"&"2"7"7"9"94?;O;O;Q;QZ"<ZS^"_"_Z!%!@!@!M!M*HOI"N!"4LX]in]
 
 
 	
r&   )TTrA   rA   )r   N)__name__
__module____qualname____doc__intlistboolrE   r}   r   r   rc   r   r   r   __classcell__r   s   @r$   ry   ry      s:         #&. .. #Y. I	.
 . . . !. . 
. . . . . .6K K K KQ Q Q Q&yd3i yEL y y y y
 
F 
 
 
 
 
 
 
 
r&   ry   c                        e Zd ZdZ	 	 	 ddee         dededeed	ej	        f                  d
df
 fdZ
ded
efdZ xZS )PatchEmbed3da;  Video to Patch Embedding.

    Args:
        patch_size (List[int]): Patch token size.
        in_channels (int): Number of input channels. Default: 3
        embed_dim (int): Number of linear projection output channels. Default: 96.
        norm_layer (nn.Module, optional): Normalization layer. Default: None
    r	   `   Nr4   in_channels	embed_dim
norm_layer.r   c                 D   t                                                       t          |            |d         |d         |d         f| _        t	          j        ||| j        | j                  | _        | ||          | _        d S t	          j                    | _        d S )Nr   r*   r   )kernel_sizestride)	r|   r}   r   tuple_patch_sizer   Conv3dr   normIdentity)r   r4   r   r   r   r   s        r$   r}   zPatchEmbed3d.__init__K  s     	D!!!!+A
1z!} MI-(	
 
 
	 !"
9--DIIIDIIIr&   r<   c           
      X   |                                 \  }}}}}t          |||f| j                  }t          j        |d|d         d|d         d|d         f          }|                     |          }|                    ddddd          }| j        |                     |          }|S )zForward function.r   r   r*   r	   r?   )rf   r;   r   r`   ra   r   r.   r   )r   r<   rm   rk   rK   rL   r:   s          r$   r   zPatchEmbed3d.forwarda  s     1aA'Aq	43HIIE!a!a!a!EFFIIaLLIIaAq!$$9 		!Ar&   )r	   r   N)r   r   r   r   r   r   r   r   r   Moduler}   r   r   r   r   s   @r$   r   r   A  s          9=& &I& & 	&
 Xc29n56& 
& & & & & &,
 
F 
 
 
 
 
 
 
 
r&   r   c                    @    e Zd ZdZdddddddedf	dee         ded	ee         d
ee         dee         dedededededee	de
j        f                  dee	de
j        f                  de	de
j        f         dee	de
j        f                  ddf fdZdedefdZ xZS )r   aY  
    Implements 3D Swin Transformer from the `"Video Swin Transformer" <https://arxiv.org/abs/2106.13230>`_ paper.
    Args:
        patch_size (List[int]): Patch size.
        embed_dim (int): Patch embedding dimension.
        depths (List(int)): Depth of each Swin Transformer layer.
        num_heads (List(int)): Number of attention heads in different layers.
        window_size (List[int]): Window size.
        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4.0.
        dropout (float): Dropout rate. Default: 0.0.
        attention_dropout (float): Attention dropout rate. Default: 0.0.
        stochastic_depth_prob (float): Stochastic depth rate. Default: 0.1.
        num_classes (int): Number of classes for classification head. Default: 400.
        norm_layer (nn.Module, optional): Normalization layer. Default: None.
        block (nn.Module, optional): SwinTransformer Block. Default: None.
        downsample_layer (nn.Module): Downsample layer (patch merging). Default: PatchMerging.
        patch_embed (nn.Module, optional): Patch Embedding layer. Default: None.
    g      @rA   皙?i  Nr4   r   depthsrQ   r   	mlp_ratiorS   rR   stochastic_depth_probnum_classesr   .blockdownsample_layerpatch_embedr   c                 `   t                                                       t          |            |
| _        |t	          t
          t                    }|t	          t          j        d          }|t          } ||||          | _
        t          j        |          | _        g }t          |          }d}t          t          |                    D ]}g }|d|z  z  }t          ||                   D ]^|	t!          |          z  |dz
  z  }|                     ||||         |fd	|D             |||||t          

  
                   |dz  }_|                    t          j        |            |t          |          dz
  k     r|                     |||                     t          j        | | _        |dt          |          dz
  z  z  | _         || j                  | _        t          j        d          | _        t          j        | j        |
          | _        |                                 D ]m}t7          |t          j                  rQt          j                            |j        d           |j        $t          j                             |j                   nd S )N)
attn_layergh㈵>)eps)r4   r   r   )r^   r   r   r*   c                 0    g | ]}d z  dk    rdn|d z  S )r   r   r7   )r8   rL   i_layers     r$   r9   z.SwinTransformer3d.__init__.<locals>.<listcomp>  s/    #[#[#[!1)9)9AAqAv#[#[#[r&   )r   r   r   rS   rR   r   r   r   r   r   )!r|   r}   r   r   r   r   ry   r   	LayerNormr   r   Dropoutpos_droprb   r"   r~   rE   append
Sequentialfeaturesnum_featuresr   AdaptiveAvgPool3davgpoolr   headmodules
isinstancer   r   r   r{   zeros_)r   r4   r   r   rQ   r   r   rS   rR   r   r   r   r   r   r   layerstotal_stage_blocksstage_block_idi_stagestager]   sd_probmr   r   s                          @r$   r}   zSwinTransformer3d.__init__  s   " 	D!!!&=0=UVVVE 4888J&K ';*	^hiii
W---"$ [[S[[)) 	A 	AG%'Eaj(C 11 $ $/%2G2GGK]`aKabE!'*$/#[#[#[#[{#[#[#["+ '*;.5#-#;     !#MM"-/000#f++/**..sJ??@@@v.%c&kkAo(>>Jt011	+A..Id/==	 	+ 	+A!RY'' +%%ahD%9996%GNN16***		+ 	+r&   r<   c                 ^   |                      |          }|                     |          }|                     |          }|                     |          }|                    ddddd          }|                     |          }t          j        |d          }|                     |          }|S )Nr   r?   r*   r   r	   )	r   r   r   r   r.   r   rc   r,   r   )r   r<   s     r$   r   zSwinTransformer3d.forward  s    QMM!MM!IIaLLIIaAq!$$LLOOM!QIIaLLr&   )r   r   r   r   r   r   r   rE   r   r   r   r   r}   r   r   r   r   s   @r$   r   r   n  s        4 #&'*9=485A:>J+ J+IJ+ J+ S		J+
 9J+ #YJ+ J+ J+ !J+  %J+ J+ Xc29n56J+ bi01J+ #3	>2J+ hsBI~67J+  
!J+ J+ J+ J+ J+ J+X
 
F 
 
 
 
 
 
 
 
r&   r   r   r   r   weightsprogresskwargsc           
          |)t          |dt          |j        d                              t          d| |||||d|}	|*|	                    |                    |d                     |	S )Nr   
categories)r4   r   r   rQ   r   r   T)r   
check_hashr7   )r   r~   metar   load_state_dictget_state_dict)
r4   r   r   rQ   r   r   r   r   r   models
             r$   _swin_transformer3dr     s     fmSl9S5T5TUUU 3   E g44hSW4XXYYYLr&   )r*   r*   r*   )r   min_sizemin_temporal_sizec                   j    e Zd Z ed eedddd          i eddd	d
dddiddd          ZeZdS )r   z9https://download.pytorch.org/models/swin3d_t-7615ae03.pth   r      g
ףp=
?gv/?gCl?gZd;O?gy&1?g?	crop_sizeresize_sizemeanr   Fhttps://github.com/SwinTransformer/Video-Swin-Transformer#kinetics-400The weights were ported from the paper. The accuracies are estimated on video-level with parameters `frame_rate=15`, `clips_per_video=12`, and `clip_len=32`ivKinetics-400g(\mS@gK7aW@zacc@1zacc@5g7A`E@gnb^@recipe_docs
num_params_metrics_ops
_file_sizeurl
transformsr   N	r   r   r   r   r   r
   _COMMON_METAKINETICS400_V1DEFAULTr7   r&   r$   r   r              WG7 )(
 
 


^[ ###! ! !
 
 
  N6 GGGr&   r   c                   j    e Zd Z ed eedddd          i eddd	d
dddiddd          ZeZdS )r   z9https://download.pytorch.org/models/swin3d_s-da41c237.pthr   r   r   r   r   r   r   if$r   gMbXS@g'1W@r   gҵT@gK7Ik@r   r   Nr  r7   r&   r$   r   r     r  r&   r   c                       e Zd Z ed eedddd          i eddd	d
dddiddd          Z ed eedddd          i eddd	d
dddiddd          ZeZ	dS )r   z<https://download.pytorch.org/models/swin3d_b_1k-24f7c7c6.pthr   r   r   r   r   r   r   iX?r   gSS@gbX9W@r   gMbXa@g/$v@r   r   z=https://download.pytorch.org/models/swin3d_b_22k-7c6ae6fa.pthgx&iT@g~jW@N)
r   r   r   r   r   r
   r  r  KINETICS400_IMAGENET22K_V1r  r7   r&   r$   r   r   >  s$       WJ7 )(
 
 


^[ ###! ! !
 
 
  N6 ")K7 )(
 
 


^[ ###! ! !
 
 
" " "6 GGGr&   r   
pretrained)r   )r   r   c                 p    t                               |           } t          dg ddg dg dg dd| |d|S )	a  
    Constructs a swin_tiny architecture from
    `Video Swin Transformer <https://arxiv.org/abs/2106.13230>`_.

    Args:
        weights (:class:`~torchvision.models.video.Swin3D_T_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.video.Swin3D_T_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.video.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/video/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.video.Swin3D_T_Weights
        :members:
    r   r?   r?   r   )r   r   rZ   r   r	   rZ            r[   r[   r   r4   r   r   rQ   r   r   r   r   r7   )r   verifyr   r   r   r   s      r$   r   r   x  se    . %%g..G 
99|| ..II!
 
 
 
 
r&   c                 p    t                               |           } t          dg ddg dg dg dd| |d|S )	a  
    Constructs a swin_small architecture from
    `Video Swin Transformer <https://arxiv.org/abs/2106.13230>`_.

    Args:
        weights (:class:`~torchvision.models.video.Swin3D_S_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.video.Swin3D_S_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.video.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/video/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.video.Swin3D_S_Weights
        :members:
    r  r   r   r      r   r  r  r   r  r7   )r   r  r   r  s      r$   r   r     se    . %%g..G 
99}} ..II!
 
 
 
 
r&   c                 p    t                               |           } t          dg ddg dg dg dd| |d|S )	a  
    Constructs a swin_base architecture from
    `Video Swin Transformer <https://arxiv.org/abs/2106.13230>`_.

    Args:
        weights (:class:`~torchvision.models.video.Swin3D_B_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.video.Swin3D_B_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.video.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/video/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.video.Swin3D_B_Weights
        :members:
    r     r  )r?   r         r  r   r  r7   )r   r  r   r  s      r$   r   r     se    . %%g..G 
99}} ..II!
 
 
 
 
r&   )rA   rA   NNT)6	functoolsr   typingr   r   r   rc   torch.nn.functionalr   
functionalr`   r   transforms._presetsr
   utilsr   _apir   r   r   _metar   _utilsr   r   swin_transformerr   r   __all__r   r   tupler%   fxwrapr3   r;   rM   rE   r   rw   r   ry   r   r   r   r  r   r   r   r  r   r   r   r7   r&   r$   <module>r)     s         * * * * * * * * * *                   6 6 6 6 6 6 ( ( ( ( ( ( 7 7 7 7 7 7 7 7 7 7 + + + + + + C C C C C C C C A A A A A A A A  	#S		#%)#Y	#=A#Y	#
49d3i 	# 	# 	# 	# * + + +
""',
"IN
"dhildm
"
" 
" 
" 
" + , , ,15c3#7 1U3PSUX=EY 1^cdgilnqdq^r 1 1 1 1
 $ % % %&&CcM"& sC}%& c3m$	&
 & & & &R * + + +  #!%"&m mmm m #	m
 cm m S	m m m vm m m m m m m` + , , ,V
 V
 V
 V
 V
ry V
 V
 V
v* * * * *29 * * *Zj j j j j	 j j jZS	 I Cy	
 c ! k"      > *     {   >    {   >7 7 7 7 7{ 7 7 7t ,0@0O!PQQQ6:T ! ! !"23 !d !]` !ev ! ! ! RQ !H ,0@0O!PQQQ6:T ! ! !"23 !d !]` !ev ! ! ! RQ !H ,0@0O!PQQQ6:T ! ! !"23 !d !]` !ev ! ! ! RQ ! ! !r&   