Ë
    [²j£™  ã                   óÎ  — 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	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jD                  jG                  d«       dej                  dej                  de$e%   dej                  fd„Z&ejD                  jG                  d«        G d„ de	jN                  «      Z( G d„ de	jN                  «      Z)	 	 	 	 	 	 dSd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jD                  jG                  d*«        G d+„ d,e	jN                  «      Z- G d-„ d.e-«      Z. G d/„ d0e	jN                  «      Z/ G d1„ d2e/«      Z0 G d3„ d4e	jN                  «      Z1d5e$e%   d6e%d7e$e%   d!e$e%   de$e%   d8e*d9ee   d:e+d;ede1fd<„Z2d=eiZ3 G d>„ d?e«      Z4 G d@„ dAe«      Z5 G dB„ dCe«      Z6 G dD„ dEe«      Z7 G dF„ dGe«      Z8 G dH„ dIe«      Z9 e«        edJe4jt                  f¬K«      dddLœd9ee4   d:e+d;ede1fdM„«       «       Z; e«        edJe5jt                  f¬K«      dddLœd9ee5   d:e+d;ede1fdN„«       «       Z< e«        edJe6jt                  f¬K«      dddLœd9ee6   d:e+d;ede1fdO„«       «       Z= e«        edJe7jt                  f¬K«      dddLœd9ee7   d:e+d;ede1fdP„«       «       Z> e«        edJe8jt                  f¬K«      dddLœd9ee8   d:e+d;ede1fdQ„«       «       Z? e«        edJe9jt                  f¬K«      dddLœd9ee9   d:e+d;ede1fdR„«       «       Z@y)Té    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           
      ó,  — | 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           úb/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torchvision/models/swin_transformer.pyÚ_patch_merging_padr6   #   sÖ   € Ø�g‰g�b�cˆl�G€A€qˆ!Ü	�‰ˆa�!�Q˜˜1˜q™5 ! Q¨¡UÐ+Ó,€AØ	
