§
    ù²Åj²�  ã                   óh  — 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
c 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„Z"ej#         $                    d¦  «         dej        dej        dee%         dej        fd„Z&ej#         $                    d¦  «          G d„ de
j'        ¦  «        Z( G d„ de
j'        ¦  «        Z)	 	 	 	 	 	 dTd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*„Z,ej#         $                    d+¦  «          G d,„ d-e
j'        ¦  «        Z- G d.„ d/e-¦  «        Z. G d0„ d1e
j'        ¦  «        Z/ G d2„ d3e/¦  «        Z0 G d4„ d5e
j'        ¦  «        Z1d6ee%         d7e%d8ee%         d"ee%         dee%         d9e*d:ee         d;e+d<ede1fd=„Z2d>eiZ3 G d?„ d@e¦  «        Z4 G dA„ dBe¦  «        Z5 G dC„ dDe¦  «        Z6 G dE„ dFe¦  «        Z7 G dG„ dHe¦  «        Z8 G dI„ dJe¦  «        Z9 e¦   «          e dKe4j:        f¬L¦  «        dddMœd:ee4         d;e+d<ede1fdN„¦   «         ¦   «         Z; e¦   «          e dKe5j:        f¬L¦  «        dddMœd:ee5         d;e+d<ede1fdO„¦   «         ¦   «         Z< e¦   «          e dKe6j:        f¬L¦  «        dddMœd:ee6         d;e+d<ede1fdP„¦   «         ¦   «         Z= e¦   «          e dKe7j:        f¬L¦  «        dddMœd:ee7         d;e+d<ede1fdQ„¦   «         ¦   «         Z> e¦   «          e dKe8j:        f¬L¦  «        dddMœd:ee8         d;e+d<ede1fdR„¦   «         ¦   «         Z? e¦   «          e dKe9j:        f¬L¦  «        dddMœd:ee9         d;e+d<ede1fdS„¦   «         ¦   «         Z@dS )Ué    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           
      ó@  — | j         dd …         \  }}}t          j        | ddd|dz  d|dz  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          j        ||||gd¦  «        } | S )Néýÿÿÿr   r
   .r   éÿÿÿÿ)ÚshapeÚFÚpadÚtorchÚcat)r%   ÚHÚWÚ_Úx0Úx1Úx2Úx3s           úTC:\Projects\Historical\venv\Lib\site-packages\torchvision/models/swin_transformer.pyÚ_patch_merging_padr7   #   sè   € ØŒg�b�c�cŒl�G€A€qˆ!Ý	Œˆa�!�Q˜˜1˜q™5 ! Q¨¡UÐ+Ñ,Ô,€AØ	
ˆ3���1��a�d˜�d˜A˜A˜AÐÔ	€BØ	
ˆ3���1��a�d˜�d˜A˜A˜AÐÔ	€BØ	
ˆ3���1��a�d˜�d˜A˜A˜AÐÔ	€BØ	
ˆ3���1��a�d˜�d˜A˜A˜AÐÔ	€BÝŒ	�2�r˜2˜rÐ" BÑ'Ô'€AØ€Hó    r7   Úrelative_position_bias_tableÚrelative_position_indexÚwindow_sizec                 óÞ   — |d         |d         z  }| |         }|                      ||d¦  «        }|                     ddd¦  «                             ¦   «                              d¦  «        }|S )Nr   r   r)   r
   )ÚviewÚpermuteÚ
contiguousÚ	unsqueeze)r9   r:   r;   ÚNÚrelative_position_biass        r6   Ú_get_relative_position_biasrC   1   ss   € ð 	�AŒ˜ QœÑ'€AØ9Ð:QÔRÐØ3×8Ò8¸¸A¸rÑBÔBÐØ3×;Ò;¸A¸qÀ!ÑDÔD×OÒOÑQÔQ×[Ò[Ð\]Ñ^Ô^ÐØ!Ð!r8   rC   c                   ó`   ‡ — e Zd ZdZej        fdededej        f         fˆ fd„Z	de
fd„Zˆ xZS )ÚPatchMergingzœPatch Merging Layer.
    Args:
        dim (int): Number of input channels.
        norm_layer (nn.Module): Normalization layer. Default: nn.LayerNorm.
    ÚdimÚ
norm_layer.c                 óÞ   •— t          ¦   «                              ¦   «          t          | ¦  «         || _        t	          j        d|z  d|z  d¬¦  «        | _         |d|z  ¦  «        | _        d S ©Né   r
   F©Úbias©ÚsuperÚ__init__r   rF   r   ÚLinearÚ	reductionÚnorm©ÚselfrF   rG   Ú	__class__s      €r6   rO   zPatchMerging.__init__E   óg   ø€ Ý‰Œ×ÒÑÔÐÝ˜DÑ!Ô!Ð!ØˆŒÝœ 1 s¡7¨A°©G¸%Ð@Ñ@Ô@ˆŒØ�J˜q 3™wÑ'Ô'ˆŒ	ˆ	ˆ	r8   r%   c                 óx   — 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]
        )r7   rR   rQ   ©rT   r%   s     r6   ÚforwardzPatchMerging.forwardL   s6   € õ ˜qÑ!Ô!ˆØ�IŠI�a‰LŒLˆØ�NŠN˜1ÑÔˆØˆr8   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú	LayerNormÚintr   ÚModulerO   r	   rZ   Ú__classcell__©rU   s   @r6   rE   rE   >   ó‰   ø€ € € € € ðð ð IKÌð (ð (˜Cð (¨X°c¸2¼9°nÔ-Eð (ð (ð (ð (ð (ð (ð
˜ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r8   rE   c                   ó`   ‡ — e Zd ZdZej        fdededej        f         fˆ fd„Z	de
fd„Zˆ xZS )ÚPatchMergingV2z´Patch Merging Layer for Swin Transformer V2.
    Args:
        dim (int): Number of input channels.
        norm_layer (nn.Module): Normalization layer. Default: nn.LayerNorm.
    rF   rG   .c                 óÞ   •— t          ¦   «                              ¦   «          t          | ¦  «         || _        t	          j        d|z  d|z  d¬¦  «        | _         |d|z  ¦  «        | _        d S rI   rM   rS   s      €r6   rO   zPatchMergingV2.__init__`   rV   r8   r%   c                 óx   — t          |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rX   )r7   rQ   rR   rY   s     r6   rZ   zPatchMergingV2.forwardg   s6   € õ ˜qÑ!Ô!ˆØ�NŠN˜1ÑÔˆØ�IŠI�a‰LŒLˆØˆr8   r[   rd   s   @r6   rg   rg   Y   re   r8   rg   ç        TÚinputÚ
qkv_weightÚproj_weightrB   Ú	num_headsÚ
shift_sizeÚattention_dropoutÚdropoutÚqkv_biasÚ	proj_biasÚlogit_scaleÚtrainingc           	      ó°  — | j         \  }}}}|d         ||d         z  z
  |d         z  }|d         ||d         z  z
  |d         z  }t          j        | ddd|d|f¦  «        }|j         \  }}}}|                     ¦   «         }|d         |k    rd|d<   |d         |k    rd|d<   t	          |¦  «        dk    r't          j        ||d          |d          fd¬¦  «        }||d         z  ||d         z  z  }|                     |||d         z  |d         ||d         z  |d         |¦  «        }|                     dddddd¦  «         	                    ||z  |d         |d         z  |¦  «        }|�L|	�J|	 
                    ¦   «         }	|	                     ¦   «         dz  }|	|d|z  …                              ¦   «          t          j        |||	¦  «        }| 	                    |                     d¦  «        |                     d¦  «        d|||z  ¦  «                             ddddd¦  «        }|d         |d         |d         }}}|��t          j        |d
