§
    ‚ŠtjÅÄ  ã                   ó&  — d dl Zd dlZd dl mZ d dlmZ d dlZd dlmZ ddlm	Z
 ddlmZ ddlmZmZ dd	l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mZ ddlmZm Z  ddl!m"Z"m#Z# ddl$m%Z%  G d„ dej&        ¦  «        Z' ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z( ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z) ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z* ed¬¦  «        e G d„ d e¦  «        ¦   «         ¦   «         Z+ G d!„ d"ej&        ¦  «        Z, G d#„ d$ej&        ¦  «        Z- G d%„ d&ej&        ¦  «        Z. G d'„ d(ej&        ¦  «        Z/	 	 dMd*ej&        d+ej0        d,ej0        d-ej0        d.ej0        dz  d/e1dz  d0e1d1ee         fd2„Z2 G d3„ d4ej&        ¦  «        Z3 G d5„ d6ej&        ¦  «        Z4d7„ Z5d8„ Z6 G d9„ d:e¦  «        Z7 G d;„ d<e¦  «        Z8e G d=„ d>e¦  «        ¦   «         Z9 G d?„ d@e9¦  «        Z:e G dA„ dBe9¦  «        ¦   «         Z; edC¬¦  «         G dD„ dEe9¦  «        ¦   «         Z< edF¬¦  «         G dG„ dHe9¦  «        ¦   «         Z= edI¬¦  «         G dJ„ dKee9¦  «        ¦   «         Z>g dL¢Z?dS )Né    N)ÚCallable)Ú	dataclass)Únné   )Úinitialization)ÚACT2FN)ÚBackboneMixinÚfilter_output_hidden_states)ÚGradientCheckpointingLayer)ÚBackboneOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )Ú
SwinConfigc                   ó^   ‡ — e Zd ZdZd
deddfˆ fd„Zdej        dej        fd„Zde	fd	„Z
ˆ xZS )Ú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>`_.
    ç        Ú	drop_probÚreturnNc                 óV   •— t          ¦   «                              ¦   «          || _        d S ©N)ÚsuperÚ__init__r   )Úselfr   Ú	__class__s     €úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/swin/modeling_swin.pyr"   zSwinDropPath.__init__1   s$   ø€ Ý‰Œ×ÒÑÔÐØ"ˆŒˆˆó    Úhidden_statesc                 ó  — | j         dk    s| j        s|S d| j         z
  }|j        d         fd|j        dz
  z  z   }t	          j        ||j        |j        ¬¦  «        }t	          j        ||z   ¦  «        }| 	                    |¦  «        |z  S )Nr   r   r   ©r   ©ÚdtypeÚdevice)
r   ÚtrainingÚshapeÚndimÚtorchÚrandr+   r,   ÚfloorÚdiv)r#   r'   Ú	keep_probr.   Úrandom_tensors        r%   ÚforwardzSwinDropPath.forward5   s“   € ØŒ>˜SÒ Ð ¨¬Ð Ø Ð Ø˜œÑ&ˆ	ØÔ$ QÔ'Ð)¨D°MÔ4FÈÑ4JÑ,KÑKˆÝœ
 5°Ô0CÈMÔL`ÐaÑaÔaˆÝœ M°IÑ$=Ñ>Ô>ˆØ× Ò  Ñ+Ô+¨mÑ;Ð;r&   c                 ó   — d| j         › �S )Nzp=)r   )r#   s    r%   Ú
extra_reprzSwinDropPath.extra_repr>   s   € Ø$�D”NÐ$Ð$Ð$r&   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úfloatr"   r0   ÚTensorr6   Ústrr8   Ú__classcell__©r$   s   @r%   r   r   *   s›   ø€ € € € € ðð ð#ð # %ð #°$ð #ð #ð #ð #ð #ð #ð< U¤\ð <°e´lð <ð <ð <ð <ð%˜Cð %ð %ð %ð %ð %ð %ð %ð %r&   r   zN
    Swin encoder's outputs, with potential hidden states and attentions.
    )Úcustom_introc                   ó¼   — e Zd ZU dZdZej        dz  ed<   dZe	ej        df         dz  ed<   dZ
e	ej        df         dz  ed<   dZe	ej        df         dz  ed<   dS )Ú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.
    NÚlast_hidden_state.r'   Ú
attentionsÚreshaped_hidden_states)r9   r:   r;   r<   rE   r0   ÚFloatTensorÚ__annotations__r'   ÚtuplerF   rG   © r&   r%   rD   rD   B   sž   € € € € € € ðð ð 37Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;ØCGÐ˜E %Ô"3°SÐ"8Ô9¸DÑ@ÐGÐGÑGÐGÐGr&   rD   zV
    Swin model's outputs that also contains a pooling of the last hidden states.
    c                   óÚ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dS )	Ú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.
    NrE   Úpooler_output.r'   rF   rG   )r9   r:   r;   r<   rE   r0   rH   rI   rN   r'   rJ   rF   rG   rK   r&   r%   rM   rM   X   s¶   € € € € € € ð	ð 	ð 37Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø.2€M�5Ô$ tÑ+Ð2Ð2Ñ2Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;ØCGÐ˜E %Ô"3°SÐ"8Ô9¸DÑ@ÐGÐGÑGÐGÐGr&   rM   z*
    Swin masked image model outputs.
    c                   óÚ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dS )	Ú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.
    NÚlossÚreconstruction.r'   rF   rG   )r9   r:   r;   r<   rQ   r0   rH   rI   rR   r'   rJ   rF   rG   rK   r&   r%   rP   rP   q   sµ   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø/3€N�EÔ%¨Ñ,Ð3Ð3Ñ3Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;ØCGÐ˜E %Ô"3°SÐ"8Ô9¸DÑ@ÐGÐGÑGÐGÐGr&   rP   z0
    Swin outputs for image classification.
    c                   óÚ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dS )	ÚSwinImageClassifierOutputa7  
    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.
    NrQ   Úlogits.r'   rF   rG   )r9   r:   r;   r<   rQ   r0   rH   rI   rU   r'   rJ   rF   rG   rK   r&   r%   rT   rT   Œ   sµ   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;ØCGÐ˜E %Ô"3°SÐ"8Ô9¸DÑ@ÐGÐGÑGÐGÐGr&   rT   c            
       ó¤   ‡ — e Zd ZdZdˆ fd„	Zdej        dededej        fd„Z	 	 dd
ej	        d	z  dej
        d	z  dedeej                 fd„Zˆ xZS )ÚSwinEmbeddingszW
    Construct the patch and position embeddings. Optionally, also the mask token.
    Fc                 ó*  •— t          ¦   «                              ¦   «          t          |¦  «        | _        | j        j        }| j        j        | _        |r-t          j        t          j
        dd|j        ¦  «        ¦  «        nd | _        |j        r-t          j        t          j
        d||j        ¦  «        ¦  «        nd | _        t          j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        |j        | _        || _        d S )Nr   )r!   r"   ÚSwinPatchEmbeddingsÚpatch_embeddingsÚnum_patchesÚ	grid_sizeÚ
patch_gridr   Ú	Parameterr0   ÚzerosÚ	embed_dimÚ
mask_tokenÚuse_absolute_embeddingsÚposition_embeddingsÚ	LayerNormÚnormÚDropoutÚhidden_dropout_probÚdropoutÚ
patch_sizeÚconfig)r#   rj   Úuse_mask_tokenr[   r$   s       €r%   r"   zSwinEmbeddings.__init__¬   så   ø€ Ý‰Œ×ÒÑÔÐå 3°FÑ ;Ô ;ˆÔØÔ+Ô7ˆØÔ/Ô9ˆŒØO]Ðg�"œ,¥u¤{°1°a¸Ô9IÑ'JÔ'JÑKÔKÐKÐcgˆŒð LRÔKiÐs�BŒL�œ Q¨°VÔ5EÑFÔFÑGÔGÐGÐosð 	Ô õ ”L Ô!1Ñ2Ô2ˆŒ	Ý”z &Ô"<Ñ=Ô=ˆŒØ Ô+ˆŒØˆŒˆˆr&   Ú
embeddingsÚheightÚwidthr   c                 ó  — |j         d         }| j        j         d         }t          j                             ¦   «         s||k    r||k    r| j        S |j         d         }|| j        z  }|| j        z  }t          |dz  ¦  «        }	| j                             d|	|	|¦  «        }
|
                     dddd¦  «        }
t          j
                             |
||fdd¬	¦  «        }
|
                     dddd¦  «                             dd|¦  «        S )
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.
        r   éÿÿÿÿç      à?r   r   é   ÚbicubicF)ÚsizeÚmodeÚalign_corners)r.   rc   r0   ÚjitÚ