ˆ3���1��a�d˜�dšAÐÑ	€BØ	
ˆ3���1��a�d˜�dšAÐÑ	€BØ	
ˆ3���1��a�d˜�dšAÐÑ	€BØ	
ˆ3���1��a�d˜�dšAÐÑ	€BÜ�	‰	�2�r˜2˜rÐ" BÓ'€AØ€Hó    r6   Úrelative_position_bias_tableÚrelative_position_indexÚwindow_sizec                 ó¬   — |d   |d   z  }| |   }|j                  ||d«      }|j                  ddd«      j                  «       j                  d«      }|S )Nr   r   r(   r	   )ÚviewÚpermuteÚ
contiguousÚ	unsqueeze)r8   r9   r:   ÚNÚrelative_position_biass        r5   Ú_get_relative_position_biasrB   1   sg   € ð 	�A‰˜ Q™Ñ'€AØ9Ð:QÑRÐØ3×8Ñ8¸¸A¸rÓBÐØ3×;Ñ;¸A¸qÀ!ÓD×OÑOÓQ×[Ñ[Ð\]Ó^ÐØ!Ð!r7   rB   c                   ón   ‡ — 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  «      | _        y ©Né   r	   F©Úbias©ÚsuperÚ__init__r   rE   r   ÚLinearÚ	reductionÚnorm©ÚselfrE   rF   Ú	__class__s      €r5   rN   zPatchMerging.__init__E   óI   ø€ Ü‰ÑÔÜ˜DÔ!ØˆŒÜŸ™ 1 s¡7¨A°©G¸%Ô@ˆŒÙ˜q 3™wÓ'ˆ�	r7   r$   c                 ó`   — t        |«      }| j                  |«      }| j                  |«      }|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   rQ   rP   ©rS   r$   s     r5   ÚforwardzPatchMerging.forwardL   s.   € ô ˜qÓ!ˆØ�I‰I�a‹LˆØ�N‰N˜1ÓˆØˆr7   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú	LayerNormÚintr   ÚModulerN   r   rY   Ú__classcell__©rT   s   @r5   rD   rD   >   ó?   ø„ ñð IKÏÉñ (˜Cð (¨X°c¸2¿9¹9°nÑ-Eõ (ð
˜÷ 
r7   rD   c                   ón   ‡ — 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.
    rE   rF   .c                 ó¬   •— t         ‰| �  «        t        | «       || _        t	        j
                  d|z  d|z  d¬«      | _         |d|z  «      | _        y rH   rL   rR   s      €r5   rN   zPatchMergingV2.__init__`   rU   r7   r$   c                 ó`   — t        |«      }| j                  |«      }| j                  |«      }|S rW   )r6   rP   rQ   rX   s     r5   rY   zPatchMergingV2.forwardg   s.   € ô ˜qÓ!ˆØ�N‰N˜1ÓˆØ�I‰I�a‹LˆØˆr7   rZ   rc   s   @r5   rf   rf   Y   rd   r7   rf   TÚinputÚ
qkv_weightÚproj_weightrA   Ú	num_headsÚ
shift_sizeÚattention_dropoutÚdropoutÚqkv_biasÚ	proj_biasÚlogit_scaleÚtrainingc           	      óH  — | j                   \  }}}}|d   ||d   z  z
  |d   z  }|d   ||d   z  z
  |d   z  }t        j                  | ddd|d|f«      }|j                   \  }}}}|j                  «       }|d   |k\  rd|d<   |d   |k\  rd|d<   t	        |«      dkD  r"t        j                  ||d    |d    fd¬«      }||d   z  ||d   z  z  }|j                  |||d   z  |d   ||d   z  |d   |«      }|j                  dddddd«      j                  ||z  |d   |d   z  |«      }|�;|	�9|	j                  «       }	|	j                  «       dz  }|	|d|z   j                  «        t        j                  |||	«      }|j                  |j                  d«      |j                  d«      d|||z  «      j                  ddddd«      }|d   |d   |d   }}}|�}t        j                  |d
¬«      t        j                  |d
¬«      j!                  dd
«      z  }t        j"                  |t%        j&                  d«      ¬«      j)                  «       }||z  }n,|||z  dz  z  }|j+                  |j!                  dd
«      «      }||z   }t	        |«      dkD  �r¿|j-                  ||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  }!Œ  Œ' |j                  ||d   z  |d   ||d   z  |d   «      }|j                  dddd«      j                  ||d   |d   z  «      }|j/                  d«      |j/                  d«      z
  }|j1                  |dk7  t3        d«      «      j1                  |dk(  t3        d«      «      }|j                  |j                  d«      |z  |||j                  d«      |j                  d«      «      }||j/                  d«      j/                  d«      z   }|j                  d
||j                  d«      |j                  d«      «      }t        j4                  |d
¬«      }t        j6                  |||¬«      }|j+                  |«      j!                  dd«      j                  |j                  d«      |j                  d«      |«      }t        j                  |||
«      }t        j6                  |||¬«      }|j                  |||d   z  ||d   z  |d   |d   |«      }|j                  dddddd«      j                  ||||«      }t	        |«      dkD  r t        j                  ||d   |d   fd¬«      }|d	d	…d	|…d	|…d	d	…f   j9                  «       }|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	   rI   é   Nr(   )rE   éþÿÿÿg      Y@)Úmaxg      à¿g      YÀç        )Úprs   )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Úsoftmaxro   r>   )$ri   rj   rk   rA   r:   rl   rm   rn   ro   rp   rq   rr   rs   ÚBr.   r/   ÚCÚpad_rÚpad_br$   r0   Úpad_HÚpad_WÚnum_windowsÚlengthÚqkvÚqÚkÚvÚattnÚ	attn_maskÚh_slicesÚw_slicesÚcountÚhÚws$                                       r5   Ú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€AØŸ™Ñ€A€uˆe�Qà—‘Ó"€Jà�1�~˜ÒØˆ
�1‰Ø�1�~˜ÒØˆ
�1‰ô ˆ:ƒ˜ÒÜ�J‰J�q :¨a¡= .°:¸a±=°.Ð!AÈÔOˆð ˜K¨™NÑ*¨u¸ÀA¹Ñ/FÑG€KØ	�‰ˆq�%˜; q™>Ñ)¨;°q©>¸5ÀKÐPQÁNÑ;RÐT_Ð`aÑTbÐdeÓf€AØ	�	‰	�!�Q˜˜1˜a Ó#×+Ñ+¨A°©O¸[È¹^ÈkÐZ[ÉnÑ=\Ð^_Ó`€Að Ð 8Ð#7Ø—>‘>Ó#ˆØ—‘Ó! QÑ&ˆØ�˜!˜f™*Ð%×+Ñ+Ô-Ü
�(‰(�1�j (Ó
+€CØ
�+‰+�a—f‘f˜Q“i §¡¨£¨A¨y¸!¸y¹.Ó
I×
QÑ
QÐRSÐUVÐXYÐ[\Ð^_Ó
`€CØ�!‰f�c˜!‘f˜c !™fˆ!€q€AØÐä�{‰{˜1 "Ô%¬¯©°A¸2Ô(>×(HÑ(HÈÈRÓ(PÑPˆÜ—k‘k +´4·8±8¸E³?ÔC×GÑGÓ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ˆ	Ø×%Ñ% a¨¨A¨qÓ1×9Ñ9¸+À{ÐSTÁ~ÐXcÐdeÑXfÑGfÓgˆ	Ø×'Ñ'¨Ó*¨Y×-@Ñ-@ÀÓ-CÑCˆ	Ø×)Ñ)¨)°q©.¼%À»-ÓH×TÑTÐU^ÐbcÑUcÔejÐknÓeoÓpˆ	Ø�y‰y˜Ÿ™ › kÑ1°;À	È1Ï6É6ÐRSË9ÐVW×V\ÑV\Ð]^ÓV_Ó`ˆØ�i×)Ñ)¨!Ó,×6Ñ6°qÓ9Ñ9ˆØ�y‰y˜˜Y¨¯©¨q«	°1·6±6¸!³9Ó=ˆä�9‰9�T˜rÔ"€DÜ�9‰9�TÐ.¸ÔB€Dà�‰�A‹× Ñ   AÓ&×.Ñ.¨q¯v©v°a«y¸!¿&¹&À»)ÀQÓG€AÜ	�‰��K Ó+€AÜ	�	‰	�!�w¨Ô2€Að 	
�‰ˆq�%˜; q™>Ñ)¨5°KÀ±NÑ+BÀKÐPQÁNÐT_Ð`aÑTbÐdeÓf€AØ	�	‰	�!�Q˜˜1˜a Ó#×+Ñ+¨A¨u°e¸QÓ?€Aô ˆ:ƒ˜ÒÜ�J‰J�q *¨Q¡-°¸A±Ð!?ÀfÔMˆð 	
Š!ˆRˆaˆR��!�’Qˆ,‰×"Ñ"Ó$€AØ€Hr7   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`.
    rE   r:   rm   rl   rp   rq   rn   ro   c	                 óp  •— t         ‰	| �  «        t        |«      dk7  st        |«      dk7  rt        d«      ‚|| _        || _        || _        || _        || _        t        j                  ||dz  |¬«      | _        t        j                  |||¬«      | _        | j                  «        | j                  «        y )Nr	   z.window_size and shift_size must be of length 2rw   rJ   )rM   rN   ÚlenÚ
