+
    œ°³jÓ»  ã                   ó*  € R t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIt^ RIHt ^RI	H
t ^RIHt ^RIHtHt ^RIHt ^R	IHt ^R
IHt ^RIHt ^RIHtHtHtHtHt ^RIH t H!t! ^RI"H#t#H$t$ ^RI%H&t&H't'H(t(H)t)H*t*H+t+ ^RI,H-t- ]P\                  ! ]/4      t0 ! R R]Pb                  4      t2]! RR7      ] ! R R]4      4       4       t3]! RR7      ] ! R R]4      4       4       t4]! RR7      ] ! R R]4      4       4       t5]! RR7      ] ! R R]4      4       4       t6R  t7R! t8 ! R" R#]Pb                  4      t9 ! R$ R%]Pb                  4      t: ! R& R']Pb                  4      t; ! R( R)]Pb                  4      t< ! R* R+]'4      t= ! R, R-])4      t> ! R. R/](4      t? ! R0 R1]4      t@] ! R2 R3]*4      4       tA ! R4 R5]A4      tB] ! R6 R7]A4      4       tC]! R8R7       ! R9 R:]A4      4       tD]! R;R7       ! R< R=]A4      4       tE]! R>R7       ! R? R@]]A4      4       tF. RAOtGR# )BzPyTorch Swin Transformer model.N)ÚCallable)Ú	dataclass)Únn)Úinitialization)ÚACT2FN)ÚBackboneMixinÚfilter_output_hidden_states)ÚGradientCheckpointingLayer)ÚBackboneOutput)ÚALL_ATTENTION_FUNCTIONS)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚloggingÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputs)ÚPreTrainedModelÚViTAttentionÚViTLayerÚViTMLPÚViTPreTrainedModelÚeager_attention_forward©Ú
SwinConfigc                   ój   a a€ ] tR t^0t oRtR	V3R lV 3R llltV3R lR ltV3R lR ltRtVt	V ;t
# )
ÚSwinDropPathzÃStochastic depth (DropPath) per sample, for residual blocks.

Identity when ``drop_prob`` is 0 or outside training. See `Deep Networks with Stochastic Depth
<https://arxiv.org/abs/1603.09382>`_.
c                ó$   <€ V ^8„  d   QhRS[ RR/# )é   Ú	drop_probÚreturnN)Úfloat)ÚformatÚ__classdict__s   "€Úf/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/swin/modular_swin.pyÚ__annotate__ÚSwinDropPath.__annotate__7   s   ø€ ÷ #ñ #¡%ð #°$ñ #ó    c                ó0   <€ \         SV `  4        Wn        R # ©N)ÚsuperÚ__init__r"   )Úselfr"   Ú	__class__s   &&€r'   r.   ÚSwinDropPath.__init__7   s   ø€ Ü‰ÑÔØ"Žr*   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r!   Úhidden_statesr#   ©ÚtorchÚTensor)r%   r&   s   "€r'   r(   r)   ;   s#   ø€ ÷ <ñ <¡U§\¡\ð <±e·l±lñ <r*   c                ó˜  € V P                   R 8X  g   V P                  '       g   V# ^V P                   ,
          pVP                  ^ ,          3RVP                  ^,
          ,          ,           p\        P
                  ! W1P                  VP                  R7      p\        P                  ! WB,           4      pVP                  V4      V,          # )ç        ©ÚdtypeÚdevice)é   )
r"   ÚtrainingÚshapeÚndimr5   Úrandr:   r;   ÚfloorÚdiv)r/   r3   Ú	keep_probr>   Úrandom_tensors   &&   r'   ÚforwardÚSwinDropPath.forward;   s•   € Ø�>‰>˜SÔ ¨¯¯¨Ø Ð Ø˜Ÿ™Õ&ˆ	Ø×$Ñ$ QÕ'Ð)¨D°M×4FÑ4FÈÕ4JÕ,KÕKˆÜŸ
š
 5×0CÑ0CÈM×L`ÑL`ÔaˆÜŸš MÕ$=Ó>ˆØ× Ñ  Ó+¨mÕ;Ð;r*   c                ó    <€ V ^8„  d   QhRS[ /# ©r!   r#   )Ústr)r%   r&   s   "€r'   r(   r)   D   s   ø€ ÷ %ñ %™Cñ %r*   c                ó    € R V P                    2# )zp=©r"   )r/   s   &r'   Ú
extra_reprÚSwinDropPath.extra_reprD   s   € Ø�D—N‘NÐ#Ð$Ð$r*   rK   )r8   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r.   rE   rL   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r0   r&   s   @@r'   r   r   0   s-   ù‡ € ñ÷#õ #÷<ð <÷%÷ %ð %r*   r   zN
    Swin encoder's outputs, with potential hidden states and attentions.
    )Úcustom_introc                   ó@   a € ] tR t^Ht o RtRtRtRtRtV 3R lt	Rt
V tR# )ÚSwinEncoderOutputaÕ  
reshaped_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
    Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage) of
    shape `(batch_size, hidden_size, height, width)`.

    Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
    include the spatial dimensions.
Nc                ó  <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   # )r!   NÚlast_hidden_state.r3   Ú
attentionsÚreshaped_hidden_states©r5   ÚFloatTensorÚtuple)r%   r&   s   "€r'   r(   ÚSwinEncoderOutput.__annotate__H   sƒ   ø‡ ‚ ñ  ×(Ñ(¨4Õ/Ñ6ñ! ñ" ™×*Ñ*¨CÐ/Õ0°4Õ7Ñ>ñ# ñ$ ‘e×'Ñ'¨Ð,Õ-°Õ4Ñ;ñ% ñ& "¡%×"3Ñ"3°SÐ"8Õ9¸DÕ@ÑGò' r*   © )rN   rO   rP   rQ   rR   r[   r3   r\   r]   Ú__annotate_func__rS   rT   ©r&   s   @r'   rY   rY   H   s)   ø‡ € ñð 37ÐØ:>€MØ7;€JØCGÐ÷' ƒ r*   rY   zV
    Swin model's outputs that also contains a pooling of the last hidden states.
    c                   óD   a € ] tR t^^t o RtRtRtRtRtRt	V 3R lt
RtV tR# )ÚSwinModelOutputa‘  
pooler_output (`torch.FloatTensor` of shape `(batch_size, hidden_size)`, *optional*, returned when `add_pooling_layer=True` is passed):
    Average pooling of the last layer hidden-state.
reshaped_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
    Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage) of
    shape `(batch_size, hidden_size, height, width)`.

    Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
    include the spatial dimensions.
Nc                ó<  <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[ P                  R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   # )r!   Nr[   Úpooler_output.r3   r\   r]   r^   )r%   r&   s   "€r'   r(   ÚSwinModelOutput.__annotate__^   s›   ø‡ ‚ ñ$ ×(Ñ(¨4Õ/Ñ6ñ% ñ& ×$Ñ$ tÕ+Ñ2ñ' ñ( ™×*Ñ*¨CÐ/Õ0°4Õ7Ñ>ñ) ñ* ‘e×'Ñ'¨Ð,Õ-°Õ4Ñ;ñ+ ñ, "¡%×"3Ñ"3°SÐ"8Õ9¸DÕ@ÑGò- r*   rb   )rN   rO   rP   rQ   rR   r[   rh   r3   r\   r]   rc   rS   rT   rd   s   @r'   rf   rf   ^   s.   ø‡ € ñ	ð 37ÐØ.2€MØ:>€MØ7;€JØCGÐ÷- ƒ r*   rf   z*
    Swin masked image model outputs.
    c                   óD   a € ] tR t^wt o RtRtRtRtRtRt	V 3R lt
RtV tR# )ÚSwinMaskedImageModelingOutputaÛ  
loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `bool_masked_pos` is provided):
    Masked image modeling (MLM) loss.
reconstruction (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
    Reconstructed pixel values.
reshaped_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
    Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage) of
    shape `(batch_size, hidden_size, height, width)`.

    Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
    include the spatial dimensions.
Nc                ó<  <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[ P                  R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   # )r!   NÚlossÚreconstruction.r3   r\   r]   r^   )r%   r&   s   "€r'   r(   Ú*SwinMaskedImageModelingOutput.__annotate__w   s›   ø‡ ‚ ñ( ×
Ñ
˜dÕ
"Ñ)ñ) ñ* ×%Ñ%¨Õ,Ñ3ñ+ ñ, ™×*Ñ*¨CÐ/Õ0°4Õ7Ñ>ñ- ñ. ‘e×'Ñ'¨Ð,Õ-°Õ4Ñ;ñ/ ñ0 "¡%×"3Ñ"3°SÐ"8Õ9¸DÕ@ÑGò1 r*   rb   )rN   rO   rP   rQ   rR   rm   rn   r3   r\   r]   rc   rS   rT   rd   s   @r'   rk   rk   w   s-   ø‡ € ñð &*€DØ/3€NØ:>€MØ7;€JØCGÐ÷1 ƒ r*   rk   z0
    Swin outputs for image classification.
    c                   óD   a € ] tR t^’t o RtRtRtRtRtRt	V 3R lt
RtV tR# )ÚSwinImageClassifierOutputa  
loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
    Classification (or regression if config.num_labels==1) loss.
logits (`torch.FloatTensor` of shape `(batch_size, config.num_labels)`):
    Classification (or regression if config.num_labels==1) scores (before SoftMax).
reshaped_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
    Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage) of
    shape `(batch_size, hidden_size, height, width)`.

    Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
    include the spatial dimensions.