is_tracingri   r   ÚreshapeÚpermuter   Ú
functionalÚinterpolateÚview)r#   rl   rm   rn   r[   Únum_positionsÚdimÚ
new_heightÚ	new_widthÚsqrt_num_positionsÚpatch_pos_embeds              r%   Úinterpolate_pos_encodingz'SwinEmbeddings.interpolate_pos_encoding½   s   € ð
 !Ô& qÔ)ˆØÔ0Ô6°qÔ9ˆõ Œy×#Ò#Ñ%Ô%ð 	,¨+¸Ò*FÐ*FÈ6ÐUZÊ?È?ØÔ+Ð+àÔ˜rÔ"ˆà˜tœÑ.ˆ
Ø˜Tœ_Ñ,ˆ	å& }°cÑ'9Ñ:Ô:ÐØÔ2×:Ò:¸1Ð>PÐRdÐfiÑjÔjˆØ)×1Ò1°!°Q¸¸1Ñ=Ô=ˆåœ-×3Ò3ØØ˜iÐ(ØØð	 4ñ 
ô 
ˆð ×&Ò& q¨!¨Q°Ñ2Ô2×7Ò7¸¸2¸sÑCÔCÐCr&   NÚpixel_valuesÚbool_masked_posr„   c                 óÚ  — |j         \  }}}}|                      |¦  «        \  }}	|                      |¦  «        }|                     ¦   «         \  }
}}|�R| j                             |
|d¦  «        }|                     d¦  «                             |¦  «        }|d|z
  z  ||z  z   }| j        �'|r||  	                    |||¦  «        z   }n
|| j        z   }|  
                    |¦  «        }||	fS )Nrp   g      ð?)r.   rZ   re   rt   ra   ÚexpandÚ	unsqueezeÚtype_asrc   r„   rh   )r#   r…   r†   r„   Ú_Únum_channelsrm   rn   rl   Úoutput_dimensionsÚ
batch_sizeÚseq_lenÚmask_tokensÚmasks                 r%   r6   zSwinEmbeddings.forwardÛ   s	  € ð *6Ô);Ñ&ˆˆ<˜ Ø(,×(=Ò(=¸lÑ(KÔ(KÑ%ˆ
Ð%Ø—Y’Y˜zÑ*Ô*ˆ
Ø!+§¢Ñ!2Ô!2Ñˆ
�G˜QàÐ&Øœ/×0Ò0°¸WÀbÑIÔIˆKà"×,Ò,¨RÑ0Ô0×8Ò8¸ÑEÔEˆDØ# s¨T¡zÑ2°[À4Ñ5GÑGˆJàÔ#Ð/Ø'ð CØ'¨$×*GÒ*GÈ
ÐTZÐ\aÑ*bÔ*bÑb�
�
à'¨$Ô*BÑB�
à—\’\ *Ñ-Ô-ˆ
àÐ,Ð,Ð,r&   ©F)NF)r9   r:   r;   r<   r"   r0   r>   Úintr„   rH   Ú
BoolTensorÚboolrJ   r6   r@   rA   s   @r%   rW   rW   §   så   ø€ € € € € ðð ðð ð ð ð ð ð"D°5´<ð DÈð DÐUXð DÐ]bÔ]ið Dð Dð Dð DðB 48Ø).ð	-ð -àÔ'¨$Ñ.ð-ð Ô)¨DÑ0ð-ð #'ð	-ð
 
ˆuŒ|Ô	ð-ð -ð -ð -ð -ð -ð -ð -r&   rW   c                   ón   ‡ — e Zd ZdZˆ fd„Zd„ Zdej        dz  deej	        ee
         f         fd„Zˆ xZS )rY   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                 óþ  •— t          ¦   «                              ¦   «          |j        |j        }}|j        |j        }}t          |t          j        j	        ¦  «        r|n||f}t          |t          j        j	        ¦  «        r|n||f}|d         |d         z  |d         |d         z  z  }|| _        || _
        |d         |d         z  |d         |d         z  f| _        t          j        ||||¬¦  «        | _        d S )Nr   r   )Úkernel_sizeÚstride)r!   r"   Ú
image_sizeri   rŒ   r`   Ú
isinstanceÚcollectionsÚabcÚIterabler[   r\   r   ÚConv2dÚ
projection)r#   rj   rš   ri   rŒ   Úhidden_sizer[   r$   s          €r%   r"   zSwinPatchEmbeddings.__init__þ   sù   ø€ Ý‰Œ×ÒÑÔÐØ!'Ô!2°FÔ4E�Jˆ
Ø$*Ô$7¸Ô9I�kˆÝ#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ý#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ø! !”}¨
°1¬Ñ5¸*ÀQ¼-È:ÐVWÌ=Ñ:XÑYˆØ$ˆŒØ&ˆÔØ$ Qœ-¨:°a¬=Ñ8¸*ÀQ¼-È:ÐVWÌ=Ñ:XÐYˆŒåœ) L°+È:Ð^hÐiÑiÔiˆŒˆˆr&   c                 óZ  — || j         d         z  dk    r@d| j         d         || j         d         z  z
  f}t          j                             ||¦  «        }|| j         d         z  dk    rBddd| j         d         || j         d         z  z
  f}t          j                             ||¦  «        }|S )z9Pad pixel_values to be divisible by patch_size if needed.r   r   )ri   r   r{   Úpad)r#   r…   rm   rn   Ú
pad_valuess        r%   Ú	maybe_padzSwinPatchEmbeddings.maybe_pad  s­   € à�4”? 1Ô%Ñ%¨Ò*Ð*Ø˜Tœ_¨QÔ/°%¸$¼/È!Ô:LÑ2LÑLÐMˆJÝœ=×,Ò,¨\¸:ÑFÔFˆLØ�D”O AÔ&Ñ&¨!Ò+Ð+Ø˜Q  4¤?°1Ô#5¸ÀÄÐQRÔASÑ8SÑ#SÐTˆJÝœ=×,Ò,¨\¸:ÑFÔFˆLØÐr&   r…   Nr   c                 óì   — |j         \  }}}}|                      |||¦  «        }|                      |¦  «        }|j         \  }}}}||f}|                     d¦  «                             dd¦  «        }||fS )Nrr   r   )r.   r¥   r    ÚflattenÚ	transpose)r#   r…   r‹   rŒ   rm   rn   rl   r�   s           r%   r6   zSwinPatchEmbeddings.forward  sƒ   € Ø)5Ô);Ñ&ˆˆ<˜ à—~’~ l°F¸EÑBÔBˆØ—_’_ \Ñ2Ô2ˆ
Ø(Ô.Ñˆˆ1ˆf�eØ# U˜OÐØ×'Ò'¨Ñ*Ô*×4Ò4°Q¸Ñ:Ô:ˆ
àÐ,Ð,Ð,r&   )r9   r:   r;   r<   r"   r¥   r0   rH   rJ   r>   r“   r6   r@   rA   s   @r%   rY   rY   ÷   s“   ø€ € € € € ðð ðjð jð jð jð jðð ð ð	- EÔ$5¸Ñ$<ð 	-ÀÀuÄ|ÐUZÐ[^ÔU_ÐG_ÔA`ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-r&   rY   c                   ó�   ‡ — e Zd ZdZdeddfˆ fd„Zdej        dededej        fd	„Zdej        d
e	eef         dej        fd„Z
ˆ xZS )ÚSwinPatchMergingzd
    Patch Merging Layer.

    Args:
        dim (`int`):
            Number of input channels.
    r   r   Nc                 óÄ   •— t          ¦   «                              ¦   «          t          j        d|z  d|z  d¬¦  «        | _        t          j        d|z  ¦  «        | _        d S )Né   rr   F©Úbias)r!   r"   r   ÚLinearÚ	reductionrd   re   )r#   r   r$   s     €r%   r"   zSwinPatchMerging.__init__*  sR   ø€ Ý‰Œ×ÒÑÔÐÝœ 1 s¡7¨A°©G¸%Ð@Ñ@Ô@ˆŒÝ”L  S¡Ñ)Ô)ˆŒ	ˆ	ˆ	r&   Úinput_featurerm   rn   c           
      ó‚   — |dz  dk    s	|dz  dk    r,t           j                             |ddd|dz  d|dz  f¦  «        }|S )zPPad input feature map to be divisible by 2 in both spatial dimensions if needed.rr   r   r   )r   r{   r£   )r#   r±   rm   rn   s       r%   r¥   zSwinPatchMerging.maybe_pad/  sQ   € à�Q‰J˜!ŠOˆO ¨¡¨a¢ ÝœM×-Ò-¨m¸aÀÀAÀuÈqÁyÐRSÐU[Ð^_ÑU_Ð=`ÑaÔaˆMØÐr&   Úinput_dimensionsc                 ól  ‡— |\  }}‰j         \  }}}‰                     ||||¦  «        Š|                      ‰||¦  «        Št          j        ˆfd„t          d¦  «        D ¦   «         d¬¦  «        Š‰                     |dd|z  ¦  «        Š|                      ‰¦  «        Š|                      ‰¦  «        Š‰S )Nc           	      ó`   •— g | ]*}t          d ¦  «        D ]}‰dd…|dd …|dd …dd…f         ‘ŒŒ+S )rr   N)Úrange)Ú.0ÚcolÚrowr±   s      €r%   ú