ValueErrorr:   rm   rl   rn   ro   r   rO   r™   ÚprojÚ#define_relative_position_bias_tableÚdefine_relative_position_index)
rS   rE   r:   rm   rl   rp   rq   rn   ro   rT   s
            €r5   rN   zShiftedWindowAttention.__init__ï   s�   ø€ ô 	‰ÑÔÜˆ{Ó˜qÒ ¤C¨
£O°qÒ$8ÜÐMÓNÐNØ&ˆÔØ$ˆŒØ"ˆŒØ!2ˆÔØˆŒä—9‘9˜S #¨¡'°Ô9ˆŒÜ—I‘I˜c 3¨YÔ7ˆŒ	à×0Ñ0Ô2Ø×+Ñ+Õ-r7   c                 ó  — t        j                  t        j                  d| j                  d   z  dz
  d| j                  d   z  dz
  z  | j
                  «      «      | _        t         j                  j                  | j                  d¬«       y )Nr	   r   r   ç{®Gáz”?©Ústd)	r   Ú	Parameterr,   Úzerosr:   rl   r8   ÚinitÚtrunc_normal_©rS   s    r5   r«   z:ShiftedWindowAttention.define_relative_position_bias_table	  sw   € ä,.¯L©LÜ�K‰K˜˜T×-Ñ-¨aÑ0Ñ0°1Ñ4¸¸T×=MÑ=MÈaÑ=PÑ9PÐSTÑ9TÑUÐW[×WeÑWeÓfó-
ˆÔ)ô 	�‰×Ñ˜d×?Ñ?ÀTÐÕJr7   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
  }|j                  ddd«      j                  «       }|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<   |j                  d«      j                  «       }| j                  d|«       y )Nr   r   Úij©Úindexingr	   r(   r9   )
r,   Úaranger:   ÚstackÚmeshgridÚflattenr=   r>   r~   Úregister_buffer)rS   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordsr9   s          r5   r¬   z5ShiftedWindowAttention.define_relative_position_index  s?  € ä—<‘< × 0Ñ 0°Ñ 3Ó4ˆÜ—<‘< × 0Ñ 0°Ñ 3Ó4ˆÜ—‘œUŸ^™^¨H°hÈÔNÓOˆÜŸ™ v¨qÓ1ˆØ(ªªA¨t¨Ñ4°~ÂaÈÊqÀjÑ7QÑQˆØ)×1Ñ1°!°Q¸Ó:×EÑEÓGˆØšš1˜a˜Ó  D×$4Ñ$4°QÑ$7¸!Ñ$;Ñ;Ó Øšš1˜a˜Ó  D×$4Ñ$4°QÑ$7¸!Ñ$;Ñ;Ó Øšš1˜a˜Ó  A¨×(8Ñ(8¸Ñ(;Ñ$;¸aÑ$?Ñ?Ó Ø"1×"5Ñ"5°bÓ"9×"AÑ"AÓ"CÐØ×ÑÐ6Ð8OÕPr7   r%   c                 óX   — t        | j                  | j                  | j                  «      S ©N)rB   r8   r9   r:   rµ   s    r5   Úget_relative_position_biasz1ShiftedWindowAttention.get_relative_position_bias  s(   € Ü*Ø×-Ñ-¨t×/KÑ/KÈT×M]ÑM]ó
ð 	
r7   r$   c                 óh  — | j                  «       }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]
        )rm   rn   ro   rp   rq   rs   )rÆ   r¤   r™   Úweightrª   r:   rl   rm   rn   ro   rK   rs   ©rS   r$   rA   s      r5   rY   zShiftedWindowAttention.forward#  s‚   € ð "&×!@Ñ!@Ó!BÐÜ'ØØ�H‰H�O‰OØ�I‰I×ÑØ"Ø×ÑØ�N‰NØ—‘Ø"×4Ñ4Ø—L‘LØ—X‘X—]‘]Ø—i‘i—n‘nØ—]‘]ô
