§
    ‚Štj	¼  ã                   óÞ  — d Z 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 ddlmZ ddlmZ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&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-  ej.        e/¦  «        Z0 G d„ dej1        ¦  «        Z2 ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z3 ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z4 ed¬¦  «        e G d„ d e¦  «        ¦   «         ¦   «         Z5 ed!¬¦  «        e G d"„ d#e¦  «        ¦   «         ¦   «         Z6d$„ Z7d%„ Z8 G d&„ d'ej1        ¦  «        Z9 G d(„ d)ej1        ¦  «        Z: G d*„ d+ej1        ¦  «        Z; G d,„ d-ej1        ¦  «        Z< G d.„ d/e'¦  «        Z= G d0„ d1e)¦  «        Z> G d2„ d3e(¦  «        Z? G d4„ d5e¦  «        Z@e G d6„ d7e*¦  «        ¦   «         ZA G d8„ d9eA¦  «        ZBe G d:„ d;eA¦  «        ¦   «         ZC ed<¬¦  «         G d=„ d>eA¦  «        ¦   «         ZD ed?¬¦  «         G d@„ dAeA¦  «        ¦   «         ZE edB¬¦  «         G dC„ dDeeA¦  «        ¦   «         ZFg dE¢ZGdS )Fz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                   ó^   ‡ — 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     €úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/swin/modular_swin.pyr)   zSwinDropPath.__init__7   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Úrandr2   r3   ÚfloorÚdiv)r*   r.   Ú	keep_probr5   Úrandom_tensors        r,   ÚforwardzSwinDropPath.forward;   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_reprD   s   € Ø$�D”NÐ$Ð$Ð$r-   )r#   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úfloatr)   r7   ÚTensorr=   Ústrr?   Ú__classcell__©r+   s   @r,   r"   r"   0   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)r@   rA   rB   rC   rL   r7   ÚFloatTensorÚ__annotations__r.   ÚtuplerM   rN   © r-   r,   rK   rK   H   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-   rK   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.
    NrL   Úpooler_output.r.   rM   rN   )r@   rA   rB   rC   rL   r7   rO   rP   rU   r.   rQ   rM   rN   rR   r-   r,   rT   rT   ^   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-   rT   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.   rM   rN   )r@   rA   rB   rC   rX   r7   rO   rP   rY   r.   rQ   rM   rN   rR   r-   r,   rW   rW   w   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-   rW   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.
    NrX   Úlogits.r.   rM   rN   )r@   rA   rB   rC   rX   r7   rO   rP   r\   r.   rQ   rM   rN   rR   r-   r,   r[   r[   ’   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-   r[   c                 óÚ   — | j         \  }}}}|                      |||z  |||z  ||¦  «        } |                      dd¦  «                             ¦   «                              d|||¦  «        }|S )z2
    Partitions the given input into windows.
    r   r   éÿÿÿÿ©r5   ÚviewÚ	transposeÚ
contiguous)Úinput_featureÚwindow_sizeÚ
batch_sizeÚheightÚwidthÚnum_channelsÚwindowss          r,   Úwindow_partitionrj   ­   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.
    r^   r   r   r_   )ri   rd   rf   rg   rh   s        r,   Úwindow_reverserl   ¹   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            
       ó¤   ‡ — 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   Ú	Parameterr7   ÚzerosÚ	embed_dimÚ