<listcomp>z,SwinPatchMerging.forward.<locals>.<listcomp>?  sR   ø€ ÐYÐYÐY°SÕPUÐVWÑPXÔPXÐYÐYÈˆ]˜1˜1˜1˜c˜f 1˜f c f¨1 f¨a¨a¨aÐ/Ô0ÐYÐYÐYÐYr&   rr   rp   ©r   r¬   )r.   r}   r¥   r0   Úcatr¶   re   r°   )r#   r±   r³   rm   rn   rŽ   r   rŒ   s    `      r%   r6   zSwinPatchMerging.forward5  sÅ   ø€ Ø(‰ˆ�à(5Ô(;Ñ%ˆ
�C˜à%×*Ò*¨:°v¸uÀlÑSÔSˆàŸš }°f¸eÑDÔDˆåœ	ØYÐYÐYÐY½EÀ!¹H¼HÐYÑYÔYÐ_að
ñ 
ô 
ˆð &×*Ò*¨:°r¸1¸|Ñ;KÑLÔLˆàŸ	š	 -Ñ0Ô0ˆØŸš }Ñ5Ô5ˆàÐr&   )r9   r:   r;   r<   r“   r"   r0   r>   r¥   rJ   r6   r@   rA   s   @r%   rª   rª   !  sÃ   ø€ € € € € ðð ð*˜Cð * Dð *ð *ð *ð *ð *ð *ð
 u¤|ð ¸Sð Èð ÐQVÔQ]ð ð ð ð ð U¤\ð ÀUÈ3ÐPSÈ8Ä_ð ÐY^ÔYeð ð ð ð ð ð ð ð r&   rª   c                   óh   ‡ — e Zd ZdZdedeeef         fˆ fd„Zdej        fd„Z	dej        fd„Z
ˆ xZS )ÚSwinRelativePositionBiasaç  
    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.
    Ú	num_headsÚwindow_sizec                 óŠ  •— t          ¦   «                              ¦   «          || _        |d         |d         z  | _        t	          j        t          j        d|d         z  dz
  d|d         z  dz
  z  |¦  «        ¦  «        | _        |  	                    d|  
                    ¦   «                              d¦  «        d¬¦  «         d S )Nr   r   rr   Úrelative_position_indexrp   F)Ú
persistent)r!   r"   rÀ   Úwindow_arear   r^   r0   r_   Úrelative_position_bias_tableÚregister_bufferÚ_create_relative_position_indexr}   )r#   r¿   rÀ   r$   s      €r%   r"   z!SwinRelativePositionBias.__init__S  sÆ   ø€ Ý‰Œ×ÒÑÔÐØ&ˆÔØ& qœ>¨K¸¬NÑ:ˆÔÝ,.¬LÝŒK˜˜[¨œ^Ñ+¨aÑ/°A¸ÀA¼Ñ4FÈÑ4JÑKÈYÑWÔWñ-
ô -
ˆÔ)ð
 	×ÒØ%Ø×0Ò0Ñ2Ô2×7Ò7¸Ñ;Ô;Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r&   r   c                 óš  — t          j        | j        d         ¦  «        }t          j        | j        d         ¦  «        }t          j        t          j        ||gd¬¦  «        ¦  «        }t          j        |d¦  «        }|d d …d d …d f         |d d …d d d …f         z
  }|                     ddd¦  «                             ¦   «         }|d d …d d …dfxx         | j        d         dz
  z  cc<   |d d …d d …dfxx         | j        d         dz
  z  cc<   |d d …d d …dfxx         d| j        d         z  dz
  z  cc<   |                     d¦  «        S )Nr   r   Úij)Úindexingrr   rp   )	r0   ÚarangerÀ   ÚstackÚmeshgridr§   rz   Ú
contiguousÚsum)r#   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordss         r%   rÇ   z8SwinRelativePositionBias._create_relative_position_indexb  sw  € Ý”< Ô 0°Ô 3Ñ4Ô4ˆÝ”< Ô 0°Ô 3Ñ4Ô4ˆå”�Uœ^¨X°xÐ,@È4ÐPÑPÔPÑQÔQˆÝœ v¨qÑ1Ô1ˆà(¨¨¨¨A¨A¨A¨t¨Ô4°~ÀaÀaÀaÈÈqÈqÈqÀjÔ7QÑQˆØ)×1Ò1°!°Q¸Ñ:Ô:×EÒEÑGÔGˆð 	˜˜˜˜1˜1˜1˜a˜Ð Ð Ô  DÔ$4°QÔ$7¸!Ñ$;Ñ;Ð Ð Ñ Ø˜˜˜˜1˜1˜1˜a˜Ð Ð Ô  DÔ$4°QÔ$7¸!Ñ$;Ñ;Ð Ð Ñ Ø˜˜˜˜1˜1˜1˜a˜Ð Ð Ô  A¨Ô(8¸Ô(;Ñ$;¸aÑ$?Ñ?Ð Ð Ñ à×"Ò" 2Ñ&Ô&Ð&r&   c                 óà   — | j         | j                 }|                     | j        | j        d¦  «        }|                     ddd¦  «                             ¦   «                              d¦  «        S )Nrp   rr   r   r   )rÅ   rÂ   r}   rÄ   rz   rÎ   r‰   )r#   Úrelative_position_biass     r%   r6   z SwinRelativePositionBias.forwards  sd   € Ø!%Ô!BÀ4ÔC_Ô!`ÐØ!7×!<Ò!<¸TÔ=MÈtÔO_ÐacÑ!dÔ!dÐØ%×-Ò-¨a°°AÑ6Ô6×AÒAÑCÔC×MÒMÈaÑPÔPÐPr&   )r9   r:   r;   r<   r“   rJ   r"   r0   r>   rÇ   r6   r@   rA   s   @r%   r¾   r¾   I  s    ø€ € € € € ðð ð
 #ð 
°E¸#¸s¸(´Oð 
ð 
ð 
ð 
ð 
ð 
ð'°´ð 'ð 'ð 'ð 'ð"Q˜œð Qð Qð Qð Qð Qð Qð Qð Qr&   r¾   r   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingrh   Úkwargsc                 óô  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |dt          j        ¬¦  «                             |j	        ¦  «        }t          j         
                    ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «                             ¦   «         }	|	|fS )Nrp   ç      à¿rr   r   )r   r+   )Úpr-   r   )rt   r0   Úmatmulr¨   r   r{   ÚsoftmaxÚfloat32Útor+   rh   r-   rÎ   )
r×   rØ   rÙ   rÚ   rÛ   rÜ   rh   rÝ   Úattn_weightsÚattn_outputs
             r%   Úeager_attention_forwardrç   y  sÞ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r&   c                   ó–   ‡ — e Zd Zdedededefˆ fd„Z	 ddej        dej        dz  d	e	e
         d
eej        ej        f         fd„Zˆ xZS )ÚSwinAttentionrj   r¡   Únum_attention_headsrÀ   c                 óä  •— t          ¦   «                              ¦   «          || _        || _        ||z  | _        |j        | _        | j        dz  | _        d| _        t          j
        |||j        ¬¦  «        | _        t          j
        |||j        ¬¦  «        | _        t          j
        |||j        ¬¦  «        | _        t          j
        ||¦  «        | _        t!          |||f¦  «        | _        d S )Nrß   Fr­   )r!   r"   rj   rê   Úhead_dimÚattention_probs_dropout_probÚattention_dropoutrÜ   Ú	is_causalr   r¯   Úqkv_biasÚq_projÚk_projÚv_projÚo_projr¾   rÖ   )r#   rj   r¡   rê   rÀ   r$   s        €r%   r"   zSwinAttention.__init__–  sÖ   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ#6ˆÔ Ø#Ð':Ñ:ˆŒØ!'Ô!DˆÔØ”} dÑ*ˆŒØˆŒå”i ¨[¸v¼ÐOÑOÔOˆŒÝ”i ¨[¸v¼ÐOÑOÔOˆŒÝ”i ¨[¸v¼ÐOÑOÔOˆŒÝ”i ¨[Ñ9Ô9ˆŒå&>Ð?RÐU`ÐbmÐTnÑ&oÔ&oˆÔ#Ð#Ð#r&   Nr'   rÛ   rÝ   r   c                 óÒ  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      ¦   «         }	|�{|j         d         }
