o
    ,h                     @   s  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	  m
Z d dlm	Z	mZ ddlmZmZ ddlmZ ddlmZ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 g dZ dejdejfddZ!ej"#d dejdejde$e% dejfddZ&ej"#d G dd de	j'Z(G dd de	j'Z)						d[d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ej d)e+defd*d+Z,ej"#d+ G d,d- d-e	j'Z-G d.d/ d/e-Z.G d0d1 d1e	j'Z/G d2d3 d3e/Z0G d4d5 d5e	j'Z1d6e$e% d7e%d8e$e% d"e$e% de$e% d9e*d:ee d;e+d<ede1fd=d>Z2d?eiZ3G d@dA dAeZ4G dBdC dCeZ5G dDdE dEeZ6G dFdG dGeZ7G dHdI dIeZ8G dJdK dKeZ9e edLe4j:fdMdddNd:ee4 d;e+d<ede1fdOdPZ;e edLe5j:fdMdddNd:ee5 d;e+d<ede1fdQdRZ<e edLe6j:fdMdddNd:ee6 d;e+d<ede1fdSdTZ=e edLe7j:fdMdddNd:ee7 d;e+d<ede1fdUdVZ>e edLe8j:fdMdddNd:ee8 d;e+d<ede1fdWdXZ?e edLe9j:fdMdddNd:ee9 d;e+d<ede1fdYdZZ@dS )\    N)partial)AnyCallableOptional)nnTensor   )MLPPermute)StochasticDepth)ImageClassificationInterpolationMode)_log_api_usage_once   )register_modelWeightsWeightsEnum)_IMAGENET_CATEGORIES)_ovewrite_named_paramhandle_legacy_interface)SwinTransformerSwin_T_WeightsSwin_S_WeightsSwin_B_WeightsSwin_V2_T_WeightsSwin_V2_S_WeightsSwin_V2_B_Weightsswin_tswin_sswin_b	swin_v2_t	swin_v2_s	swin_v2_bxreturnc              
   C   s   | j dd  \}}}t| ddd|d d|d f} | ddd ddd dd d f }| ddd ddd dd d f }| ddd ddd dd d f }| ddd ddd dd d f }t||||gd} | S )Nr   r   .r   )shapeFpadtorchcat)r#   HW_x0x1x2x3 r3   ^/var/www/html/scripts/venv/lib/python3.10/site-packages/torchvision/models/swin_transformer.py_patch_merging_pad#   s        r5   relative_position_bias_tablerelative_position_indexwindow_sizec                 C   sB   |d |d  }| | }| ||d}|ddd d}|S )Nr   r   r&   r   )viewpermute
contiguous	unsqueeze)r6   r7   r8   Nrelative_position_biasr3   r3   r4   _get_relative_position_bias1   s
   r?   c                       H   e Zd ZdZejfdededejf f fddZ	de
fdd	Z  ZS )
PatchMergingzPatch Merging Layer.
    Args:
        dim (int): Number of input channels.
        norm_layer (nn.Module): Normalization layer. Default: nn.LayerNorm.
    dim
norm_layer.c                    sD   t    t|  || _tjd| d| dd| _|d| | _d S N   r   Fbiassuper__init__r   rB   r   Linear	reductionnormselfrB   rC   	__class__r3   r4   rJ   E   
   
zPatchMerging.__init__r#   c                 C       t |}| |}| |}|S z
        Args:
            x (Tensor): input tensor with expected layout of [..., H, W, C]
        Returns:
            Tensor with layout of [..., H/2, W/2, 2*C]
        )r5   rM   rL   rO   r#   r3   r3   r4   forwardL      