Nc                ó<  <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[ P                  R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   S[S[ P                  R3,          R,          ;R&   # )r!   Nrm   Úlogits.r3   r\   r]   r^   )r%   r&   s   "€r'   r(   Ú&SwinImageClassifierOutput.__annotate__’   s›   ø‡ ‚ ñ( ×
Ñ
˜dÕ
"Ñ)ñ) ñ* ×Ñ Õ$Ñ+ñ+ ñ, ™×*Ñ*¨CÐ/Õ0°4Õ7Ñ>ñ- ñ. ‘e×'Ñ'¨Ð,Õ-°Õ4Ñ;ñ/ ñ0 "¡%×"3Ñ"3°SÐ"8Õ9¸DÕ@ÑGò1 r*   rb   )rN   rO   rP   rQ   rR   rm   rs   r3   r\   r]   rc   rS   rT   rd   s   @r'   rq   rq   ’   s-   ø‡ € ñð &*€DØ'+€FØ:>€MØ7;€JØCGÐ÷1 ƒ r*   rq   c                óÈ   € V P                   w  r#rEV P                  W#V,          WV,          W4      p V P                  ^^4      P                  4       P                  RWV4      pV# )z*
Partitions the given input into windows.
éÿÿÿÿ©r>   ÚviewÚ	transposeÚ
contiguous)Úinput_featureÚwindow_sizeÚ
batch_sizeÚheightÚwidthÚnum_channelsÚwindowss   &&     r'   Úwindow_partitionr‚   ­   sg   € ð /<×.AÑ.AÑ+€J˜Ø!×&Ñ&Ø˜kÕ)¨;ÀÕ8LÈkó€Mð ×%Ñ% a¨Ó+×6Ñ6Ó8×=Ñ=¸bÀ+Ð\hÓi€GØ€Nr*   c                óÐ   € V P                   R,          pV P                  RW!,          W1,          WV4      p V P                  ^^4      P                  4       P                  RW#V4      p V # )z7
Merges windows to produce higher resolution features.
rv   rw   )r�   r|   r~   r   r€   s   &&&& r'   Úwindow_reverser„   ¹   s^   € ð —=‘= Õ$€LØ�l‰l˜2˜vÕ4°eÕ6JÈKÐfrÓs€GØ×Ñ  1Ó%×0Ñ0Ó2×7Ñ7¸¸FÈ<ÓX€GØ€Nr*   c                   ób   a a€ ] tR t^Ãt oRtRV 3R lltV3R lR ltR	V3R lR lltRtVt	V ;t
# )
ÚSwinEmbeddingszO
Construct the patch and position embeddings. Optionally, also the mask token.
c                óŽ  <€ \         SV `  4        \        V4      V n        V P                  P                  pV P                  P
                  V n        V'       d7   \        P                  ! \        P                  ! ^^VP                  4      4      MRV n        VP                  '       d6   \        P                  ! \        P                  ! ^W1P                  4      4      MRV n        \        P                  ! VP                  4      V n        \        P"                  ! VP$                  4      V n        VP(                  V n        Wn        R# )r<   N)r-   r.   ÚSwinPatchEmbeddingsÚpatch_embeddingsÚnum_patchesÚ	grid_sizeÚ
patch_gridr   Ú	Parameterr5   ÚzerosÚ	embed_dimÚ
mask_tokenÚuse_absolute_embeddingsÚposition_embeddingsÚ	LayerNormÚnormÚDropoutÚhidden_dropout_probÚdropoutÚ
patch_sizeÚconfig)r/   r™   Úuse_mask_tokenrŠ   r0   s   &&& €r'   r.   ÚSwinEmbeddings.__init__È   sÞ   ø€ Ü‰ÑÔä 3°FÓ ;ˆÔØ×+Ñ+×7Ñ7ˆØ×/Ñ/×9Ñ9ˆŒßO]œ"Ÿ,š,¤u§{¢{°1°a¸×9IÑ9IÓ'JÔKÐcgˆŒð LR×Ki×KiÐKiŒB�LŠLœŸš Q¨×5EÑ5EÓFÔGÐosð 	Ô ô —L’L ×!1Ñ!1Ó2ˆŒ	Ü—z’z &×"<Ñ"<Ó=ˆŒØ ×+Ñ+ˆŒØŽr*   c                óZ   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[ P                  /# )r!   Ú
embeddingsr~   r   r#   ©r5   r6   Úint)r%   r&   s   "€r'   r(   ÚSwinEmbeddings.__annotate__Ù   s;   ø€ ÷ Dñ D±5·<±<ð DÉð DÑUXð DÑ]b×]iÑ]iñ Dr*   c                ó`  € VP                   ^,          pV P                  P                   ^,          p\        P                  P	                  4       '       g   WE8X  d   W#8X  d   V P                  # VP                   R,          pW P
                  ,          pW0P
                  ,          p\        VR,          4      p	V P                  P                  ^W™V4      p
V
P                  ^ ^^^4      p
\        P                  P                  V
Wx3RRR7      p
V
P                  ^ ^^^4      P                  ^RV4      # )z´
Interpolate pre-trained position encodings to support higher-resolution images at inference.
Unlike ViT, Swin has no CLS token, so position embeddings cover patch positions only.
ç      à?ÚbicubicF)ÚsizeÚmodeÚalign_cornersrv   )r>   r’   r5   ÚjitÚ
is_tracingr˜   r   ÚreshapeÚpermuter   Ú
functionalÚinterpolaterx   )r/   r�   r~   r   rŠ   Únum_positionsÚdimÚ
new_heightÚ	new_widthÚsqrt_num_positionsÚpatch_pos_embeds   &&&&       r'   Úinterpolate_pos_encodingÚ'SwinEmbeddings.interpolate_pos_encodingÙ   s  € ð
 !×&Ñ& qÕ)ˆØ×0Ñ0×6Ñ6°qÕ9ˆô �y‰y×#Ñ#×%Ò%¨+Ô*FÈ6Ì?Ø×+Ñ+Ð+à×Ñ˜rÕ"ˆàŸ™Õ.ˆ