ð 	
r7   ©TTr{   r{   )r[   r\   r]   r^   r`   ÚlistÚboolr�   rN   r«   r¬   r,   r   rÆ   rY   rb   rc   s   @r5   r¦   r¦   ê   s    ø„ ñð ØØ#&Øñ.àð.ð ˜#‘Yð.ð ˜‘Ið	.ð
 ð.ð ð.ð ð.ð !ð.ð õ.ò4KòQð
¨E¯L©Ló 
ð

˜ð 
 F÷ 
r7   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`.
    rE   r:   rm   rl   rp   rq   rn   ro   c	           
      ó4  •— 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	¬«      «      | _        |r\| j                  j                  j                  «       d
z  }	| j                  j                  |	d|	z   j                  j!                  «        y y )N)rp   rq   rn   ro   é
   r   r	   i   TrJ   )ÚinplaceFrw   )rM   rN   r   r±   r,   rŠ   Úonesrr   Ú
SequentialrO   ÚReLUÚcpb_mlpr™   rK   r‚   Údatarƒ   )rS   rE   r:   rm   rl   rp   rq   rn   ro   r˜   rT   s             €r5   rN   z!ShiftedWindowAttentionV2.__init__@  sç   ø€ ô 	‰ÑØØØØØØØ/Øð 	ô 		
ô Ÿ<™<¬¯	©	°"´u·z±zÀ9ÈaÐQRÐBSÓ7TÑ2TÓ(UÓVˆÔä—}‘}Ü�I‰I�a˜ 4Ô(¬"¯'©'¸$Ô*?ÄÇÁÈ3ÐPYÐ`eÔAfó
ˆŒñ Ø—X‘X—]‘]×(Ñ(Ó*¨aÑ/ˆFØ�H‰H�M‰M˜& 1 v¡:Ð.×3Ñ3×9Ñ9Õ;ð r7   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¬«      «      }|j                  ddd«      j                  «       j                  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  }| j                  d
|«       y )Nr   r   )Údtyper·   r¸   r	   é   g      ð?g      @Úrelative_coords_table)r,   rº   r:   Úfloat32r»   r¼   r=   r>   r?   ÚsignÚlog2Úabsr¾   )rS   Úrelative_coords_hÚrelative_coords_wrÛ   s       r5   r«   z<ShiftedWindowAttentionV2.define_relative_position_bias_table_  se  € ä!ŸL™L¨4×+;Ñ+;¸AÑ+>ÀÑ+BÐ)CÀT×EUÑEUÐVWÑEXÔ`e×`mÑ`mÔnÐÜ!ŸL™L¨4×+;Ñ+;¸AÑ+>ÀÑ+BÐ)CÀT×EUÑEUÐVWÑEXÔ`e×`mÑ`mÔnÐÜ %§¡¬E¯N©NÐ<MÐO`Ð;aÐlpÔ,qÓ rÐØ 5× =Ñ =¸aÀÀAÓ F× QÑ QÓ S× ]Ñ ]Ð^_Ó `Ðàša¢¢A q˜jÓ)¨T×-=Ñ-=¸aÑ-@À1Ñ-DÑDÓ)Øša¢¢A q˜jÓ)¨T×-=Ñ-=¸aÑ-@À1Ñ-DÑDÓ)à Ñ"Ðä�J‰JÐ,Ó-´·
±
¼5¿9¹9ÐEZÓ;[Ð^aÑ;aÓ0bÑbÐehÑhð 	ð 	×ÑÐ4Ð6KÕLr7   r%   c                 óÞ   — t        | j                  | j                  «      j                  d| j                  «      | j
                  | j                  «      }dt        j                  |«      z  }|S )Nr(   é   )	rB   rÖ   rÛ   r<   rl   r9   r:   r,   Úsigmoid)rS   rA   s     r5   rÆ   z3ShiftedWindowAttentionV2.get_relative_position_biaso  s_   € Ü!<Ø�L‰L˜×3Ñ3Ó4×9Ñ9¸"¸d¿n¹nÓMØ×(Ñ(Ø×Ñó"
Ðð
 "$¤e§m¡mÐ4JÓ&KÑ!KÐØ%Ð%r7   r$   c                 ó~  — | j                  «       }t        || j                  j                  | j                  j                  || j
                  | j                  | j                  | j                  | j                  | j                  j                  | j                  j                  | j                  | j                  ¬«      S )rÈ   )rm   rn   ro   rp   rq   rr   rs   )rÆ   r¤   r™   rÉ   rª   r:   rl   rm   rn   ro   rK   rr   rs   rÊ   s      r5   rY   z ShiftedWindowAttentionV2.forwardx  s‹   € ð "&×!@Ñ!@Ó!BÐÜ'ØØ�H‰H�O‰OØ�I‰I×ÑØ"Ø×ÑØ�N‰NØ—‘Ø"×4Ñ4Ø—L‘LØ—X‘X—]‘]Ø—i‘i—n‘nØ×(Ñ(Ø—]‘]ô
ð 	
r7   rË   )r[   r\   r]   r^   r`   rÌ   rÍ   r�   rN   r«   r,   r   rÆ   rY   rb   rc   s   @r5   rÏ   rÏ   ;  s“   ø„ ñð ØØ#&Øñ<àð<ð ˜#‘Yð<ð ˜‘Ið	<ð
 ð<ð ð<ð ð<ð !ð<ð õ<ò>Mð &¨E¯L©Ló &ð