|d         |
z  }|d         }|                     d¦  «                             d¦  «         	                    |dddd¦  «         
                    dd||¦  «        }|	|z   }n|	}t          j        | j        j        t          ¦  «        } || ||||f| j        sdn| j        | j        dœ|¤Ž\  }} |j
        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )Nrp   r   rr   r   r   )rh   rÜ   )r.   rì   rñ   r}   r¨   rò   ró   rÖ   r‰   rˆ   ry   r   Úget_interfacerj   Ú_attn_implementationrç   r-   rî   rÜ   rÎ   rô   )r#   r'   rÛ   rÝ   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesrÖ   Únum_windowsrŽ   r�   Úcombined_maskÚattention_interfaceræ   rå   s                    r%   r6   zSwinAttention.forward¦  s  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆØ—[’[ Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆð "&×!<Ò!<Ñ!>Ô!>ÐØÐ%à(Ô.¨qÔ1ˆKØ$ Qœ¨;Ñ6ˆJØ! !”nˆGð ×(Ò(¨Ñ+Ô+ß’˜1‘”ß’˜
 B¨¨B°Ñ3Ô3ß’˜˜Q ¨Ñ1Ô1ð	 ð 3°^ÑCˆMˆMà2ˆMå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆà˜LÐ(Ð(r&   r    )r9   r:   r;   r   r“   r"   r0   r>   rH   r   r   rJ   r6   r@   rA   s   @r%   ré   ré   •  sÇ   ø€ € € € € ðp˜zð p¸ð pÐRUð pÐdgð pð pð pð pð pð pð& 48ð2)ð 2)à”|ð2)ð Ô)¨DÑ0ð2)ð Ð+Ô,ð	2)ð
 
ˆuŒ|˜Uœ\Ð)Ô	*ð2)ð 2)ð 2)ð 2)ð 2)ð 2)ð 2)ð 2)r&   ré   c                   óL   ‡ — e Zd Zdedefˆ fd„Zdej        dej        fd„Zˆ xZ	S )ÚSwinMLPrj   r   c                 ó2  •— t          ¦   «                              ¦   «          t          |j                 | _        t          j        |t          |j        |z  ¦  «        ¦  «        | _	        t          j        t          |j        |z  ¦  «        |¦  «        | _
        d S r    )r!   r"   r   Ú
hidden_actÚactivation_fnr   r¯   r“   Ú	mlp_ratioÚfc1Úfc2)r#   rj   r   r$   s      €r%   r"   zSwinMLP.__init__Ü  ss   ø€ Ý‰Œ×ÒÑÔÐÝ# FÔ$5Ô6ˆÔÝ”9˜S¥# fÔ&6¸Ñ&<Ñ"=Ô"=Ñ>Ô>ˆŒÝ”9�S Ô!1°CÑ!7Ñ8Ô8¸#Ñ>Ô>ˆŒˆˆr&   r'   r   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r    )r  r  r  )r#   r'   s     r%   r6   zSwinMLP.forwardâ  s=   € ØŸš Ñ/Ô/ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš Ñ/Ô/ˆàÐr&   )
r9   r:   r;   r   r“   r"   r0   r>   r6   r@   rA   s   @r%   r  r  Û  sq   ø€ € € € € ð?˜zð ?°ð ?ð ?ð ?ð ?ð ?ð ?ð U¤\ð °e´lð ð ð ð ð ð ð ð r&   r  c                 óÚ   — | j         \  }}}}|                      |||z  |||z  ||¦  «        } |                      dd¦  «                             ¦   «                              d|||¦  «        }|S )z2
    Partitions the given input into windows.
    rr   r   rp   ©r.   r}   r¨   rÎ   )r±   rÀ   rŽ   rm   rn   rŒ   Úwindowss          r%   Úwindow_partitionr  ê  s   € ð /<Ô.AÑ+€J�˜˜|Ø!×&Ò&Ø�F˜kÑ)¨;¸ÀÑ8LÈkÐ[gñô €Mð ×%Ò% a¨Ñ+Ô+×6Ò6Ñ8Ô8×=Ò=¸bÀ+È{Ð\hÑiÔi€GØ€Nr&   c                 óÜ   — | j         d         }|                      d||z  ||z  |||¦  «        } |                      dd¦  «                             ¦   «                              d|||¦  «        } | S )z?
    Merges windows to produce higher resolution features.
    rp   rr   r   r
  )r  rÀ   rm   rn   rŒ   s        r%   Úwindow_reverser  ö  sq   € ð ”= Ô$€LØ�lŠl˜2˜v¨Ñ4°e¸{Ñ6JÈKÐYdÐfrÑsÔs€GØ×Ò  1Ñ%Ô%×0Ò0Ñ2Ô2×7Ò7¸¸FÀEÈ<ÑXÔX€GØ€Nr&   c                   ót  ‡ — e Zd Z	 	 ddededeeef         dededefˆ fd	„Z	 ddej	        deeef         de
dee         dej	        f
d„Zdeeef         ddfd„Zdededej        dej        dej	        dz  f
d„Zdej	        dededeej	        eedf         f         fd„Zddej	        de
dej	        fd„Zˆ xZS )Ú	SwinLayerr   r   rj   r   Úinput_resolutionr¿   Údrop_path_rateÚ
shift_sizec                 óö  •— t          ¦   «                              ¦   «          t          ||||j        ¬¦  «        | _        t          j        ||j        ¬¦  «        | _        t          j        ||j        ¬¦  «        | _	        t          ||¦  «        | _        t          j        |j        ¦  «        | _        |j        | _        || _        || _        |dk    rt#          |¦  «        nt          j        ¦   «         | _        d S )N)rÀ   ©Úepsr   )r!   r"   ré   rÀ   Ú	attentionr   rd   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterr  Úmlprf   rg   rh   r  r  r   ÚIdentityÚ	drop_path)r#   rj   r   r  r¿   r  r  r$   s          €r%   r"   zSwinLayer.__init__  sÕ   ø€ õ 	‰Œ×ÒÑÔÐÝ& v¨s°IÈ6ÔK]Ð^Ñ^Ô^ˆŒÝ "¤¨S°fÔ6KÐ LÑ LÔ LˆÔÝ!œ|¨C°VÔ5JÐKÑKÔKˆÔÝ˜6 3Ñ'Ô'ˆŒÝ”z &Ô"<Ñ=Ô=ˆŒØ!Ô-ˆÔØ$ˆŒØ 0ˆÔØ9GÈ#Ò9MÐ9M� nÑ5Ô5Ð5ÕSUÔS^ÑS`ÔS`ˆŒˆˆr&   Fr'   r³   Úalways_partitionrÝ   r   c                 óL  — |s|                       |¦  «         |\  }}|                     ¦   «         \  }}}	|}
|                      |¦  «        }|                     ||||	¦  «        }|                      |||¦  «        \  }}|j        \  }}}}t          |                      |¦  «        | j        ¦  «        }|                     d| j        | j        z  |	¦  «        }|  	                    |||j
        |j        ¬¦  «        } | j        ||fi |¤Ž\  }}|                      |¦  «        }|                     d| j        | j        |	¦  «        }|                      t          || j        ||¦  «        d¬¦  «        }|d         dk    s|d         dk    r&|d d …d |…d |…d d …f                              ¦   «         }|                     |||z  |	¦  «        }|