zPatchMerging.forward__name__
__module____qualname____doc__r   	LayerNormintr   ModulerJ   r   rV   __classcell__r3   r3   rP   r4   rA   >       &rA   c                       r@   )
PatchMergingV2zPatch Merging Layer for Swin Transformer V2.
    Args:
        dim (int): Number of input channels.
        norm_layer (nn.Module): Normalization layer. Default: nn.LayerNorm.
    rB   rC   .c                    sD   t    t|  || _tjd| d| dd| _|d| | _d S rD   rH   rN   rP   r3   r4   rJ   `   rR   zPatchMergingV2.__init__r#   c                 C   rS   rT   )r5   rL   rM   rU   r3   r3   r4   rV   g   rW   zPatchMergingV2.forwardrX   r3   r3   rP   r4   rb   Y   ra   rb           Tinput
qkv_weightproj_weightr>   	num_heads
shift_sizeattention_dropoutdropoutqkv_bias	proj_biaslogit_scaletrainingc           $   	   C   s  | j \}}}}|d ||d   |d  }|d ||d   |d  }t| ddd|d|f}|j \}}}}| }|d |krDd|d< |d |krNd|d< t|dkrdtj||d  |d  fdd}||d  ||d   }||||d  |d ||d  |d |}|dddddd	|| |d |d  |}|d	ur|	d	ur|	
 }	|	 d }|	|d|    t|||	}|	|d|dd||| ddddd}|d |d |d }}}|d	urtj|d
dtj|d
ddd
 }tj|tdd }|| }n||| d  }||dd
}|| }t|dkr|||f}d|d  f|d  |d  f|d  d	ff}d|d  f|d  |d  f|d  d	ff} d}!|D ]}"| D ]}#|!||"d |"d |#d |#d f< |!d7 }!qgqc|||d  |d ||d  |d }|dddd	||d |d  }|d|d }||dktd|dktd}||d| |||d|d}||dd }|d
||d|d}tj|d
d}tj|||d}||dd	|d|d|}t|||
}tj|||d}||||d  ||d  |d |d |}|dddddd	||||}t|dkr^tj||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[N, H, W, C]): The input tensor or 4-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]): Window size.
        num_heads (int): Number of attention heads.
        shift_size (List[int]): Shift size for shifted window attention.
        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.
        logit_scale (Tensor[out_dim], optional): Logit scale of cosine attention for Swin Transformer V2. Default: None.
        training (bool, optional): Training flag used by the dropout parameters. Default: True.
    Returns:
        Tensor[N, H, W, C]: The output tensor after shifted window attention.
    r   r   )r   r   )shiftsdims   r   rE      Nr&   )rB   g      Y@)maxg      g      Yrc   )prn   )r'   r(   r)   copysumr*   rollr9   r:   reshapeclonenumelzero_linearsize	normalize	transposeclampmathlogexpmatmul	new_zerosr<   masked_fillfloatsoftmaxrj   r;   )$rd   re   rf   r>   r8   rg   rh   ri   rj   rk   rl   rm   rn   Br,   r-   Cpad_rpad_br#   r.   pad_Hpad_Wnum_windowslengthqkvqkvattn	attn_maskh_slicesw_slicescounthwr3   r3   r4   shifted_window_attentiont   sr   # ,.0
$
..$($$((, $r   c                       s   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f fddZdd Z	dd Z
dejfddZdedefddZ  ZS )ShiftedWindowAttentionz/
    See :func:`shifted_window_attention`.
    Trc   rB   r8   rh   rg   rk   rl   ri   rj   c	           	         s   t    t|dkst|dkrtd|| _|| _|| _|| _|| _t	j
||d |d| _t	j
|||d| _|   |   d S )Nr   z.window_size and shift_size must be of length 2rq   rF   )rI   rJ   len
ValueErrorr8   rh   rg   ri   rj   r   rK   r   proj#define_relative_position_bias_tabledefine_relative_position_index)	rO   rB   r8   rh   rg   rk   rl   ri   rj   rP   r3   r4   rJ      s   
zShiftedWindowAttention.__init__c                 C   sL   t td| jd  d d| jd  d  | j| _t jj| jdd d S )Nr   r   r   {Gz?std)	r   	Parameterr*   zerosr8   rg   r6   inittrunc_normal_rO   r3   r3   r4   r   	  s   ,z:ShiftedWindowAttention.define_relative_position_bias_tablec                 C   s  t | jd }t | jd }t t j||dd}t |d}|d d d d d f |d d d d d f  }|ddd }|d d d d df  | jd d 7  < |d d d d df  | jd d 7  < |d d d d df  d| jd  d 9  < |d }| 	d| d S )Nr   r   ijindexingr   r&   r7   )
r*   aranger8   stackmeshgridflattenr:   r;   rw   register_buffer)rO   coords_hcoords_wcoordscoords_flattenrelative_coordsr7   r3   r3   r4   r     s   ,((,z5ShiftedWindowAttention.define_relative_position_indexr$   c                 C   s   t | j| j| jS N)r?   r6   r7   r8   r   r3   r3   r4   get_relative_position_bias  s   z1ShiftedWindowAttention.get_relative_position_biasr#   c                 C   sD   |   }t|| jj| jj|| j| j| j| j| j	| jj
| jj
| jdS )
        Args:
            x (Tensor): Tensor with layout of [B, H, W, C]
        Returns:
            Tensor with same layout as input, i.e. [B, H, W, C]
        )rh   ri   rj   rk   rl   rn   )r   r   r   weightr   r8   rg   rh   ri   rj   rG   rn   rO   r#   r>   r3   r3   r4   rV   #  s   zShiftedWindowAttention.forwardTTrc   rc   )rY   rZ   r[   r\   r^   listboolr   rJ   r   r   r*   r   r   rV   r`   r3   r3   rP   r4   r      s6    
	r   c                       sz   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f fddZdd Z	de