ØŸ_™_Õ,ˆ	ä& }°cÕ'9Ó:ÐØ×2Ñ2×:Ñ:¸1Ð>PÐfiÓjˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØÐ(ØØð	 4ó 
ˆð ×&Ñ& q¨!¨Q°Ó2×7Ñ7¸¸2¸sÓCÐCr*   c          	      óš   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[RS[S[ P
                  ,          /# )r!   Úpixel_valuesNÚbool_masked_posr³   r#   )r5   r_   Ú
BoolTensorÚboolr`   r6   )r%   r&   s   "€r'   r(   r    ÷   sR   ø€ ÷ -ñ -á×'Ñ'¨$Õ.ð-ñ ×)Ñ)¨DÕ0ð-ñ #'ð	-ñ
 
‰u�|‰|Õ	ñ-r*   c                óò  € VP                   w  rErgV P                  V4      w  r‰V P                  V4      pVP                  4       w  r«pVeZ   V P                  P                  W«R4      pVP                  R4      P                  V4      pVRV,
          ,          WÍ,          ,           pV P                  e4   V'       d   W€P                  W†V4      ,           pMW€P                  ,           pV P                  V4      pW‰3# )Ng      ð?rv   )r>   r‰   r”   r¤   r�   ÚexpandÚ	unsqueezeÚtype_asr’   r³   r—   )r/   r¶   r·   r³   Ú_r€   r~   r   r�   Úoutput_dimensionsr}   Úseq_lenÚmask_tokensÚmasks   &&&&          r'   rE   ÚSwinEmbeddings.forward÷   sÝ   € ð *6×);Ñ);Ñ&ˆ˜Ø(,×(=Ñ(=¸lÓ(KÑ%ˆ
Ø—Y‘Y˜zÓ*ˆ
Ø!+§¡Ó!2Ñˆ
˜QàÒ&ØŸ/™/×0Ñ0°ÀbÓIˆKà"×,Ñ,¨RÓ0×8Ñ8¸ÓEˆDØ# s¨T¥zÕ2°[Õ5GÕGˆJà×#Ñ#Ò/ß'Ø'×*GÑ*GÈ
Ð\aÓ*bÕb‘
à'×*BÑ*BÕB�
à—\‘\ *Ó-ˆ
àÐ,Ð,r*   )r™   r—   r�   r”   r‰   rŒ   r˜   r’   ©F)NF)rN   rO   rP   rQ   rR   r.   r³   rE   rS   rT   rU   rV   s   @@r'   r†   r†   Ã   s*   ù‡ € ñ÷÷"Dð D÷<-÷ -ò -r*   r†   c                   óN   a a€ ] tR tRt oRtV 3R ltR tV3R lR ltRtVt	V ;t
# )rˆ   i  zÜ
This class turns `pixel_values` of shape `(batch_size, num_channels, height, width)` into the initial
`hidden_states` (patch embeddings) of shape `(batch_size, seq_length, hidden_size)` to be consumed by a
Transformer.
c                óZ  <€ \         SV `  4        VP                  VP                  r2VP                  VP
                  rT\        V\        P                  P                  4      '       d   TMW"3p\        V\        P                  P                  4      '       d   TMW33pV^,          V^,          ,          V^ ,          V^ ,          ,          ,          pW0n        W`n
        V^ ,          V^ ,          ,          V^,          V^,          ,          3V n        \        P                  ! WEW3R7      V n        R# )r<   )Úkernel_sizeÚstrideN)r-   r.   Ú
image_sizer˜   r€   r�   Ú
isinstanceÚcollectionsÚabcÚIterablerŠ   r‹   r   ÚConv2dÚ
projection)r/   r™   rÉ   r˜   r€   Úhidden_sizerŠ   r0   s   &&     €r'   r.   ÚSwinPatchEmbeddings.__init__  sß   ø€ Ü‰ÑÔØ!'×!2Ñ!2°F×4EÑ4E�JØ$*×$7Ñ$7¸×9IÑ9I�kÜ#-¨j¼+¿/¹/×:RÑ:R×#SÒ#S‘ZÐZdÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:R×#SÒ#S‘ZÐZdÐYqˆ
Ø! !•}¨
°1­Õ5¸*ÀQ½-È:ÐVWÍ=Õ:XÕYˆØ$ŒØ&ÔØ$ Q�-¨:°a­=Õ8¸*ÀQ½-È:ÐVWÍ=Õ:XÐYˆŒäŸ)š) LÈ:ÔiˆŽr*   c                óÊ  € W0P                   ^,          ,          ^ 8w  dS   ^ V P                   ^,          W0P                   ^,          ,          ,
          3p\        P                  P                  W4      pW P                   ^ ,          ,          ^ 8w  dU   ^ ^ ^ V P                   ^ ,          W P                   ^ ,          ,          ,
          3p\        P                  P                  W4      pV# )z9Pad pixel_values to be divisible by patch_size if needed.)r˜   r   r«   Úpad)r/   r¶   r~   r   Ú
pad_valuess   &&&& r'   Ú	maybe_padÚSwinPatchEmbeddings.maybe_pad'  s¥   € à—?‘? 1Õ%Õ%¨Ô*Ø˜TŸ_™_¨QÕ/°%¿/¹/È!Õ:LÕ2LÕLÐMˆJÜŸ=™=×,Ñ,¨\ÓFˆLØ—O‘O AÕ&Õ&¨!Ô+Ø˜Q  4§?¡?°1Õ#5¸ÇÁÐQRÕASÕ8SÕ#SÐTˆJÜŸ=™=×,Ñ,¨\ÓFˆLØÐr*   c                ó‚   <€ V ^8„  d   QhRS[ P                  R,          RS[S[ P                  S[S[,          3,          /# )r!   r¶   Nr#   )r5   r_   r`   r6   rŸ   )r%   r&   s   "€r'   r(   Ú SwinPatchEmbeddings.__annotate__1  s;   ø€ ÷ 	-ñ 	-¡E×$5Ñ$5¸Õ$<ð 	-ÁÁuÇ|Á|ÑUZÑ[^ÕU_ÐG_ÕA`ñ 	-r*   c                óÔ   € VP                   w  r#rEV P                  WV4      pV P                  V4      pVP                   w   r$pWE3pVP                  ^4      P	                  ^^4      pWg3# )r!   )r>   rÕ   rÏ   Úflattenry   )r/   r¶   r¾   r€   r~   r   r�   r¿   s   &&      r'   rE   ÚSwinPatchEmbeddings.forward1  sp   € Ø)5×);Ñ);Ñ&ˆ˜à—~‘~ l¸EÓBˆØ—_‘_ \Ó2ˆ
Ø(×.Ñ.Ñˆˆ1�eØ#˜OÐØ×'Ñ'¨Ó*×4Ñ4°Q¸Ó:ˆ
àÐ,Ð,r*   )r‹   rŠ   r˜   rÏ   ©rN   rO   rP   rQ   rR   r.   rÕ   rE   rS   rT   rU   rV   s   @@r'   rˆ   rˆ     s$   ù‡ € ñõjò÷	-÷ 	-ð 	-r*   rˆ   c                   óf   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltV3R lR ltR	tVt	V ;t
# )
ÚSwinPatchMergingi=  zP
Patch Merging Layer.

Args:
    dim (`int`):
        Number of input channels.
c                ó$   <€ V ^8„  d   QhRS[ RR/# )r!   r®   r#   N)rŸ   )r%   r&   s   "€r'   r(   ÚSwinPatchMerging.__annotate__F  s   ø€ ÷ *ñ *™Cð * Dñ *r*   c                óÀ   <€ \         SV `  4        \        P                  ! ^V,          ^V,          RR7      V n        \        P
                  ! ^V,          4      V n        R# )é   F©ÚbiasN)r-   r.   r   ÚLinearÚ	reductionr“   r”   )r/   r®   r0   s   &&€r'   r.   ÚSwinPatchMerging.__init__F  s>   ø€ Ü‰ÑÔÜŸš 1 s¥7¨A°­G¸%Ô@ˆŒÜ—L’L  S¥Ó)ˆŽ	r*   c                óZ   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[ P                  /# )r!   r{   r~   r   r#   rž   )r%   r&   s   "€r'   r(   rà   K  s4   ø€ ÷ ñ ¡u§|¡|ð ¹Sð Éð ÑQV×Q]ÑQ]ñ r*   c           
     ó¦   € V^,          ^8X  g   V^,          ^8X  d5   \         P                  P                  V^ ^ ^ V^,          ^ V^,          34      pV# )zPPad input feature map to be divisible by 2 in both spatial dimensions if needed.)r   r«   rÓ   )r/   r{   r~   r   s   &&&&r'   rÕ   ÚSwinPatchMerging.maybe_padK  sL   € à�Q�J˜!ŒO ¨¥¨a¤ÜŸM™M×-Ñ-¨m¸aÀÀAÀuÈqÅyÐRSÐU[Ð^_ÕU_Ð=`ÓaˆMØÐr*   c                ój   <€ V ^8„  d   QhRS[ P                  RS[S[S[3,          RS[ P                  /# )r!   r{   Úinput_dimensionsr#   )r5   r6   r`   rŸ   )r%   r&   s   "€r'   r(   rà   Q  s6   ø€ ÷ ñ ¡U§\¡\ð ÁUÉ3ÑPSÈ8Å_ð ÑY^×YeÑYeñ r*   c                ó¢  € Vw  r4VP                   w  rVpVP                  WSWG4      pV P                  WV4      p\        P                  ! \        ^4       UU	u. uF'  p\        ^4       F  q‘RV	R^1VR^1R3,          NK  	  K)  	  up	pRR7      pVP                  VR^V,          4      pV P                  V4      pV P                  V4      pV# u up	pi )r!   ºNNNN©r®   rv   )r>   rx   rÕ   r5   ÚcatÚranger”   ræ   )
r/   r{   rì   r~   r   r}   r®   r€   ÚcolÚrows
   &&&       r'   rE   ÚSwinPatchMerging.forwardQ  sÑ   € Ø(‰ˆà(5×(;Ñ(;Ñ%ˆ
˜à%×*Ñ*¨:¸uÓSˆàŸ™ }¸eÓDˆäŸ	š	Ü<AÀ!¼HÔY¹H°SÔPUÐVWÖPXÈ˜1˜c˜f 1˜f c f¨1 f¨aÐ/×0Ð0ÑPXÑ0¹HÒYÐ_aô
ˆð &×*Ñ*¨:°r¸1¸|Õ;KÓLˆàŸ	™	 -Ó0ˆØŸ™ }Ó5ˆàÐùó Zs   Á-C
)r”   ræ   rÜ   rV   s   @@r'   rÞ   rÞ   =  s-   ù‡ € ñ÷*ó *÷
ð ÷÷ ð r*   rÞ   c                   óf   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltV3R lR ltR	tVt	V ;t
# )
ÚSwinRelativePositionBiasie  aÏ  
Relative position bias for Swin's window-based attention, following the style of BeitRelativePositionBias.

Unlike BeiT, Swin has no CLS token, so the table covers exactly (2*ws_h-1)*(2*ws_w-1) unique
relative positions. The lookup index is purely determined by window_size (static), so it is stored
as a non-persistent buffer (recomputed from config on load, never serialised). The table values
are learned parameters and must be re-read on every forward call.
c                ó<   <€ V ^8„  d   QhRS[ RS[S[ S[ 3,          /# )r!   Ú	num_headsr|   )rŸ   r`   )r%   r&   s   "€r'   r(   Ú%SwinRelativePositionBias.__annotate__o  s'   ø€ ÷ 	tñ 	t¡#ð 	t±E¹#¹s¸(µOñ 	tr*   c                óž  <€ \         SV `  4        W n        V^ ,          V^,          ,          V n        \        P
                  ! \        P                  ! ^V^ ,          ,          ^,
          ^V^,          ,          ^,
          ,          V4      4      V n        \        P                  ! V P                  4       P                  R4      RR7      V n        R# )é    F)Ú
persistentNrv   )r-   r.   r|   Úwindow_arear   r�   r5   rŽ   Úrelative_position_bias_tableÚBufferÚ_create_relative_position_indexrx   Úrelative_position_index)r/   rø   r|   r0   s   &&&€r'   r.   Ú!SwinRelativePositionBias.__init__o  s”   ø€ Ü‰ÑÔØ&ÔØ& q�>¨K¸­NÕ:ˆÔÜ,.¯LªLÜ�KŠK˜˜[¨�^Õ+¨aÕ/°A¸ÀA½Õ4FÈÕ4JÕKÈYÓWó-
ˆÔ)ô
 (*§y¢y°×1UÑ1UÓ1W×1\Ñ1\Ð]_Ó1`ÐmrÔ'sˆÖ$r*   c                ó4   <€ V ^8„  d   QhRS[ P                  /# rH   r4   )r%   r&   s   "€r'   r(   rù   z  s   ø€ ÷ 'ñ '±·±ñ 'r*   c                óÔ  € \         P                  ! V P                  ^ ,          4      p\         P                  ! V P                  ^,          4      p\         P                  ! \         P                  ! W.RR7      4      p\         P
                  ! V^4      pVR,          VR,          ,
          pVP                  ^^^ 4      P                  4       pVR;;,          V P                  ^ ,          ^,
          ,          uu&   VR;;,          V P                  ^,          ^,
          ,          uu&   VR;;,          ^V P                  ^,          ,          ^,
          ,          uu&   VP                  R4      # )rû   Úij)Úindexing)rî   rî   N)rî   Nrî   )rî   rî   rû   )rî   rî   r<   rv   )	r5   Úaranger|   ÚstackÚmeshgridrÚ   rª   rz   Úsum)r/   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordss   &     r'   r   Ú8SwinRelativePositionBias._create_relative_position_indexz  s	  € Ü—<’< × 0Ñ 0°Õ 3Ó4ˆÜ—<’< × 0Ñ 0°Õ 3Ó4ˆä—’œUŸ^š^¨XÐ,@È4ÔPÓQˆÜŸš v¨qÓ1ˆà(¨Õ4°~ÀjÕ7QÕQˆØ)×1Ñ1°!°Q¸Ó:×EÑEÓGˆð 	˜×  D×$4Ñ$4°QÕ$7¸!Õ$;Õ;Ó Ø˜×  D×$4Ñ$4°QÕ$7¸!Õ$;Õ;Ó Ø˜×  A¨×(8Ñ(8¸Õ(;Õ$;¸aÕ$?Õ?Ó à×"Ñ" 2Ó&Ð&r*   c                ó4   <€ V ^8„  d   QhRS[ P                  /# rH   r4   )r%   r&   s   "€r'   r(   rù   ‹  s   ø€ ÷ Qñ Q™Ÿ™ñ Qr*   c                óê   € V P                   V P                  ,          pVP                  V P                  V P                  R4      pVP	                  ^^ ^4      P                  4       P                  ^ 4      # )r<   rv   )rþ   r  rx   rý   rª   rz   r¼   )r/   Úrelative_position_biass   & r'   rE   Ú SwinRelativePositionBias.forward‹  sd   € Ø!%×!BÑ!BÀ4×C_ÑC_Õ!`ÐØ!7×!<Ñ!<¸T×=MÑ=MÈt×O_ÑO_ÐacÓ!dÐØ%×-Ñ-¨a°°AÓ6×AÑAÓC×MÑMÈaÓPÐPr*   )rþ   r  rý   r|   )rN   rO   rP   rQ   rR   r.   r   rE   rS   rT   rU   rV   s   @@r'   rö   rö   e  s2   ù‡ € ñ÷	tó 	t÷'ð '÷"Q÷ Qð Qr*   rö   c                   óT   a a€ ] tR tRt oV3R lV 3R lltRV3R lR lltRtVtV ;t# )ÚSwinAttentioni‘  c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# )r!   r™   rÐ   Únum_attention_headsr|   ©r   rŸ   )r%   r&   s   "€r'   r(   ÚSwinAttention.__annotate__’  s1   ø€ ÷ pñ p™zð p¹ð pÑRUð pÑdgñ pr*   c                óÀ  <€ \         SV `  V4       W0n        W#,          V n        V P                  R,          V n        \
        P                  ! W"VP                  R7      V n        \
        P                  ! W"VP                  R7      V n	        \
        P                  ! W"VP                  R7      V n
        \
        P                  ! W"4      V n        \        W4V34      V n        R# )r¢   rã   Ng      à¿)r-   r.   r  Úhead_dimÚscalingr   rå   Úqkv_biasÚq_projÚk_projÚv_projÚo_projrö   r  )r/   r™   rÐ   r  r|   r0   s   &&&&&€r'   r.   ÚSwinAttention.__init__’  s–   ø€ Ü‰Ñ˜Ô Ø#6Ô Ø#Õ:ˆŒØ—}‘} dÕ*ˆŒä—i’i ¸v¿¹ÔOˆŒÜ—i’i ¸v¿¹ÔOˆŒÜ—i’i ¸v¿¹ÔOˆŒÜ—i’i Ó9ˆŒä&>Ð?RÐbmÐTnÓ&oˆÖ#r*   c          
      ó¶   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[S[ P                  S[ P                  3,          /# )r!   r3   Úattention_maskNÚkwargsr#   )r5   r6   r_   r   r   r`   )r%   r&   s   "€r'   r(   r  Ÿ  sZ   ø€ ÷ 2)ñ 2)á—|‘|ð2)ñ ×)Ñ)¨DÕ0ð2)ñ Ñ+Õ,ð	2)ñ
 