mask_tokenÚuse_absolute_embeddingsÚposition_embeddingsÚ	LayerNormÚnormÚDropoutÚhidden_dropout_probÚdropoutÚ
patch_sizeÚconfig)r*   r�   Úuse_mask_tokenrr   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-   Ú
embeddingsrf   rg   r%   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   r   r   ÚbicubicF)ÚsizeÚmodeÚalign_corners)r5   rz   r7   ÚjitÚ
is_tracingr€   r   ÚreshapeÚpermuter   Ú
functionalÚinterpolater`   )r*   rƒ   rf   rg   rr   Ú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 )Nr^   g      ð?)r5   rq   r|   r‡   rx   ÚexpandÚ	unsqueezeÚtype_asrz   r–   r   )r*   r—   r˜   r–   Ú_rh   rf   rg   rƒ   Úoutput_dimensionsre   Úseq_lenÚmask_tokensÚmasks                 r,   r=   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)r@   rA   rB   rC   r)   r7   rE   Úintr–   rO   Ú
BoolTensorÚboolrQ   r=   rG   rH   s   @r,   rn   rn   Ã   så   ø€ € € € € ðð ðð ð ð ð ð ð"D°5´<ð DÈð DÐUXð DÐ]bÔ]ið Dð Dð Dð DðB 48Ø).ð	-ð -àÔ'¨$Ñ.ð-ð Ô)¨DÑ0ð-ð #'ð	-ð
 
ˆuŒ|Ô	ð-ð -ð -ð -ð -ð -ð -ð -r-   rn   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 )rp   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_sizer€   rh   rw   Ú
isinstanceÚcollectionsÚabcÚIterablerr   rs   r   ÚConv2dÚ
projection)r*   r�   rª   r€   rh   Úhidden_sizerr   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   )r€   r   rŽ   Úpad)r*   r—   rf   rg   Ú
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 )Nr   r   )r5   rµ   r°   Úflattenra   )r*   r—   r�   rh   rf   rg   rƒ   rž   s           r,   r=   zSwinPatchEmbeddings.forward1  sƒ   € Ø)5Ô);Ñ&ˆˆ<˜ à—~’~ l°F¸EÑBÔBˆØ—_’_ \Ñ2Ô2ˆ
Ø(Ô.Ñˆˆ1ˆf�eØ# U˜OÐØ×'Ò'¨Ñ*Ô*×4Ò4°Q¸Ñ:Ô:ˆ
àÐ,Ð,Ð,r-   )r@   rA   rB   rC   r)   rµ   r7   rO   rQ   rE   r£   r=   rG   rH   s   @r,   rp   rp     s“   ø€ € € € € ðð ðjð jð jð jð jðð ð ð	- EÔ$5¸Ñ$<ð 	-ÀÀuÄ|ÐUZÐ[^ÔU_ÐG_ÔA`ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-r-   rp   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é   r   F©Úbias)r(   r)   r   ÚLinearÚ	reductionr{   r|   )r*   r‘   r+   s     €r,   r)   zSwinPatchMerging.__init__F  sR   ø€ Ý‰Œ×ÒÑÔÐÝœ 1 s¡7¨A°©G¸%Ð@Ñ@Ô@ˆŒÝ”L  S¡Ñ)Ô)ˆŒ	ˆ	ˆ	r-   rc   rf   rg   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.r   r   r   )r   rŽ   r³   )r*   rc   rf   rg   s       r,   rµ   zSwinPatchMerging.maybe_padK  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 )r   N)Úrange)Ú.0ÚcolÚrowrc   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-   r   r^   ©r‘   r»   )r5   r`   rµ   r7   ÚcatrÄ   r|   r¿   )r*   rc   rÁ   rf   rg   re   r‘   rh   s    `      r,   r=   zSwinPatchMerging.forwardQ  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-   )r@   rA   rB   rC   r£   r)   r7   rE   rµ   rQ   r=   rG   rH   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_headsrd   c                 óŠ  •— 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   r   Úrelative_position_indexr^   F)Ú
persistent)r(   r)   rd   Úwindow_arear   ru   r7   rv   Úrelative_position_bias_tableÚregister_bufferÚ_create_relative_position_indexr`   )r*   rÍ   rd   r+   s      €r,   r)   z!SwinRelativePositionBias.__init__o  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)Úindexingr   r^   )	r7   Úarangerd   ÚstackÚmeshgridr·   r�   rb   Úsum)r*   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordss         r,   rÔ   z8SwinRelativePositionBias._create_relative_position_index~  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 )Nr^   r   r   r   )rÒ   rÏ   r`   rÑ   r�   rb   r›   )r*   Úrelative_position_biass     r,   r=   z SwinRelativePositionBias.forward�  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-   )r@   rA   rB   rC   r£   rQ   r)   r7   rE   rÔ   r=   rG   rH   s   @r,   rÌ   rÌ   e  s    ø€ € € € € ðð ð
 #ð 