¬¦  «        t          j        |d
¬¦  «                             dd
¦  «        z  }t          j        |t%          j        d¦  «        ¬¦  «                             ¦   «         }||z  }n4|||z  dz  z  }|                     |                     dd
¦  «        ¦  «        }||z   }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z  }!Œ+Œ0|                     ||d         z  |d         ||d         z  |d         ¦  «        }|                     dddd¦  «         	                    ||d         |d         z  ¦  «        }|                     d¦  «        |                     d¦  «        z
  }|                     |dk    t3          d¦  «        ¦  «                             |dk    t3          d¦  «        ¦  «        }|                     |                     d¦  «        |z  |||                     d¦  «        |                     d¦  «        ¦  «        }||                     d¦  «                             d¦  «        z   }|                     d
||                     d¦  «        |                     d¦  «        ¦  «        }t          j        |d
¬¦  «        }t          j        |||¬¦  «        }|                     |¦  «                             dd¦  «         	                    |                     d¦  «        |                     d¦  «        |¦  «        }t          j        |||
¦  «        }t          j        |||¬¦  «        }|                     |||d         z  ||d         z  |d         |d         |¦  «        }|                     dddddd¦  «         	                    ||||¦  «        }t	          |¦  «        dk    r%t          j        ||d         |d         f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
   rJ   é   Nr)   )rF   éþÿÿÿg      Y@)Úmaxg      à¿g      YÀrj   )Úpru   )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Úsoftmaxrq   r?   )$rk   rl   rm   rB   r;   rn   ro   rp   rq   rr   rs   rt   ru   ÚBr/   r0   ÚCÚpad_rÚpad_br%   r1   Úpad_HÚpad_WÚnum_windowsÚlengthÚqkvÚqÚkÚvÚattnÚ	attn_maskÚh_slicesÚw_slicesÚcountÚhÚws$                                       r6   Úshifted_window_attentionr¥   t   sÏ  € ðF ”�J€A€qˆ!ˆQà˜Œ^˜a +¨a¤.Ñ0Ñ0°KÀ´NÑB€EØ˜Œ^˜a +¨a¤.Ñ0Ñ0°KÀ´NÑB€EÝ	Œˆe�a˜˜A˜u a¨Ð/Ñ0Ô0€AØœÑ€A€uˆe�Qà—’Ñ"Ô"€Jà�1„~˜ÒÐØˆ