‰u�|‰|™UŸ\™\Ð)Õ	*ñ2)r*   c                óÊ  € VP                   R R p. VORNV P                  N5pV P                  V4      P                  V4      P	                  ^^4      pV P                  V4      P                  V4      P	                  ^^4      pV P                  V4      P                  V4      P	                  ^^4      pV P                  4       p	Vez   VP                   ^ ,          p
V^ ,          V
,          pV^,          pVP                  ^4      P                  ^ 4      P                  VRRRR4      P                  R^WÌ4      pW’,           pMT	p\        P                  ! V P                  P                  \        4      pT! V VVVV3RV P                   '       g   RMV P"                  RV P$                  /VB w  ppVP                  ! . VORN5!  P'                  4       pV P)                  V4      pVV3# )Nr—   r8   r  rv   )r>   r  r  rx   ry   r   r!  r  r¼   r»   r©   r   Úget_interfacer™   Ú_attn_implementationr   r=   Úattention_dropoutr  rz   r"  )r/   r3   r%  r&  Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesr  Únum_windowsr}   rÀ   Úcombined_maskÚattention_interfaceÚattn_outputÚattn_weightss   &&&,             r'   rE   ÚSwinAttention.forwardŸ  sÝ  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆð "&×!<Ñ!<Ó!>ÐØÒ%à(×.Ñ.¨qÕ1ˆKØ$ Q�¨;Õ6ˆJØ! !•nˆGð ×(Ñ(¨Ó+ß‘˜1“ß‘˜
 B¨¨B°Ó3ß‘˜˜Q Ó1ð	 ð 3ÕC‰Mà2ˆMä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØñ	%
ð  $Ÿ}Ÿ}˜}‘C°$×2HÑ2Hð	%
ð —L‘Lð	%
ð ñ	%
Ñ!ˆ�\ð "×)Ò)Ð;¨;Ð;¸Ó;×FÑFÓHˆØ—k‘k +Ó.ˆà˜LÐ(Ð(r*   )r  r   r  r"  r  r  r  r!  r,   )	rN   rO   rP   rQ   r.   rE   rS   rT   rU   rV   s   @@r'   r  r  ‘  s    ù‡ € ÷pó p÷2)÷ 2)ò 2)r*   r  c                   ó2   a € ] tR tRt o V 3R lR ltRtV tR# )ÚSwinMLPiÔ  c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r!   r™   r®   r  )r%   r&   s   "€r'   r(   ÚSwinMLP.__annotate__Õ  s   ø€ ÷ ?ñ ?™zð ?±ñ ?r*   c                óT  € \         P                  P                  V 4       \        VP                  ,          V n        \         P                  ! V\        VP                  V,          4      4      V n	        \         P                  ! \        VP                  V,          4      V4      V n
        R # r,   )r   ÚModuler.   r   Ú
hidden_actÚactivation_fnrå   rŸ   Ú	mlp_ratioÚfc1Úfc2)r/   r™   r®   s   &&&r'   r.   ÚSwinMLP.__init__Õ  sk   € Ü
�	‰	×Ñ˜4Ô Ü# F×$5Ñ$5Õ6ˆÔÜ—9’9˜S¤# f×&6Ñ&6¸Õ&<Ó"=Ó>ˆŒÜ—9’9œS ×!1Ñ!1°CÕ!7Ó8¸#Ó>ˆŽr*   )r=  r?  r@  N)rN   rO   rP   rQ   r.   rS   rT   rd   s   @r'   r7  r7  Ô  s   ø‡ € ÷?ö ?r*   r7  c                   ó¤   a a€ ] tR tRt oRV3R lV 3R llltV3R lR ltV3R lR ltV3R lR	 ltRV3R
 lR lltRV3R lR llt	Rt