jfddZdefddZ  ZS )ShiftedWindowAttentionV2z2
    See :func:`shifted_window_attention_v2`.
    Trc   rB   r8   rh   rg   rk   rl   ri   rj   c	           
   
      s   t  j||||||||d ttdt|ddf | _ttj	ddddtj
ddtj	d|d	d| _|rP| jj d
 }	| jj|	d|	  j  d S d S )N)rk   rl   ri   rj   
   r   r   i   TrF   )inplaceFrq   )rI   rJ   r   r   r*   r   onesrm   
SequentialrK   ReLUcpb_mlpr   rG   r{   datar|   )
rO   rB   r8   rh   rg   rk   rl   ri   rj   r   rP   r3   r4   rJ   @  s$   "&z!ShiftedWindowAttentionV2.__init__c                 C   s  t j| jd d  | jd t jd}t j| jd d  | jd t jd}t t j||gdd}|ddd d}|d d d d d d df  | jd d   < |d d d d d d df  | jd d   < |d9 }t 	|t 
t |d  d	 }| d
| d S )Nr   r   )dtyper   r   r      g      ?g      @relative_coords_table)r*   r   r8   float32r   r   r:   r;   r<   signlog2absr   )rO   relative_coords_hrelative_coords_wr   r3   r3   r4   r   _  s   $$.. z<ShiftedWindowAttentionV2.define_relative_position_bias_tabler$   c                 C   s4   t | | jd| j| j| j}dt| }|S )Nr&      )	r?   r   r   r9   rg   r7   r8   r*   sigmoid)rO   r>   r3   r3   r4   r   o  s   z3ShiftedWindowAttentionV2.get_relative_position_biasr#   c                 C   sH   |   }t|| jj| jj|| j| j| j| j| j	| jj
| jj
| j| jdS )r   )rh   ri   rj   rk   rl   rm   rn   )r   r   r   r   r   r8   rg   rh   ri   rj   rG   rm   rn   r   r3   r3   r4   rV   x  s    z ShiftedWindowAttentionV2.forwardr   )rY   rZ   r[   r\   r^   r   r   r   rJ   r   r*   r   r   rV   r`   r3   r3   rP   r4   r   ;  s4    
		r   c                          e Zd ZdZddddejefdededee dee de	d	e	d
e	de	de
dejf de
dejf f fddZdefddZ  ZS )SwinTransformerBlocka  
    Swin Transformer Block.
    Args:
        dim (int): Number of input channels.
        num_heads (int): Number of attention heads.
        window_size (List[int]): Window size.
        shift_size (List[int]): Shift size for shifted window attention.
        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.0.
        norm_layer (nn.Module): Normalization layer.  Default: nn.LayerNorm.
        attn_layer (nn.Module): Attention layer. Default: ShiftedWindowAttention
          @rc   rB   rg   r8   rh   	mlp_ratiorj   ri   stochastic_depth_probrC   .
attn_layerc                    s   t    t|  |	|| _|
||||||d| _t|d| _|	|| _t|t	|| |gt
jd |d| _| j D ]}t|t
jrWt
j|j |jd urWt
jj|jdd q:d S )N)ri   rj   row)activation_layerr   rj   gư>r   )rI   rJ   r   norm1r   r   stochastic_depthnorm2r	   r^   r   GELUmlpmodules
isinstancerK   r   xavier_uniform_r   rG   normal_)rO   rB   rg   r8   rh   r   rj   ri   r   rC   r   mrP   r3   r4   rJ     s*   


"
zSwinTransformerBlock.__init__r#   c                 C   8   ||  | | | }||  | | | }|S r   )r   r   r   r   r   rU   r3   r3   r4   rV     s   zSwinTransformerBlock.forward)rY   rZ   r[   r\   r   r]   r   r^   r   r   r   r_   rJ   r   rV   r`   r3   r3   rP   r4   r     s<    	
#r   c                       r   )SwinTransformerBlockV2a  
    Swin Transformer V2 Block.
    Args:
        dim (int): Number of input channels.
        num_heads (int): Number of attention heads.
        window_size (List[int]): Window size.
        shift_size (List[int]): Shift size for shifted window attention.
        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.0.
        norm_layer (nn.Module): Normalization layer.  Default: nn.LayerNorm.
        attn_layer (nn.Module): Attention layer. Default: ShiftedWindowAttentionV2.
    r   rc   rB   rg   r8   rh   r   rj   ri   r   rC   .r   c                    s$   t  j|||||||||	|
d
 d S )N)r   rj   ri   r   rC   r   )rI   rJ   )rO   rB   rg   r8   rh   r   rj   ri   r   rC   r   rP   r3   r4   rJ     s   