�1‰Ø�1„~˜ÒÐØˆ
�1‰õ ˆ:�„˜ÒÐÝŒJ�q :¨a¤= .°:¸a´=°.Ð!AÈÐOÑOÔOˆð ˜K¨œNÑ*¨u¸ÀA¼Ñ/FÑG€KØ	�Šˆq�%˜; qœ>Ñ)¨;°q¬>¸5ÀKÐPQÄNÑ;RÐT_Ð`aÔTbÐdeÑfÔf€AØ	�	Š	�!�Q˜˜1˜a Ñ#Ô#×+Ò+¨A°©O¸[È¼^ÈkÐZ[ÌnÑ=\Ð^_Ñ`Ô`€Að Ð 8Ð#7Ø—>’>Ñ#Ô#ˆØ—’Ñ!Ô! QÑ&ˆØ�˜!˜f™*Ð$Ô%×+Ò+Ñ-Ô-Ð-Ý
Œ(�1�j (Ñ
+Ô
+€CØ
�+Š+�a—f’f˜Q‘i”i §¢¨¡¤¨A¨y¸!¸y¹.Ñ
IÔ
I×
QÒ
QÐRSÐUVÐXYÐ[\Ð^_Ñ
`Ô
`€CØ�!Œf�c˜!”f˜c !œfˆ!€q€AØÐåŒ{˜1 "Ð%Ñ%Ô%­¬°A¸2Ð(>Ñ(>Ô(>×(HÒ(HÈÈRÑ(PÔ(PÑPˆÝ”k +µ4´8¸E±?´?ÐCÑCÔC×GÒGÑIÔIˆØ�kÑ!ˆˆà��i‘ DÑ(Ñ(ˆØ�xŠx˜Ÿš B¨Ñ+Ô+Ñ,Ô,ˆàÐ(Ñ(€Då
ˆ:�„˜ÒÑà—K’K ¨ Ñ/Ô/ˆ	Ø˜ Qœ˜Ð(¨K¸¬N¨?¸ZÈ¼]¸NÐ*KÈzÐZ[Ì}ÈnÐ^bÐMcÐdˆØ˜ Qœ˜Ð(¨K¸¬N¨?¸ZÈ¼]¸NÐ*KÈzÐZ[Ì}ÈnÐ^bÐMcÐdˆØˆØð 	ð 	ˆAØð ð �Ø6;�	˜!˜Aœ$  1¤˜+ q¨¤t¨a°¬d {Ð2Ñ3Ø˜‘
��ðð —N’N 5¨K¸¬NÑ#:¸KÈ¼NÈEÐU`ÐabÔUcÑLcÐepÐqrÔesÑtÔtˆ	Ø×%Ò% a¨¨A¨qÑ1Ô1×9Ò9¸+À{ÐSTÄ~ÐXcÐdeÔXfÑGfÑgÔgˆ	Ø×'Ò'¨Ñ*Ô*¨Y×-@Ò-@ÀÑ-CÔ-CÑCˆ	Ø×)Ò)¨)°qª.½%À¹-¼-ÑHÔH×TÒTÐU^ÐbcÒUcÕejÐknÑeoÔeoÑpÔpˆ	Ø�yŠy˜Ÿš ™œ kÑ1°;À	È1Ï6Ê6ÐRSÉ9Ì9ÐVW×V\ÒV\Ð]^ÑV_ÔV_Ñ`Ô`ˆØ�i×)Ò)¨!Ñ,Ô,×6Ò6°qÑ9Ô9Ñ9ˆØ�yŠy˜˜Y¨¯ª¨q©	¬	°1·6²6¸!±9´9Ñ=Ô=ˆåŒ9�T˜rÐ"Ñ"Ô"€DÝŒ9�TÐ.¸ÐBÑBÔB€Dà�Š�A‰Œ× Ò   AÑ&Ô&×.Ò.¨q¯vªv°a©y¬y¸!¿&º&À¹)¼)ÀQÑGÔG€AÝ	Œ��K Ñ+Ô+€AÝ	Œ	�!�w¨Ð2Ñ2Ô2€Að 	
�Šˆq�%˜; qœ>Ñ)¨5°KÀ´NÑ+BÀKÐPQÄNÐT_Ð`aÔTbÐdeÑfÔf€AØ	�	Š	�!�Q˜˜1˜a Ñ#Ô#×+Ò+¨A¨u°e¸QÑ?Ô?€Aõ ˆ:�„˜ÒÐÝŒJ�q *¨Q¤-°¸A´Ð!?ÀfÐMÑMÔMˆð 	
ˆ!ˆ!ˆ!ˆRˆaˆR��!��Q�Q�Qˆ,Œ×"Ò"Ñ$Ô$€AØ€Hr8   r¥   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fˆ fd„Zd„ Z	d„ Z
dej        fd„Zdedefd„Zˆ xZS )ÚShiftedWindowAttentionz/
    See :func:`shifted_window_attention`.
    Trj   rF   r;   ro   rn   rr   rs   rp   rq   c	                 ó¾  •— 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 2ry   rK   )rN   rO   ÚlenÚ
ValueErrorr;   ro   rn   rp   rq   r   rP   rš   ÚprojÚ#define_relative_position_bias_tableÚdefine_relative_position_index)
rT   rF   r;   ro   rn   rr   rs   rp   rq   rU   s
            €r6   rO   zShiftedWindowAttention.__init__ï   sÐ   ø€ õ 	‰Œ×ÒÑÔÐÝˆ{ÑÔ˜qÒ Ð ¥C¨
¡O¤O°qÒ$8Ð$8ÝÐMÑNÔNÐNØ&ˆÔØ$ˆŒØ"ˆŒØ!2ˆÔØˆŒå”9˜S #¨¡'°Ð9Ñ9Ô9ˆŒÝ”I˜c 3¨YÐ7Ñ7Ô7ˆŒ	à×0Ò0Ñ2Ô2Ð2Ø×+Ò+Ñ-Ô-Ð-Ð-Ð-r8   c                 óþ   — t          j        t          j        d| j        d         z  dz
  d| j        d         z  dz
  z  | j        ¦  «        ¦  «        | _        t           j                             | j        d¬¦  «         d S )Nr
   r   r   ç{®Gáz”?©Ústd)	r   Ú	Parameterr-   Úzerosr;   rn   r9   ÚinitÚtrunc_normal_©rT   s    r6   r¬   z:ShiftedWindowAttention.define_relative_position_bias_table	  sy   € å,.¬LÝŒK˜˜TÔ-¨aÔ0Ñ0°1Ñ4¸¸TÔ=MÈaÔ=PÑ9PÐSTÑ9TÑUÐW[ÔWeÑfÔfñ-
ô -
ˆÔ)õ 	Œ×Ò˜dÔ?ÀTÐÑJÔJÐJÐJÐJr8   c                 óì  — t          j        | j        d         ¦  «        }t          j        | j        d         ¦  «        }t          j        t          j        ||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         d| j        d         z  dz
  z  cc<   |                     d¦  «                             ¦   «         }|  	                    d|¦  «         d S )Nr   r   Úij©Úindexingr
   r)   r:   )
r-   Úaranger;   ÚstackÚmeshgridÚflattenr>   r?   r   Úregister_buffer)rT   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordsr:   s          r6   r­   z5ShiftedWindowAttention.define_relative_position_index  sœ  € å”< Ô 0°Ô 3Ñ4Ô4ˆÝ”< Ô 0°Ô 3Ñ4Ô4ˆÝ”�Uœ^¨H°hÈÐNÑNÔNÑOÔOˆÝœ v¨qÑ1Ô1ˆØ(¨¨¨¨A¨A¨A¨t¨Ô4°~ÀaÀaÀaÈÈqÈqÈqÀjÔ7QÑQˆØ)×1Ò1°!°Q¸Ñ:Ô:×EÒEÑGÔGˆØ˜˜˜˜1˜1˜1˜a˜Ð Ð Ô  DÔ$4°QÔ$7¸!Ñ$;Ñ;Ð Ð Ñ Ø˜˜˜˜1˜1˜1˜a˜Ð Ð Ô  DÔ$4°QÔ$7¸!Ñ$;Ñ;Ð Ð Ñ Ø˜˜˜˜1˜1˜1˜a˜Ð Ð Ô  A¨Ô(8¸Ô(;Ñ$;¸aÑ$?Ñ?Ð Ð Ñ Ø"1×"5Ò"5°bÑ"9Ô"9×"AÒ"AÑ"CÔ"CÐØ×ÒÐ6Ð8OÑPÔPÐPÐPÐPr8   r&   c                 óB   — t          | j        | j        | j        ¦  «        S ©N)rC   r9   r:   r;   r¶   s    r6   Úget_relative_position_biasz1ShiftedWindowAttention.get_relative_position_bias  s$   € Ý*ØÔ-¨tÔ/KÈTÔM]ñ
ô 
ð 	
r8   r%   c                 óì   — |                       ¦   «         }t          || j        j        | j        j        || j        | j        | j        | j        | j	        | j        j
        | j        j
        | j        ¬¦  «        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]
        )ro   rp   rq   rr   rs   ru   )rÇ   r¥   rš   Úweightr«   r;   rn   ro   rp   rq   rL   ru   ©rT   r%   rB   s      r6   rZ   zShiftedWindowAttention.forward#  sp   € ð "&×!@Ò!@Ñ!BÔ!BÐÝ'ØØŒHŒOØŒIÔØ"ØÔØŒNØ”Ø"Ô4Ø”LØ”X”]Ø”i”nØ”]ð
ñ 
ô 
ð 	
r8   ©TTrj   rj   )r\   r]   r^   r_   ra   r   Úboolr�   rO   r¬   r­   r-   r	   rÇ   rZ   rc   rd   s   @r6   r§   r§   ê   s  ø€ € € € € ðð ð ØØ#&Øð.ð .àð.ð ˜#”Yð.ð ˜”Ið	.ð
 ð.ð ð.ð ð.ð !ð.ð ð.ð .ð .ð .ð .ð .ð4Kð Kð KðQð Qð Qð
¨E¬Lð 
ð 
ð 
ð 
ð

˜ð 
 Fð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r8   r§   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fˆ fd„Zd„ Z	de
j        fd„Zdefd„Zˆ xZS )ÚShiftedWindowAttentionV2z2
    See :func:`shifted_window_attention_v2`.
    Trj   rF   r;   ro   rn   rr   rs   rp   rq   c	           
      ó6  •— t          ¦   «                              ||||||||¬¦  «         t          j        t	          j        dt	          j        |ddf¦  «        z  ¦  «        ¦  «        | _        t          j        t          j	        ddd¬¦  «        t          j
        d¬¦  «        t          j	        d|d	¬¦  «        ¦  «        | _        |rQ| j        j                             ¦   «         d
z  }	| j        j        |	d|	z  …         j                             ¦   «          d S d S )N)rr   rs   rp   rq   é
   r   r
   i   TrK   )ÚinplaceFry   )rN   rO   r   r²   r-   r‹   Úonesrt   Ú
SequentialrP   ÚReLUÚcpb_mlprš   rL   rƒ   Údatar„   )rT   rF   r;   ro   rn   rr   rs   rp   rq   r™   rU   s             €r6   rO   z!ShiftedWindowAttentionV2.__init__@  s  ø€ õ 	‰Œ×ÒØØØØØØØ/Øð 	ñ 		
ô 		
ð 		
õ œ<­¬	°"µu´zÀ9ÈaÐQRÐBSÑ7TÔ7TÑ2TÑ(UÔ(UÑVÔVˆÔå”}ÝŒI�a˜ 4Ð(Ñ(Ô(­"¬'¸$Ð*?Ñ*?Ô*?ÅÄÈ3ÐPYÐ`eÐAfÑAfÔAfñ
ô 
ˆŒð ð 	<Ø”X”]×(Ò(Ñ*Ô*¨aÑ/ˆFØŒHŒM˜& 1 v¡:Ð-Ô.Ô3×9Ò9Ñ;Ô;Ð;Ð;Ð;ð	<ð 	<r8   c                 ó  — t          j        | j        d         dz
   | j        d         t           j        ¬¦  «        }t          j        | j        d         dz
   | j        d         t           j        ¬¦  «        }t          j        t          j        ||gd¬¦  «        ¦  «        }|                     ddd¦  «                             ¦   «                              d¦  «        }|d d …d d …d d …dfxx         | j        d         dz
  z  cc<   |d d …d d …d d …dfxx         | j        d         dz
  z  cc<   |dz  }t          j	        |¦  «        t          j
        t          j        |¦  «        dz   ¦  «        z  d	z  }|                      d