°E¸#¸s¸(´Oð 
ð 
ð 
ð 
ð 
ð 
ð'°´ð 'ð 'ð 'ð 'ð"Q˜œð Qð Qð Qð Qð Qð Qð Qð Qr-   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 )ÚSwinAttentionr�   r±   Únum_attention_headsrd   c                 ó²  •— t          ¦   «                              |¦  «         || _        ||z  | _        | j        dz  | _        t          j        |||j        ¬¦  «        | _        t          j        |||j        ¬¦  «        | _	        t          j        |||j        ¬¦  «        | _
        t          j        ||¦  «        | _        t          |||f¦  «        | _        d S )Ng      à¿r¼   )r(   r)   rå   Úhead_dimÚscalingr   r¾   Úqkv_biasÚq_projÚk_projÚv_projÚo_projrÌ   râ   )r*   r�   r±   rå   rd   r+   s        €r,   r)   zSwinAttention.__init__–  s¿   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø#6ˆÔ Ø#Ð':Ñ:ˆŒØ”} 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.   Úattention_maskÚkwargsr%   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 )Nr^   r   r   r   r#   )r   rè   )r5   rç   rê   r`   ra   rë   rì   râ   r›   rš   rŒ   r   Úget_interfacer�   Ú_attn_implementationr   r4   Úattention_dropoutrè   rb   rí   )r*   r.   rî   rï   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesrâ   Únum_windowsre   rŸ   Úcombined_maskÚattention_interfaceÚattn_outputÚattn_weightss                    r,   r=   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'   )r@   rA   rB   r    r£   r)   r7   rE   rO   r   r   rQ   r=   rG   rH   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                   ó   — e Zd Zdedefd„ZdS )ÚSwinMLPr�   r‘   c                 ó.  — t           j                             | ¦  «         t          |j                 | _        t          j        |t          |j        |z  ¦  «        ¦  «        | _	        t          j        t          |j        |z  ¦  «        |¦  «        | _
        d S r'   )r   ÚModuler)   r   Ú
hidden_actÚactivation_fnr¾   r£   Ú	mlp_ratioÚfc1Úfc2)r*   r�   r‘   s      r,   r)   zSwinMLP.__init__Ù  sr   € Ý
Œ	×Ò˜4Ñ Ô Ð Ý# FÔ$5Ô6ˆÔÝ”9˜S¥# fÔ&6¸Ñ&<Ñ"=Ô"=Ñ>Ô>ˆŒÝ”9�S Ô!1°CÑ!7Ñ8Ô8¸#Ñ>Ô>ˆŒˆˆr-   N)r@   rA   rB   r    r£   r)   rR   r-   r,   rÿ   rÿ   Ø  s6   € € € € € ð?˜zð ?°ð ?ð ?ð ?ð ?ð ?ð ?r-   rÿ   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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	 dde	j        deeef         dedee         d
e	j        f
d„Zˆ xZS )Ú	SwinLayerr#   r   r�   r‘   Úinput_resolutionrÍ   Údrop_path_rateÚ
shift_sizec                 óº  •— t          ¦   «                              ¦   «          |j        | _        t          ||||j        ¬¦  «        | _        t          j        ||j        ¬¦  «        | _        t          j        ||j        ¬¦  «        | _	        t          ||¦  «        | _        || _        || _        |dk    rt          |¦  «        nt          j        ¦   «         | _        d S )N)rd   ©Úepsr#   )r(   r)   rd   rä   Ú	attentionr   r{   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterrÿ   Úmlpr  r	  r"   ÚIdentityÚ	drop_path)r*   r�   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Ñ'Ô'ˆŒØ$ˆŒØ 0ˆÔØ9GÈ#Ò9MÐ9M� nÑ5Ô5Ð5ÕSUÔS^ÑS`ÔS`ˆŒˆˆr-   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)Úminrd   r   r  r7   rŠ   r‹   Útensor)r*   r	  s     r,   Úset_shift_and_window_sizez#SwinLayer.set_shift_and_window_sizeô  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-   rf   rg   r2   r3   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)r3   r   r^   r   r   g      YÀr#   )
r  r7   rØ   rd   ÚlongÚtorj   r`   r›   Úmasked_fill)r*   rf   rg   r2   r3   Úh_idxÚw_idxÚh_regionÚw_regionÚimg_maskÚmask_windowsÚ	attn_masks               r,   Úget_attn_maskzSwinLayer.get_attn_maskü  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-   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   )rd   r   rŽ   r³   )r*   r.   rf   rg   Ú	pad_rightÚ
pad_bottomr´   s          r,   rµ   zSwinLayer.maybe_pad  sp   € àÔ%¨°Ô0@Ñ(@Ñ@ÀDÔDTÑTˆ	ØÔ&¨°$Ô2BÑ)BÑBÀdÔFVÑVˆ
Ø˜˜A˜y¨!¨ZÐ8ˆ
Ýœ×)Ò)¨-¸ÑDÔDˆØ˜jÐ(Ð(r-   FÚreversec                 ó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   r^   )r   r   )ÚshiftsÚdims)r  r7   Úroll)r*   r.   r)  Ú	directions       r,   Úcyclic_shiftzSwinLayer.cyclic_shift  sW   € àŒ?˜QÒÐØ$Ð,˜˜¨"ˆIÝ!œJØØ! D¤OÑ3°YÀÄÑ5PÐQØðñ ô ˆMð
 Ðr-   rÁ   Úalways_partitionrï   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 )Nr^   r1   T)r)  r   r   é   )r  r‡   r  r`   rµ   r5   rj   r/  rd   r%  r2   r3   r  r   rl   rb   r  r  r  )r*   r.   rÁ   r0  rï   rf   rg   re   r�   ÚchannelsÚshortcutr´   Ú