zSwinTransformerBlockV2.__init__r#   c                 C   r   r   )r   r   r   r   r   rU   r3   r3   r4   rV     s   zSwinTransformerBlockV2.forward)rY   rZ   r[   r\   r   r]   r   r^   r   r   r   r_   rJ   r   rV   r`   r3   r3   rP   r4   r     s<    	
r   c                       s   e Zd ZdZddddddde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 f fddZdd Z  ZS )r   a;  
    Implements Swin Transformer from the `"Swin Transformer: Hierarchical Vision Transformer using
    Shifted Windows" <https://arxiv.org/abs/2103.14030>`_ 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: 1000.
        block (nn.Module, optional): SwinTransformer Block. Default: None.
        norm_layer (nn.Module, optional): Normalization layer. Default: None.
        downsample_layer (nn.Module): Downsample layer (patch merging). Default: PatchMerging.
    r   rc   g?i  N
patch_size	embed_dimdepthsrg   r8   r   rj   ri   r   num_classesrC   .blockdownsample_layerc                    s  t    t|  |
| _|d u rt}|d u rttjdd}g }|t	tj
d||d |d f|d |d fdtg d|| t|}d}tt|D ]R}g }|d|  }t|| D ]) |	t| |d  }||||| | fd	d
|D |||||d	 |d7 }q^|tj	|  |t|d k r|||| qNtj	| | _|dt|d   }||| _tg d| _td| _td| _t||
| _|  D ]}t|tjrtjj|jdd |jd urtj|j qd S )Ngh㈵>)epsrq   r   r   )kernel_sizestride)r   r   rq   r   r   c                    s$   g | ]} d  dkrdn|d  qS )r   r   r3   ).0r   i_layerr3   r4   
<listcomp>C  s   $ z,SwinTransformer.__init__.<locals>.<listcomp>)r8   rh   r   rj   ri   r   rC   )r   rq   r   r   r   r   ) rI   rJ   r   r   r   r   r   r]   appendr   Conv2dr
   rw   ranger   r   featuresrM   r:   AdaptiveAvgPool2davgpoolFlattenr   rK   headr   r   r   r   r   rG   zeros_)rO   r   r   r   rg   r8   r   rj   ri   r   r   rC   r   r   layerstotal_stage_blocksstage_block_idi_stagestagerB   sd_probnum_featuresr   rP   r   r4   rJ     sp   
 