|                      |¦  «        z   }|}|                      |¦  «        }|                      |¦  «        }|                      |¦  «        |z   }||fS )Nrp   r*   T)Úreverser   r   é   )Úset_shift_and_window_sizert   r  r}   r¥   r.   r  Úcyclic_shiftrÀ   Úget_attn_maskr+   r,   r  rh   r  rÎ   r  r  r  )r#   r'   r³   r  rÝ   rm   rn   rŽ   r‹   ÚchannelsÚshortcutr¤   Ú
height_padÚ	width_padÚhidden_states_windowsÚ	attn_maskÚattention_outputrå   Úattention_windowsÚresiduals                       r%   r6   zSwinLayer.forward  si  € ð  ð 	=Ø×*Ò*Ð+;Ñ<Ô<Ð<Ø(‰ˆ�Ø"/×"4Ò"4Ñ"6Ô"6Ñˆ
�A�xØ ˆà×-Ò-¨mÑ<Ô<ˆØ%×*Ò*¨:°v¸uÀhÑOÔOˆð %)§N¢N°=À&È%Ñ$PÔ$PÑ!ˆ�zØ&3Ô&9Ñ#ˆˆ:�y !å 0°×1BÒ1BÀ=Ñ1QÔ1QÐSWÔScÑ dÔ dÐØ 5× :Ò :¸2¸tÔ?OÐRVÔRbÑ?bÐdlÑ mÔ mÐØ×&Ò&Ø˜	¨Ô)<ÐEZÔEað 'ñ 
ô 
ˆ	ð *8¨¬Ð8MÈyÐ)cÐ)cÐ\bÐ)cÐ)cÑ&Ð˜,ØŸ<š<Ð(8Ñ9Ô9Ðà,×1Ò1°"°dÔ6FÈÔHXÐZbÑcÔcÐØ ×-Ò-ÝÐ,¨dÔ.>À
ÈIÑVÔVÐ`dð .ñ 
ô 
Ðð �aŒ=˜1ÒÐ 
¨1¤°Ò 1Ð 1Ø 1°!°!°!°W°f°W¸f¸u¸fÀaÀaÀaÐ2GÔ H× SÒ SÑ UÔ UÐà-×2Ò2°:¸vÈ¹~ÈxÑXÔXÐØ  4§>¢>Ð2CÑ#DÔ#DÑDˆà ˆØ×,Ò,¨]Ñ;Ô;ˆØŸš Ñ/Ô/ˆØŸš ]Ñ3Ô3°hÑ>ˆà˜lÐ*Ð*r&   Nc                 ó  — t          |¦  «        | j        k    rnt          d¦  «        | _        t          j                             ¦   «         r&t	          j         t	          j        |¦  «        ¦  «        nt          |¦  «        | _        dS dS )zQClamp window and shift sizes when the window is larger than the input resolution.r   N)ÚminrÀ   r   r  r0   rw   rx   Útensor)r#   r  s     r%   r"  z#SwinLayer.set_shift_and_window_sizeD  sv   € åÐÑ Ô  DÔ$4Ò4Ð4Ý'¨™lœlˆDŒOå=B¼Y×=QÒ=QÑ=SÔ=SÐn•”	�%œ,Ð'7Ñ8Ô8Ñ9Ô9Ð9ÕY\Ð]mÑYnÔYnð ÔÐÐð 5Ð4r&   rm   rn   r+   r,   c                 ó  — | j         dk    rdS t          j        ||¬¦  «        }t          j        ||¬¦  «        }||| j        z
  k                         ¦   «         ||| j         z
  k                         ¦   «         z   }||| j        z
  k                         ¦   «         ||| j         z
  k                         ¦   «         z   }|ddd…ddf         dz  |dddd…df         z                        |¦  «        }	t          |	| j        ¦  «        }
|
                     d| j        | j        z  ¦  «        }
|
                     d¦  «        |
                     d¦  «        z
  }| 	                    |dk    d¦  «         	                    |dk    d	¦  «        }|S )
uµ  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.
        r   N)r,   r   rp   r   rr   g      YÀr   )
r  r0   rË   rÀ   Úlongrä   r  r}   r‰   Úmasked_fill)r#   rm   rn   r+   r,   Úh_idxÚw_idxÚh_regionÚw_regionÚimg_maskÚmask_windowsr*  s               r%   r$  zSwinLayer.get_attn_maskL  sˆ  € ð Œ?˜aÒÐØ�4Ý”˜V¨FÐ3Ñ3Ô3ˆÝ”˜U¨6Ð2Ñ2Ô2ˆØ˜V dÔ&6Ñ6Ò6×<Ò<Ñ>Ô>À%È6ÐTXÔTcÑKcÒBc×AiÒAiÑAkÔAkÑkˆØ˜U TÔ%5Ñ5Ò5×;Ò;Ñ=Ô=ÀÈ%ÐRVÔRaÑJaÒAa×@gÒ@gÑ@iÔ@iÑiˆØ˜T 1 1 1 d¨DÐ0Ô1°AÑ5¸ÀÀtÈQÈQÈQÐPTÐATÔ8UÑU×YÒYÐZ_Ñ`Ô`ˆÝ'¨°$Ô2BÑCÔCˆØ#×(Ò(¨¨TÔ-=ÀÔ@PÑ-PÑQÔQˆØ ×*Ò*¨1Ñ-Ô-°×0FÒ0FÀqÑ0IÔ0IÑIˆ	Ø×)Ò)¨)°qª.¸&ÑAÔA×MÒMÈiÐ[\ÊnÐ^aÑbÔbˆ	ØÐr&   .c                 óÂ   — | j         || j         z  z
  | j         z  }| j         || j         z  z
  | j         z  }ddd|d|f}t          j                             ||¦  «        }||fS )zHPad feature map so both spatial dimensions are divisible by window_size.r   )rÀ   r   r{   r£   )r#   r'   rm   rn   Ú	pad_rightÚ
pad_bottomr¤   s          r%   r¥   zSwinLayer.maybe_pade  sp   € àÔ%¨°Ô0@Ñ(@Ñ@ÀDÔDTÑTˆ	ØÔ&¨°$Ô2BÑ)BÑBÀdÔFVÑVˆ
Ø˜˜A˜y¨!¨ZÐ8ˆ
Ýœ×)Ò)¨-¸ÑDÔDˆØ˜jÐ(Ð(r&   r   c                 óz   — | j         dk    r/|rdnd}t          j        ||| j         z  || j         z  fd¬¦  «        }|S )zOApply a cyclic shift along the spatial dimensions for shifted-window attention.r   r   rp   )r   rr   )ÚshiftsÚdims)r  r0   Úroll)r#   r'   r   Ú	directions       r%   r#  zSwinLayer.cyclic_shiftm  sW   € àŒ?˜QÒÐØ$Ð,˜˜¨"ˆIÝ!œJØØ! D¤OÑ3°YÀÄÑ5PÐQØðñ ô ˆMð
 Ðr&   )r   r   r’   )r9   r:   r;   r   r“   rJ   r=   r"   r0   r>   r•   r   r   r6   r"  r+   r,   r$  r¥   r#  r@   rA   s   @r%   r  r     sí  ø€ € € € € ð !$Øðað aàðað ðað    S œ/ð	að
 ðað ðað ðað að að að að að0 "'ð	-+ð -+à”|ð-+ð    S œ/ð-+ð ð	-+ð
 Ð+Ô,ð-+ð 
Œð-+ð -+ð -+ð -+ð^¸%ÀÀSÀ¼/ð Èdð ð ð ð ð Cð °ð ¸E¼Kð ÐQVÔQ]ð ÐbgÔbnÐquÑbuð ð ð ð ð2) u¤|ð )¸Sð )Èð )ÐQVÐW\ÔWcÐejÐknÐpsÐksÔetÐWtÔQuð )ð )ð )ð )ð	ð 	¨%¬,ð 	Àð 	ÐRWÔR^ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r&   r  c                   ó  ‡ — e Zd Zdededeeef         dededee         fˆ fd„Zde	j
        d	e	j
        d
ededede	j
        fd„Z	 	 dde	j
        deeef         dededee         dee	j
        e	j
        e	j
        dz  f         fd„Zˆ xZS )Ú	SwinStagerj   r   r  Údepthr¿   r  c                 óö   •‡‡‡‡‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆˆˆˆˆfd„t          |¦  «        D ¦   «         ¦  «        | _        |� |‰¬¦  «        nd | _        d S )Nc                 ól   •— g | ]0}t          ‰‰‰‰‰|         |d z  dk    rdn	‰j        d z  ¬¦  «        ‘Œ1S )rr   r   )rj   r   r  r¿   r  r  )r  rÀ   )r·   Úirj   r   r  r  r¿   s     €€€€€r%   rº   z&SwinStage.__init__.<locals>.<listcomp>‡  sh   ø€ ð 
ð 
ð 
ð õ Ø!ØØ%5Ø'Ø#,¨Q¤<Ø%&¨¡U¨a¢Z Z˜q˜q°fÔ6HÈAÑ6Mðñ ô ð
ð 
ð 
r&   r»   )r!   r"   rj   r   Ú
ModuleListr¶   ÚblocksÚ
downsample)	r#   rj   r   r  rD  r¿   r  rJ  r$   s	    ``` `` €r%   r"   zSwinStage.__init__z  s    øøøøøø€ õ 	‰Œ×ÒÑÔÐØˆŒÝ”mð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ ˜u™œð
ñ 
ô 
ñ
ô 
ˆŒð 2<Ð1G˜*˜*¨Ð-Ñ-Ô-Ð-ÈTˆŒˆˆr&   r'   Ú!hidden_states_before_downsamplingrm   rn   Ú(output_hidden_states_before_downsamplingr   c                 óê   — |r|||}}}n | j         �||dz   dz  |dz   dz  }}}n|||}}}|j        \  }	}
}|                     |	|||¦  «                             dddd¦  «                             ¦   «         S )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).
        Nr   rr   r   r   )rJ  r.   r}   rz   rÎ   )r#   r'   rK  rm   rn   rL  Úspatial_stateÚhÚwrŽ   r‹   r¡   s               r%   Úget_reshaped_hidden_statesz$SwinStage.get_reshaped_hidden_states–  sœ   € ð 4ð 	?Ø"CÀVÈU˜a˜1ˆMˆMØŒ_Ð(Ø"/°&¸1±*ÀÑ1BÀUÈQÁYÐSTÑDT˜a˜1ˆMˆMà"/°¸˜a˜1ˆMà%2Ô%8Ñ"ˆ