|¦  «         d S )Nr   r   )Údtyper¸   r¹   r
   é   g      ð?g      @Úrelative_coords_table)r-   r»   r;   Úfloat32r¼   r½   r>   r?   r@   ÚsignÚlog2Úabsr¿   )rT   Úrelative_coords_hÚrelative_coords_wrÛ   s       r6   r¬   z<ShiftedWindowAttentionV2.define_relative_position_bias_table_  s¢  € å!œL¨4Ô+;¸AÔ+>ÀÑ+BÐ)CÀTÔEUÐVWÔEXÕ`eÔ`mÐnÑnÔnÐÝ!œL¨4Ô+;¸AÔ+>ÀÑ+BÐ)CÀTÔEUÐVWÔEXÕ`eÔ`mÐnÑnÔnÐÝ %¤­E¬NÐ<MÐO`Ð;aÐlpÐ,qÑ,qÔ,qÑ rÔ rÐØ 5× =Ò =¸aÀÀAÑ FÔ F× QÒ QÑ SÔ S× ]Ò ]Ð^_Ñ `Ô `Ðà˜a˜a˜a    A A A q˜jÐ)Ð)Ô)¨TÔ-=¸aÔ-@À1Ñ-DÑDÐ)Ð)Ñ)Ø˜a˜a˜a    A A A q˜jÐ)Ð)Ô)¨TÔ-=¸aÔ-@À1Ñ-DÑDÐ)Ð)Ñ)à Ñ"ÐåŒJÐ,Ñ-Ô-µ´
½5¼9ÐEZÑ;[Ô;[Ð^aÑ;aÑ0bÔ0bÑbÐehÑhð 	ð 	×ÒÐ4Ð6KÑLÔLÐLÐLÐLr8   r&   c                 óÌ   — t          |                      | j        ¦  «                             d| j        ¦  «        | j        | j        ¦  «        }dt          j        |¦  «        z  }|S )Nr)   é   )	rC   rÖ   rÛ   r=   rn   r:   r;   r-   Úsigmoid)rT   rB   s     r6   rÇ   z3ShiftedWindowAttentionV2.get_relative_position_biaso  s`   € Ý!<Ø�LŠL˜Ô3Ñ4Ô4×9Ò9¸"¸d¼nÑMÔMØÔ(ØÔñ"
ô "
Ðð
 "$¥e¤mÐ4JÑ&KÔ&KÑ!KÐØ%Ð%r8   r%   c                 óø   — |                       ¦   «         }t          || j        j        | j        j        || j        | j        | j        | j        | j	        | j        j
        | j        j
        | j        | j        ¬¦  «        S )rÉ   )ro   rp   rq   rr   rs   rt   ru   )rÇ   r¥   rš   rÊ   r«   r;   rn   ro   rp   rq   rL   rt   ru   rË   s      r6   rZ   z ShiftedWindowAttentionV2.forwardx  sv   € ð "&×!@Ò!@Ñ!BÔ!BÐÝ'ØØŒHŒOØŒIÔØ"ØÔØŒNØ”Ø"Ô4Ø”LØ”X”]Ø”i”nØÔ(Ø”]ð