zSwinTransformer.__init__c                 C   s@   |  |}| |}| |}| |}| |}| |}|S r   )r   rM   r:   r   r   r   rU   r3   r3   r4   rV   _  s   





zSwinTransformer.forward)rY   rZ   r[   r\   rA   r   r^   r   r   r   r   r_   rJ   rV   r`   r3   r3   rP   r4   r     sL    	
Or   r   r   r   r   weightsprogresskwargsc           
   	   K   sZ   |d urt |dt|jd  td| |||||d|}	|d ur+|	|j|dd |	S )Nr   
categories)r   r   r   rg   r8   r   T)r  
check_hashr3   )r   r   metar   load_state_dictget_state_dict)
r   r   r   rg   r8   r   r  r  r  modelr3   r3   r4   _swin_transformeri  s   
r  r  c                   @   N   e Zd Zedeeddejdi eddddd	d
didddddZ	e	Z
dS )r   z7https://download.pytorch.org/models/swin_t-704ceda3.pth      	crop_sizeresize_sizeinterpolationibr  r  Uhttps://github.com/pytorch/vision/tree/main/references/classification#swintransformerImageNet-1KguV^T@glW@zacc@1zacc@5gX9@g\([@YThese weights reproduce closely the results of the paper using a similar training recipe.
num_paramsmin_sizerecipe_metrics_ops
_file_size_docsurl
transformsr
  NrY   rZ   r[   r   r   r   r   BICUBIC_COMMON_METAIMAGENET1K_V1DEFAULTr3   r3   r3   r4   r     .    
r   c                   @   r  )r   z7https://download.pytorch.org/models/swin_s-5e29d889.pthr     r  irr  r  r  gCT@gףp=
X@r  gZd{!@gx&g@r  r  r#  Nr&  r3   r3   r3   r4   r     r+  r   c                   @   r  )r   z7https://download.pytorch.org/models/swin_b-68c6b09e.pthr     r  i<;r  r  r  gh|?T@g)\(X@r  g&1.@gt@r  r  r#  Nr&  r3   r3   r3   r4   r     r+  r   c                   @   r  )r   z:https://download.pytorch.org/models/swin_v2_t-b137f0e2.pth     r  iRr.  r.  Xhttps://github.com/pytorch/vision/tree/main/references/classification#swintransformer-v2r  gS㥛T@g rX@r  g(\@gMb([@r  r  r#  Nr&  r3   r3   r3   r4   r     r+  r   c                   @   r  )r   z:https://download.pytorch.org/models/swin_v2_s-637d8ceb.pthr.  r/  r  ir0  r1  r  g!rhT@gNbX94X@r  gd;O'@gg@r  r  r#  Nr&  r3   r3   r3   r4   r     r+  r   c                   @   r  )r   z:https://download.pytorch.org/models/swin_v2_b-781e5279.pthr.  i  r  i=r0  r1  r  gI+U@gK7X@r  g33333S4@gˡEu@r  r  r#  Nr&  r3   r3   r3   r4   r   	  r+  r   
pretrained)r  )r  r  c                 K   :   t | } td	ddgdg dg dddgd| |d|S )
a  
    Constructs a swin_tiny architecture from
    `Swin Transformer: Hierarchical Vision Transformer using Shifted Windows <https://arxiv.org/abs/2103.14030>`_.

    Args:
        weights (:class:`~torchvision.models.Swin_T_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.Swin_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.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.Swin_T_Weights
        :members:
    rE   `   r   r      r   rq   r6           皙?r   r   r   rg   r8   r   r  r  Nr3   )r   verifyr  r  r  r  r3   r3   r4   r   "     
	r   c                 K   r3  )
