o
    Vh                     @   s  d dl Z d dlmZ d dlmZ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List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 r4   W/var/www/vscode/kcb/lib/python3.10/site-packages/torchvision/models/swin_transformer.py_patch_merging_pad#   s        r6   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)r7   r8   r9   Nrelative_position_biasr4   r4   r5   _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   rC   r   Linear	reductionnormselfrC   rD   	__class__r4   r5   rK   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]
        )r6   rN   rM   rP   r$   r4   r4   r5   forwardL      

zPatchMerging.forward__name__
__module____qualname____doc__r   	LayerNormintr   ModulerK   r   rW   __classcell__r4   r4   rQ   r5   rB   >       &rB   c                       rA   )
PatchMergingV2zPatch Merging Layer for Swin Transformer V2.
    Args:
        dim (int): Number of input channels.
        norm_layer (nn.Module): Normalization layer. Default: nn.LayerNorm.
    rC   rD   .c                    sD   t    t|  || _tjd| d| dd| _|d| | _d S rE   rI   rO   rQ   r4   r5   rK   `   rS   zPatchMergingV2.__init__r$   c                 C   rT   rU   )r6   rM   rN   rV   r4   r4   r5   rW   g   rX   zPatchMergingV2.forwardrY   r4   r4   rQ   r5   rc   Y   rb   rc           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	   rF      Nr'   )rC   g      Y@)maxg      g      Yrd   )pro   )r(   r)   r*   copysumr+   rollr:   r;   reshapeclonenumelzero_linearsize	normalize	transposeclampmathlogexpmatmul	new_zerosr=   masked_fillfloatsoftmaxrk   r<   )$re   rf   rg   r?   r9   rh   ri   rj   rk   rl   rm   rn   ro   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wr4   r4   r5   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`.
    Trd   rC   r9   ri   rh   rl   rm   rj   rk   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 2rr   rG   )rJ   rK   len
ValueErrorr9   ri   rh   rj   rk   r   rL   r   proj#define_relative_position_bias_tabledefine_relative_position_index)	rP   rC   r9   ri   rh   rl   rm   rj   rk   rQ   r4   r5   rK      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+   zerosr9   rh   r7   inittrunc_normal_rP   r4   r4   r5   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'   r8   )
r+   aranger9   stackmeshgridflattenr;   r<   rx   register_buffer)rP   coords_hcoords_wcoordscoords_flattenrelative_coordsr8   r4   r4   r5   r     s   ,((,z5ShiftedWindowAttention.define_relative_position_indexr%   c                 C   s   t | j| j| jS N)r@   r7   r8   r9   r   r4   r4   r5   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]
        )ri   rj   rk   rl   rm   ro   )r   r   r   weightr   r9   rh   ri   rj   rk   rH   ro   rP   r$   r?   r4   r4   r5   rW   #  s   zShiftedWindowAttention.forwardTTrd   rd   )rZ   r[   r\   r]   r_   r   boolr   rK   r   r   r+   r   r   rW   ra   r4   r4   rQ   r5   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`.
    Trd   rC   r9   ri   rh   rl   rm   rj   rk   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)rl   rm   rj   rk   
   r   r	   i   TrG   )inplaceFrr   )rJ   rK   r   r   r+   r   onesrn   
SequentialrL   ReLUcpb_mlpr   rH   r|   datar}   )
rP   rC   r9   ri   rh   rl   rm   rj   rk   r   rQ   r4   r5   rK   @  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   r9   float32r   r   r;   r<   r=   signlog2absr   )rP   relative_coords_hrelative_coords_wr   r4   r4   r5   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   r:   rh   r8   r9   r+   sigmoid)rP   r?   r4   r4   r5   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   )ri   rj   rk   rl   rm   rn   ro   )r   r   r   r   r   r9   rh   ri   rj   rk   rH   rn   ro   r   r4   r4   r5   rW   x  s    z ShiftedWindowAttentionV2.forwardr   )rZ   r[   r\   r]   r_   r   r   r   rK   r   r+   r   r   rW   ra   r4   r4   rQ   r5   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
          @rd   rC   rh   r9   ri   	mlp_ratiork   rj   stochastic_depth_probrD   .
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)rj   rk   row)activation_layerr   rk   gư>r   )rJ   rK   r   norm1r   r   stochastic_depthnorm2r
   r_   r   GELUmlpmodules