˜÷ 
r7   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
    ç      @r{   rE   rl   r:   rm   Ú	mlp_ratioro   rn   Ústochastic_depth_probrF   .Ú
attn_layerc                 óL  •— t         ‰| �  «        t        | «        |	|«      | _         |
||||||¬«      | _        t        |d«      | _         |	|«      | _        t        |t        ||z  «      |gt        j                  d |¬«      | _        | j                  j                  «       D ]~  }t        |t        j                  «      sŒt        j                   j#                  |j$                  «       |j&                  €ŒTt        j                   j)                  |j&                  d¬«       Œ€ y )N)rn   ro   Úrow)Úactivation_layerrÒ   ro   g�íµ ÷Æ°>r¯   )rM   rN   r   Únorm1r�   r   Ústochastic_depthÚnorm2r
   r`   r   ÚGELUÚmlpÚmodulesÚ
isinstancerO   r³   Úxavier_uniform_rÉ   rK   Únormal_)rS   rE   rl   r:   rm   ré   ro   rn   rê   rF   rë   ÚmrT   s               €r5   rN   zSwinTransformerBlock.__init__¡  sè   ø€ ô 	‰ÑÔÜ˜DÔ!á “_ˆŒ
ÙØØØØØ/Øô
ˆŒ	ô !0Ð0EÀuÓ MˆÔÙ “_ˆŒ
Ü�sœS  y¡Ó1°3Ð7Ì"Ï'É'Ð[_ÐipÔqˆŒà—‘×!Ñ!Ó#ò 	6ˆAÜ˜!œRŸY™YÕ'Ü—‘×'Ñ'¨¯©Ô1Ø—6‘6Ñ%Ü—G‘G—O‘O A§F¡F°�OÕ5ñ		6r7   r$   c                 óÎ   — || j                  | j                  | j                  |«      «      «      z   }|| j                  | j                  | j	                  |«      «      «      z   }|S rÅ   )rð   r�   rï   ró   rñ   rX   s     r5   rY   zSwinTransformerBlock.forwardÄ  sS   € Ø�×%Ñ% d§i¡i°·
±
¸1³Ó&>Ó?Ñ?ˆØ�×%Ñ% d§h¡h¨t¯z©z¸!«}Ó&=Ó>Ñ>ˆØˆr7   )r[   r\   r]   r^   r   r_   r¦   r`   rÌ   r�   r   ra   rN   r   rY   rb   rc   s   @r5   rç   rç   ‘  s¶   ø„ ñð* ØØ#&Ø'*Ø/1¯|©|Ø/Eñ!6àð!6ð ð!6ð ˜#‘Yð	!6ð
 ˜‘Ið!6ð ð!6ð ð!6ð !ð!6ð  %ð!6ð ˜S "§)¡)˜^Ñ,ð!6ð ˜S "§)¡)˜^Ñ,õ!6ðF˜÷ r7   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è   r{   rE   rl   r:   rm   ré   ro   rn   rê   rF   .rë   c                 ó8   •— t         ‰| �  |||||||||	|
¬«
       y )N)ré   ro   rn   rê   rF   rë   )rM   rN   )rS   rE   rl   r:   rm   ré   ro   rn   rê   rF   rë   rT   s              €r5   rN   zSwinTransformerBlockV2.__init__Ú  s5   ø€ ô 	‰ÑØØØØØØØ/Ø"7Ø!Ø!ð 	õ 	