height_padÚ	width_padÚhidden_states_windowsr$  Úattention_outputrý   Úattention_windowsÚresiduals                       r,   r=   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-   )r#   r   r¢   )r@   rA   rB   r    r£   rQ   rD   r)   r  r7   r2   r3   rE   r%  rµ   r¥   r/  r   r   r=   rG   rH   s   @r,   r  r  à  sì  ø€ € € € € ð !$Øðað aàðað ðað    S œ/ð	að
 ðað ðað ðað að að að að að&¸%ÀÀ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^ð 	ð 	ð 	ð 	ð "'ð	-+ð -+à”|ð-+ð    S œ/ð-+ð ð	-+ð
 Ð+Ô,ð-+ð 
Œð-+ð -+ð -+ð -+ð -+ð -+ð -+ð -+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 )Ú	SwinStager�   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 )r   r   )r�   r‘   r	  rÍ   r
  r  )r  rd   )rÅ   Úir�   r‘   r  r	  rÍ   s     €€€€€r,   rÈ   z&SwinStage.__init__.<locals>.<listcomp>f  sh   ø€ ð 
ð 
ð 
ð õ Ø!ØØ%5Ø'Ø#,¨Q¤<Ø%&¨¡U¨a¢Z Z˜q˜q°fÔ6HÈAÑ6Mðñ ô ð
ð 
ð 
r-   rÉ   )r(   r)   r�   r   Ú
ModuleListrÄ   ÚblocksÚ
downsample)	r*   r�   r‘   r	  r=  rÍ   r  rC  r+   s	    ``` `` €r,   r)   zSwinStage.__init__Y  s    øøøøøø€ õ 	‰Œ×ÒÑÔÐØˆŒÝ”mð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
õ ˜u™œð
ñ 
ô 
ñ
ô 
ˆŒð 2<Ð1G˜*˜*¨Ð-Ñ-Ô-Ð-ÈTˆŒˆˆr-   r.   Ú!hidden_states_before_downsamplingrf   rg   Ú(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   r   r   r   )rC  r5   r`   r�   rb   )r*   r.   rD  rf   rg   rE  Úspatial_stateÚhÚwre   r�   r±   s               r,   Úget_reshaped_hidden_statesz$SwinStage.get_reshaped_hidden_statesu  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Á   r0  rï   Nc                 ó¼   — |\  }}d }| j         D ]}	 |	||fd|i|¤Ž\  }}Œ|}
| j        �|                      |
|¦  «        }|                      ||
|||¦  «        }|||fS )Nr0  )rB  rC  rJ  )r*   r.   rÁ   r0  rE  rï   rf   rg   Úlast_attn_weightsÚlayer_modulerD  rN   s               r,   r=   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)r@   rA   rB   r    r£   rQ   ÚlistrD   r)   r7   rE   r¥   rJ  r   r   r=   rG   rH   s   @r,   r<  r<  X  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-   r<  c                   óš   — e Zd ZU eed<   dgZdZdZddgZ e	e
dd¬¦  «         e	e
d	d¬¦  «        d
œZ ej        ¦   «         d„ ¦   «         ZdS )ÚSwinPreTrainedModelr�   r<  Fz(attention\.self\.relative_position_indexz:attention\.relative_position_bias\.relative_position_indexr   T)ÚindexÚcapture_initial_hidden_stater   )r.   rM   c                 óÀ  — t          j        | |¦  «         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 weightsNr^   )r   Ú_init_weightsr«   rn   rx   ÚinitÚzeros_rz   rÌ   rÒ   Úcopy_rÏ   rÔ   r`   )r*   Úmodules     r,   rT  z!SwinPreTrainedModel._init_weights¾  sÙ   € õ 	Ô% d¨FÑ3Ô3Ð3Ý�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-   N)r@   rA   rB   r    rP   Ú_no_split_modulesÚ_supports_flash_attnÚ_supports_flex_attnÚ"_keys_to_ignore_on_load_unexpectedr   r<  Ú_can_record_outputsr7   Úno_gradrT  rR   r-   r,   rP  rP  ¨  s©   € € € € € € àÐÐÑØ$˜ÐØ ÐØÐð 	4ØEð*Ð&ð (˜¨	¸ÐY]Ð^Ñ^Ô^ð
 %�n Y°aÐV[Ð\Ñ\Ô\ð	ð 	Ðð €U„]�_„_ð
jð 
jñ „_ð
jð 
jð 
jr-   rP  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 )ÚSwinEncoderr�   rs   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 r0   )r
  ÚmaxrÛ   Údepths©rÅ   r@  r�   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 )r   r   r   N)r�   r‘   r	  r=  rÍ   r  rC  )r<  r£   rw   rd  rÍ   rÛ   Ú
num_layersr¹   )rÅ   Ú	layer_idxr�   Údprrs   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)   Úlenrd  rg  r�   rÄ   rÛ   r   rA  ÚlayersÚ	post_init)r*   r�   rs   ri  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Á   r0  Úoutput_hidden_statesrE  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   r   ©r0  rE  )rL   rN   )r5   r`   r�   rb   rk  rC  rK   )r*   r.   rÁ   r0  rn  rE  rï   Úall_reshaped_hidden_statesre   r�   r±   Ústem_spatialrM  Úreshaped_hidden_states                 r,   r=   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)r@   rA   rB   r    rQ   r£   r)   r   r   r   r7   rE   r¥   r   r   rK   r=   rG   rH   s   @r,   r`  r`  Ì  sú   ø€ € € € € ð˜zð °e¸CÀ¸H´oð ð ð ð ð ð ð*  Ø€_¨EÐ2Ñ2Ô2Øð
 "'Ø%*Ø9>ð+