a  
    Constructs a swin_small architecture from
    `Swin Transformer: Hierarchical Vision Transformer using Shifted Windows <https://arxiv.org/abs/2103.14030>`_.

    Args:
        weights (:class:`~torchvision.models.Swin_S_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.Swin_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.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.Swin_S_Weights
        :members:
    rE   r4  r   r      r   r7  r:  333333?r<  Nr3   )r   r=  r  r>  r3   r3   r4   r   H  r?  r   c                 K   r3  )
a  
    Constructs a swin_base architecture from
    `Swin Transformer: Hierarchical Vision Transformer using Shifted Windows <https://arxiv.org/abs/2103.14030>`_.

    Args:
        weights (:class:`~torchvision.models.Swin_B_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.Swin_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.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.Swin_B_Weights
        :members:
    rE      r@  rE   r   r       r:        ?r<  Nr3   )r   r=  r  r>  r3   r3   r4   r   n  r?  r   c                 K   >   t | } td	ddgdg dg dddgd| |ttd
|S )
a  
    Constructs a swin_v2_tiny architecture from
    `Swin Transformer V2: Scaling Up Capacity and Resolution <https://arxiv.org/abs/2111.09883>`_.

    Args:
        weights (:class:`~torchvision.models.Swin_V2_T_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.Swin_V2_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.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.Swin_V2_T_Weights
        :members:
    rE   r4  r5  r7  r   r;  
r   r   r   rg   r8   r   r  r  r   r   Nr3   )r   r=  r  r   rb   r>  r3   r3   r4   r         
r    c                 K   rG  )
a  
    Constructs a swin_v2_small architecture from
    `Swin Transformer V2: Scaling Up Capacity and Resolution <https://arxiv.org/abs/2111.09883>`_.

    Args:
        weights (:class:`~torchvision.models.Swin_V2_S_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.Swin_V2_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.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.Swin_V2_S_Weights
        :members:
    rE   r4  r@  r7  r   rB  rH  Nr3   )r   r=  r  r   rb   r>  r3   r3   r4   r!     rI  r!   c                 K   rG  )
a  
    Constructs a swin_v2_base architecture from
    `Swin Transformer V2: Scaling Up Capacity and Resolution <https://arxiv.org/abs/2111.09883>`_.

    Args:
        weights (:class:`~torchvision.models.Swin_V2_B_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.Swin_V2_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.swin_transformer.SwinTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/swin_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.Swin_V2_B_Weights
        :members:
    rE   rC  r@  rD  r   rF  rH  Nr3   )r   r=  r  r   rb   r>  r3   r3   r4   r"     rI  r"   )rc   rc   NNNT)Ar   	functoolsr   typingr   r   r   r*   torch.nn.functionalr   
functionalr(   r   ops.miscr	   r
   ops.stochastic_depthr   transforms._presetsr   r   utilsr   _apir   r   r   _metar   _utilsr   r   __all__r5   fxwrapr   r^   r?   r_   rA   rb   r   r   r   r   r   r   r   r   r  r(  r   r   r   r   r   r   r)  r   r   r   r    r!   r"   r3   r3   r3   r4   <module>   s    

#	

sQV92m	

*$*$*$*&*&.