ñ 
ô 
ð 	
r8   rÌ   )r\   r]   r^   r_   ra   r   rÍ   r�   rO   r¬   r-   r	   rÇ   rZ   rc   rd   s   @r6   rÏ   rÏ   ;  sú   ø€ € € € € ðð ð ØØ#&Øð<ð <àð<ð ˜#”Yð<ð ˜”Ið	<ð
 ð<ð ð<ð ð<ð !ð<ð ð<ð <ð <ð <ð <ð <ð>Mð Mð Mð &¨E¬Lð &ð &ð &ð &ð
˜ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r8   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„Zdefd„Zˆ x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
    ç      @rj   rF   rn   r;   ro   Ú	mlp_ratiorq   rp   Ústochastic_depth_probrG   .Ú
attn_layerc                 ót  •— t          ¦   «                              ¦   «          t          | ¦  «          |	|¦  «        | _         |
||||||¬¦  «        | _        t          |d¦  «        | _         |	|¦  «        | _        t          |t          ||z  ¦  «        |gt          j        d |¬¦  «        | _        | j                             ¦   «         D ]m}t          |t          j        ¦  «        rQt          j                             |j        ¦  «         |j        �&t          j                             |j        d¬¦  «         Œnd S )N)rp   rq   Úrow)Úactivation_layerrÒ   rq   g�íµ ÷Æ°>r°   )rN   rO   r   Únorm1rž   r   Ústochastic_depthÚnorm2r   ra   r   ÚGELUÚmlpÚmodulesÚ
isinstancerP   r´   Úxavier_uniform_rÊ   rL   Únormal_)rT   rF   rn   r;   ro   ré   rq   rp   rê   rG   rë   ÚmrU   s               €r6   rO   zSwinTransformerBlock.__init__¡  s+  ø€ õ 	‰Œ×ÒÑÔÐÝ˜DÑ!Ô!Ð!à�Z ‘_”_ˆŒ
Ø�JØØØØØ/Øð
ñ 
ô 
ˆŒ	õ !0Ð0EÀuÑ MÔ MˆÔØ�Z ‘_”_ˆŒ
Ý�s�S  y¡Ñ1Ô1°3Ð7Í"Ì'Ð[_ÐipÐqÑqÔqˆŒà”×!Ò!Ñ#Ô#ð 	6ð 	6ˆAÝ˜!�RœYÑ'Ô'ð 6Ý”×'Ò'¨¬Ñ1Ô1Ð1Ø”6Ð%Ý”G—O’O A¤F°�OÑ5Ô5Ð5øð		6ð 	6r8   r%   c                 óþ   — ||                       |                      |                      |¦  «        ¦  «        ¦  «        z   }||                       |                      |                      |¦  «        ¦  «        ¦  «        z   }|S rÆ   )rð   rž   rï   ró   rñ   rY   s     r6   rZ   zSwinTransformerBlock.forwardÄ  sc   € Ø�×%Ò% d§i¢i°·
²
¸1±´Ñ&>Ô&>Ñ?Ô?Ñ?ˆØ�×%Ò% d§h¢h¨t¯zªz¸!©}¬}Ñ&=Ô&=Ñ>Ô>Ñ>ˆØˆr8   )r\   r]   r^   r_   r   r`   r§   ra   r   r�   r   rb   rO   r	   rZ   rc   rd   s   @r6   rç   rç   ‘  sþ   ø€ € € € € ðð ð* ØØ#&Ø'*Ø/1¬|Ø/Eð!6ð !6àð!6ð ð!6ð ˜#”Yð	!6ð
 ˜”Ið!6ð ð!6ð ð!6ð !ð!6ð  %ð!6ð ˜S "¤)˜^Ô,ð!6ð ˜S "¤)˜^Ô,ð!6ð !6ð !6ð !6ð !6ð !6ðF˜ð ð ð ð ð ð ð ð r8   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„Zdefd„Zˆ xZS )Ú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è   rj   rF   rn   r;   ro   ré   rq   rp   rê   rG   .rë   c                 ó^   •— t          ¦   «                              |||||||||	|
¬¦
  «
         d S )N)ré   rq   rp   rê   rG   rë   )rN   rO   )rT   rF   rn   r;   ro   ré   rq   rp   rê   rG   rë   rU   s              €r6   rO   zSwinTransformerBlockV2.__init__Ú  sN   ø€ õ 	‰Œ×ÒØØØØØØØ/Ø"7Ø!Ø!ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r8   r%   c                 óþ   — ||                       |                      |                      |¦  «        ¦  «        ¦  «        z   }||                       |                      |                      |¦  «        ¦  «        ¦  «        z   }|S rÆ   )rð   rï   rž   rñ   ró   rY   s     r6   rZ   zSwinTransformerBlockV2.forwardô  se   € ð �×%Ò% d§j¢j°·²¸1±´Ñ&>Ô&>Ñ?Ô?Ñ?ˆØ�×%Ò% d§j¢j°·²¸!±´Ñ&=Ô&=Ñ>Ô>Ñ>ˆØˆr8   )r\   r]   r^   r_   r   r`   rÏ   ra   r   r�   r   rb   rO   r	   rZ   rc   rd   s   @r6   rû   rû   Ê  sý   ø€ € € € € ðð ð* ØØ#&Ø'*Ø/1¬|Ø/Gð