�A�{Ø×!Ò! *¨a°°KÑ@Ô@×HÒHÈÈAÈqÐRSÑTÔT×_Ò_ÑaÔaÐar&   Fr³   r  rÝ   Nc                 ó¼   — |\  }}d }| j         D ]}	 |	||fd|i|¤Ž\  }}Œ|}
| j        �|                      |
|¦  «        }|                      ||
|||¦  «        }|||fS )Nr  )rI  rJ  rQ  )r#   r'   r³   r  rL  rÝ   rm   rn   Úlast_attn_weightsÚlayer_modulerK  rG   s               r%   r6   zSwinStage.forward¯  s²   € ð )‰ˆ�Ø ÐØ œKð 	ð 	ˆLØ/;¨|ØÐ/ð0ð 0ØBRð0ØV\ð0ð 0Ñ,ˆMÐ,Ð,ð -:Ð)ØŒ?Ð&Ø ŸOšOÐ,MÐO_Ñ`Ô`ˆMà!%×!@Ò!@ØÐ<¸fÀeÐMuñ"
ô "
Ðð Ð4Ð6GÐGÐGr&   )FF)r9   r:   r;   r   r“   rJ   Úlistr=   r"   r0   r>   r•   rQ  r   r   r6   r@   rA   s   @r%   rC  rC  y  s~  ø€ € € € € ðRàðRð ðRð    S œ/ð	Rð
 ðRð ðRð ˜”;ðRð Rð Rð Rð Rð Rð8bà”|ðbð ,1¬<ðbð ð	bð
 ðbð 37ðbð 
Œðbð bð bð bð: "'Ø9>ðHð Hà”|ðHð    S œ/ðHð ð	Hð
 37ðHð Ð+Ô,ðHð 
ˆuŒ|˜Uœ\¨5¬<¸$Ñ+>Ð>Ô	?ðHð Hð Hð Hð Hð Hð Hð Hr&   rC  c                   óÄ   ‡ — e Zd ZU eed<   dZdZdZdZdgZ	dZ
dZdZdZdZ eedd¬	¦  «         eed
d¬	¦  «        dœZdZddgZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚSwinPreTrainedModelrj   Úswinr…   )ÚimageTrC  Fr   )ÚindexÚcapture_initial_hidden_staterr   )r'   rF   rZ   z(attention\.self\.relative_position_indexz:attention\.relative_position_bias\.relative_position_indexc                 óÚ  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rD|j        �t          j        |j        ¦  «         |j        �t          j        |j        ¦  «         dS dS t          |t          ¦  «        rZt          j        |j	        ¦  «         t          j
        |j        |                     ¦   «                              d¦  «        ¦  «         dS dS )zInitialize the weightsNrp   )r!   Ú_init_weightsr›   rW   ra   ÚinitÚzeros_rc   r¾   rÅ   Úcopy_rÂ   rÇ   r}   )r#   r×   r$   s     €r%   r]  z!SwinPreTrainedModel._init_weightsç  sß   ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�nÑ-Ô-ð 	jØÔ Ð,Ý”˜FÔ-Ñ.Ô.Ð.ØÔ)Ð5Ý”˜FÔ6Ñ7Ô7Ð7Ð7Ð7ð 6Ð5å˜Õ 8Ñ9Ô9ð 	jÝŒK˜Ô;Ñ<Ô<Ð<ÝŒJ�vÔ5°v×7]Ò7]Ñ7_Ô7_×7dÒ7dÐegÑ7hÔ7hÑiÔiÐiÐiÐið	jð 	jr&   )r9   r:   r;   r   rI   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendÚ_can_compile_fullgraphr   rC  Ú_can_record_outputsÚ_input_embed_layerÚ"_keys_to_ignore_on_load_unexpectedr0   Úno_gradr]  r@   rA   s   @r%   rW  rW  É  sò   ø€ € € € € € àÐÐÑØÐØ$€OØ!ÐØ&*Ð#Ø$˜ÐØ€NØ ÐØÐØ"&ÐØ!Ðð (˜¨	¸ÐY]Ð^Ñ^Ô^ð
 %�n Y°aÐV[Ð\Ñ\Ô\ð	ð 	Ðð ,Ðð 	4ØEð*Ð&ð
 €U„]�_„_ð
jð 
jð 
jð 
jñ „_ð
jð 
jð 
jð 
jð 
jr&   rW  c                   óÎ   ‡ — e Zd Zdedeeef         fˆ fd„Ze ed¬¦  «        e		 	 	 dde
j        deeef         ded	ed
edee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚSwinEncoderrj   r\   c                 óˆ  •‡ ‡‡‡— t          ¦   «                              ‰¦  «         t          ‰j        ¦  «        ‰ _        ‰‰ _        ˆfd„t          t          ‰j        ¦  «        ¦  «        D ¦   «         Št          j	        ˆˆˆˆ fd„t          ‰ j        ¦  «        D ¦   «         ¦  «        ‰ _
        ‰                      ¦   «          d S )Nc                 óp   •— g | ]2}‰j         |z  t          t          ‰j        ¦  «        d z
  d ¦  «        z  ‘Œ3S r)   )r  ÚmaxrÏ   Údepths©r·   rG  rj   s     €r%   rº   z(SwinEncoder.__init__.<locals>.<listcomp>ú  s?   ø€ ÐmÐmÐmÈaˆvÔ$ qÑ(­3­s°6´=Ñ/AÔ/AÀAÑ/EÀqÑ+IÔ+IÑIÐmÐmÐmr&   c                 ót  •— g | ]´}t          ‰t          ‰j        d |z  z  ¦  «        ‰d         d |z  z  ‰d         d |z  z  f‰j        |         ‰j        |         ‰t          ‰j        d|…         ¦  «        t          ‰j        d|dz   …         ¦  «        …         |‰j        dz
  k     rt          nd¬¦  «        ‘ŒµS )rr   r   r   N)rj   r   r  rD  r¿   r  rJ  )rC  r“   r`   rt  r¿   rÏ   Ú
num_layersrª   )r·   Ú	layer_idxrj   Údprr\   r#   s     €€€€r%   rº   z(SwinEncoder.__init__.<locals>.<listcomp>ü  sç   ø€ ð ð ð ð õ Ø!Ý˜FÔ,¨q°)©|Ñ;Ñ<Ô<Ø&/°¤l°q¸)±|Ñ&DÀiÐPQÄlÐWXÐZcÑWcÑFdÐ%eØ œ-¨	Ô2Ø$Ô.¨yÔ9Ø!¥# f¤m°J°Y°JÔ&?Ñ"@Ô"@Å3ÀvÄ}ÐUdÐW`ÐcdÑWdÐUdÔGeÑCfÔCfÐ"fÔgØ4=ÀÄÐRSÑ@SÒ4SÐ4SÕ/Ð/ÐZ^ðñ ô ðð ð r&   )r!   r"   Úlenrt  rw  rj   r¶   rÏ   r   rH  ÚlayersÚ	post_init)r#   rj   r\   ry  r$   s   ```@€r%   r"   zSwinEncoder.__init__ö  sÒ   øøøøø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý˜fœmÑ,Ô,ˆŒØˆŒØmÐmÐmÐmÕSXÕY\Ð]cÔ]jÑYkÔYkÑSlÔSlÐmÑmÔmˆÝ”mðð ð ð ð ð ð õ "' t¤Ñ!7Ô!7ðñ ô ñ
ô 
ˆŒð 	�ŠÑÔÐÐÐr&   F)Útie_last_hidden_statesr'   r³   r  Úoutput_hidden_statesrL  rÝ   r   c                 óD  — d}|rF|j         \  }}	}
 |j        |g|¢|
‘R Ž                      dddd¦  «                             ¦   «         }|f}| j        D ]>} |||f||dœ|¤Ž\  }}}	|r||fz  }|j        �|d         dz   dz  |d         dz   dz  f}Œ?t          ||¬¦  «        S )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.
        Nr   r   r   rr   ©r  rL  )rE   rG   )r.   r}   rz   rÎ   r{  rJ  rD   )r#   r'   r³   r  r~  rL  rÝ   Úall_reshaped_hidden_statesrŽ   r‹   r¡   Ústem_spatialrT  Úreshaped_hidden_states                 r%   r6   zSwinEncoder.forward  s0  € ð( &*Ð"Øð 	9ð *7Ô)<Ñ&ˆJ˜˜;à"�Ô" :ÐNÐ0@ÐNÀ+ÐNÐNÐN×VÒVÐWXÐZ[Ð]^Ð`aÑbÔb×mÒmÑoÔoð ð +7¨Ð&à œKð 	dð 	dˆLØ6B°lØØ ð7ð "2Ø9að	7ð 7ð
 ð7ð 7Ñ3ˆMÐ0°!ð $ð GØ*Ð/DÐ.FÑFÐ*ØÔ&Ð2Ø%5°aÔ%8¸1Ñ%<ÀÑ$BÐEUÐVWÔEXÐ[\ÑE\ÐabÑDbÐ#cÐ øå Ø+Ø#=ð
ñ 
ô 
ð 	
r&   )FFF)r9   r:   r;   r   rJ   r“   r"   r   r   r   r0   r>   r•   r   r   rD   r6   r@   rA   s   @r%   rp  rp  õ  sú   ø€ € € € € ð˜zð °e¸CÀ¸H´oð ð ð ð ð ð ð*  Ø€_¨EÐ2Ñ2Ô2Øð
 "'Ø%*Ø9>ð+