VtV ;t# )Ú	SwinLayeriÜ  c                óT   <€ V ^8„  d   QhRS[ RS[RS[S[S[3,          RS[RS[RS[/# )r!   r™   r®   Úinput_resolutionrø   Údrop_path_rateÚ
shift_size)r   rŸ   r`   r$   )r%   r&   s   "€r'   r(   ÚSwinLayer.__annotate__Ý  sW   ø€ ÷ añ aáðañ ðañ  ¡¡S �/ð	añ
 ðañ ðañ ñar*   c                ó´  <€ \         SV `  4        VP                  V n        \        WWAP                  R 7      V n        \
        P                  ! W!P                  R7      V n        \
        P                  ! W!P                  R7      V n	        \        W4      V n        W`n        W0n        VR8”  d   \        V4      V n        R# \
        P                  ! 4       V n        R# ))r|   ©Úepsr8   N)r-   r.   r|   r  Ú	attentionr   r“   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterr7  ÚmlprG  rE  r   ÚIdentityÚ	drop_path)r/   r™   r®   rE  rø   rF  rG  r0   s   &&&&&&&€r'   r.   ÚSwinLayer.__init__Ý  sš   ø€ ô 	‰ÑÔØ!×-Ñ-ˆÔÜ& v°I×K]ÑK]Ô^ˆŒÜ "§¢¨S×6KÑ6KÔ LˆÔÜ!Ÿ|š|¨C×5JÑ5JÔKˆÔÜ˜6Ó'ˆŒØ$ŒØ 0ÔØ9GÈ#Ô9Mœ nÓ5ˆŽÔSU×S^ÒS^ÓS`ˆŽr*   c                ó:   <€ V ^8„  d   QhRS[ S[S[3,          RR/# )r!   rE  r#   N)r`   rŸ   )r%   r&   s   "€r'   r(   rH  ð  s#   ø€ ÷ ñ ¹%ÁÁSÀ½/ð Èdñ r*   c                ó  € \        V4      V P                  8:  dq   \        ^ 4      V n        \        P
                  P                  4       '       d+   \        P                   ! \        P                  ! V4      4      M
\        V4      V n        R# R# )zQClamp window and shift sizes when the window is larger than the input resolution.N)Úminr|   r   rG  r5   r§   r¨   Útensor)r/   rE  s   &&r'   Úset_shift_and_window_sizeÚ#SwinLayer.set_shift_and_window_sizeð  s_   € äÐÓ  D×$4Ñ$4Ô4Ü'¨›lˆDŒOä=B¿Y¹Y×=QÑ=Q×=SÒ=S”—	’	œ%Ÿ,š,Ð'7Ó8Ô9ÔY\Ð]mÓYnð Öñ 5r*   c                ó‚   <€ V ^8„  d   QhRS[ RS[ RS[P                  RS[P                  RS[P                  R,          /# )r!   r~   r   r:   r;   r#   N)rŸ   r5   r:   r;   r6   )r%   r&   s   "€r'   r(   rH  ø  sH   ø€ ÷ ñ ¡Cð ±ð ¹E¿K¹Kð ÑQV×Q]ÑQ]ð Ñbg×bnÑbnÐquÕbuñ r*   c                ó0  € V P                   ^ 8:  d   R# \        P                  ! WR7      p\        P                  ! W$R7      pWQV P                  ,
          8¬  P	                  4       WQV P                   ,
          8¬  P	                  4       ,           pWbV P                  ,
          8¬  P	                  4       WbV P                   ,
          8¬  P	                  4       ,           pVR,          ^,          VR,          ,           P                  V4      p	\        W�P                  4      p
V
P                  RV P                  V P                  ,          4      p
V
P                  ^4      V
P                  ^4      ,
          pVP                  V^ 8g  R4      P                  V^ 8H  R4      pV# )um  Build the cyclic-shift attention mask for shifted-window MSA; returns None when shift_size is 0.

Each (h, w) position belongs to one of 9 cyclic-shift regions (3 along each axis), encoded
as ``h_region * 3 + w_region``. Regions per axis:
- 0: indices ``[0, axis - window_size)``
- 1: indices ``[axis - window_size, axis - shift_size)``
- 2: indices ``[axis - shift_size, axis)``
Implementation note: a single arithmetic pass on `torch.arange` (two comparisons +
broadcast add) replaces the original 9-iteration nested-Python-loop slice-assignment â€”
fully vectorised, no per-cell host-side scatter, no GPUâ†”host sync.
N)r;   r8   )Nrî   NN)NNrî   Nrv   g      YÀ)
rG  r5   r  r|   ÚlongÚtor‚   rx   r¼   Úmasked_fill)r/   r~   r   r:   r;   Úh_idxÚw_idxÚh_regionÚw_regionÚimg_maskÚmask_windowsÚ	attn_masks   &&&&&       r'   Úget_attn_maskÚSwinLayer.get_attn_maskø  sJ  € ð �?‰?˜aÔÙÜ—’˜VÔ3ˆÜ—’˜UÔ2ˆØ d×&6Ñ&6Õ6Ñ6×<Ñ<Ó>À%ÐTX×TcÑTcÕKcÑBc×AiÑAiÓAkÕkˆØ T×%5Ñ%5Õ5Ñ5×;Ñ;Ó=ÀÐRV×RaÑRaÕJaÑAa×@gÑ@gÓ@iÕiˆØÐ0Õ1°AÕ5¸ÐATÕ8UÕU×YÑYÐZ_Ó`ˆÜ'¨×2BÑ2BÓCˆØ#×(Ñ(¨¨T×-=Ñ-=À×@PÑ@PÕ-PÓQˆØ ×*Ñ*¨1Ó-°×0FÑ0FÀqÓ0IÕIˆ	Ø×)Ñ)¨)°q©.¸&ÓA×MÑMÈiÐ[\ÉnÐ^aÓbˆ	ØÐr*   c                ó„   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[S[ P                  S[S[R3,          3,          /# )r!   r3   r~   r   r#   .)r5   r6   rŸ   r`   )r%   r&   s   "€r'   r(   rH    sL   ø€ ÷ )ñ )¡u§|¡|ð )¹Sð )Éð )ÑQVÑW\×WcÑWcÑejÑknÐpsÐksÕetÐWtÕQuñ )r*   c                ó&  € V P                   W0P                   ,          ,
          V P                   ,          pV P                   W P                   ,          ,
          V P                   ,          p^ ^ ^ V^ V3p\        P                  P                  W4      pW3# )zHPad feature map so both spatial dimensions are divisible by window_size.)r|   r   r«   rÓ   )r/   r3   r~   r   Ú	pad_rightÚ