ð 
àð
ð ð
ð ˜#”Yð	
ð
 ˜”Ið
ð ð
ð ð
ð !ð
ð  %ð
ð ˜S "¤)˜^Ô,ð
ð ˜S "¤)˜^Ô,ð
ð 
ð 
ð 
ð 
ð 
ð4˜ð ð ð ð ð ð ð ð r8   rû   c                   ó  ‡ — 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„Zd„ Zˆ x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è   rj   gš™™™™™¹?iè  NÚ
patch_sizeÚ	embed_dimÚdepthsrn   r;   ré   rq   rp   rê   Únum_classesrG   .ÚblockÚdownsample_layerc                 óæ  •‡— t          ¦   «                              ¦   «          t          | ¦  «         |
| _        |€t          }|€t          t          j        d¬¦  «        }g }|                     t          j	        t          j
        d||d         |d         f|d         |d         f¬¦  «        t          g d¢¦  «         ||¦  «        ¦  «        ¦  «         t          |¦  «        }d}t          t          |¦  «        ¦  «        D ]Ð}g }|d|z  z  }t          ||         ¦  «        D ]XŠ|	t          |¦  «        z  |dz
  z  }|                      ||||         |ˆfd	„|D ¦   «         |||||¬
¦	  «	        ¦  «         |dz  }ŒY|                     t          j	        |Ž ¦  «         |t          |¦  «        dz
  k     r|                      |||¦  «        ¦  «         ŒÑt          j	        |Ž | _        |dt          |¦  «        dz
  z  z  } ||¦  «        | _        t          g d¢¦  «        | _        t          j        d¦  «        | _        t          j        d¦  «        | _        t          j        ||
¦  «        | _        |                      ¦   «         D ]m}t5          |t          j        ¦  «        rQt          j                             |j        d¬¦  «         |j        �$t          j                             |j        ¦  «         Œnd S )Ngñhãˆµøä>)Úepsry   r   r   )Úkernel_sizeÚstride)r   r
   ry   r   r
   c                 ó0   •— g | ]}‰d z  dk    rdn|d z  ‘ŒS )r
   r   © )Ú.0r¤   Úi_layers     €r6   ú
<listcomp>z,SwinTransformer.__init__.<locals>.<listcomp>C  s/   ø€ Ð#[Ð#[Ð#[È!¨°1©¸Ò)9Ð)9 A A¸qÀA¹vÐ#[Ð#[Ð#[r8   )r;   ro   ré   rq   rp   rê   rG   )r   ry   r   r
   r¯   r°   ) rN   rO   r   r  rç   r   r   r`   ÚappendrÔ   ÚConv2dr   r   Úranger©   r�   ÚfeaturesrR   r>   ÚAdaptiveAvgPool2dÚavgpoolÚFlattenr¾   rP   Úheadrô   rõ   r´   rµ   rÊ   rL   Úzeros_)rT   rÿ   r   r  rn   r;   ré   rq   rp   rê   r  rG   r  r  ÚlayersÚtotal_stage_blocksÚstage_block_idÚi_stageÚstagerF   Úsd_probÚnum_featuresrø   r  rU   s                          @€r6   rO   zSwinTransformer.__init__  s  øø€ õ  	‰Œ×ÒÑÔÐÝ˜DÑ!Ô!Ð!Ø&ˆÔàˆ=Ý(ˆEØÐÝ ¥¤°4Ð8Ñ8Ô8ˆJà"$ˆà�ŠÝŒMÝ”	Ø�y¨z¸!¬}¸jÈ¼mÐ.LÐV`ÐabÔVcÐeoÐpqÔerÐUsðñ ô õ ˜˜˜Ñ%Ô%Ø�
˜9Ñ%Ô%ñô ñ	
ô 	
ð 	
õ ! ™[œ[ÐØˆå�S ™[œ[Ñ)Ô)ð 	Að 	AˆGØ%'ˆEØ˜a ™jÑ(ˆCÝ  ¨¤Ñ1Ô1ð $ð $�à/µ%¸Ñ2GÔ2GÑGÐK]Ð`aÑKaÑb�Ø—’Ø�EØØ! 'Ô*Ø$/Ø#[Ð#[Ð#[Ð#[È{Ð#[Ñ#[Ô#[Ø"+Ø 'Ø*;Ø.5Ø#-ð
ñ 
ô 
ñô ð ð  !Ñ#��Ø�MŠM�"œ-¨Ð/Ñ0Ô0Ð0à�#˜f™+œ+¨™/Ò*Ð*Ø—’Ð.Ð.¨s°JÑ?Ô?Ñ@Ô@Ð@øÝœ vÐ.ˆŒà  1­¨V©¬°q©Ñ#9Ñ9ˆØ�J˜|Ñ,Ô,ˆŒ	Ý˜|˜|˜|Ñ,Ô,ˆŒÝÔ+¨AÑ.Ô.ˆŒÝ”z !‘}”}ˆŒÝ”I˜l¨KÑ8Ô8ˆŒ	à—’‘”ð 	+ð 	+ˆAÝ˜!�RœYÑ'Ô'ð +Ý”×%Ò% a¤h°DÐ%Ñ9Ô9Ð9Ø”6Ð%Ý”G—N’N 1¤6Ñ*Ô*Ð*øð		+ð 	+r8   c                 ó  — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rÆ   )r  rR   r>   r  r¾   r  rY   s     r6   rZ   zSwinTransformer.forward_  sc   € Ø�MŠM˜!ÑÔˆØ�IŠI�a‰LŒLˆØ�LŠL˜‰OŒOˆØ�LŠL˜‰OŒOˆØ�LŠL˜‰OŒOˆØ�IŠI�a‰LŒLˆØˆr8   )r\   r]   r^   r_   rE   r   ra   r�   r   r   r   rb   rO   rZ   rc   rd   s   @r6   r   r   ü  sE  ø€ € € € € ðð ð4 ØØ#&Ø'*ØØ9=Ø48Ø5AðM+ð M+à˜”IðM+ð ðM+ð �S”	ð	M+ð
 ˜”9ðM+ð ˜#”YðM+ð ðM+ð ðM+ð !ðM+ð  %ðM+ð ðM+ð ˜X c¨2¬9 nÔ5Ô6ðM+ð ˜  b¤i Ô0Ô1ðM+ð # 3¨¬	 >Ô2ðM+ð M+ð M+ð M+ð M+ð M+ð^ð ð ð ð ð ð r8   r   rÿ   r   r  rê   ÚweightsÚprogressÚkwargsc           
      óÚ   — |�)t          |dt          |j        d         ¦  «        ¦  «         t          d| |||||dœ|¤Ž}	|�*|	                     |                     |d¬¦  «        ¦  «         |	S )Nr  Ú