ð +
à”|ð+
ð    S œ/ð+
ð ð	+
ð
 #ð+
ð 37ð+
ð Ð+Ô,ð+
ð 
ð+
ð +
ð +
ñ „^ñ 3Ô2ñ  Ôð+
ð +
ð +
ð +
ð +
r&   rp  c                   ó�   ‡ — e Zd Zdˆ fd„	Zee	 	 	 ddej        dz  dej        dz  de	de
e         d	ef
d
„¦   «         ¦   «         Zˆ xZS )Ú	SwinModelTFc                 óî  •— t          ¦   «                              |¦  «         || _        t          |j        ¦  «        | _        t          |j        d| j        dz
  z  z  ¦  «        | _        t          ||¬¦  «        | _
        t          || j
        j        ¦  «        | _        t          j        | j        |j        ¬¦  «        | _        |rt          j        d¦  «        nd| _        |                      ¦   «          dS )a  
        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.
        rr   r   )rk   r  N)r!   r"   rj   rz  rt  rw  r“   r`   Únum_featuresrW   rl   rp  r]   Úencoderr   rd   r  Ú	layernormÚAdaptiveAvgPool1dÚpoolerr|  )r#   rj   Úadd_pooling_layerrk   r$   s       €r%   r"   zSwinModel.__init__>  sÓ   ø€ õ 	‰Œ×Ò˜Ñ Ô Ð ØˆŒÝ˜fœmÑ,Ô,ˆŒÝ Ô 0°1¸¼È1Ñ9LÑ3MÑ MÑNÔNˆÔå(¨ÀÐOÑOÔOˆŒÝ" 6¨4¬?Ô+EÑFÔFˆŒåœ dÔ&7¸VÔ=RÐSÑSÔSˆŒØ1BÐL•bÔ*¨1Ñ-Ô-Ð-ÈˆŒð 	�ŠÑÔÐÐÐr&   Nr…   r†   r„   rÝ   r   c                 ó¦  — |                      d| j        j        ¦  «        }|                      |||¬¦  «        \  }} | j        ||fd|i|¤Ž}|j        }	|                      |	¦  «        }	d}
| j        �>|                      |	                     dd¦  «        ¦  «        }
t          j
        |
d¦  «        }
t          |	|
|j        |j        |j        ¬¦  «        S )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„   Nr   rr   )rE   rN   r'   rF   rG   )Úpoprj   r~  rl   rˆ  rE   r‰  r‹  r¨   r0   r§   rM   r'   rF   rG   )r#   r…   r†   r„   rÝ   r~  Úembedding_outputr³   Úencoder_outputsÚsequence_outputÚpooled_outputs              r%   r6   zSwinModel.forwardS  s  € ð  &ŸzšzÐ*@À$Ä+ÔBbÑcÔcÐà-1¯_ª_Ø¨/ÐTlð .=ñ .
ô .
Ñ*ÐÐ*ð '˜$œ,ØØð
ð 
ð "6ð
ð ð	
ð 
ˆð *Ô;ˆØŸ.š.¨Ñ9Ô9ˆàˆØŒ;Ð"Ø ŸKšK¨×(AÒ(AÀ!ÀQÑ(GÔ(GÑHÔHˆMÝ!œM¨-¸Ñ;Ô;ˆMåØ-Ø'Ø)Ô7Ø&Ô1Ø#2Ô#Ið
ñ 
ô 
ð 	
r&   )TF©NNF)r9   r:   r;   r"   r   r   r0   rH   r”   r•   r   r   rM   r6   r@   rA   s   @r%   r…  r…  <  s¾   ø€ € € € € ðð ð ð ð ð ð* Øð 26Ø37Ø).ð	(
ð (
àÔ'¨$Ñ.ð(
ð Ô)¨DÑ0ð(
ð #'ð	(
ð
 Ð+Ô,ð(
ð 
ð(
ð (
ð (
ñ „^ñ Ôð(
ð (
ð (
ð (
ð (
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                   óŽ   ‡ — e Zd Zˆ fd„Zee	 	 	 d
dej        dz  dej        dz  de	de
e         def
d	„¦   «         ¦   «         Zˆ xZS )ÚSwinForMaskedImageModelingc                 ó�  •— t          ¦   «                              |¦  «         t          |dd¬¦  «        | _        t	          |j        d|j        dz
  z  z  ¦  «        }t          j        t          j	        ||j
        dz  |j        z  d¬¦  «        t          j        |j
        ¦  «        ¦  «        | _        |                      ¦   «          d S )NFT)rŒ  rk   rr   r   )Úin_channelsÚout_channelsr˜   )r!   r"   r…  rX  r“   r`   rw  r   Ú
SequentialrŸ   Úencoder_striderŒ   ÚPixelShuffleÚdecoderr|  )r#   rj   r‡  r$   s      €r%   r"   z#SwinForMaskedImageModeling.__init__�  s½   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜f¸ÈdÐSÑSÔSˆŒ	å˜6Ô+¨a°FÔ4EÈÑ4IÑ.JÑJÑKÔKˆÝ”}ÝŒIØ(°vÔ7LÈaÑ7OÐRXÔReÑ7eÐstðñ ô õ ŒO˜FÔ1Ñ2Ô2ñ	
ô 
ˆŒð 	�ŠÑÔÐÐÐr&   NFr…   r†   r„   rÝ   r   c                 ó0  —  | j         |f||dœ|¤Ž}|j        }|                     dd¦  «        }|j        \  }}}	t	          j        |	dz  ¦  «        x}
}|                     |||
|¦  «        }|                      |¦  «        }d}|�ñ| j        j	        | j        j
        z  }|                     d||¦  «        }|                     | j        j
        d¦  «                             | j        j
        d¦  «                             d¦  «                             ¦   «         }t          j                             ||d¬¦  «        }||z                       ¦   «         |                     ¦   «         d	z   z  | j        j        z  }t'          |||j        |j        |j        ¬
¦  «        S )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   rr   rq   Nrp   Únone)r°   gñhãˆµøä>)rQ   rR   r'   rF   rG   )rX  rE   r¨   r.   Úmathr2   ry   r�  rj   rš   ri   Úrepeat_interleaver‰   rÎ   r   r{   Úl1_lossrÏ   rŒ   rP   r'   rF   rG   )r#   r…   r†   r„   rÝ   Úoutputsr’  rŽ   rŒ   Úsequence_lengthrm   rn   Úreconstructed_pixel_valuesÚmasked_im_lossrt   r‘   Úreconstruction_losss                    r%   r6   z"SwinForMaskedImageModeling.forward�  s«  € ðL �$”)Øð
à+Ø%=ð
ð 
ð ð	
ð 
ˆð "Ô3ˆà)×3Ò3°A°qÑ9Ô9ˆØ4CÔ4IÑ1ˆ
�L /Ýœ O°SÑ$8Ñ9Ô9Ð9ˆ�Ø)×1Ò1°*¸lÈFÐTYÑZÔZˆð &*§\¢\°/Ñ%BÔ%BÐ"àˆØÐ&Ø”;Ô)¨T¬[Ô-CÑCˆDØ-×5Ò5°b¸$ÀÑEÔEˆOà×1Ò1°$´+Ô2HÈ!ÑLÔLß"Ò" 4¤;Ô#9¸1Ñ=Ô=ß’˜1‘”ß’‘”ð	 õ #%¤-×"7Ò"7¸ÐF`ÐlrÐ"7Ñ"sÔ"sÐØ1°DÑ8×=Ò=Ñ?Ô?À4Ç8Â8Á:Ä:ÐPTÑCTÑUÐX\ÔXcÔXpÑpˆNå,ØØ5Ø!Ô/ØÔ)Ø#*Ô#Að
ñ 
ô 
ð 	
r&   r”  )r9   r:   r;   r"   r   r   r0   rH   r”   r•   r   r   rP   r6   r@   rA   s   @r%   r–  r–  €  sÇ   ø€ € € € € ðð ð ð ð ð  Øð 26Ø37Ø).ð	H
ð H
àÔ'¨$Ñ.ðH
ð Ô)¨DÑ0ðH
ð #'ð	H
ð
 Ð+Ô,ðH
ð 
'ðH
ð H
ð H
ñ „^ñ ÔðH
ð 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                   óŽ   ‡ — e Zd Zˆ fd„Zee	 	 	 d
dej        dz  dej        dz  de	de
e         def
d	„¦   «         ¦   «         Zˆ xZS )ÚSwinForImageClassificationc                 ó@  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        |j        dk    r$t          j        | j        j        |j        ¦  «        nt          j        ¦   «         | _	        |  
                    ¦   «          d S )Nr   )r!   r"   Ú