pad_bottomrÔ   s   &&&&   r'   rÕ   ÚSwinLayer.maybe_pad  sy   € à×%Ñ%¨×0@Ñ0@Õ(@Õ@ÀD×DTÑDTÕTˆ	Ø×&Ñ&¨×2BÑ2BÕ)BÕBÀd×FVÑFVÕVˆ
Ø˜˜A˜y¨!¨ZÐ8ˆ
ÜŸ™×)Ñ)¨-ÓDˆØÐ(Ð(r*   c                óT   <€ V ^8„  d   QhRS[ P                  RS[RS[ P                  /# )r!   r3   Úreverser#   )r5   r6   r¹   )r%   r&   s   "€r'   r(   rH    s-   ø€ ÷ 	ñ 	©%¯,©,ð 	Áð 	ÑRW×R^ÑR^ñ 	r*   c                ó¶   € V P                   ^ 8”  dH   V'       d   ^MRp\        P                  ! VW0P                   ,          W0P                   ,          3RR7      pV# )zOApply a cyclic shift along the spatial dimensions for shifted-window attention.)ÚshiftsÚdimsrv   )r<   r!   )rG  r5   Úroll)r/   r3   rn  Ú	directions   &&& r'   Úcyclic_shiftÚSwinLayer.cyclic_shift  sI   € à�?‰?˜QÔß$™¨"ˆIÜ!ŸJšJØØ!§O¡OÕ3°YÇÁÕ5PÐQØôˆMð
 Ðr*   c          
      ó†   <€ V ^8„  d   QhRS[ P                  RS[S[S[3,          RS[RS[S[,          RS[ P                  /# )r!   r3   rì   Úalways_partitionr&  r#   ©r5   r6   r`   rŸ   r¹   r   r   )r%   r&   s   "€r'   r(   rH  $  sS   ø€ ÷ -+ñ -+á—|‘|ð-+ñ  ¡¡S �/ð-+ñ ð	-+ñ
 Ñ+Õ,ð-+ñ 
�‰ñ-+r*   c                ó,  € V'       g   V P                  V4       Vw  rVVP                  4       w  rxp	Tp
V P                  V4      pVP                  WuWi4      pV P	                  WV4      w  rVP
                  w  rŒrØ\        V P                  V4      V P                  4      pVP                  RV P                  V P                  ,          V	4      pV P                  WÍVP                  VP                  R7      pV P                  ! Wï3/ VB w  ppV P                  V4      pVP                  RV P                  V P                  V	4      pV P                  \        VV P                  WÍ4      RR7      pV^,          ^ 8”  g   V^,          ^ 8”  d    VRRV1RV1R3,          P                  4       pVP                  WuV,          V	4      pW P!                  V4      ,           pTpV P#                  V4      pV P%                  V4      pV P                  V4      V,           pVV3# )r<   r9   T)rn  rî   Nrv   )rX  r¤   rN  rx   rÕ   r>   r‚   rt  r|   rf  r:   r;   rL  r—   r„   rz   rR  rO  rP  )r/   r3   rì   rw  r&  r~   r   r}   r¾   ÚchannelsÚshortcutrÔ   Ú
height_padÚ	width_padÚhidden_states_windowsre  Úattention_outputr4  Úattention_windowsÚresiduals   &&&&,               r'   rE   ÚSwinLayer.forward$  s  € ÷  Ø×*Ñ*Ð+;Ô<Ø(‰ˆØ"/×"4Ñ"4Ó"6Ñˆ
�xØ ˆà×-Ñ-¨mÓ<ˆØ%×*Ñ*¨:¸uÓOˆð %)§N¡N°=È%Ó$PÑ!ˆØ&3×&9Ñ&9Ñ#ˆ�yä 0°×1BÑ1BÀ=Ó1QÐSW×ScÑScÓ dÐØ 5× :Ñ :¸2¸t×?OÑ?OÐRV×RbÑRbÕ?bÐdlÓ mÐØ×&Ñ&Ø¨×)<Ñ)<ÐEZ×EaÑEað 'ó 
ˆ	ð *.¯ªÐ8MÑ)cÐ\bÑ)cÑ&Ð˜,ØŸ<™<Ð(8Ó9Ðà,×1Ñ1°"°d×6FÑ6FÈ×HXÑHXÐZbÓcÐØ ×-Ñ-ÜÐ,¨d×.>Ñ.>À
ÓVÐ`dð .ó 
Ðð �a�=˜1Ô 
¨1¥°Ô 1Ø 1°!°W°f°W¸f¸u¸fÀaÐ2GÕ H× SÑ SÓ UÐà-×2Ñ2°:È½~ÈxÓXÐØ §>¡>Ð2CÓ#DÕDˆà ˆØ×,Ñ,¨]Ó;ˆØŸ™ Ó/ˆØŸ™ ]Ó3°hÕ>ˆà˜lÐ*Ð*r*   )rL  rR  rE  rO  rN  rP  rG  r|   )r8   rû   rÄ   )rN   rO   rP   rQ   r.   rX  rf  rÕ   rt  rE   rS   rT   rU   rV   s   @@r'   rC  rC  Ü  sH   ù‡ € ÷aõ a÷&ð ÷ð ÷2)ð )÷	ò 	÷-+÷ -+ò -+r*   rC  c                   óf   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltR	V3R lR lltRtVtV ;t	# )
Ú	SwinStageiT  c                ód   <€ V ^8„  d   QhRS[ RS[RS[S[S[3,          RS[RS[RS[S[,          /# )r!   r™   r®   rE  Údepthrø   rR  )r   rŸ   r`   Úlistr$   )r%   r&   s   "€r'   r(   ÚSwinStage.__annotate__U  s[   ø€ ÷ Rñ RáðRñ ðRñ  ¡¡S �/ð	Rñ
 ðRñ ðRñ ™•;ñRr*   c                óD  <€ \         S	V `  4        Wn        \        P                  ! \        V4       Uu. uF;  p\        TTTTWh,          V^,          ^ 8X  d   ^ MVP                  ^,          R7      NK=  	  up4      V n        Ve   V! VR7      V n	        R# RV n	        R# u upi )r!   )r™   r®   rE  rø   rF  rG  Nrï   )
r-   r.   r™   r   Ú
ModuleListrñ   rC  r|   ÚblocksÚ
downsample)
r/   r™   r®   rE  r†  rø   rR  rŒ  Úir0   s
   &&&&&&&& €r'   r.   ÚSwinStage.__init__U  s˜   ø€ ô 	‰ÑÔØŒÜ—m’mô ˜uœó
ñ &�Aô Ø!ØØ%5Ø'Ø#,¥<Ø%&¨¥U¨a¤Z™q°f×6HÑ6HÈAÕ6M÷ñ &ñ
ó
ˆŒð 2<Ò1G™*¨Ô-ˆŽÈTˆŽùò
s   ³ABc                óz   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[RS[RS[RS[ P                  /# )r!   r3   Ú!hidden_states_before_downsamplingr~   r   Ú(output_hidden_states_before_downsamplingr#   )r5   r6   rŸ   r¹   )r%   r&   s   "€r'   r(   rˆ  q  s[   ø€ ÷ bñ bá—|‘|ðbñ ,1¯<©<ðbñ ð	bñ
 ðbñ 37ðbñ 
�‰ñbr*   c                ó  € V'       d   Y#Tr‡pM3V P                   e"   Y^,           ^,          V^,           ^,          r‡pMYTr‡pVP                  w  ršpVP                  W—W‹4      P                  ^ ^^^4      P	                  4       # )u^  
Select the spatial hidden states for this stage and reshape from (B, L, C) to (B, C, H, W).

The chosen state and its resolution depend on output_hidden_states_before_downsampling:
- True  â†’ pre-downsampling states at (height, width) â€” used by the backbone.
- False â†’ post-downsampling states at half the resolution (if a downsampler exists).
)rŒ  r>   rx   rª   rz   )r/   r3   r�  r~   r   r‘  Úspatial_stateÚhÚwr}   r¾   rÐ   s   &&&&&&      r'   Úget_reshaped_hidden_statesÚ$SwinStage.get_reshaped_hidden_statesq  s�   € ÷ 4Ø"CÈU˜aˆM˜aØ�_‰_Ò(Ø"/¸1µ*ÀÕ1BÀUÈQÅYÐSTÕDT˜aˆM˜aà"/¸˜aˆMà%2×%8Ñ%8Ñ"ˆ
�{Ø×!Ñ! *°Ó@×HÑHÈÈAÈqÐRSÓT×_Ñ_ÓaÐar*   c                óÜ   <€ V ^8„  d   QhRS[ P                  RS[S[S[3,          RS[RS[RS[S[,          RS[S[ P                  S[ P                  S[ P                  R,          3,          /# )r!   r3   rì   rw  r‘  r&  r#   Nrx  )r%   r&   s   "€r'   r(   rˆ  Š  s~   ø€ ÷ Hñ Há—|‘|ðHñ  ¡¡S �/ðHñ ð	Hñ
 37ðHñ Ñ+Õ,ðHñ 
‰u�|‰|™UŸ\™\©5¯<©<¸$Õ+>Ð>Õ	?ñHr*   c                ó¾   € Vw  rgR pV P                    F  p	V	! W3RV/VB w  rK  	  Tp
V P                  e   V P                  W¢4      pV P                  WWgV4      pWV3# )Nrw  )r‹  rŒ  r–  )r/   r3   rì   rw  r‘  r&  r~   r   Úlast_attn_weightsÚlayer_moduler�  r]   s   &&&&&,      r'   rE   ÚSwinStage.forwardŠ  sŠ   € ð )‰ˆØ ÐØ ŸKœKˆLÙ/;Øñ0ØBRð0ØV\ñ0Ñ,ˆMÑ,ñ (ð
 -:Ð)Ø�?‰?Ò&Ø ŸO™OÐ,MÓ`ˆMà!%×!@Ñ!@Ø¸fÐMuó"
Ðð Ð6GÐGÐGr*   )r‹  r™   rŒ  )FF)
rN   rO   rP   rQ   r.   r–  rE   rS   rT   rU   rV   s   @@r'   r„  r„  T  s/   ù‡ € ÷Ró R÷8bð b÷2H÷ Hò Hr*   r„  c            	       ó    a € ] tR tRt o R.tRtRtRR.tR]! ]	^ RR7      R	]! ]	^RR7      /t
]P                  ! 4       R
 4       tV 3R ltRtV tR# )ÚSwinPreTrainedModeli¤  r„  Fz(attention\.self\.relative_position_indexz:attention\.relative_position_bias\.relative_position_indexr3   T)ÚindexÚcapture_initial_hidden_stater\   c                ó
  € \         P                  ! W4       \        V\        4      '       da   VP                  e!   \
        P                  ! VP                  4       VP                  e#   \
        P                  ! VP                  4       R# R# \        V\        4      '       da   \
        P                  ! VP                  4       \
        P                  ! VP                  VP                  4       P                  R4      4       R# R# )zInitialize the weightsNrv   )r   Ú_init_weightsrÊ   r†   r�   ÚinitÚzeros_r’   rö   rþ   Úcopy_r  r   rx   )r/   Úmodules   &&r'   r¢  Ú!SwinPreTrainedModel._init_weightsº  s®   € ô 	×%Ò% dÔ3Ü�fœn×-Ò-Ø× Ñ Ò,Ü—’˜F×-Ñ-Ô.Ø×)Ñ)Ò5Ü—’˜F×6Ñ6Ö7ñ 6ä˜Ô 8×9Ò9Ü�KŠK˜×;Ñ;Ô<Ü�JŠJ�v×5Ñ5°v×7]Ñ7]Ó7_×7dÑ7dÐegÓ7hÖiñ :r*   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # ©r!   r™   r   )r%   r&   s   "€r'   r(   Ú SwinPreTrainedModel.__annotate__¤  s   ø‡ ‚ áÑò r*   rb   N)rN   rO   rP   rQ   Ú_no_split_modulesÚ_supports_flash_attnÚ_supports_flex_attnÚ"_keys_to_ignore_on_load_unexpectedr   r„  Ú_can_record_outputsr5   Úno_gradr¢  rc   rS   rT   rd   s   @r'   rž  rž  ¤  sx   ø‡ € ð %˜ÐØ ÐØÐð 	4ØEð*Ð&ð 	™¨	¸ÐY]Ô^ð
 	‘n Y°aÐV[Ô\ð	Ðð ‡]‚]ƒ_ñ
jó ð
j÷/ ƒ r*   rž  c                   ó€   a a€ ] tR tRt oV3R lV 3R llt]]! RR7      ]R	V3R lR ll4       4       4       tRt	Vt
V ;t# )
ÚSwinEncoderiÈ  c                ó<   <€ V ^8„  d   QhRS[ RS[S[S[3,          /# )r!   r™   r‹   )r   r`   rŸ   )r%   r&   s   "€r'   r(   ÚSwinEncoder.__annotate__É  s#   ø€ ÷ ñ ™zð ±e¹CÁ¸Hµoñ r*   c                óŠ  <€ \         SV `  V4       \        VP                  4      V n        Wn        \        \        VP                  4      4       Uu. uF@  q1P                  V,          \        \        VP                  4      ^,
          ^4      ,          NKB  	  pp\        P                  ! \        V P                  4       Uu. uF×  p\        T\        VP                  ^V,          ,          4      V^ ,          ^V,          ,          V^,          ^V,          ,          3VP                  V,          VP                  V,          V\        VP                  RV 4      \        VP                  RV^,            4       WPP                  ^,
          8  d   \         MRR7      NKÙ  	  up4      V n        V P%                  4        R# u upi u upi )r<   N)r™   r®   rE  r†  rø   rR  rŒ  )r-   r.   ÚlenÚdepthsÚ
num_layersr™   rñ   r
  rF  Úmaxr   rŠ  r„  rŸ   r�   rø   rÞ   ÚlayersÚ	post_init)r/   r™   r‹   r�  ÚdprÚ	layer_idxr0   s   &&&   €r'   r.   ÚSwinEncoder.__init__É  sk  ø€ Ü‰Ñ˜Ô Ü˜fŸm™mÓ,ˆŒØŒÜSXÔY\Ð]c×]jÑ]jÓYkÔSlÓmÑSlÈa×$Ñ$ qÕ(¬3¬s°6·=±=Ó/AÀAÕ/EÀqÓ+I×IÐIÑSlˆÐmÜ—m’mô "' t§¡Ô!7óñ "8�Iô Ø!Ü˜F×,Ñ,¨q°)­|Õ;Ó<Ø&/°¥l°q¸)µ|Õ&DÀiÐPQÅlÐWXÐZcÕWcÕFdÐ%eØ Ÿ-™-¨	Õ2Ø$×.Ñ.¨yÕ9Ø!¤# f§m¡m°J°YÐ&?Ó"@Ä3ÀvÇ}Á}ÐUdÐW`ÐcdÕWdÐGeÓCfÐgØ4=ÇÁÐRSÕ@SÔ4SÕ/ÐZ^÷ñ "8ñó
ˆŒð 	�‰Öùò nùòs   ÁAF;Ã CG F)Útie_last_hidden_statesc                ó~   <€ V ^8„  d   QhRS[ P                  RS[S[S[3,          RS[RS[RS[RS[S[,          RS[/# )r!   r3   rì   rw  Úoutput_hidden_statesr‘  r&  r#   )r5   r6   r`   rŸ   r¹   r   r   rY   )r%   r&   s   "€r'   r(   r´  á  sc   ø€ ÷ +
ñ +
á—|‘|ð+
ñ  ¡¡S �/ð+
ñ ð	+
ñ
 #ð+
ñ 37ð+
ñ Ñ+Õ,ð+
ñ 
ñ+
r*   c                ó¦  € RpV'       dI   VP                   w  r‰p
VP                  ! V.VOV
N5!  P                  ^ ^^^4      P                  4       pV3pV P                   Fc  pV! VV3RVRV/VB w  rp	V'       d
   W}3,          pVP
                  f   K5  V^ ,          ^,           ^,          V^,          ^,           ^,          3pKe  	  \        VVR7      # )a�  
input_dimensions (`tuple[int, int]`):
    Spatial `(height, width)` of the patch grid entering the encoder.
always_partition (`bool`, *optional*, defaults to `False`):
    If `True`, always apply window partitioning regardless of input resolution.
output_hidden_states_before_downsampling (`bool`, *optional*, defaults to `False`):
    If `True`, `reshaped_hidden_states` contains pre-downsampling feature maps.