ð +
à”|ð+
ð    S œ/ð+
ð ð	+
ð
 #ð+
ð 37ð+
ð Ð+Ô,ð+
ð 
ð+
ð +
ð +
ñ „^ñ 3Ô2ñ  Ôð+
ð +
ð +
ð +
ð +
r-   r`  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.
        r   r   )r‚   r  N)r(   r)   r�   rj  rd  rg  r£   rw   Únum_featuresrn   rƒ   r`  rt   Úencoderr   r{   r  Ú	layernormÚAdaptiveAvgPool1dÚpoolerrl  )r*   r�   Úadd_pooling_layerr‚   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).
        rn  ©r˜   r–   Nr   r   )rL   rU   r.   rM   rN   )Úpopr�   rn  rƒ   rx  rL   ry  r{  ra   r7   r·   rT   r.   rM   rN   )r*   r—   r˜   r–   rï   rn  Úembedding_outputrÁ   Úencoder_outputsÚsequence_outputÚpooled_outputs              r,   r=   zSwinModel.forward*  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)r@   rA   rB   r)   r   r   r7   rO   r¤   r¥   r   r   rT   r=   rG   rH   s   @r,   ru  ru    s¾   ø€ € € € € ðð ð ð ð ð ð* Øð 26Ø37Ø).ð	(
ð (
àÔ'¨$Ñ.ð(
ð Ô)¨DÑ0ð(
ð #'ð	(
ð
 Ð+Ô,ð(
ð 
ð(
ð (
ð (
ñ „^ñ Ôð(
ð (
ð (
ð (
ð (
r-   ru  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|  r‚   r   r   )Úin_channelsÚout_channelsr¨   )r(   r)   ru  Úswinr£   rw   rg  r   Ú
Sequentialr¯   Úencoder_striderh   ÚPixelShuffleÚdecoderrl  )r*   r�   rw  r+   s      €r,   r)   z#SwinForMaskedImageModeling.__init__d  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   r   r…   Nr^   Únone)r¿   gñhãˆµøä>)rX   rY   r.   rM   rN   )rŠ  rL   ra   r5   Úmathr9   rŒ   rŽ  r�   rª   r€   Úrepeat_interleaver›   rb   r   rŽ   Úl1_lossrÛ   rh   rW   r.   rM   rN   )r*   r—   r˜   r–   rï   Úoutputsr‚  re   rh   Úsequence_lengthrf   rg   Úreconstructed_pixel_valuesÚmasked_im_lossr‡   r¡   Úreconstruction_losss                    r,   r=   z"SwinForMaskedImageModeling.forwardt  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„  )r@   rA   rB   r)   r   r   r7   rO   r¤   r¥   r   r   rW   r=   rG   rH   s   @r,   r†  r†  W  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_labelsru  rŠ  r   r¾   rw  r  Ú
classifierrl  )r*   r�   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)rX   r\   r.   rM   rN   )	rŠ  rU   r�  Úloss_functionr�   r[   r.   rM   rN   )	r*   r—   rž  r–   rï   r”  rƒ  r\   rX   s	            r,   r=   z"SwinForImageClassification.forwardÞ  s¦   € ð �$”)Øð
ð 
à%=ð
ð ð
ð 
ˆð  Ô-ˆà—’ Ñ/Ô/ˆàˆØÐØ%�4Ô% f¨f°d´kÐLÐLÀVÐLÐLˆDå(ØØØ!Ô/ØÔ)Ø#*Ô#Að
ñ 
ô 
ð 	
r-   r„  )r@   rA   rB   r)   r   r   r7   rO   Ú
LongTensorr¥   r   r   r[   r=   rG   rH   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.*r�   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 )r   )r£   rw   re  s     €r,   rÈ   z)SwinBackbone.__init__.<locals>.<listcomp>  s.   ø€ Ð1rÐ1rÐ1rÐSTµ#°fÔ6FÈÈAÉÑ6MÑ2NÔ2NÐ1rÐ1rÐ1rr-   F)r|  )r(   r)   rw   rÄ   rj  rd  rw  ru  rŠ  ÚzipÚout_featuresr3  r   r{   Ú
ModuleDictÚhidden_states_normsrl  )r*   r�   r©  Ústagerh   r+   s    `   €r,   r)   zSwinBackbone.__init__  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]
        ```
        Trp  rR   r   r   r   r   )Úfeature_mapsr.   rM   )rŠ  r¦  Ústage_namesrN   r§  r5   r�   rb   r`   r©  r   rM   )r*   r—   rï   r”  r¬  rª  Úhidden_statere   rh   rf   rg   s              r,   r=   zSwinBackbone.forward  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-   )r@   rA   rB   Ú_keys_to_ignore_on_load_missingr    r)   r   r
   r   r7   rE   r   r   r   r=   rG   rH   s   @r,   r£  r£    s©   ø€ € € € € ð (;Ð&;Ð#ð˜zð ð ð ð ð ð ð Ø Øð7
à”lð7
ð Ð+Ô,ð7
ð 
ð	7
ð 7
ð 7
ñ „^ñ !Ô ñ Ôð7
ð 7
ð 7
ð 7
ð 7
r-   r£  )rš  r†  ru  rP  r£  )HrC   Úcollections.abcr¬   r‘  r   Údataclassesr   r7   r   Ú r   rU  Ú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_loggerr@   Úloggerr  r"   rK   rT   rW   r[   rj   rl   rn   rp   r¹   rÌ   rä   rÿ   r  r<  rP  r`  ru  r†  rš  r£  Ú__all__rR   r-   r,   ú<module>rÁ     së  ðð &Ð %à Ð Ð Ð Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø .Ð .Ð .Ð .Ð .Ð .Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø &Ð &Ð &Ð &Ð &Ð &Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *ð 
ˆÔ	˜HÑ	%Ô	%€ð%ð %ð %ð %ð %�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ñ @)ô @)ð @)ðF?ð ?ð ?ð ?ð ?ˆfñ ?ô ?ð ?ðu+ð u+ð u+ð u+ð u+�ñ u+ô u+ð u+ðpMHð MHð MHð MHð MHÐ*ñ MHô MHð MHð` ð jð  jð  jð  jð  jÐ,ñ  jô  jñ „ð jðF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-   