r7   r$   c                 óÎ   — || j                  | j                  | j                  |«      «      «      z   }|| j                  | j                  | j	                  |«      «      «      z   }|S rÅ   )rð   rï   r�   rñ   ró   rX   s     r5   rY   zSwinTransformerBlockV2.forwardô  sU   € ð �×%Ñ% d§j¡j°·±¸1³Ó&>Ó?Ñ?ˆØ�×%Ñ% d§j¡j°·±¸!³Ó&=Ó>Ñ>ˆØˆr7   )r[   r\   r]   r^   r   r_   rÏ   r`   rÌ   r�   r   ra   rN   r   rY   rb   rc   s   @r5   rû   rû   Ê  sµ   ø„ ñð* ØØ#&Ø'*Ø/1¯|©|Ø/Gñ
àð
ð ð
ð ˜#‘Yð	
ð
 ˜‘Ið
ð ð
ð ð
ð !ð
ð  %ð
ð ˜S "§)¡)˜^Ñ,ð
ð ˜S "§)¡)˜^Ñ,õ
ð4˜÷ r7   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è   r{   gš™™™™™¹?iè  NÚ
patch_sizeÚ	embed_dimÚdepthsrl   r:   ré   ro   rn   rê   Únum_classesrF   .ÚblockÚdownsample_layerc                 óx  •— t         ‰| �  «        t        | «       |
| _        |€t        }|€t        t        j                  d¬«      }g }|j                  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 ]Y  }|	t        |«      z  |dz
  z  }|j                   ||||   ||D �cg c]  }|dz  dk(  rdn|dz  ‘Œ c}|||||¬	«	      «       |dz  }Œ[ |j                  t        j                  |Ž «       |t        |«      dz
  k  sŒª|j                   |||«      «       ŒÃ t        j                  |Ž | _        |dt        |«      dz
  z  z  } ||«      | _        t        g d
¢«      | _        t        j&                  d«      | _        t        j*                  d«      | _        t        j.                  ||
«      | _        | j3                  «       D ]~  }t5        |t        j.                  «      sŒt        j6                  j9                  |j:                  d¬«       |j<                  €ŒVt        j6                  j?                  |j<                  «       Œ€ y c c}w )Ngñhãˆµøä>)Úepsrw   r   r   )Úkernel_sizeÚstride)r   r	   rw   r   r	   )r:   rm   ré   ro   rn   rê   rF   )r   rw   r   r	   r®   r¯   ) rM   rN   r   r  rç   r   r   r_   ÚappendrÔ   ÚConv2dr   r~   Úranger¨   r�   ÚfeaturesrQ   r=   ÚAdaptiveAvgPool2dÚavgpoolÚFlattenr½   rO   Úheadrô   rõ   r³   r´   rÉ   rK   Úzeros_)rS   rÿ   r   r  rl   r:   ré   ro   rn   rê   r  rF   r  r  ÚlayersÚtotal_stage_blocksÚstage_block_idÚi_stageÚstagerE   Úi_layerÚsd_probr£   Únum_featuresrø   rT   s                            €r5   rN   zSwinTransformer.__init__  s…  ø€ ô  	‰ÑÔÜ˜DÔ!Ø&ˆÔàˆ=Ü(ˆEØÐÜ ¤§¡°4Ô8ˆJà"$ˆà�‰Ü�M‰MÜ—	‘	Ø�y¨z¸!©}¸jÈ¹mÐ.LÐV`ÐabÑVcÐeoÐpqÑerÐUsôô šÓ%Ù˜9Ó%óô	
ô ! ›[ÐØˆäœS ›[Ó)ò 	AˆGØ%'ˆEØ˜a ™jÑ(ˆCÜ  ¨¡Ó1ò $�à/´%¸Ó2GÑGÐK]Ð`aÑKaÑb�Ø—‘ÙØØ! 'Ñ*Ø$/ØOZÖ#[È!¨°1©¸Ò)9¡A¸qÀA¹vÑ$EÒ#[Ø"+Ø 'Ø*;Ø.5Ø#-ô
ôð  !Ñ#‘ð!$ð" �M‰Mœ"Ÿ-™-¨Ð/Ô0àœ#˜f›+¨™/Ó*Ø—‘Ñ.¨s°JÓ?Õ@ð/	Aô0 Ÿ™ vÐ.ˆŒà  1¬¨V«°q©Ñ#9Ñ9ˆÙ˜|Ó,ˆŒ	Üš|Ó,ˆŒÜ×+Ñ+¨AÓ.ˆŒÜ—z‘z !“}ˆŒÜ—I‘I˜l¨KÓ8ˆŒ	à—‘“ò 	+ˆAÜ˜!œRŸY™YÕ'Ü—‘×%Ñ% a§h¡h°DÐ%Ô9Ø—6‘6Ñ%Ü—G‘G—N‘N 1§6¡6Õ*ñ		+ùò- $\s   ÄJ7c                 óÒ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }|S rÅ   )r  rQ   r=   r  r½   r  rX   s     r5   rY   zSwinTransformer.forward_  sV   € Ø�M‰M˜!ÓˆØ�I‰I�a‹LˆØ�L‰L˜‹OˆØ�L‰L˜‹OˆØ�L‰L˜‹OˆØ�I‰I�a‹LˆØˆr7   )r[   r\   r]   r^   rD   rÌ   r`   r�   r   r   r   ra   rN   rY   rb   rc   s   @r5   r   r   ü  sü   ø„ ñð4 ØØ#&Ø'*ØØ9=Ø48Ø5AñM+à˜‘IðM+ð ðM+ð �S‘	ð	M+ð
 ˜‘9ðM+ð ˜#‘YðM+ð ðM+ð ðM+ð !ðM+ð  %ðM+ð ðM+ð ˜X c¨2¯9©9 nÑ5Ñ6ðM+ð ˜  b§i¡i Ñ0Ñ1ðM+ð # 3¨¯	©	 >Ñ2õM+ö^r7   r   rÿ   r   r  rê   ÚweightsÚprogressÚkwargsc           
      ó¼   — |�#t        |dt        |j                  d   «      «       t        d| |||||dœ|¤Ž}	|�"|	j	                  |j                  |d¬«      «       |	S )Nr  Ú
categories)rÿ   r   r  rl   r:   rê   T)r  Ú
check_hash© )r   r¨   Úmetar   Úload_state_dictÚget_state_dict)
rÿ   r   r  rl   r:   rê   r  r  r  Úmodels
             r5   Ú_swin_transformerr&  i  s{   € ð ÐÜ˜f m´S¸¿¹ÀlÑ9SÓ5TÔUäð ØØØØØØ3ñð ñ€Eð ÐØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÓXÔYà€Lr7   r  c                   óp   — 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
y)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!  r7   r5   r   r   Œ  sg   „ ÙØEÙØ¨3¸CÐO`×OhÑOhô
ð
Øð
à"Ø"ØmàØ#Ø#ñ ðð Ø Øtò
ô€Mð* �Gr7   r   c                   óp   — 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
y)r   z7https://download.pytorch.org/models/swin_s-5e29d889.pthr(  éö   r*  irîôr.  r/  r0  g�•C‹ÌT@g×£p=
X@r1  g¬Zd{!@gþÔxé&¹g@r2  r3  r;  Nr>  r!  r7   r5   r   r   ¥  sg   „ ÙØEÙØ¨3¸CÐO`×OhÑOhô
ð
Øð
à"Ø"ØmàØ#Ø#ñ ðð Ø!Øtò
ô€Mð* �Gr7   r   c                   óp   — 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
y)r   z7https://download.pytorch.org/models/swin_b-68c6b09e.pthr(  éî   r*  i <;r.  r/  r0  gh‘í|?åT@g)\�Âõ(X@r1  gé&1¬Ü.@gçû©ñÒõt@r2  r3  r;  Nr>  r!  r7   r5   r   r   ¾  sg   „ ÙØEÙØ¨3¸CÐO`×OhÑOhô
ð
Øð
à"Ø"ØmàØ#Ø#ñ ðð Ø!Øtò
ô€Mð* �Gr7   r   c                   óp   — 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
y)r   z:https://download.pytorch.org/models/swin_v2_t-b137f0e2.pthé   é  r*  iRœ°©rH  rH  úXhttps://github.com/pytorch/vision/tree/main/references/classification#swintransformer-v2r0  gøSã¥›„T@gœÄ °rX@r1  gÃõ(\�Â@gòÒMb([@r2  r3  r;  Nr>  r!  r7   r5   r   r   ×  sg   „ ÙØHÙØ¨3¸CÐO`×OhÑOhô
ð
Øð
à"Ø"ØpàØ#Ø#ñ ðð Ø!Øtò
ô€Mð* �Gr7   r   c                   óp   — 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
y)r   z:https://download.pytorch.org/models/swin_v2_s-637d8ceb.pthrH  rI  r*  iâîörJ  rK  r0  g!°rh‘íT@gNbX94X@r1  gd;ßO�'@gš™™™™Õg@r2  r3  r;  Nr>  r!  r7   r5   r   r   ð  óg   „ ÙØHÙØ¨3¸CÐO`×OhÑOhô
ð
Øð
à"Ø"ØpàØ#Ø#ñ ðð Ø!Øtò
ô€Mð* �Gr7   r   c                   óp   — 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
y)r   z:https://download.pytorch.org/models/swin_v2_b-781e5279.pthrH  i  r*  ià·=rJ  rK  r0  gºI+U@gžï§ÆK7X@r1  g33333S4@gË¡E¶óu@r2  r3  r;  Nr>  r!  r7   r5   r   r   	  rM  r7   r   Ú
pretrained)r  )r  r  c                 ód   — t         j                  | «      } 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:
    rI   é`   ©r	   r	   é   r	   ©rw   rS  é   é   é   çš™™™™™É?©rÿ   r   r  rl   r:   rê   r  r  r!  )r   Úverifyr&  ©r  r  r  s      r5   r   r   "  sP   € ô. ×#Ñ# GÓ,€Gäð 
Ø�q�6ØÚÚ Ø˜�FØ!ØØñ
ð ñ
ð 
r7   c                 ód   — t         j                  | «      } 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:
    rI   rQ  ©r	   r	   é   r	   rT  rW  ç333333Ó?rY  r!  )r   rZ  r&  r[  s      r5   r   r   H  sP   € ô. ×#Ñ# GÓ,€Gäð 
Ø�q�6ØÚÚ Ø˜�FØ!ØØñ
ð ñ
ð 
r7   c                 ód   — t         j                  | «      } 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:
    rI   é€   r]  ©rI   rÚ   rã   é    rW  ç      à?rY  r!  )r   rZ  r&  r[  s      r5   r    r    n  sP   € ô. ×#Ñ# GÓ,€Gäð 
Ø�q�6ØÚÚ Ø˜�FØ!ØØñ
ð ñ
ð 
r7   c                 óx   — t         j                  | «      } 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:
    rI   rQ  rR  rT  rÚ   rX  ©
rÿ   r   r  rl   r:   rê   r  r  r  r  r!  )r   rZ  r&  rû   rf   r[  s      r5   r!   r!   ”  sV   € ô.  ×&Ñ& wÓ/€Gäð Ø�q�6ØÚÚ Ø˜�FØ!ØØÜ$Ü'ñð ñð r7   c                 óx   — t         j                  | «      } 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:
    rI   rQ  r]  rT  rÚ   r_  rf  r!  )r   rZ  r&  rû   rf   r[  s      r5   r"   r"   ¼  sV   € ô.  ×&Ñ& wÓ/€Gäð Ø�q�6ØÚÚ Ø˜�FØ!ØØÜ$Ü'ñð ñð r7   c                 óx   — t         j                  | «      } 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:
    rI   ra  r]  rb  rÚ   rd  rf  r!  )r   rZ  r&  rû   rf   r[  s      r5   r#   r#   ä  sV   € ô.  ×&Ñ& wÓ/€Gäð Ø�q�6ØÚÚ Ø˜�FØ!ØØÜ$Ü'ñð ñð r7   )r{   r{   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__r6   ÚfxÚwraprÌ   r`   rB   ra   rD   rf   r�   rÍ   r¤   r¦   rÏ   rç   rû   r   r&  r@  r   r   r   r   r   r   rA  r   r   r    r!   r"   r#   r!  r7   r5   ú<module>rw     sõ  ðÛ Ý ß *Ñ *ã ß Ð ß ç #Ý 2ß HÝ 'ß 6Ñ 6Ý 'ß Bò€ð"˜%Ÿ,™,ð ¨5¯<©<ó ð ‡�‡�Ð"Ô #ð"Ø"'§,¡,ð"ØINÏÉð"ØdhÐilÑdmð"à