Nrw  r‘  )r[   r]   )r>   rx   rª   rz   rº  rŒ  rY   )r/   r3   rì   rw  rÁ  r‘  r&  Úall_reshaped_hidden_statesr}   r¾   rÐ   Ústem_spatialr›  Úreshaped_hidden_states   &&&&&&,       r'   rE   ÚSwinEncoder.forwardÞ  s  € ð( &*Ð"ßð *7×)<Ñ)<Ñ&ˆJ˜;à×"Ò" :ÐNÐ0@ÐNÀ+ÓN×VÑVÐWXÐZ[Ð]^Ð`aÓb×mÑmÓoð ð +7¨Ð&à ŸKœKˆLÙ6BØØ ñ7ð "2ð7ð :bð	7ð
 ñ7Ñ3ˆM°!÷ $Ø*Ð.FÕFÐ*Ø×&Ñ&Ô2Ø%5°aÕ%8¸1Õ%<ÀÕ$BÐEUÐVWÕEXÐ[\ÕE\ÐabÕDbÐ#cÒ ñ (ô !Ø+Ø#=ô
ð 	
r*   )r™   rº  r¸  )FFF)rN   rO   rP   rQ   r.   r   r   r   rE   rS   rT   rU   rV   s   @@r'   r²  r²  È  sB   ù‡ € ÷ó ð*  Ù¨EÔ2Ø÷+
ñ +
ó ó 3ó  ÷+
ð +
r*   r²  c                   ó`   a a€ ] tR tRt oRV 3R llt]]RV3R lR ll4       4       tRtVt	V ;t
# )Ú	SwinModeli  c                ó  <€ \         SV `  V4       Wn        \        VP                  4      V n        \        VP                  ^V P
                  ^,
          ,          ,          4      V n        \        WR7      V n
        \        WP                  P                  4      V n        \        P                  ! V P                  VP                   R7      V n        V'       d   \        P$                  ! ^4      MRV n        V P)                  4        R# )zí
add_pooling_layer (`bool`, *optional*, defaults to `True`):
    Whether or not to apply pooling layer.