categories)rÿ   r   r  rn   r;   rê   T)r   Ú
check_hashr
  )r   r©   Úmetar   Úload_state_dictÚget_state_dict)
rÿ   r   r  rn   r;   rê   r  r   r!  Úmodels
             r6   Ú_swin_transformerr)  i  s•   € ð ÐÝ˜f mµS¸¼ÀlÔ9SÑ5TÔ5TÑUÔUÐUåð ØØØØØØ3ðð ð ðð €Eð ÐØ×Ò˜g×4Ò4¸hÐSWÐ4ÑXÔXÑYÔYÐYà€Lr8   r#  c                   ót   — e Zd Z ed eeddej        ¬¦  «        i e¥ddddd	d
dœi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@g‹lçû©ñW@©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©r\   r]   r^   r   r   r   r   ÚBICUBICÚ_COMMON_METAÚIMAGENET1K_V1ÚDEFAULTr
  r8   r6   r   r   Œ  s—   € € € € € Ø�GØEØ�7Ø¨3¸CÐO`ÔOhð
ñ 
ô 
ð
Øð
à"Ø"ØmàØ#Ø#ð ð  ðð Ø Øtð
ð 
ð 
ðñ ô €Mð* €G€G€Gr8   r   c                   ót   — e Zd Z ed eeddej        ¬¦  «        i e¥ddddd	d
dœiddddœ¥¬¦  «        Z	e	Z
dS )r   z7https://download.pytorch.org/models/swin_s-5e29d889.pthr+  éö   r-  irîôr1  r2  r3  g�•C‹ÌT@g×£p=
X@r4  g¬Zd{!@gþÔxé&¹g@r5  r6  r>  NrA  r
  r8   r6   r   r   ¥  s—   € € € € € Ø�GØEØ�7Ø¨3¸CÐO`ÔOhð
ñ 
ô 
ð
Øð
à"Ø"ØmàØ#Ø#ð ð  ðð Ø!Øtð
ð 
ð 
ðñ ô €Mð* €G€G€Gr8   r   c                   ót   — e Zd Z ed eeddej        ¬¦  «        i e¥ddddd	d
dœiddddœ¥¬¦  «        Z	e	Z
dS )r   z7https://download.pytorch.org/models/swin_b-68c6b09e.pthr+  éî   r-  i <;r1  r2  r3  gh‘í|?åT@g)\�Âõ(X@r4  gé&1¬Ü.@gçû©ñÒõt@r5  r6  r>  NrA  r
  r8   r6   r   r   ¾  s—   € € € € € Ø�GØEØ�7Ø¨3¸CÐO`ÔOhð
ñ 
ô 
ð
Øð
à"Ø"ØmàØ#Ø#ð ð  ðð Ø!Øtð
ð 
ð 
ðñ ô €Mð* €G€G€Gr8   r   c                   ót   — e Zd Z ed eeddej        ¬¦  «        i e¥ddddd	d
dœiddddœ¥¬¦  «        Z	e	Z
dS )r   z:https://download.pytorch.org/models/swin_v2_t-b137f0e2.pthé   é  r-  iRœ°©rK  rK  úXhttps://github.com/pytorch/vision/tree/main/references/classification#swintransformer-v2r3  gøSã¥›„T@gœÄ °rX@r4  gÃõ(\�Â@gòÒMb([@r5  r6  r>  NrA  r
  r8   r6   r   r   ×  s—   € € € € € Ø�GØHØ�7Ø¨3¸CÐO`ÔOhð
ñ 
ô 
ð
Øð
à"Ø"ØpàØ#Ø#ð ð  ðð Ø!Øtð
ð 
ð 
ðñ ô €Mð* €G€G€Gr8   r   c                   ót   — e Zd Z ed eeddej        ¬¦  «        i e¥ddddd	d
dœiddddœ¥¬¦  «        Z	e	Z
dS )r   z:https://download.pytorch.org/models/swin_v2_s-637d8ceb.pthrK  rL  r-  iâîörM  rN  r3  g!°rh‘íT@gNbX94X@r4  gd;ßO�'@gš™™™™Õg@r5  r6  r>  NrA  r
  r8   r6   r   r   ð  ó—   € € € € € Ø�GØHØ�7Ø¨3¸CÐO`ÔOhð
ñ 
ô 
ð
Øð
à"Ø"ØpàØ#Ø#ð ð  ðð Ø!Øtð
ð 
ð 
ðñ ô €Mð* €G€G€Gr8   r   c                   ót   — e Zd Z ed eeddej        ¬¦  «        i e¥ddddd	d
dœiddddœ¥¬¦  «        Z	e	Z
dS )r   z:https://download.pytorch.org/models/swin_v2_b-781e5279.pthrK  i  r-  ià·=rM  rN  r3  gºI+U@gžï§ÆK7X@r4  g33333S4@gË¡E¶óu@r5  r6  r>  NrA  r
  r8   r6   r   r   	  rP  r8   r   Ú
pretrained)r  )r  r   c                 óp   — 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:
    rJ   é`   ©r
   r
   é   r
   ©ry   rV  é   é   é   çš™™™™™É?©rÿ   r   r  rn   r;   rê   r  r   r
  )r   Úverifyr)  ©r  r   r!  s      r6   r   r   "  se   € õ. ×#Ò# GÑ,Ô,€Gåð 