num_labelsr…  rX  r   r¯   r‡  r  Ú
classifierr|  )r#   rj   r$   s     €r%   r"   z#SwinForImageClassification.__init__ù  s‹   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ˜fÑ%Ô%ˆŒ	ð EKÔDUÐXYÒDYÐDY�BŒI�d”iÔ,¨fÔ.?Ñ@Ô@Ð@Õ_aÔ_jÑ_lÔ_lð 	Œð
 	�ŠÑÔÐÐÐr&   NFr…   Úlabelsr„   rÝ   r   c                 óÒ   —  | j         |fd|i|¤Ž}|j        }|                      |¦  «        }d}|� | j        ||| j        fi |¤Ž}t          |||j        |j        |j        ¬¦  «        S )aŠ  
        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)rQ   rU   r'   rF   rG   )	rX  rN   r¬  Úloss_functionrj   rT   r'   rF   rG   )	r#   r…   r­  r„   rÝ   r£  r“  rU   rQ   s	            r%   r6   z"SwinForImageClassification.forward  s¦   € ð �$”)Øð
ð 
à%=ð
ð ð
ð 
ˆð  Ô-ˆà—’ Ñ/Ô/ˆàˆØÐØ%�4Ô% f¨f°d´kÐLÐLÀVÐLÐLˆDå(ØØØ!Ô/ØÔ)Ø#*Ô#Að
ñ 
ô 
ð 	
r&   r”  )r9   r:   r;   r"   r   r   r0   rH   Ú
LongTensorr•   r   r   rT   r6   r@   rA   s   @r%   r©  r©  ê  s¹   ø€ € € € € ðð ð ð ð ð Øð 26Ø*.Ø).ð	!
ð !
àÔ'¨$Ñ.ð!
ð Ô  4Ñ'ð!
ð #'ð	!
ð
 Ð+Ô,ð!
ð 
#ð!
ð !
ð !
ñ „^ñ Ôð!
ð !
ð !
ð !
ð !
r&   r©  zM
    Swin backbone, to be used with frameworks like DETR and MaskFormer.
    c            	       ó„   ‡ — e Zd ZdgZdefˆ fd„Zeeede	j
        dee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚSwinBackbonezswin.layernorm.*rj   c                 óº  •‡— t          ¦   «                              ‰¦  «         ‰j        gˆfd„t          t	          ‰j        ¦  «        ¦  «        D ¦   «         z   | _        t          ‰d¬¦  «        | _        i }t          | j
        | j        ¦  «        D ]\  }}t          j        |¦  «        ||<   Œt          j        |¦  «        | _        |                      ¦   «          d S )Nc                 óD   •— g | ]}t          ‰j        d |z  z  ¦  «        ‘ŒS )rr   )r“   r`   ru  s     €r%   rº   z)SwinBackbone.__init__.<locals>.<listcomp>8  s.   ø€ Ð1rÐ1rÐ1rÐSTµ#°fÔ6FÈÈAÉÑ6MÑ2NÔ2NÐ1rÐ1rÐ1rr&   F)rŒ  )r!   r"   r`   r¶   rz  rt  r‡  r…  rX  ÚzipÚout_featuresr%  r   rd   Ú
ModuleDictÚhidden_states_normsr|  )r#   rj   r¸  ÚstagerŒ   r$   s    `   €r%   r"   zSwinBackbone.__init__5  sÞ   øø€ Ý‰Œ×Ò˜Ñ Ô Ð à#Ô-Ð.Ð1rÐ1rÐ1rÐ1rÕX]Õ^aÐbhÔboÑ^pÔ^pÑXqÔXqÐ1rÑ1rÔ1rÑrˆÔÝ˜f¸Ð>Ñ>Ô>ˆŒ	ð !ÐÝ#& tÔ'8¸$¼-Ñ#HÔ#Hð 	Dð 	DÑˆE�<Ý)+¬°lÑ)CÔ)CÐ Ñ&Ð&Ý#%¤=Ð1DÑ#EÔ#EˆÔ ð 	�ŠÑÔÐÐÐr&   r…   rÝ   r   c                 ó  —  | j         |fdddœ|¤Ž}d}t          | j        |j        ¦  «        D ]¼\  }}|| j        v r®|j        \  }}}	}
|                     dddd¦  «                             ¦   «         }|                     ||	|
z  |¦  «        } | j	        |         |¦  «        }|                     ||	|
|¦  «        }|                     dddd¦  «                             ¦   «         }||fz  }Œ½t          ||j        |j        ¬¦  «        S )	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]
        ```
        Tr€  rK   r   rr   r   r   )Úfeature_mapsr'   rF   )rX  rµ  Ústage_namesrG   r¶  r.   rz   rÎ   r}   r¸  r   rF   )r#   r…   rÝ   r£  r»  r¹  Úhidden_staterŽ   rŒ   rm   rn   s              r%   r6   zSwinBackbone.forwardD  sG  € ðH �$”)Øð
à!Ø59ð
ð 
ð ð	
ð 
ˆð ˆÝ#& tÔ'7¸Ô9WÑ#XÔ#Xð 	0ð 	0ÑˆE�<Ø˜Ô)Ð)Ð)Ø:FÔ:LÑ7�
˜L¨&°%Ø+×3Ò3°A°q¸!¸QÑ?Ô?×JÒJÑLÔL�Ø+×0Ò0°¸VÀe¹^È\ÑZÔZ�Ø>˜tÔ7¸Ô>¸|ÑLÔL�Ø+×0Ò0°¸VÀUÈLÑYÔY�Ø+×3Ò3°A°q¸!¸QÑ?Ô?×JÒJÑLÔL�Ø  Ñ/�øåØ%Ø!Ô8ØÔ)ð
ñ 
ô 
ð 	
r&   )r9   r:   r;   Ú_keys_to_ignore_on_load_missingr   r"   r   r
   r   r0   r>   r   r   r   r6   r@   rA   s   @r%   r²  r²  -  s©   ø€ € € € € ð (;Ð&;Ð#ð˜zð ð ð ð ð ð ð Ø Øð7
à”lð7
ð Ð+Ô,ð7
ð 
ð	7
ð 7
ð 7
ñ „^ñ !Ô ñ Ôð7
ð 7
ð 7
ð 7
ð 7
r&   r²  )r©  r–  r…  rW  r²  )Nr   )@Úcollections.abcrœ   r   r   Údataclassesr   r0   r   Ú r   r^  Úactivationsr   Úbackbone_utilsr	   r
   Úmodeling_layersr   Úmodeling_outputsr   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   r   Úconfiguration_swinr   ÚModuler   rD   rM   rP   rT   rW   rY   rª   r¾   r>   r=   rç   ré   r  r  r  r  rC  rW  rp  r…  r–  r©  r²  Ú__all__rK   r&   r%   ú<module>rÎ     s	  ðð* Ð Ð Ð Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø .Ð .Ð .Ð .Ð .Ð .Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ *Ð *Ð *Ð *Ð *Ð *ð%ð %ð %ð %ð %�2”9ñ %ô %ð %ð0 €ððñ ô ð
 ðHð Hð Hð Hð H˜ñ Hô Hñ „ñô ðHð  €ððñ ô ð
 ðHð Hð Hð Hð H�kñ Hô Hñ „ñô ðHð& €ððñ ô ð
 ðHð Hð Hð Hð H Kñ Hô Hñ „ñô ðHð* €ððñ ô ð
 ðHð Hð Hð Hð H ñ Hô Hñ „ñô ðHð*M-ð M-ð M-ð M-ð M-�R”Yñ M-ô M-ð M-ð`'-ð '-ð '-ð '-ð '-˜"œ)ñ '-ô '-ð '-ðT%ð %ð %ð %ð %�r”yñ %ô %ð %ðP-Qð -Qð -Qð -Qð -Q˜rœyñ -Qô -Qð -Qðl !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð8C)ð C)ð C)ð C)ð C)�B”Iñ C)ô C)ð C)ðLð ð ð ð ˆbŒiñ ô ð ð	ð 	ð 	ðð ð ðvð vð vð vð vÐ*ñ vô vð vðrMHð MHð MHð MHð MHÐ*ñ MHô MHð MHð` ð(jð (jð (jð (jð (j˜/ñ (jô (jñ „ð(jðVD
ð D
ð D
ð D
ð D
Ð%ñ D
ô D
ð D
ðN ð@
ð @
ð @
ð @
ð @
Ð#ñ @
ô @
ñ „ð@
ðF €ð	ðñ ô ð[
ð [
ð [
ð [
ð [
Ð!4ñ [
ô [
ñô ð[
ð| €ððñ ô ð2
ð 2
ð 2
ð 2
ð 2
Ð!4ñ 2
ô 2
ñô ð2
ðj €ððñ ô ð
L
ð L
ð L
ð L
ð L
�=Ð"5ñ L
ô L
ñô ð
L
ð^ð ð €€€r&   