use_mask_token (`bool`, *optional*, defaults to `False`):
    Whether or not to create and apply mask tokens in the embedding layer.
)rš   rJ  N)r-   r.   r™   r¶  r·  r¸  rŸ   r�   Únum_featuresr†   r�   r²  rŒ   Úencoderr   r“   rM  Ú	layernormÚAdaptiveAvgPool1dÚpoolerr»  )r/   r™   Úadd_pooling_layerrš   r0   s   &&&&€r'   r.   ÚSwinModel.__init__  s¯   ø€ ô 	‰Ñ˜Ô ØŒÜ˜fŸm™mÓ,ˆŒÜ × 0Ñ 0°1¸¿¹È1Õ9LÕ3MÕ MÓNˆÔä(¨ÔOˆŒÜ" 6¯?©?×+EÑ+EÓFˆŒäŸš d×&7Ñ&7¸V×=RÑ=RÔSˆŒß1B”b×*Ò*¨1Ô-ÈˆŒð 	�‰Ör*   c          
      óŒ   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[RS[S[,          RS[/# ©r!   r¶   Nr·   r³   r&  r#   )r5   r_   r¸   r¹   r   r   rf   )r%   r&   s   "€r'   r(   ÚSwinModel.__annotate__(  sY   ø€ ÷ (
ñ (
á×'Ñ'¨$Õ.ð(
ñ ×)Ñ)¨DÕ0ð(
ñ #'ð	(
ñ
 Ñ+Õ,ð(
ñ 
ñ(
r*   c                óÊ  € VP                  RV P                  P                  4      pV P                  WVR7      w  rgV P                  ! VV3RV/VB pVP
                  p	V P                  V	4      p	Rp
V P                  e9   V P                  V	P                  ^^4      4      p
\        P                  ! V
^4      p
\        V	V
VP                  VP                  VP                  R7      # )z³
bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, num_patches)`, *optional*):
    Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).
rÁ  )r·   r³   N)r[   rh   r3   r\   r]   )Úpopr™   rÁ  r�   rË  r[   rÌ  rÎ  ry   r5   rÚ   rf   r3   r\   r]   )r/   r¶   r·   r³   r&  rÁ  Úembedding_outputrì   Úencoder_outputsÚsequence_outputÚpooled_outputs   &&&&,      r'   rE   ÚSwinModel.forward&  sê   € ð  &Ÿz™zÐ*@À$Ç+Á+×BbÑBbÓcÐà-1¯_©_ØÐTlð .=ó .
Ñ*Ðð Ÿ,š,ØØñ
ð "6ð
ð ñ	
ˆð *×;Ñ;ˆØŸ.™.¨Ó9ˆàˆØ�;‰;Ò"Ø ŸK™K¨×(AÑ(AÀ!ÀQÓ(GÓHˆMÜ!ŸMšM¨-¸Ó;ˆMäØ-Ø'Ø)×7Ñ7Ø&×1Ñ1Ø#2×#IÑ#Iô
ð 	
r*   )r™   r�   rË  rÌ  rÊ  r¸  rÎ  )TF©NNF©rN   rO   rP   rQ   r.   r   r   rE   rS   rT   rU   rV   s   @@r'   rÈ  rÈ    s0   ù‡ € ÷ð* Ø÷(
ñ (
ó ó ÷(
ð (
r*   rÈ  ad  
    Swin Model with a decoder on top for masked image modeling, as proposed in [SimMIM](https://huggingface.co/papers/2111.09886).

    <Tip>

    Note that we provide a script to pre-train this model on custom data in our [examples
    directory](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-pretraining).

    </Tip>
    c                   ó\   a a€ ] tR tRt oV 3R lt]]RV3R lR ll4       4       tRtVt	V ;t
# )ÚSwinForMaskedImageModelingiS  c                ó¸  <€ \         SV `  V4       \        VR RR7      V n        \	        VP
                  ^VP                  ^,
          ,          ,          4      p\        P                  ! \        P                  ! W!P                  ^,          VP                  ,          ^R7      \        P                  ! VP                  4      4      V n        V P                  4        R# )FT)rÏ  rš   )Úin_channelsÚout_channelsrÇ   N)r-   r.   rÈ  ÚswinrŸ   r�   r¸  r   Ú
SequentialrÎ   Úencoder_strider€   ÚPixelShuffleÚdecoderr»  )r/   r™   rÊ  r0   s   && €r'   r.   Ú#SwinForMaskedImageModeling.__init__`  sž   ø€ Ü‰Ñ˜Ô ä˜f¸ÈdÔSˆŒ	ä˜6×+Ñ+¨a°F×4EÑ4EÈÕ4IÕ.JÕJÓKˆÜ—}’}Ü�IŠIØ(×7LÑ7LÈaÕ7OÐRX×ReÑReÕ7eÐstôô �OŠO˜F×1Ñ1Ó2ó	
ˆŒð 	�‰Ör*   c          
      óŒ   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[RS[S[,          RS[/# rÒ  )r5   r_   r¸   r¹   r   r   rk   )r%   r&   s   "€r'   r(   Ú'SwinForMaskedImageModeling.__annotate__r  s`   ø€ ÷ H
ñ H
á×'Ñ'¨$Õ.ðH
ñ ×)Ñ)¨DÕ0ðH
ñ #'ð	H
ñ
 Ñ+Õ,ðH
ñ 
'ñH
r*   c                ó¨  € V P                   ! V3RVRV/VB pVP                  pVP                  ^^4      pVP                  w  rxp	\        P
                  ! V	R,          4      ;r«VP                  WxW«4      pV P                  V4      pRpVEe   V P                  P                  V P                  P                  ,          pVP                  R	Wî4      pVP                  V P                  P                  ^4      P                  V P                  P                  ^4      P                  ^4      P                  4       p\        P                  P!                  WRR7      pVV,          P#                  4       VP#                  4       R,           ,          V P                  P$                  ,          p\'        VVVP(                  VP*                  VP,                  R7      # )
aÐ  
bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, num_patches)`):
    Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).

Examples:
```python
>>> from transformers import AutoImageProcessor, SwinForMaskedImageModeling
>>> import torch
>>> from PIL import Image
>>> import httpx
>>> from io import BytesIO

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/swin-base-simmim-window6-192")
>>> model = SwinForMaskedImageModeling.from_pretrained("microsoft/swin-base-simmim-window6-192")

>>> num_patches = (model.config.image_size // model.config.patch_size) ** 2
>>> pixel_values = image_processor(images=image, return_tensors="pt").pixel_values
>>> # create random boolean mask of shape (batch_size, num_patches)
>>> bool_masked_pos = torch.randint(low=0, high=2, size=(1, num_patches)).bool()

>>> outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)
>>> loss, reconstructed_pixel_values = outputs.loss, outputs.reconstruction
>>> list(reconstructed_pixel_values.shape)
[1, 3, 192, 192]
```r·   r³   r¢   NÚnone)ræ   gñhãˆµøä>)rm   rn   r3   r\   r]   rv   )râ  r[   ry   r>   ÚmathrA   r©   ræ  r™   rÉ   r˜   Úrepeat_interleaver¼   rz   r   r«   Úl1_lossr
  r€   rk   r3   r\   r]   )r/   r¶   r·   r³   r&  ÚoutputsrØ  r}   r€   Úsequence_lengthr~   r   Úreconstructed_pixel_valuesÚmasked_im_lossr¤   rÂ   Úreconstruction_losss   &&&&,            r'   rE   Ú"SwinForMaskedImageModeling.forwardp  sœ  € ðL —)’)Øñ
à+ð
ð &>ð
ð ñ	
ˆð "×3Ñ3ˆà)×3Ñ3°A°qÓ9ˆØ4C×4IÑ4IÑ1ˆ
 /ÜŸš O°SÕ$8Ó9Ð9ˆØ)×1Ñ1°*ÈFÓZˆð &*§\¡\°/Ó%BÐ"àˆØÓ&Ø—;‘;×)Ñ)¨T¯[©[×-CÑ-CÕCˆDØ-×5Ñ5°b¸$ÓEˆOà×1Ñ1°$·+±+×2HÑ2HÈ!ÓLß"Ñ" 4§;¡;×#9Ñ#9¸1Ó=ß‘˜1“ß‘“ð	 ô #%§-¡-×"7Ñ"7¸ÐlrÐ"7Ó"sÐØ1°DÕ8×=Ñ=Ó?À4Ç8Á8Ã:ÐPTÕCTÕUÐX\×XcÑXc×XpÑXpÕpˆNä,ØØ5Ø!×/Ñ/Ø×)Ñ)Ø#*×#AÑ#Aô
ð 	
r*   )ræ  râ  rÛ  rÜ  rV   s   @@r'   rÞ  rÞ  S  s4   ù‡ € õð  Ø÷H
ñ H
ó ó ÷H
ð H
r*   rÞ  aâ  
    Swin Model transformer with an image classification head on top (a linear layer on top of the final hidden state of
    the [CLS] token) e.g. for ImageNet.

    <Tip>

        Note that it's possible to fine-tune Swin on higher resolution images than the ones it has been trained on, by
        setting `interpolate_pos_encoding` to `True` in the forward of the model. This will interpolate the pre-trained
        position embeddings to the higher resolution.

    </Tip>
    c                   ó\   a a€ ] tR tRt oV 3R lt]]RV3R lR ll4       4       tRtVt	V ;t
# )ÚSwinForImageClassificationi½  c                óH  <€ \         SV `  V4       VP                  V n        \        V4      V n        VP                  ^ 8”  d6   \
        P                  ! V P                  P                  VP                  4      M\
        P                  ! 4       V n	        V P                  4        R# )rû   N)r-   r.   Ú
num_labelsrÈ  râ  r   rå   rÊ  rQ  Ú
classifierr»  )r/   r™   r0   s   &&€r'   r.   Ú#SwinForImageClassification.__init__Ì  sx   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ˜fÓ%ˆŒ	ð EK×DUÑDUÐXYÔDYŒB�IŠI�d—i‘i×,Ñ,¨f×.?Ñ.?Ô@Ô_a×_jÒ_jÓ_lð 	Œð
 	�‰Ör*   c          
      óŒ   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[RS[S[,          RS[/# )r!   r¶   NÚlabelsr³   r&  r#   )r5   r_   Ú
LongTensorr¹   r   r   rq   )r%   r&   s   "€r'   r(   Ú'SwinForImageClassification.__annotate__Ü  sY   ø€ ÷ !
ñ !
á×'Ñ'¨$Õ.ð!
ñ × Ñ  4Õ'ð!
ñ #'ð	!
ñ
 Ñ+Õ,ð!
ñ 
#ñ!
r*   c                ó
  € V P                   ! V3RV/VB pVP                  pV P                  V4      pRpVe   V P                  ! W'V P                  3/ VB p\        VVVP                  VP                  VP                  R7      # )ab  
labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
    Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
    config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
    `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
r³   N)rm   rs   r3   r\   r]   )	râ  rh   rù  Úloss_functionr™   rq   r3   r\   r]   )	r/   r¶   rü  r³   r&  rï  rÙ  rs   rm   s	   &&&&,    r'   rE   Ú"SwinForImageClassification.forwardÚ  s–   € ð —)’)Øñ
à%=ð
ð ñ
ˆð  ×-Ñ-ˆà—‘ Ó/ˆàˆØÒØ×%Ò% f°d·k±kÑLÀVÑLˆDä(ØØØ!×/Ñ/Ø×)Ñ)Ø#*×#AÑ#Aô
ð 	
r*   )rù  rø  râ  rÛ  rÜ  rV   s   @@r'   rö  rö  ½  s0   ù‡ € õð Ø÷!
ñ !
ó ó ÷!
ð !
r*   rö  zM
    Swin backbone, to be used with frameworks like DETR and MaskFormer.
    c                   ót   a a€ ] tR tRt oR.tV3R lV 3R llt]]]V3R lR l4       4       4       t	Rt
VtV ;t# )ÚSwinBackbonei   zswin.layernorm.*c                ó    <€ V ^8„  d   QhRS[ /# r©  r   )r%   r&   s   "€r'   r(   ÚSwinBackbone.__annotate__  s   ø€ ÷ ñ ™zñ r*   c           	     óü  <€ \         SV `  V4       VP                  .\        \	        VP
                  4      4       Uu. uF&  p\        VP                  ^V,          ,          4      NK(  	  up,           V n        \        VRR7      V n	        / p\        V P                  V P                  4       F  w  rE\        P                  ! V4      W4&   K  	  \        P                  ! V4      V n        V P#                  4        R# u upi )r!   F)rÏ  N)r-   r.   r�   rñ   r¶  r·  rŸ   rÊ  rÈ  râ  ÚzipÚout_featuresrz  r   r“   Ú
ModuleDictÚhidden_states_normsr»  )r/   r™   r�  r
  Ústager€   r0   s   &&    €r'   r.   ÚSwinBackbone.__init__  sÊ   ø€ Ü‰Ñ˜Ô à#×-Ñ-Ð.ÔX]Ô^aÐbh×boÑboÓ^pÔXqÓ1rÑXqÐST´#°f×6FÑ6FÈÈAÍÕ6MÖ2NÑXqÑ1rÕrˆÔÜ˜f¸Ô>ˆŒ	ð !ÐÜ#& t×'8Ñ'8¸$¿-¹-Ö#HÑˆEÜ)+¯ª°lÓ)CÐÓ&ñ $Iä#%§=¢=Ð1DÓ#EˆÔ ð 	�‰Öùò 2ss   ½,C9c                óP   <€ V ^8„  d   QhRS[ P                  RS[S[,          RS[/# )r!   r¶   r&  r#   )r5   r6   r   r   r
   )r%   r&   s   "€r'   r(   r    s3   ø€ ÷ 7
ñ 7
á—l‘lð7
ñ Ñ+Õ,ð7
ñ 
ñ	7
r*   c                ó.  € V P                   ! V3RRRR/VB pRp\        V P                  VP                  4       F·  w  rVWPP                  9   g   K  VP
                  w  rxršVP                  ^ ^^^4      P                  4       pVP                  WyV
,          V4      pV P                  V,          ! V4      pVP                  WyW¨4      pVP                  ^ ^^^4      P                  4       pWF3,          pK¹  	  \        VVP                  VP                  R7      # )aë  
Examples:

```python
>>> from transformers import AutoImageProcessor, AutoBackbone
>>> import torch
>>> from PIL import Image
>>> import httpx
>>> from io import BytesIO

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> processor = AutoImageProcessor.from_pretrained("shi-labs/nat-mini-in1k-224")
>>> model = AutoBackbone.from_pretrained(
...     "microsoft/swin-tiny-patch4-window7-224", out_features=["stage1", "stage2", "stage3", "stage4"]
... )

>>> inputs = processor(image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> feature_maps = outputs.feature_maps
>>> list(feature_maps[-1].shape)
[1, 768, 7, 7]
```
rw  Tr‘  )Úfeature_mapsr3   r\   rb   )râ  r  Ústage_namesr]   r  r>   rª   rz   rx   r
  r
   r\   )r/   r¶   r&  rï  r  r  Úhidden_stater}   r€   r~   r   s   &&,        r'   rE   ÚSwinBackbone.forward  s  € ðH —)’)Øñ
à!ð
ð 6:ð
ð ñ	
ˆð ˆÜ#& t×'7Ñ'7¸×9WÑ9WÖ#XÑˆEØ×)Ñ)Ö)Ø:F×:LÑ:LÑ7�
¨&Ø+×3Ñ3°A°q¸!¸QÓ?×JÑJÓL�Ø+×0Ñ0°Àe½^È\ÓZ�Ø#×7Ñ7¸Ö>¸|ÓL�Ø+×0Ñ0°ÀUÓY�Ø+×3Ñ3°A°q¸!¸QÓ?×JÑJÓL�Ø Õ/’ñ $Yô Ø%Ø!×8Ñ8Ø×)Ñ)ô
ð 	
r*   )r
  rÊ  râ  )rN   rO   rP   rQ   Ú_keys_to_ignore_on_load_missingr.   r   r   r   rE   rS   rT   rU   rV   s   @@r'   r  r     sC   ù‡ € ð (;Ð&;Ð#÷ó ð Ø Ø÷7
ó ó !ó ÷7
ð 7
r*   r  )rö  rÞ  rÈ  rž  r  )HrR   Úcollections.abcrË   rì  r   Údataclassesr   r5   r   Ú r   r£  Úactivationsr   Úbackbone_utilsr   r   Úmodeling_layersr	   Úmodeling_outputsr
   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   r   Úvit.modeling_vitr   r   r   r   r   r   Úconfiguration_swinr   Ú
get_loggerrN   Úloggerr;  r   rY   rf   rk   rq   r‚   r„   r†   rˆ   rÞ   rö   r  r7  rC  r„  rž  r²  rÈ  rÞ  rö  r  Ú__all__rb   r*   r'   Ú<module>r%     s˜  ðñ &ã Û Ý $Ý !ã Ý å &Ý !ß HÝ 9Ý .Ý 5Ý &ß XÕ Xß Iß E÷÷ õ +ð 
×	Ò	˜HÓ	%€ô%�2—9‘9ô %ñ0 ðôð
 ôH˜ó Hó óðHñ  ðôð
 ôH�kó Hó óðHñ& ðôð
 ôH Kó Hó óðHñ* ðôð
 ôH ó Hó óðHò*	òôM-�R—Y‘Yô M-ô`'-˜"Ÿ)™)ô '-ôT%�r—y‘yô %ôP)Q˜rŸy™yô )QôX@)�Lô @)ôF?ˆfô ?ôu+�ô u+ôpMHÐ*ô MHð` ô jÐ,ó  jó ð jôFD
Ð%ô D
ðN ô@
Ð#ó @
ó ð@
ñF ð	ôô[
Ð!4ó [
óð[
ñ| ðôô2
Ð!4ó 2
óð2
ñj ðôô
L
�=Ð"5ó L
óð
L
ò^‚r*   