isinstancerL   r   xavier_uniform_r   rH   normal_)rP   rC   rh   r9   ri   r   rk   rj   r   rD   r   mrQ   r4   r5   rK     s*   


"
zSwinTransformerBlock.__init__r$   c                 C   8   ||  | | | }||  | | | }|S r   )r   r   r   r   r   rV   r4   r4   r5   rW     s   zSwinTransformerBlock.forward)rZ   r[   r\   r]   r   r^   r   r_   r   r   r   r`   rK   r   rW   ra   r4   r4   rQ   r5   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   rd   rC   rh   r9   ri   r   rk   rj   r   rD   .r   c                    s$   t  j|||||||||	|
d
 d S )N)r   rk   rj   r   rD   r   )rJ   rK   )rP   rC   rh   r9   ri   r   rk   rj   r   rD   r   rQ   r4   r5   rK     s   
zSwinTransformerBlockV2.__init__r$   c                 C   r   r   )r   r   r   r   r   rV   r4   r4   r5   rW     s   zSwinTransformerBlockV2.forward)rZ   r[   r\   r]   r   r^   r   r_   r   r   r   r`   rK   r   rW   ra   r4   r4   rQ   r5   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   rd   g?i  N
patch_size	embed_dimdepthsrh   r9   r   rk   rj   r   num_classesrD   .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㈵>)epsrr   r   r   )kernel_sizestride)r   r	   rr   r   r	   c                    s$   g | ]} d  dkrdn|d  qS )r	   r   r4   ).0r   i_layerr4   r5   
<listcomp>C  s   $ z,SwinTransformer.__init__.<locals>.<listcomp>)r9   ri   r   rk   rj   r   rD   )r   rr   r   r	   r   r   ) rJ   rK   r   r   r   r   r   r^   appendr   Conv2dr   rx   ranger   r   featuresrN   r;   AdaptiveAvgPool2davgpoolFlattenr   rL   headr   r   r   r   r   rH   zeros_)rP   r   r   r   rh   r9   r   rk   rj   r   r   rD   r   r   layerstotal_stage_blocksstage_block_idi_stagestagerC   sd_probnum_featuresr   rQ   r   r5   rK     sp   
 




zSwinTransformer.__init__c                 C   s@   |  |}| |}| |}| |}| |}| |}|S r   )r   rN   r;   r   r   r   rV   r4   r4   r5   rW   _  s   





zSwinTransformer.forward)rZ   r[   r\   r]   rB   r   r_   r   r   r   r   r`   rK   rW   ra   r4   r4   rQ   r5   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   rh   r9   r   T)r  
check_hashr4   )r   r   metar   load_state_dictget_state_dict)
r   r   r   rh   r9   r   r  r  r  modelr4   r4   r5   _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rZ   r[   r\   r   r   r   r   BICUBIC_COMMON_METAIMAGENET1K_V1DEFAULTr4   r4   r4   r5   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&  r4   r4   r4   r5   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&  r4   r4   r4   r5   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&  r4   r4   r4   r5   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&  r4   r4   r4   r5   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&  r4   r4   r4   r5   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:
    rF   `   r	   r	      r	   rr   r6           皙?r   r   r   rh   r9   r   r  r  Nr4   )r   verifyr  r  r  r  r4   r4   r5   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:
    rF   r4  r	   r	      r	   r7  r:  333333?r<  Nr4   )r   r=  r  r>  r4   r4   r5   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:
    rF      r@  rF   r   r       r:        ?r<  Nr4   )r   r=  r  r>  r4   r4   r5   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:
    rF   r4  r5  r7  r   r;  
r   r   r   rh   r9   r   r  r  r   r   Nr4   )r   r=  r  r   rc   r>  r4   r4   r5   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:
    rF   r4  r@  r7  r   rB  rH  Nr4   )r   r=  r  r   rc   r>  r4   r4   r5   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:
    rF   rC  r@  rD  r   rF  rH  Nr4   )r   r=  r  r   rc   r>  r4   r4   r5   r#     rI  r#   )rd   rd   NNNT)Ar   	functoolsr   typingr   r   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__r6   fxwrapr_   r@   r`   rB   rc   r   r   r   r   r   r   r   r   r  r(  r   r   r   r   r   r   r)  r   r   r    r!   r"   r#   r4   r4   r4   r5   <module>   s    

#	

sQV92m	

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