Ø�q�6ØØˆ|ˆ|Ø �.�.Ø˜�FØ!ØØð
ð 
ð ð
ð 
ð 
r8   c                 óp   — t                                | ¦  «        } t          dddgdg d¢g d¢ddgd| |dœ|¤ŽS )	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:
    rJ   rT  ©r
   r
   é   r
   rW  rZ  ç333333Ó?r\  r
  )r   r]  r)  r^  s      r6   r    r    H  se   € õ. ×#Ò# GÑ,Ô,€Gåð 
Ø�q�6ØØˆ}ˆ}Ø �.�.Ø˜�FØ!ØØð
ð 
ð ð
ð 
ð 
r8   c                 óp   — t                                | ¦  «        } t          dddgdg d¢g d¢ddgd| |dœ|¤ŽS )	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:
    rJ   é€   r`  ©rJ   rÚ   rã   é    rZ  ç      à?r\  r
  )r   r]  r)  r^  s      r6   r!   r!   n  se   € õ. ×#Ò# GÑ,Ô,€Gåð 
Ø�q�6ØØˆ}ˆ}Ø �.�.Ø˜�FØ!ØØð
ð 
ð ð
ð 
ð 
r8   c                 óˆ   — 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:
    rJ   rT  rU  rW  rÚ   r[  ©
rÿ   r   r  rn   r;   rê   r  r   r  r  r
  )r   r]  r)  rû   rg   r^  s      r6   r"   r"   ”  sk   € õ.  ×&Ò& wÑ/Ô/€Gåð Ø�q�6ØØˆ|ˆ|Ø �.�.Ø˜�FØ!ØØÝ$Ý'ðð ð ðð ð r8   c                 óˆ   — t                                | ¦  «        } t          dddgdg d¢g d¢ddgd| |t          t          dœ
|¤ŽS )	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:
    rJ   rT  r`  rW  rÚ   rb  ri  r
  )r   r]  r)  rû   rg   r^  s      r6   r#   r#   ¼  sk   € õ.  ×&Ò& wÑ/Ô/€Gåð Ø�q�6ØØˆ}ˆ}Ø �.�.Ø˜�FØ!ØØÝ$Ý'ðð ð ðð ð r8   c                 óˆ   — t                                | ¦  «        } t          dddgdg d¢g d¢ddgd| |t          t          dœ
|¤ŽS )	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:
    rJ   rd  r`  re  rÚ   rg  ri  r
  )r   r]  r)  rû   rg   r^  s      r6   r$   r$   ä  sk   € õ.  ×&Ò& wÑ/Ô/€Gåð Ø�q�6ØØˆ}ˆ}Ø �.�.Ø˜�FØ!ØØÝ$Ý'ðð ð ðð ð r8   )rj   rj   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__r7   ÚfxÚwrapra   rC   rb   rE   rg   r�   rÍ   r¥   r§   rÏ   rç   rû   r   r)  rC  r   r   r   r   r   r   rD  r   r    r!   r"   r#   r$   r
  r8   r6   ú<module>rz     s¡  ðØ €€€Ø Ð Ð Ð Ð Ð Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð à #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bðð ð €ð"˜%œ,ð ¨5¬<ð ð ð ð ð „‡‚Ð"Ñ #Ô #Ð #ð"Ø"'¤,ð"ØINÌð"ØdhÐilÔdmð"à
„\ð"ð "ð "ð "ð „‡‚Ð+Ñ ,Ô ,Ð ,ðð ð ð ð �2”9ñ ô ð ð6ð ð ð ð �R”Yñ ô ð ðF  #ØØ!%Ø"&Ø*.Øðpð pØðpàðpð ðpð #ð	pð
 �c”ðpð ðpð �S”	ðpð ðpð ðpð �vÔðpð ˜Ôðpð ˜%œ,Ô'ðpð ðpð ðpð pð pð pðf „‡‚Ð(Ñ )Ô )Ð )ðN
ð N
ð N
ð N
ð N
˜RœYñ N
ô N
ð N
ðbS
ð S
ð S
ð S
ð S
Ð5ñ S
ô S
ð S
ðl6ð 6ð 6ð 6ð 6˜2œ9ñ 6ô 6ð 6ðr/ð /ð /ð /ð /Ð1ñ /ô /ð /ðdjð jð jð jð j�b”iñ jô jð jðZØ�S”	ðàðð �ŒIðð �CŒyð	ð
 �c”ðð !ðð �kÔ"ðð ðð ðð ðð ð ð ð> Ð&ð€ð
ð ð ð ð �[ñ ô ð ð2ð ð ð ð �[ñ ô ð ð2ð ð ð ð �[ñ ô ð ð2ð ð ð ð ˜ñ ô ð ð2ð ð ð ð ˜ñ ô ð ð2ð ð ð ð ˜ñ ô ð ð2 €ÑÔØÐ ,°Ô0LÐ!MÐNÑNÔNØ26Èð !ð !ð !�x Ô/ð !À$ð !ÐY\ð !Ðapð !ð !ð !ñ OÔNñ Ôð!ðH €ÑÔØÐ ,°Ô0LÐ!MÐNÑNÔNØ26Èð !ð !ð !�x Ô/ð !À$ð !ÐY\ð !Ðapð !ð !ð !ñ OÔNñ Ôð!ðH €ÑÔØÐ ,°Ô0LÐ!MÐNÑNÔNØ26Èð !ð !ð !�x Ô/ð !À$ð !ÐY\ð !Ðapð !ð !ð !ñ OÔNñ Ôð!ðH €ÑÔØÐ ,Ð0AÔ0OÐ!PÐQÑQÔQØ8<Ètð #ð #ð #˜(Ð#4Ô5ð #Èð #Ð_bð #Ðgvð #ð #ð #ñ RÔQñ Ôð#ðL €ÑÔØÐ ,Ð0AÔ0OÐ!PÐQÑQÔQØ8<Ètð #ð #ð #˜(Ð#4Ô5ð #Èð #Ð_bð #Ðgvð #ð #ð #ñ RÔQñ Ôð#ðL €ÑÔØÐ ,Ð0AÔ0OÐ!PÐQÑQÔQØ8<Ètð #ð #ð #˜(Ð#4Ô5ð #Èð #Ð_bð #Ðgvð #ð #ð #ñ RÔQñ Ôð#ð #ð #r8   