‡\�\ó"ð ‡�‡�Ð+Ô ,ô�2—9‘9ô ô6�R—Y‘Yô ðF  #ØØ!%Ø"&Ø*.ØñpØðpàðpð ðpð #ð	pð
 �c‘ðpð ðpð �S‘	ðpð ðpð ðpð �vÑðpð ˜Ñðpð ˜%Ÿ,™,Ñ'ðpð ðpð ópðf ‡�‡�Ð(Ô )ôN
˜RŸY™Yô N
ôbS
Ð5ô S
ôl6˜2Ÿ9™9ô 6ôr/Ð1ô /ôdj�b—i‘iô jðZØ�S‘	ðàðð �‰Iðð �C‰yð	ð
 �c‘ðð !ðð �kÑ"ðð ðð ðð óð> Ð&ð€ô
�[ô ô2�[ô ô2�[ô ô2˜ô ô2˜ô ô2˜ô ñ2 ÓÙ ,°×0LÑ0LÐ!MÔNØ26Èò !�x Ñ/ð !À$ð !ÐY\ð !Ðapò !ó Oó ð!ñH ÓÙ ,°×0LÑ0LÐ!MÔNØ26Èò !�x Ñ/ð !À$ð !ÐY\ð !Ðapò !ó Oó ð!ñH ÓÙ ,°×0LÑ0LÐ!MÔNØ26Èò !�x Ñ/ð !À$ð !ÐY\ð !Ðapò !ó Oó ð!ñH ÓÙ ,Ð0A×0OÑ0OÐ!PÔQØ8<Ètò #˜(Ð#4Ñ5ð #Èð #Ð_bð #Ðgvò #ó Ró ð#ñL ÓÙ ,Ð0A×0OÑ0OÐ!PÔQØ8<Ètò #˜(Ð#4Ñ5ð #Èð #Ð_bð #Ðgvò #ó Ró ð#ñL ÓÙ ,Ð0A×0OÑ0OÐ!PÔQØ8<Ètò #˜(Ð#4Ñ5ð #Èð #Ð_bð #Ðgvò #ó Ró ñ#r7   