Ë
    S^(hv ã            	       ó’  — d Z ddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZ ddlZddlZddlmZmZ ddlmZmZmZ ddlmZ dd	lmZmZmZmZmZmZ dd
lmZ ddlm Z m!Z!m"Z" ddl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-  e'j\                  e/«      Z0dZ1dZ2g d¢Z3dZ4dZ5e G d„ de«      «       Z6dUdej                  de7de8dej                  fd„Z9 G d„ dejt                  «      Z; G d„ dejt                  «      Z< G d „ d!ejt                  «      Z= G d"„ d#ejt                  «      Z> G d$„ d%e>«      Z? G d&„ d'ejt                  «      Z@e>e?d(œZA G d)„ d*ejt                  «      ZB G d+„ d,ejt                  «      ZC G d-„ d.ejt                  «      ZD G d/„ d0ejt                  «      ZE G d1„ d2ejt                  «      ZF G d3„ d4ejt                  «      ZG G d5„ d6e«      ZHd7ZId8ZJ e%d9eI«       G d:„ d;eH«      «       ZK G d<„ d=ejt                  «      ZL e%d>eI«       G d?„ d@eH«      «       ZM e%dAeI«       G dB„ dCeH«      «       ZN G dD„ dEejt                  «      ZO G dF„ dGejt                  «      ZP G dH„ dIejt                  «      ZQ G dJ„ dKejt                  «      ZR G dL„ dMejt                  «      ZS e%dNeI«       G dO„ dPeH«      «       ZT e%dQeI«       G dR„ dSeHe+«      «       ZUg dT¢ZVy)VzPyTorch BEiT model.é    N)Ú	dataclass)ÚListÚOptionalÚTupleÚUnion)ÚTensorÚnn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )ÚACT2FN)ÚBackboneOutputÚBaseModelOutputÚBaseModelOutputWithPoolingÚImageClassifierOutputÚMaskedLMOutputÚSemanticSegmenterOutput)ÚPreTrainedModel)Ú#compile_compatible_method_lru_cacheÚ find_pruneable_heads_and_indicesÚprune_linear_layer)Úadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstringsÚ	torch_int)ÚBackboneMixiné   )Ú
BeitConfigr!   z%microsoft/beit-base-patch16-224-pt22k)r    éÅ   i   zmicrosoft/beit-base-patch16-224ztabby, tabby catc                   ó   — e Zd ZdZy)ÚBeitModelOutputWithPoolinga´  
    Class for outputs of [`BeitModel`].

    Args:
        last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
            Sequence of hidden-states at the output of the last layer of the model.
        pooler_output (`torch.FloatTensor` of shape `(batch_size, hidden_size)`):
            Average of the last layer hidden states of the patch tokens (excluding the *[CLS]* token) if
            *config.use_mean_pooling* is set to True. If set to False, then the final hidden state of the *[CLS]* token
            will be returned.
        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 layer) of
            shape `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the initial embedding outputs.
        attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/beit/modeling_beit.pyr$   r$   A   s   „ òr*   r$   ÚinputÚ	drop_probÚtrainingÚreturnc                 ó  — |dk(  s|s| S d|z
  }| j                   d   fd| j                  dz
  z  z   }|t        j                  || j                  | j
                  ¬«      z   }|j                  «        | j                  |«      |z  }|S )aF  
    Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

    Comment by Ross Wightman: This is the same as the DropConnect impl I created for EfficientNet, etc networks,
    however, the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper...
    See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for changing the
    layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use 'survival rate' as the
    argument.
    ç        r    r   )r    )ÚdtypeÚdevice)ÚshapeÚndimÚtorchÚrandr2   r3   Úfloor_Údiv)r,   r-   r.   Ú	keep_probr4   Úrandom_tensorÚoutputs          r+   Ú	drop_pathr=   [   s�   € ð �CÒ™xØˆØ�I‘€IØ�[‰[˜‰^Ð ¨¯
©
°Q©Ñ 7Ñ7€EØ¤§
¡
¨5¸¿¹ÈEÏLÉLÔ YÑY€MØ×ÑÔØ�Y‰Y�yÓ! MÑ1€FØ€Mr*   c                   óx   ‡ — e Zd ZdZd	dee   ddfˆ fd„Zdej                  dej                  fd„Z	de
fd„Zˆ xZS )
ÚBeitDropPathzXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).Nr-   r/   c                 ó0   •— t         ‰| �  «        || _        y ©N)ÚsuperÚ__init__r-   )Úselfr-   Ú	__class__s     €r+   rC   zBeitDropPath.__init__r   s   ø€ Ü‰ÑÔØ"ˆ�r*   Úhidden_statesc                 óD   — t        || j                  | j                  «      S rA   )r=   r-   r.   ©rD   rF   s     r+   ÚforwardzBeitDropPath.forwardv   s   € Ü˜¨¯©¸¿¹ÓFÐFr*   c                 ó8   — dj                  | j                  «      S )Nzp={})Úformatr-   ©rD   s    r+   Ú
extra_reprzBeitDropPath.extra_repry   s   € Ø�}‰}˜TŸ^™^Ó,Ð,r*   rA   )r%   r&   r'   r(   r   ÚfloatrC   r6   r   rI   ÚstrrM   Ú__classcell__©rE   s   @r+   r?   r?   o   sG   ø„ Ùbñ# (¨5¡/ð #¸Tõ #ðG U§\¡\ð G°e·l±ló Gð-˜C÷ -r*   r?   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d
ej                  de
ej                     de
e   dej                  fd„Zˆ xZS )ÚBeitEmbeddingszc
    Construct the CLS token, position and patch embeddings. Optionally, also the mask token.

    Úconfigr/   Nc                 ó2  •— t         ‰| �  «        t        j                  t	        j
                  dd|j                  «      «      | _        |j                  r:t        j                  t	        j
                  dd|j                  «      «      | _	        nd | _	        t        |«      | _        |j                  | _        t        |j                  t        j                   j"                  «      r|j                  n|j                  |j                  f| _        | j                  j$                  }|j&                  r=t        j                  t	        j
                  d|dz   |j                  «      «      | _        nd | _        t        j*                  |j,                  «      | _        y )Nr    )rB   rC   r	   Ú	Parameterr6   ÚzerosÚhidden_sizeÚ	cls_tokenÚuse_mask_tokenÚ
mask_tokenÚBeitPatchEmbeddingsÚpatch_embeddingsÚ
patch_sizeÚ
isinstanceÚ
image_sizeÚcollectionsÚabcÚIterableÚnum_patchesÚ use_absolute_position_embeddingsÚposition_embeddingsÚDropoutÚhidden_dropout_probÚdropout)rD   rT   rd   rE   s      €r+   rC   zBeitEmbeddings.__init__…   s$  ø€ Ü‰ÑÔäŸ™¤e§k¡k°!°Q¸×8JÑ8JÓ&KÓLˆŒØ× Ò Ü Ÿl™l¬5¯;©;°q¸!¸V×=OÑ=OÓ+PÓQˆD�Oà"ˆDŒOÜ 3°FÓ ;ˆÔØ ×+Ñ+ˆŒô ˜&×+Ñ+¬[¯_©_×-EÑ-EÔFð ×Òà×#Ñ# V×%6Ñ%6Ð7ð 	Œð
 ×+Ñ+×7Ñ7ˆØ×2Ò2Ü')§|¡|´E·K±KÀÀ;ÐQRÁ?ÐTZ×TfÑTfÓ4gÓ'hˆDÕ$à'+ˆDÔ$Ü—z‘z &×"<Ñ"<Ó=ˆ�r*   Ú
embeddingsÚheightÚwidthc                 ó¦  — |j                   d   dz
  }| j                  j                   d   dz
  }t        j                  j	                  «       s||k(  r||k(  r| j                  S | j                  dd…dd…f   }| j                  dd…dd…f   }|j                   d   }|| j
                  z  }	|| j
                  z  }
t        |dz  «      }|j                  d|||«      }|j                  dddd«      }t        j                  j                  ||	|
fdd	¬
«      }|j                  dddd«      j                  dd|«      }t        j                  ||fd¬«      S )a   
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
        images. This method is also adapted to support torch.jit tracing.

        Adapted from:
        - https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
        - https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
        r    Néÿÿÿÿg      à?r   r   é   ÚbicubicF©ÚsizeÚmodeÚalign_corners©Údim)r4   rf   r6   ÚjitÚ
is_tracingr^   r   ÚreshapeÚpermuter	   Ú
functionalÚinterpolateÚviewÚcat)rD   rj   rk   rl   rd   Únum_positionsÚclass_pos_embedÚpatch_pos_embedrv   Ú
new_heightÚ	new_widthÚsqrt_num_positionss               r+   Úinterpolate_pos_encodingz'BeitEmbeddings.interpolate_pos_encodingœ   s`  € ð !×&Ñ& qÑ)¨AÑ-ˆØ×0Ñ0×6Ñ6°qÑ9¸AÑ=ˆô �y‰y×#Ñ#Ô%¨+¸Ò*FÈ6ÐUZÊ?Ø×+Ñ+Ð+à×2Ñ2²1°b°q°b°5Ñ9ˆØ×2Ñ2²1°a±b°5Ñ9ˆà×Ñ˜rÑ"ˆà˜tŸ™Ñ.ˆ
Ø˜TŸ_™_Ñ,ˆ	ä& }°cÑ'9Ó:ÐØ)×1Ñ1°!Ð5GÐI[Ð]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØ˜iÐ(ØØð	 4ó 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆä�y‰y˜/¨?Ð;ÀÔCÐCr*   Úpixel_valuesÚbool_masked_posr…   c                 ó8  — | j                   �|�t        j                  d«       |j                  \  }}}}| j	                  |«      \  }\  }}	|j                  «       \  }
}}|�K| j                  j                  |
|d«      }|j                  d«      j                  |«      }|d|z
  z  ||z  z   }| j                  j                  |
dd«      }t        j                  ||fd¬«      }| j                   �|| j                  |||«      z   }| j                  |«      }|||	ffS )Nz·`interpolate_pos_encoding` argument has no effect for BEiTEmbeddings, embeddings are always interpolated to the input image size. The argument will be removed in transformers v4.51.0.rn   r    ru   )rf   ÚwarningsÚwarnr4   r]   rr   r[   ÚexpandÚ	unsqueezeÚtype_asrY   r6   r~   r…   ri   )rD   r†   r‡   r…   Ú_rk   rl   rj   Úpatch_heightÚpatch_widthÚ
batch_sizeÚseq_lenÚmask_tokensÚwÚ
cls_tokenss                  r+   rI   zBeitEmbeddings.forwardÄ   s-  € ð ×#Ñ#Ð/Ð4LÐ4XÜ�M‰Mðnôð
 +×0Ñ0Ñˆˆ1ˆf�eØ26×2GÑ2GÈÓ2UÑ/ˆ
Ñ/�\ ;Ø!+§¡Ó!2Ñˆ
�G˜QàÐ&ØŸ/™/×0Ñ0°¸WÀbÓIˆKà×)Ñ)¨"Ó-×5Ñ5°kÓBˆAØ# q¨1¡uÑ-°¸a±Ñ?ˆJà—^‘^×*Ñ*¨:°r¸2Ó>ˆ
Ü—Y‘Y 
¨JÐ7¸QÔ?ˆ
à×#Ñ#Ð/Ø# d×&CÑ&CÀJÐPVÐX]Ó&^Ñ^ˆJà—\‘\ *Ó-ˆ
à˜L¨+Ð6Ð6Ð6r*   ©NN)r%   r&   r'   r(   r!   rC   r6   r   Úintr…   r   Ú
BoolTensorÚboolrI   rP   rQ   s   @r+   rS   rS      s˜   ø„ ñð
>˜zð >¨dõ >ð.&D°5·<±<ð &DÈð &DÐUXð &DÐ]b×]iÑ]ió &DðV 7;Ø37ñ	7à—l‘lð7ð " %×"2Ñ"2Ñ3ð7ð #+¨4¡.ð	7ð
 
�‰÷7r*   rS   c                   óZ   ‡ — e Zd ZdZˆ fd„Zdej                  dej                  fd„Zˆ xZS )r\   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                  ||||¬«      | _        y )Nr    r   ©Úkernel_sizeÚstride)rB   rC   r`   r^   Únum_channelsrX   r_   ra   rb   rc   rd   Úpatch_shaper	   ÚConv2dÚ
projection)	rD   rT   r`   r^   rŸ   rX   rd   r    rE   s	           €r+   rC   zBeitPatchEmbeddings.__init__ì   s  ø€ Ü‰ÑÔØ!'×!2Ñ!2°F×4EÑ4E�Jˆ
Ø$*×$7Ñ$7¸×9KÑ9K�kˆä#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ! !‘}¨
°1©Ñ5°zÀ!±}È
ÐSTÉÑ7UÐVˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔØ&ˆÔäŸ)™) L°+È:Ð^hÔiˆ�r*   r†   r/   c                 ó  — |j                   \  }}}}|| j                  k7  rt        d«      ‚| j                  |«      }|j                   d   |j                   d   }}|j	                  d«      j                  dd«      }|||ffS )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.ro   r   r    )r4   rŸ   Ú
ValueErrorr¢   ÚflattenÚ	transpose)	rD   r†   r‘   rŸ   rk   rl   rj   r�   r�   s	            r+   rI   zBeitPatchEmbeddings.forwardý   s�   € Ø2>×2DÑ2DÑ/ˆ
�L &¨%Ø˜4×,Ñ,Ò,ÜØwóð ð —_‘_ \Ó2ˆ
Ø$.×$4Ñ$4°QÑ$7¸×9IÑ9IÈ!Ñ9L�kˆØ×'Ñ'¨Ó*×4Ñ4°Q¸Ó:ˆ
à˜L¨+Ð6Ð6Ð6r*   )	r%   r&   r'   r(   rC   r6   r   rI   rP   rQ   s   @r+   r\   r\   å   s)   ø„ ñôjð"7 E§L¡Lð 7°U·\±\÷ 7r*   r\   c                   ó  ‡ — e Zd Zddedee   ddfˆ fd„Zd„ Z	 	 	 	 	 ddej                  deej                     d	e
d
eej                     de
deee      deeej                     eej                  ej                  f   f   fd„Zˆ xZS )ÚBeitSelfAttentionNrT   Úwindow_sizer/   c                 ó<  •— t         ‰| �  «        || _        |j                  |j                  z  dk7  r2t        |d«      s&t        d|j                  › d|j                  › d�«      ‚|j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _	        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  d¬«      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                   «      | _        t%        |«      | _        | j&                  rt)        ||¬«      | _        y y )	Nr   Úembedding_sizezThe hidden size z4 is not a multiple of the number of attention heads ú.F)Úbias©r©   )rB   rC   rT   rX   Únum_attention_headsÚhasattrr¤   r—   Úattention_head_sizeÚall_head_sizer	   ÚLinearÚqueryÚkeyÚvaluerg   Úattention_probs_dropout_probri   r™   Úhas_relative_position_biasÚBeitRelativePositionBiasÚrelative_position_bias©rD   rT   r©   rE   s      €r+   rC   zBeitSelfAttention.__init__  sP  ø€ Ü‰ÑÔØˆŒØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ" 6×#5Ñ#5Ð"6ð 7Ø×3Ñ3Ð4°Að7óð ð
 $*×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÈ%ÔPˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ä—z‘z &×"EÑ"EÓFˆŒä*.¨{Ó*;ˆÔ'Ø×*Ò*Ü*BÀ6ÐWbÔ*cˆDÕ'ð +r*   c                 ó    — |j                  «       d d | j                  | j                  fz   } |j                  |Ž }|j	                  dddd«      S )Nrn   r   ro   r    r   )rr   r¯   r±   r}   rz   )rD   ÚxÚnew_x_shapes      r+   Útranspose_for_scoresz&BeitSelfAttention.transpose_for_scores#  sN   € Ø—f‘f“h˜s �m t×'?Ñ'?À×AYÑAYÐ&ZÑZˆØˆA�F‰F�KÐ ˆØ�y‰y˜˜A˜q !Ó$Ð$r*   rF   Ú	head_maskÚoutput_attentionsrº   r…   Ú
resolutionc                 óŽ  — | j                  |«      }| j                  | j                  |«      «      }| j                  | j                  |«      «      }	| j                  |«      }
t	        j
                  |
|j                  dd«      «      }|t        j                  | j                  «      z  }| j                  r[|\  }}|| j                  j                  z  || j                  j                  z  f}|| j                  |||j                  d   ¬«      z   }|�||z   }t        j                   j#                  |d¬«      }| j%                  |«      }|�||z  }t	        j
                  ||	«      }|j'                  dddd«      j)                  «       }|j+                  «       d d | j,                  fz   } |j.                  |Ž }|r||f}|S |f}|S )	Nrn   éþÿÿÿr    ©Údim_sizeru   r   ro   r   )r´   r¿   rµ   r¶   r6   Úmatmulr¦   ÚmathÚsqrtr±   r¸   rT   r^   rº   r4   r	   r{   Úsoftmaxri   rz   Ú
contiguousrr   r²   r}   )rD   rF   rÀ   rÁ   rº   r…   rÂ   Úmixed_query_layerÚ	key_layerÚvalue_layerÚquery_layerÚattention_scoresrk   rl   r©   Úattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                      r+   rI   zBeitSelfAttention.forward(  sØ  € ð !ŸJ™J }Ó5Ðà×-Ñ-¨d¯h©h°}Ó.EÓFˆ	Ø×/Ñ/°·
±
¸=Ó0IÓJˆØ×/Ñ/Ð0AÓBˆô !Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐà+¬d¯i©i¸×8PÑ8PÓ.QÑQÐð ×*Ò*Ø&‰MˆF�EØ! T§[¡[×%;Ñ%;Ñ;¸UÀdÇkÁk×F\ÑF\Ñ=\Ð]ˆKØ/°$×2MÑ2MØÐ5À×@SÑ@SÐTUÑ@Vð 3Nó 3ñ  Ðð
 "Ð-Ø/Ð2HÑHÐô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÓIˆð Ÿ,™, Ó7ˆð Ð Ø-°	Ñ9ˆOäŸ™ _°kÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ*˜×*Ñ*Ð,CÐDˆá6G�= /Ð2ˆàˆð O\ÐM]ˆàˆr*   rA   ©NFNFN)r%   r&   r'   r!   r   ÚtuplerC   r¿   r6   r   r™   r   r—   r   rI   rP   rQ   s   @r+   r¨   r¨     sÉ   ø„ ñd˜zð d¸À¹ð dÐSWõ dò.%ð -1Ø"'Ø9=Ø).Ø+/ñ3à—|‘|ð3ð ˜EŸL™LÑ)ð3ð  ð	3ð
 !)¨¯©Ñ 6ð3ð #'ð3ð ˜U 3™ZÑ(ð3ð 
ˆu�U—\‘\Ñ" E¨%¯,©,¸¿¹Ð*DÑ$EÐEÑ	F÷3r*   r¨   c                   óò   ‡ — e Zd Z	 	 	 	 	 d	dej                  deej                     dedeej                     dedeee      de	eej                     eej                  ej                  f   f   fˆ fd„Z
ˆ xZS )
ÚBeitSdpaSelfAttentionrF   rÀ   rÁ   rº   r…   rÂ   r/   c           	      óœ  •— |s|�*t         j                  d«       t        ‰| �  ||||||¬«      S | j	                  |«      }| j                  | j                  |«      «      }| j                  | j                  |«      «      }	| j                  |«      }
d }| j                  rX|\  }}|| j                  j                  z  || j                  j                  z  f}| j                  |||j                  d   ¬«      }|�
|€|}n||z  }dt        j                  | j                  «      z  }t         j"                  j$                  j'                  |
||	|| j(                  r| j                  j*                  ndd|¬«      }|j-                  dd	dd
«      j/                  «       }|j1                  «       d d | j2                  fz   } |j4                  |Ž }|d fS )NaŽ  `BeitSdpaSelfAttention` is used but `torch.nn.functional.scaled_dot_product_attention` does not support `output_attentions=True` or `head_mask`. Falling back to the manual attention implementation, but specifying the manual implementation will be required from Transformers version v5.0.0 onwards. This warning can be removed using the argument `attn_implementation="eager"` when loading the model.)rF   rÀ   rÁ   rº   r…   rÂ   r    rÅ   r1   F)Ú	attn_maskÚ	dropout_pÚ	is_causalÚscaler   ro   r   rÄ   )ÚloggerÚwarning_oncerB   rI   r´   r¿   rµ   r¶   r¸   rT   r^   rº   r4   rÈ   rÉ   r±   r6   r	   r{   Úscaled_dot_product_attentionr.   r·   rz   rË   rr   r²   r}   )rD   rF   rÀ   rÁ   rº   r…   rÂ   rÌ   rÍ   rÎ   rÏ   Ú	attn_biasrk   rl   r©   ÚscalingrÒ   rÓ   rE   s                     €r+   rI   zBeitSdpaSelfAttention.forward_  sé  ø€ ñ  	Ð 5Ü×Ñðwôô ‘7‘?Ø+Ø#Ø"3Ø'=Ø)AØ%ð #ó ð ð !ŸJ™J }Ó5ÐØ×-Ñ-¨d¯h©h°}Ó.EÓFˆ	Ø×/Ñ/°·
±
¸=Ó0IÓJˆØ×/Ñ/Ð0AÓBˆàˆ	Ø×*Ò*Ø&‰MˆF�EØ! T§[¡[×%;Ñ%;Ñ;¸UÀdÇkÁk×F\ÑF\Ñ=\Ð]ˆKØ×3Ñ3ØÐ5À×@SÑ@SÐTUÑ@Vð 4ó ˆIð
 "Ð-ØÐ Ø2‘	àÐ3Ñ3�	à”d—i‘i × 8Ñ 8Ó9Ñ9ˆÜŸ™×+Ñ+×HÑHØØØØØBFÇ-Â-�d—k‘k×>Ò>ÐUXØØð Ió 
ˆð &×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ*˜×*Ñ*Ð,CÐDˆØ˜dÐ"Ð"r*   rÕ   )r%   r&   r'   r6   r   r   r™   r   r—   r   rI   rP   rQ   s   @r+   rØ   rØ   ^  s¦   ø„ ð -1Ø"'Ø9=Ø).Ø+/ñ:#à—|‘|ð:#ð ˜EŸL™LÑ)ð:#ð  ð	:#ð
 !)¨¯©Ñ 6ð:#ð #'ð:#ð ˜U 3™ZÑ(ð:#ð 
ˆu�U—\‘\Ñ" E¨%¯,©,¸¿¹Ð*DÑ$EÐEÑ	F÷:#ñ :#r*   rØ   c                   ó~   ‡ — e Zd ZdZdeddfˆ fd„Zd	dej                  dej                  dej                  fd„Zˆ xZ	S )
ÚBeitSelfOutputz¡
    The residual connection is defined in BeitLayer instead of here (as is the case with other models), due to the
    layernorm applied before each block.
    rT   r/   Nc                 óÈ   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  «      | _        y rA   )	rB   rC   r	   r³   rX   Údenserg   rh   ri   ©rD   rT   rE   s     €r+   rC   zBeitSelfOutput.__init__¢  sB   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r*   rF   Úinput_tensorc                 óJ   — | j                  |«      }| j                  |«      }|S rA   ©ræ   ri   )rD   rF   rè   Úgammas       r+   rI   zBeitSelfOutput.forward§  ó$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆàÐr*   rA   )
r%   r&   r'   r(   r!   rC   r6   r   rI   rP   rQ   s   @r+   rä   rä   œ  sD   ø„ ñð
>˜zð >¨dõ >ñ
 U§\¡\ð ÀÇÁð Ð^c×^jÑ^j÷ r*   rä   )ÚeagerÚsdpac                   ó  ‡ — e Zd Zddedee   ddfˆ fd„Zd„ Z	 	 	 	 	 ddej                  deej                     d	e
d
eej                     de
deee      deeej                     eej                  ej                  f   f   fd„Zˆ xZS )ÚBeitAttentionNrT   r©   r/   c                 óž   •— t         ‰| �  «        t        |j                     ||¬«      | _        t        |«      | _        t        «       | _        y )Nr®   )	rB   rC   ÚBEIT_SELF_ATTENTION_CLASSESÚ_attn_implementationÚ	attentionrä   r<   ÚsetÚpruned_headsr»   s      €r+   rC   zBeitAttention.__init__µ  s?   ø€ Ü‰ÑÔÜ4°V×5PÑ5PÑQÐRXÐfqÔrˆŒÜ$ VÓ,ˆŒÜ›EˆÕr*   c                 ó>  — t        |«      dk(  ry t        || j                  j                  | j                  j                  | j
                  «      \  }}t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _	        t        | j                  j                  |d¬«      | j                  _        | j                  j                  t        |«      z
  | j                  _        | j                  j                  | j                  j                  z  | j                  _        | j
                  j                  |«      | _        y )Nr   r    ru   )Úlenr   rô   r¯   r±   rö   r   r´   rµ   r¶   r<   ræ   r²   Úunion)rD   ÚheadsÚindexs      r+   Úprune_headszBeitAttention.prune_heads»  s  € Üˆu‹:˜Š?ØÜ7Ø�4—>‘>×5Ñ5°t·~±~×7YÑ7YÐ[_×[lÑ[ló
‰ˆˆuô
  2°$·.±.×2FÑ2FÈÓNˆ�‰ÔÜ/°·±×0BÑ0BÀEÓJˆ�‰ÔÜ1°$·.±.×2FÑ2FÈÓNˆ�‰ÔÜ.¨t¯{©{×/@Ñ/@À%ÈQÔOˆ�‰Ôð .2¯^©^×-OÑ-OÔRUÐV[ÓR\Ñ-\ˆ�‰Ô*Ø'+§~¡~×'IÑ'IÈDÏNÉN×LnÑLnÑ'nˆ�‰Ô$Ø ×-Ñ-×3Ñ3°EÓ:ˆÕr*   rF   rÀ   rÁ   rº   r…   rÂ   c                 ón   — | j                  ||||||«      }| j                  |d   |«      }|f|dd  z   }	|	S )Nr   r    )rô   r<   )
rD   rF   rÀ   rÁ   rº   r…   rÂ   Úself_outputsÚattention_outputrÔ   s
             r+   rI   zBeitAttention.forwardÍ  sS   € ð —~‘~Ø˜9Ð&7Ð9OÐQiÐkuó
ˆð  Ÿ;™; |°A¡¸ÓFÐà#Ð%¨°Q°RÐ(8Ñ8ˆØˆr*   rA   rÕ   )r%   r&   r'   r!   r   rÖ   rC   rü   r6   r   r™   r   r—   r   rI   rP   rQ   s   @r+   rð   rð   ´  sÅ   ø„ ñ"˜zð "¸À¹ð "ÐSWõ "ò;ð* -1Ø"'Ø9=Ø).Ø+/ñà—|‘|ðð ˜EŸL™LÑ)ðð  ð	ð
 !)¨¯©Ñ 6ðð #'ðð ˜U 3™ZÑ(ðð 
ˆu�U—\‘\Ñ" E¨%¯,©,¸¿¹Ð*DÑ$EÐEÑ	F÷r*   rð   c                   ó`   ‡ — e Zd Zdeddfˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚBeitIntermediaterT   r/   Nc                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y rA   )rB   rC   r	   r³   rX   Úintermediate_sizeræ   r_   Ú
hidden_actrO   r   Úintermediate_act_fnrç   s     €r+   rC   zBeitIntermediate.__init__á  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r*   rF   c                 óJ   — | j                  |«      }| j                  |«      }|S rA   )ræ   r  rH   s     r+   rI   zBeitIntermediate.forwardé  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆàÐr*   ©	r%   r&   r'   r!   rC   r6   r   rI   rP   rQ   s   @r+   r  r  à  s1   ø„ ð9˜zð 9¨dõ 9ð U§\¡\ð °e·l±l÷ r*   r  c                   ó`   ‡ — e Zd Zdeddfˆ fd„Zdej                  dej                  fd„Zˆ xZS )Ú
BeitOutputrT   r/   Nc                 óÈ   •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j                  «      | _	        y rA   )
rB   rC   r	   r³   r  rX   ræ   rg   rh   ri   rç   s     €r+   rC   zBeitOutput.__init__ñ  sB   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r*   rF   c                 óJ   — | j                  |«      }| j                  |«      }|S rA   rê   rH   s     r+   rI   zBeitOutput.forwardö  rì   r*   r  rQ   s   @r+   r	  r	  ð  s1   ø„ ð>˜zð >¨dõ >ð
 U§\¡\ð °e·l±l÷ r*   r	  c                   ó  ‡ — e Zd ZdZddedee   deddfˆ fd„Z	 	 	 	 	 dde	j                  d	ee	j                     d
edee	j                     dedeee      deee	j                     ee	j                  e	j                  f   f   fd„Zˆ xZS )Ú	BeitLayerz?This corresponds to the Block class in the timm implementation.NrT   r©   Údrop_path_rater/   c                 óú  •— t         ‰| �  «        |j                  | _        d| _        t	        ||¬«      | _        t        |«      | _        t        |«      | _	        t        j                  |j                  |j                  ¬«      | _        |dkD  rt        |«      nt        j                   «       | _        t        j                  |j                  |j                  ¬«      | _        |j&                  }|dkD  ryt        j(                  |t+        j,                  |j                  «      z  d¬«      | _        t        j(                  |t+        j,                  |j                  «      z  d¬«      | _        y d\  | _        | _        y )	Nr    r®   ©Úepsr1   r   T)Úrequires_gradr–   )rB   rC   Úchunk_size_feed_forwardÚseq_len_dimrð   rô   r  Úintermediater	  r<   r	   Ú	LayerNormrX   Úlayer_norm_epsÚlayernorm_beforer?   ÚIdentityr=   Úlayernorm_afterÚlayer_scale_init_valuerV   r6   ÚonesÚlambda_1Úlambda_2)rD   rT   r©   r  Úinit_valuesrE   s        €r+   rC   zBeitLayer.__init__   s  ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ& v¸;ÔGˆŒÜ,¨VÓ4ˆÔÜ  Ó(ˆŒÜ "§¡¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÔØ9GÈ#Ò9Mœ nÔ5ÔSU×S^ÑS^ÓS`ˆŒÜ!Ÿ|™|¨F×,>Ñ,>ÀF×DYÑDYÔZˆÔà×3Ñ3ˆØ˜Š?ÜŸL™L¨´u·z±zÀ6×CUÑCUÓ7WÑ)WÐgkÔlˆDŒMÜŸL™L¨´u·z±zÀ6×CUÑCUÓ7WÑ)WÐgkÔlˆD�Mà+5Ñ(ˆDŒM˜4�=r*   rF   rÀ   rÁ   rº   r…   rÂ   c                 ó”  — | j                  | j                  |«      |||||¬«      }|d   }|dd  }	| j                  �| j                  |z  }| j                  |«      |z   }| j	                  |«      }
| j                  |
«      }
| j                  |
«      }
| j                  �| j                  |
z  }
| j                  |
«      |z   }
|
f|	z   }	|	S )N)rÁ   rº   r…   rÂ   r   r    )rô   r  r  r=   r  r  r<   r  )rD   rF   rÀ   rÁ   rº   r…   rÂ   Úself_attention_outputsrÿ   rÔ   Úlayer_outputs              r+   rI   zBeitLayer.forward  sî   € ð "&§¡Ø×!Ñ! -Ó0ØØ/Ø#9Ø%=Ø!ð "0ó "
Ðð 2°!Ñ4ÐØ(¨¨Ð,ˆð �=‰=Ð$Ø#Ÿ}™}Ð/?Ñ?Ðð Ÿ™Ð'7Ó8¸=ÑHˆð ×+Ñ+¨MÓ:ˆà×(Ñ(¨Ó6ˆØ—{‘{ <Ó0ˆà�=‰=Ð$ØŸ=™=¨<Ñ7ˆLð —~‘~ lÓ3°mÑCˆà�/ GÑ+ˆàˆr*   )Nr1   rÕ   )r%   r&   r'   r(   r!   r   rÖ   rN   rC   r6   r   r™   r   r—   r   rI   rP   rQ   s   @r+   r  r  ý  sË   ø„ ÙIñ6˜zð 6¸À¹ð 6Ð`eð 6Ðptõ 6ð* -1Ø"'Ø9=Ø).Ø+/ñ)à—|‘|ð)ð ˜EŸL™LÑ)ð)ð  ð	)ð
 !)¨¯©Ñ 6ð)ð #'ð)ð ˜U 3™ZÑ(ð)ð 
ˆu�U—\‘\Ñ" E¨%¯,©,¸¿¹Ð*DÑ$EÐEÑ	F÷)r*   r  c                   ó˜   ‡ — e Zd Zdededdfˆ fd„Z ed¬«      deeef   de	j                  fd„«       Zdd	ede	j                  fd
„Zˆ xZS )r¹   rT   r©   r/   Nc                 óò   •— t         ‰| �  «        || _        d|d   z  dz
  d|d   z  dz
  z  dz   | _        t	        j
                  t        j                  | j                  |j                  «      «      | _	        y )Nro   r   r    r   )
rB   rC   r©   Únum_relative_distancer	   rV   r6   rW   r¯   Úrelative_position_bias_tabler»   s      €r+   rC   z!BeitRelativePositionBias.__init__?  sr   ø€ Ü‰ÑÔØ&ˆÔØ&'¨+°a©.Ñ&8¸1Ñ&<ÀÀ[ÐQRÁ^ÑASÐVWÑAWÑ%XÐ[\Ñ%\ˆÔ"Ü,.¯L©LÜ�K‰K˜×2Ñ2°F×4NÑ4NÓOó-
ˆÕ)r*   é
   )Úmaxsizec                 ó  — d|d   z  dz
  d|d   z  dz
  z  dz   }|d   |d   z  }t        j                  t        j                  |d   «      t        j                  |d   «      d¬«      }t        j                  |«      }t        j                  |d«      }|dd…dd…df   |dd…ddd…f   z
  }|j                  ddd«      j                  «       }|dd…dd…dfxx   |d   dz
  z  cc<   |dd…dd…dfxx   |d   dz
  z  cc<   |dd…dd…dfxx   d|d   z  dz
  z  cc<   t        j                  |dz   fdz  |j                  ¬«      }|j                  d	«      |dd…dd…f<   |dz
  |ddd…f<   |dz
  |dd…df<   |dz
  |d
<   |S )z·
        This method creates the relative position index, modified to support arbitrary window sizes,
        as introduced in [MiDaS v3.1](https://arxiv.org/abs/2307.14460).
        ro   r   r    r   Úij)ÚindexingN)rr   r2   rn   )r   r   )
r6   ÚmeshgridÚarangeÚstackr¥   rz   rË   rW   r2   Úsum)	rD   r©   r%  Úwindow_areaÚgridÚcoordsÚcoords_flattenÚrelative_coordsÚrelative_position_indexs	            r+   Ú generate_relative_position_indexz9BeitRelativePositionBias.generate_relative_position_indexH  sµ  € ð "# [°¡^Ñ!3°aÑ!7¸AÀÈAÁÑ<NÐQRÑ<RÑ SÐVWÑ WÐð " !‘n {°1¡~Ñ5ˆÜ�~‰~œeŸl™l¨;°q©>Ó:¼E¿L¹LÈÐUVÉÓ<XÐcgÔhˆÜ—‘˜TÓ"ˆÜŸ™ v¨qÓ1ˆØ(ªªA¨t¨Ñ4°~ÂaÈÊqÀjÑ7QÑQˆØ)×1Ñ1°!°Q¸Ó:×EÑEÓGˆØšš1˜a˜Ó  K°¡N°QÑ$6Ñ6Ó Øšš1˜a˜Ó  K°¡N°QÑ$6Ñ6Ó Øšš1˜a˜Ó  A¨°A©Ñ$6¸Ñ$:Ñ:Ó Ü"'§+¡+°KÀ!±OÐ3EÈÑ3IÐQ`×QfÑQfÔ"gÐØ*9×*=Ñ*=¸bÓ*AÐ ¡ A¡B Ñ'Ø)>ÀÑ)BÐ  1¡2 Ñ&Ø)>ÀÑ)BÐ ¡ A Ñ&Ø(=ÀÑ(AÐ Ñ%Ø&Ð&r*   r…   c                 ó   — d| j                   d   z  dz
  }d| j                   d   z  dz
  }d|d   z  dz
  }d|d   z  dz
  }| j                  }| j                  }	||z  dz   }
|d|	dz
   }|j                  d||d«      j	                  dddd«      }t
        j                  j                  |t        |«      t        |«      fd¬«      }|j	                  dddd«      j                  |
dz
  d«      }t        j                  |||	dz
  d g«      }| j                  |«      }||j                  d«         }|j                  |d   |d   z  dz   |d   |d   z  dz   d«      }|j	                  ddd«      j                  «       }|rCt
        j                  j                  |j                  d«      ||fdd	¬
«      j                  d«      }|j                  d«      S )zu
        Modification of timm.models.beit.py: Attention._get_rel_pos_bias to support arbitrary window sizes.
        ro   r   r    r   Nrn   Úbilinear)rr   rs   Frq   )r©   r&  r%  ry   rz   r	   r{   r|   r   r6   r~   r6  r}   rË   rŒ   Úsqueeze)rD   r©   r…   rÆ   Ú
old_heightÚ	old_widthr‚   rƒ   Ú old_relative_position_bias_tableÚold_num_relative_distanceÚnew_num_relative_distanceÚold_sub_tableÚnew_sub_tableÚ new_relative_position_bias_tabler5  rº   s                   r+   rI   z BeitRelativePositionBias.forwarda  s-  € ð ˜×)Ñ)¨!Ñ,Ñ,¨qÑ0ˆ
Ø˜×(Ñ(¨Ñ+Ñ+¨aÑ/ˆ	à˜ Q™Ñ'¨!Ñ+ˆ
Ø˜ A™Ñ&¨Ñ*ˆ	à+/×+LÑ+LÐ(à$(×$>Ñ$>Ð!Ø$.°Ñ$:¸QÑ$>Ð!à8Ð9XÐ;TÐWXÑ;XÐYˆà%×-Ñ-¨a°¸JÈÓK×SÑSÐTUÐWXÐZ[Ð]^Ó_ˆÜŸ™×1Ñ1Ø¤¨:Ó!6¼	À)Ó8LÐ MÐT^ð 2ó 
ˆð &×-Ñ-¨a°°A°qÓ9×AÑAÐB[Ð^_ÑB_ÐacÓdˆä+0¯9©9ØÐ<Ð=VÐYZÑ=ZÐ=\Ð]Ð^ó,
Ð(ð #'×"GÑ"GÈÓ"TÐØ!AÐBY×B^ÑB^Ð_aÓBbÑ!cÐð "8×!<Ñ!<Ø˜‰N˜[¨™^Ñ+¨aÑ/°¸Q±À+ÈaÁ.Ñ1PÐSTÑ1TÐVXó"
Ðð "8×!?Ñ!?ÀÀ1ÀaÓ!H×!SÑ!SÓ!UÐá#Ü%'§]¡]×%>Ñ%>Ø&×0Ñ0°Ó3Ø Ð)ØØ#ð	 &?ó &÷
 ‰g�a‹jð #ð &×/Ñ/°Ó2Ð2r*   )FN)r%   r&   r'   r!   rÖ   rC   r   r   r—   r6   r   r6  r™   rI   rP   rQ   s   @r+   r¹   r¹   >  sm   ø„ ð
˜zð 
¸ð 
À$õ 
ñ )°Ô4ð'¸EÀ#ÀsÀ(¹Oð 'ÐPU×P\ÑP\ò 'ó 5ð'ñ0-3¸Tð -3Ð]b×]iÑ]i÷ -3r*   r¹   c                   ó²   ‡ — e Zd Zddedee   ddfˆ fd„Z	 	 	 	 	 	 ddej                  deej                     de	d	e	d
e	dee
eef      de	deeef   fd„Zˆ xZS )ÚBeitEncoderNrT   r©   r/   c                 óì  •— t         ‰| �  «        || _        |j                  | _        | j                  rt        ||¬«      | _        t        j                  d|j                  |j                  «      D �cg c]  }|j                  «       ‘Œ }}t        j                  t        |j                  «      D �cg c]!  }t        ||j                   r|nd ||   ¬«      ‘Œ# c}«      | _        d| _        y c c}w c c}w )Nr®   r   )r©   r  F)rB   rC   rT   Ú!use_shared_relative_position_biasr¸   r¹   rº   r6   Úlinspacer  Únum_hidden_layersÚitemr	   Ú
ModuleListÚranger  Úuse_relative_position_biasÚlayerÚgradient_checkpointing)rD   rT   r©   r½   ÚdprÚirE   s         €r+   rC   zBeitEncoder.__init__’  s×   ø€ Ü‰ÑÔØˆŒØ*0×*RÑ*RˆÔ'Ø×*Ò*Ü*BÀ6ÐWbÔ*cˆDÔ'ô "'§¡°°6×3HÑ3HÈ&×JbÑJbÓ!cÖd˜Aˆq�v‰v�xÐdˆÐdÜ—]‘]ô ˜v×7Ñ7Ó8öð ô ØØ/5×/PÒ/P¡ÐVZØ#& q¡6öòó	
ˆŒ
ð ',ˆÕ#ùò eùòs   Á3C,Â2&C1rF   rÀ   rÁ   Úoutput_hidden_statesr…   rÂ   Úreturn_dictc           
      óN  — |rdnd }|rdnd }	t        | j                  «      D ]Õ  \  }
}|r||fz   }| j                  rY|\  }}|| j                  j                  z  || j                  j                  z  f}| j                  |||j                  d   ¬«      }nd }|�||
   nd }| j                  r.| j                  r"| j                  |j                  ||||||«      }n |||||||«      }|d   }|sŒÍ|	|d   fz   }	Œ× |r||fz   }|st        d„ |||	fD «       «      S t        |||	¬«      S )Nr)   r    )r…   rÆ   r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrA   r)   )Ú.0Úvs     r+   ú	<genexpr>z&BeitEncoder.forward.<locals>.<genexpr>à  s   è ø€ Òm˜qÐ_`Ñ_lœÑmùs   ‚Š)Úlast_hidden_staterF   Ú
attentions)Ú	enumeraterL  r¸   rT   r^   rº   r4   rM  r.   Ú_gradient_checkpointing_funcÚ__call__rÖ   r   )rD   rF   rÀ   rÁ   rP  r…   rÂ   rQ  Úall_hidden_statesÚall_self_attentionsrO  Úlayer_modulerk   rl   r©   rº   Úlayer_head_maskÚlayer_outputss                     r+   rI   zBeitEncoder.forward§  s‡  € ñ #7™B¸DÐÙ$5™b¸4Ðä(¨¯©Ó4ò &	P‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!à×.Ò.Ø *‘�˜Ø%¨¯©×)?Ñ)?Ñ?ÀÈ$Ï+É+×J`ÑJ`ÑA`Ða�Ø)-×)DÑ)DØÐ:RÐ]j×]pÑ]pÐqrÑ]sð *Eó *Ñ&ð *.Ð&à.7Ð.C˜i¨šlÈˆOà×*Ò*¨t¯}ª}Ø $× AÑ AØ ×)Ñ)Ø!Ø#Ø%Ø*Ø,Øó!‘ñ !-Ø!Ø#Ø%Ø*Ø,Øó!�ð *¨!Ñ,ˆMâ Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ðM&	PñP  Ø 1°]Ð4DÑ DÐáÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmÜØ+Ø+Ø*ô
ð 	
r*   rA   )NFFFNT)r%   r&   r'   r!   r   rÖ   rC   r6   r   r™   r   r—   r   r   rI   rP   rQ   s   @r+   rC  rC  ‘  s­   ø„ ñ,˜zð ,¸À¹ð ,ÐSWõ ,ð0 -1Ø"'Ø%*Ø).Ø04Ø ñ>
à—|‘|ð>
ð ˜EŸL™LÑ)ð>
ð  ð	>
ð
 #ð>
ð #'ð>
ð ˜U 3¨ 8™_Ñ-ð>
ð ð>
ð 
ˆu�oÐ%Ñ	&÷>
r*   rC  c                   ó6   — e Zd ZdZeZdZdZdZdgZ	dgZ
dZd„ Zy)	ÚBeitPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Úbeitr†   Tr  z.*relative_position_index.*c                 óö  — t        |t        j                  t        j                  t        j                  f«      rm|j
                  j                  j                  d| j                  j                  ¬«       |j                  �%|j                  j                  j                  «        yyt        |t        j                  «      rz|j
                  j                  j                  d| j                  j                  ¬«       |j                  �2|j
                  j                  |j                     j                  «        yyt        |t        j                  «      rJ|j                  j                  j                  «        |j
                  j                  j                  d«       yt        |t         «      r†|j"                  j                  j                  «        |j$                  �$|j$                  j                  j                  «        |j&                  �%|j&                  j                  j                  «        yyt        |t(        «      r%|j*                  j                  j                  «        yt        |t,        «      r€|j.                  �s|j.                  j                  j                  | j                  j0                  «       |j2                  j                  j                  | j                  j0                  «       yyy)zInitialize the weightsr1   )ÚmeanÚstdNg      ð?)r_   r	   r³   r¡   ÚConvTranspose2dÚweightÚdataÚnormal_rT   Úinitializer_ranger­   Úzero_Ú	EmbeddingÚpadding_idxr  Úfill_rS   rY   r[   rf   r¹   r&  r  r  r  r  )rD   Úmodules     r+   Ú_init_weightsz!BeitPreTrainedModel._init_weightsö  s  € ä�fœrŸy™y¬"¯)©)´R×5GÑ5GÐHÔIð �M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô-Ø�M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ×!Ñ!Ð-Ø—‘×"Ñ" 6×#5Ñ#5Ñ6×<Ñ<Õ>ð .ä˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)Ü˜¤Ô/Ø×Ñ×!Ñ!×'Ñ'Ô)Ø× Ñ Ð,Ø×!Ñ!×&Ñ&×,Ñ,Ô.Ø×)Ñ)Ð5Ø×*Ñ*×/Ñ/×5Ñ5Õ7ð 6ä˜Ô 8Ô9Ø×/Ñ/×4Ñ4×:Ñ:Õ<Ü˜¤	Ô*Ø�‰Ð*Ø—‘×$Ñ$×*Ñ*¨4¯;©;×+MÑ+MÔNØ—‘×$Ñ$×*Ñ*¨4¯;©;×+MÑ+MÕNð +ð +r*   N)r%   r&   r'   r(   r!   Úconfig_classÚbase_model_prefixÚmain_input_nameÚsupports_gradient_checkpointingÚ_no_split_modulesÚ"_keys_to_ignore_on_load_unexpectedÚ_supports_sdparq  r)   r*   r+   rb  rb  è  s;   „ ñð
 €LØÐØ$€OØ&*Ð#Ø$˜ÐØ*HÐ)IÐ&Ø€NóOr*   rb  aF  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass. Use it
    as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`BeitConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
aß  
    Args:
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See
            [`BeitImageProcessor.__call__`] for details.

        head_mask (`torch.FloatTensor` of shape `(num_heads,)` or `(num_layers, num_heads)`, *optional*):
            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:

            - 1 indicates the head is **not masked**,
            - 0 indicates the head is **masked**.

        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        interpolate_pos_encoding (`bool`, *optional*, defaults to `False`):
            Whether to interpolate the pre-trained position encodings.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
z^The bare Beit Model transformer outputting raw hidden-states without any specific head on top.c                   ó
  ‡ — e Zd Zddededdfˆ fd„Zd„ Zd„ Z ee	«       e
eeede¬	«      	 	 	 	 	 	 dd
ej                   deej$                     deej                      dee   dee   dedee   deeef   fd„«       «       Zˆ xZS )Ú	BeitModelrT   Úadd_pooling_layerr/   Nc                 óš  •— t         ‰| �  |«       || _        t        |«      | _        t        || j                  j                  j                  ¬«      | _        |j                  rt        j                  «       n*t        j                  |j                  |j                  ¬«      | _        |rt!        |«      nd | _        | j%                  «        y )Nr®   r  )rB   rC   rT   rS   rj   rC  r]   r    ÚencoderÚuse_mean_poolingr	   r  r  rX   r  Ú	layernormÚ
BeitPoolerÚpoolerÚ	post_init)rD   rT   r{  rE   s      €r+   rC   zBeitModel.__init__<  s“   ø€ Ü‰Ñ˜Ô ØˆŒä(¨Ó0ˆŒÜ" 6°t·±×7WÑ7W×7cÑ7cÔdˆŒð $×4Ò4ŒB�K‰KŒM¼"¿,¹,Àv×GYÑGYÐ_e×_tÑ_tÔ:uð 	Œñ ->”j Ô(À4ˆŒð 	�‰Õr*   c                 ó.   — | j                   j                  S rA   ©rj   r]   rL   s    r+   Úget_input_embeddingszBeitModel.get_input_embeddingsK  ó   € Ø�‰×/Ñ/Ð/r*   c                 ó˜   — |j                  «       D ]7  \  }}| j                  j                  |   j                  j	                  |«       Œ9 y)z�
        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
        class PreTrainedModel
        N)Úitemsr}  rL  rô   rü   )rD   Úheads_to_prunerL  rú   s       r+   Ú_prune_headszBeitModel._prune_headsN  sE   € ð
 +×0Ñ0Ó2ò 	C‰LˆE�5Ø�L‰L×Ñ˜uÑ%×/Ñ/×;Ñ;¸EÕBñ	Cr*   Úvision)Ú
checkpointÚoutput_typerr  ÚmodalityÚexpected_outputr†   r‡   rÀ   rÁ   rP  r…   rQ  c           	      ó:  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }| j	                  || j                   j
                  «      }| j                  ||¬«      \  }}	|j                  dd }
| j                  |||||
||¬«      }|d   }| j                  |«      }| j                  �| j                  |«      nd}|s|�||fn|f}||dd z   S t        |||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).
        N)r‡   ro   )rÀ   rÁ   rP  rÂ   rQ  r…   r   r    )rW  Úpooler_outputrF   rX  )rT   rÁ   rP  Úuse_return_dictÚget_head_maskrG  rj   r4   r}  r  r�  r$   rF   rX  )rD   r†   r‡   rÀ   rÁ   rP  r…   rQ  Úembedding_outputrŽ   rÂ   Úencoder_outputsÚsequence_outputÚpooled_outputÚhead_outputss                  r+   rI   zBeitModel.forwardV  sE  € ð, 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆð ×&Ñ& y°$·+±+×2OÑ2OÓPˆ	à"Ÿo™o¨lÈO˜oÓ\ÑÐ˜!Ø!×'Ñ'¨¨Ð+ˆ
àŸ,™,ØØØ/Ø!5Ø!Ø#Ø%=ð 'ó 
ˆð *¨!Ñ,ˆØŸ.™.¨Ó9ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆáØ?LÐ?X˜O¨]Ñ;Ð_nÐ^pˆLØ /°!°"Ð"5Ñ5Ð5ä)Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r*   )T)NNNNFN)r%   r&   r'   r!   r™   rC   r…  rŠ  r   ÚBEIT_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCr$   Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr6   r   r   r˜   r   rÖ   rI   rP   rQ   s   @r+   rz  rz  7  sð   ø„ ñ
˜zð ¸dð Èdõ ò0òCñ +Ð+@ÓAÙØ&Ø.Ø$ØØ.ôð 7;Ø,0Ø,0Ø/3Ø).Ø&*ñ4
à—l‘lð4
ð " %×"2Ñ"2Ñ3ð4
ð ˜EŸL™LÑ)ð	4
ð
 $ D™>ð4
ð ' t™nð4
ð #'ð4
ð ˜d‘^ð4
ð 
ˆuÐ0Ð0Ñ	1ò4
óó Bô4
r*   rz  c                   ó`   ‡ — e Zd Zdeddfˆ fd„Zdej                  dej                  fd„Zˆ xZS )r€  rT   r/   Nc                 óª   •— t         ‰| �  «        |j                  r1t        j                  |j
                  |j                  ¬«      | _        y d | _        y )Nr  )rB   rC   r~  r	   r  rX   r  r  rç   s     €r+   rC   zBeitPooler.__init__–  sA   ø€ Ü‰ÑÔàKQ×KbÒKbŒB�L‰L˜×+Ñ+°×1FÑ1FÔGð 	�Øhlð 	�r*   rF   c                 ó�   — | j                   �0|d d …dd …d d …f   }| j                  |j                  d«      «      }|S |d d …df   }|S )Nr    r   )r  re  )rD   rF   Úpatch_tokensr—  s       r+   rI   zBeitPooler.forwardœ  sU   € Ø�>‰>Ð%à(ª¨A©B²¨Ñ2ˆLØ ŸN™N¨<×+<Ñ+<¸QÓ+?Ó@ˆMð
 Ðð *ª!¨Q¨$Ñ/ˆMàÐr*   r  rQ   s   @r+   r€  r€  •  s1   ø„ ð
˜zð 
¨dõ 
ð	 U§\¡\ð 	°e·l±l÷ 	r*   r€  aÊ  Beit Model transformer with a 'language' modeling head on top. BEiT does masked image modeling by predicting
    visual tokens of a Vector-Quantize Variational Autoencoder (VQ-VAE), whereas other vision models like ViT and DeiT
    predict RGB pixel values. As a result, this class is incompatible with [`AutoModelForMaskedImageModeling`], so you
    will need to use [`BeitForMaskedImageModeling`] directly if you wish to do masked image modeling with BEiT.c                   ó  ‡ — e Zd Zdeddfˆ fd„Z ee«       eee	¬«      	 	 	 	 	 	 	 	 dde
ej                     de
ej                     de
ej                     d	e
ej                     d
e
e   de
e   dede
e   deeef   fd„«       «       Zˆ xZS )ÚBeitForMaskedImageModelingrT   r/   Nc                 óH  •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        j                  |j                  |j                  ¬«      | _	        t        j                  |j                  |j                  «      | _        | j                  «        y )NF©r{  r  )rB   rC   Ú
num_labelsrz  rc  r	   r  rX   r  r  r³   Ú
vocab_sizeÚlm_headr‚  rç   s     €r+   rC   z#BeitForMaskedImageModeling.__init__°  su   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ˜f¸Ô>ˆŒ	ô Ÿ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÓGˆŒð 	�‰Õr*   ©r�  rr  r†   r‡   rÀ   ÚlabelsrÁ   rP  r…   rQ  c	           	      ój  — |�|n| j                   j                  }| j                  |||||||¬«      }	|	d   }
| j                  |
«      }
| j	                  |
dd…dd…f   «      }d}|�t        «       } |||   |«      }|s|f|	dd z   }|�|f|z   S |S t        |||	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).

        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).

        Returns:

        Examples:

        ```python
        >>> from transformers import AutoImageProcessor, BeitForMaskedImageModeling
        >>> import torch
        >>> from PIL import Image
        >>> import requests

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> image_processor = AutoImageProcessor.from_pretrained("microsoft/beit-base-patch16-224-pt22k")
        >>> model = BeitForMaskedImageModeling.from_pretrained("microsoft/beit-base-patch16-224-pt22k")

        >>> 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, logits = outputs.loss, outputs.logits
        >>> list(logits.shape)
        [1, 196, 8192]
        ```N)r‡   rÀ   rÁ   rP  r…   rQ  r   r    ©ÚlossÚlogitsrF   rX  )	rT   r’  rc  r  r§  r   r   rF   rX  )rD   r†   r‡   rÀ   r©  rÁ   rP  r…   rQ  rÔ   r–  Úprediction_scoresÚmasked_lm_lossÚloss_fctr<   s                  r+   rI   z"BeitForMaskedImageModeling.forward½  sï   € ð` &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—)‘)ØØ+ØØ/Ø!5Ø%=Ø#ð ó 
ˆð " !™*ˆØŸ.™.¨Ó9ˆØ ŸL™L¨º¸A¹B¸Ñ)?Ó@ÐàˆØÐÜ'Ó)ˆHÙ%Ð&7¸Ñ&HÈ&ÓQˆNáØ'Ð)¨G°A°B¨KÑ7ˆFØ3AÐ3M�^Ð%¨Ñ.ÐYÐSYÐYäØØ$Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
r*   )NNNNNNFN)r%   r&   r'   r!   rC   r   r™  r   r   r›  r   r6   r   r˜   r™   r   rÖ   rI   rP   rQ   s   @r+   r¢  r¢  ¨  sú   ø„ ð˜zð ¨dõ ñ +Ð+@ÓAÙ¨>ÈÔXð 04Ø6:Ø,0Ø)-Ø,0Ø/3Ø).Ø&*ñL
à˜uŸ|™|Ñ,ðL
ð " %×"2Ñ"2Ñ3ðL
ð ˜EŸL™LÑ)ð	L
ð
 ˜Ÿ™Ñ&ðL
ð $ D™>ðL
ð ' t™nðL
ð #'ðL
ð ˜d‘^ðL
ð 
ˆu�nÐ$Ñ	%òL
ó Yó BôL
r*   r¢  z¶
    Beit Model transformer with an image classification head on top (a linear layer on top of the average of the final
    hidden states of the patch tokens) e.g. for ImageNet.
    c                   óþ   ‡ — e Zd Zdeddfˆ fd„Z ee«       eee	e
e¬«      	 	 	 	 	 	 	 ddeej                     deej                     deej                     d	ee   d
ee   dedee   deee	f   fd„«       «       Zˆ xZS )ÚBeitForImageClassificationrT   r/   Nc                 ó.  •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        |j                  dkD  r*t        j                  |j                  |j                  «      nt        j                  «       | _	        | j                  «        y )NTr¤  r   )rB   rC   r¥  rz  rc  r	   r³   rX   r  Ú
classifierr‚  rç   s     €r+   rC   z#BeitForImageClassification.__init__  ss   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ˜f¸Ô=ˆŒ	ð OU×N_ÑN_ÐbcÒNcœ"Ÿ)™) F×$6Ñ$6¸×8IÑ8IÔJÔik×itÑitÓivˆŒð 	�‰Õr*   )rŒ  r�  rr  r�  r†   rÀ   r©  rÁ   rP  r…   rQ  c                 ó4  — |�|n| j                   j                  }| j                  ||||||¬«      }|r|j                  n|d   }	| j	                  |	«      }
d}|��‡| j                   j
                  €�| j                  dk(  rd| j                   _        nl| j                  dkD  rL|j                  t        j                  k(  s|j                  t        j                  k(  rd| j                   _        nd| j                   _        | j                   j
                  dk(  rIt        «       }| j                  dk(  r& ||
j                  «       |j                  «       «      }nŒ ||
|«      }n‚| j                   j
                  dk(  r=t        «       } ||
j                  d| j                  «      |j                  d«      «      }n,| j                   j
                  dk(  rt        «       } ||
|«      }|s|
f|dd z   }|�|f|z   S |S t!        ||
|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).
        N©rÀ   rÁ   rP  r…   rQ  r    Ú
regressionÚsingle_label_classificationÚmulti_label_classificationrn   ro   r«  )rT   r’  rc  r‘  r´  Úproblem_typer¥  r2   r6   Úlongr—   r   r9  r   r}   r
   r   rF   rX  )rD   r†   rÀ   r©  rÁ   rP  r…   rQ  rÔ   r—  r­  r¬  r°  r<   s                 r+   rI   z"BeitForImageClassification.forward"  sÛ  € ð. &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆØ—)‘)ØØØ/Ø!5Ø%=Ø#ð ó 
ˆñ 2=˜×-Ò-À'È!Á*ˆà—‘ Ó/ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? aÒ'Ø/;�D—K‘KÕ,Ø—_‘_ qÒ(¨f¯l©l¼e¿j¹jÒ.HÈFÏLÉLÔ\a×\eÑ\eÒLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—?‘? aÒ'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�ÙØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r*   ©NNNNNFN)r%   r&   r'   r!   rC   r   r™  r   Ú_IMAGE_CLASS_CHECKPOINTr   r›  Ú_IMAGE_CLASS_EXPECTED_OUTPUTr   r6   r   r™   r   rÖ   rI   rP   rQ   s   @r+   r²  r²    sá   ø„ ð
˜zð 
¨dõ 
ñ +Ð+@ÓAÙØ*Ø)Ø$Ø4ô	ð 04Ø,0Ø)-Ø,0Ø/3Ø).Ø&*ñ=
à˜uŸ|™|Ñ,ð=
ð ˜EŸL™LÑ)ð=
ð ˜Ÿ™Ñ&ð	=
ð
 $ D™>ð=
ð ' t™nð=
ð #'ð=
ð ˜d‘^ð=
ð 
ˆuÐ+Ð+Ñ	,ò=
óó Bô=
r*   r²  c                   ó¾   ‡ — e Zd ZdZ	 	 	 ddededeeeeef   f   deeeeef   ef   dedeeeeef   f   dd	fˆ fd
„Z	de
j                  de
j                  fd„Zˆ xZS )ÚBeitConvModuleaD  
    A convolutional block that bundles conv/norm/activation layers. This block simplifies the usage of convolution
    layers, which are commonly used with a norm layer (e.g., BatchNorm) and activation layer (e.g., ReLU).

    Based on OpenMMLab's implementation, found in https://github.com/open-mmlab/mmsegmentation.
    Úin_channelsÚout_channelsr�   Úpaddingr­   Údilationr/   Nc                 óÈ   •— t         ‰| �  «        t        j                  ||||||¬«      | _        t        j
                  |«      | _        t        j                  «       | _        y )N)rÁ  rÂ  r�   rÃ  r­   rÄ  )	rB   rC   r	   r¡   ÚconvÚBatchNorm2dÚbnÚReLUÚ
activation)rD   rÁ  rÂ  r�   rÃ  r­   rÄ  rE   s          €r+   rC   zBeitConvModule.__init__q  sQ   ø€ ô 	‰ÑÔÜ—I‘IØ#Ø%Ø#ØØØô
ˆŒ	ô —.‘. Ó.ˆŒÜŸ'™'›)ˆ�r*   r,   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rA   )rÆ  rÈ  rÊ  )rD   r,   r<   s      r+   rI   zBeitConvModule.forward†  s0   € Ø—‘˜5Ó!ˆØ—‘˜“ˆØ—‘ Ó(ˆàˆr*   )r   Fr    )r%   r&   r'   r(   r—   r   r   rO   r™   rC   r6   r   rI   rP   rQ   s   @r+   rÀ  rÀ  i  s¯   ø„ ñð 56ØØ01ñ$àð$ð ð$ð ˜3  c¨3 h¡Ð/Ñ0ð	$ð
 �s˜E # s (™O¨SÐ0Ñ1ð$ð ð$ð ˜˜U 3¨ 8™_Ð,Ñ-ð$ð 
õ$ð*˜UŸ\™\ð ¨e¯l©l÷ r*   rÀ  c                   óh   ‡ — e Zd Zdedededdfˆ fd„Zdej                  dej                  fd„Zˆ xZS )	ÚBeitPyramidPoolingBlockÚ
pool_scalerÁ  Úchannelsr/   Nc                 óâ   •— t         ‰| �  «        t        j                  |«      t	        ||d¬«      g| _        t        | j
                  «      D ]   \  }}| j                  t        |«      |«       Œ" y )Nr    ©r�   )	rB   rC   r	   ÚAdaptiveAvgPool2drÀ  ÚlayersrY  Ú
add_modulerO   )rD   rÎ  rÁ  rÏ  rO  rL  rE   s         €r+   rC   z BeitPyramidPoolingBlock.__init__�  sa   ø€ Ü‰ÑÔä× Ñ  Ó,Ü˜;¨¸aÔ@ð
ˆŒô " $§+¡+Ó.ò 	+‰HˆAˆuØ�O‰OœC ›F EÕ*ñ	+r*   r,   c                 ó<   — |}| j                   D ]
  } ||«      }Œ |S rA   )rÓ  )rD   r,   Úhidden_staterL  s       r+   rI   zBeitPyramidPoolingBlock.forward˜  s*   € ØˆØ—[‘[ò 	/ˆEÙ  Ó.‰Lð	/àÐr*   )	r%   r&   r'   r—   rC   r6   r   rI   rP   rQ   s   @r+   rÍ  rÍ  Ž  s?   ø„ ð+ 3ð +°Sð +ÀCð +ÈDõ +ð˜UŸ\™\ð ¨e¯l©l÷ r*   rÍ  c            
       ó€   ‡ — e Zd ZdZdeedf   dedededdf
ˆ fd	„Zd
ej                  de
ej                     fd„Zˆ xZS )ÚBeitPyramidPoolingModulea²  
    Pyramid Pooling Module (PPM) used in PSPNet.

    Args:
        pool_scales (tuple[int]): Pooling scales used in Pooling Pyramid
            Module.
        in_channels (int): Input channels.
        channels (int): Channels after modules, before conv_seg.
        align_corners (bool): align_corners argument of F.interpolate.

    Based on OpenMMLab's implementation, found in https://github.com/open-mmlab/mmsegmentation.
    Úpool_scales.rÁ  rÏ  rt   r/   Nc                 ó  •— t         ‰| �  «        || _        || _        || _        || _        g | _        t        |«      D ]I  \  }}t        |||¬«      }| j                  j                  |«       | j                  t        |«      |«       ŒK y )N)rÎ  rÁ  rÏ  )rB   rC   rÙ  rt   rÁ  rÏ  ÚblocksrY  rÍ  ÚappendrÔ  rO   )	rD   rÙ  rÁ  rÏ  rt   rO  rÎ  ÚblockrE   s	           €r+   rC   z!BeitPyramidPoolingModule.__init__­  s   ø€ Ü‰ÑÔØ&ˆÔØ*ˆÔØ&ˆÔØ ˆŒØˆŒÜ& {Ó3ò 	+‰MˆAˆzÜ+°zÈ{ÐemÔnˆEØ�K‰K×Ñ˜uÔ%Ø�O‰OœC ›F EÕ*ñ	+r*   r½   c                 óÚ   — g }| j                   D ]Y  } ||«      }t        j                  j                  ||j	                  «       dd  d| j
                  ¬«      }|j                  |«       Œ[ |S )Nro   r8  rq   )rÛ  r	   r{   r|   rr   rt   rÜ  )rD   r½   Úppm_outsÚppmÚppm_outÚupsampled_ppm_outs         r+   rI   z BeitPyramidPoolingModule.forward¹  sn   € ØˆØ—;‘;ò 	/ˆCÙ˜!“fˆGÜ "§¡× 9Ñ 9Ø˜aŸf™f›h q r˜l°È4×K]ÑK]ð !:ó !Ðð �O‰OÐ-Õ.ð	/ð ˆr*   )r%   r&   r'   r(   r   r—   r™   rC   r6   r   r   rI   rP   rQ   s   @r+   rØ  rØ  Ÿ  s[   ø„ ñð
+ E¨#¨s¨(¡Oð 
+À#ð 
+ÐQTð 
+Ðeið 
+Ðnrõ 
+ð˜Ÿ™ð ¨$¨u¯|©|Ñ*<÷ r*   rØ  c                   ój   ‡ — e Zd ZdZdeddfˆ fd„Zd„ Zdej                  dej                  fd„Z	ˆ xZ
S )	ÚBeitUperHeadzò
    Unified Perceptual Parsing for Scene Understanding. This head is the implementation of
    [UPerNet](https://arxiv.org/abs/1807.10221).

    Based on OpenMMLab's implementation, found in https://github.com/open-mmlab/mmsegmentation.
    rT   r/   Nc                 ó  •— t         ‰| �  «        |j                  | _        |j                  gdz  | _        |j                  | _        d| _        t        j                  | j
                  |j                  d¬«      | _
        t        | j                  | j                  d   | j
                  | j                  ¬«      | _        t        | j                  d   t        | j                  «      | j
                  z  z   | j
                  dd¬«      | _        t        j                   «       | _        t        j                   «       | _        | j                  d d D ]s  }t        || j
                  d¬«      }t        | j
                  | j
                  dd¬«      }| j"                  j'                  |«       | j$                  j'                  |«       Œu t        t        | j                  «      | j
                  z  | j
                  dd¬«      | _        y )	Né   Fr    rÑ  rn   )rt   r   ©r�   rÃ  )rB   rC   rÙ  rX   rÁ  rÏ  rt   r	   r¡   r¥  r´  rØ  Úpsp_modulesrÀ  rø   Ú
bottleneckrI  Úlateral_convsÚ	fpn_convsrÜ  Úfpn_bottleneck)rD   rT   rÁ  Úl_convÚfpn_convrE   s        €r+   rC   zBeitUperHead.__init__Ì  sœ  ø€ Ü‰ÑÔà!×-Ñ-ˆÔØ"×.Ñ.Ð/°!Ñ3ˆÔØ×*Ñ*ˆŒØ"ˆÔÜŸ)™) D§M¡M°6×3DÑ3DÐRSÔTˆŒô 4Ø×ÑØ×Ñ˜RÑ Ø�M‰MØ×,Ñ,ô	
ˆÔô )Ø×Ñ˜RÑ ¤3 t×'7Ñ'7Ó#8¸4¿=¹=Ñ#HÑHØ�M‰MØØô	
ˆŒô  Ÿ]™]›_ˆÔÜŸ™›ˆŒØ×+Ñ+¨C¨RÐ0ò 	,ˆKÜ# K°·±ÈAÔNˆFÜ% d§m¡m°T·]±]ÐPQÐ[\Ô]ˆHØ×Ñ×%Ñ% fÔ-Ø�N‰N×!Ñ! (Õ+ð		,ô -Ü�× Ñ Ó! D§M¡MÑ1Ø�M‰MØØô	
ˆÕr*   c                 ó¦   — |d   }|g}|j                  | j                  |«      «       t        j                  |d¬«      }| j	                  |«      }|S )Nrn   r    ru   )Úextendrè  r6   r~   ré  )rD   Úinputsr½   Úpsp_outsr<   s        r+   Úpsp_forwardzBeitUperHead.psp_forwardò  sL   € Ø�2‰JˆØ�3ˆØ�‰˜×(Ñ(¨Ó+Ô,Ü—9‘9˜X¨1Ô-ˆØ—‘ Ó*ˆàˆr*   Úencoder_hidden_statesc                 óP  — t        | j                  «      D ��cg c]  \  }} |||   «      ‘Œ }}}|j                  | j                  |«      «       t	        |«      }t        |dz
  dd«      D ]V  }||dz
     j                  dd  }||dz
     t        j                  j                  ||   |d| j                  ¬«      z   ||dz
  <   ŒX t        |dz
  «      D �cg c]  } | j                  |   ||   «      ‘Œ }}|j                  |d   «       t        |dz
  dd«      D ]E  }t        j                  j                  ||   |d   j                  dd  d| j                  ¬«      ||<   ŒG t        j                  |d¬«      }| j                  |«      }| j                  |«      }|S c c}}w c c}w )Nr    r   rn   ro   r8  rq   ru   )rY  rê  rÜ  ró  rø   rJ  r4   r	   r{   r|   rt   rë  r6   r~   rì  r´  )	rD   rô  rO  Úlateral_convÚlateralsÚused_backbone_levelsÚ
prev_shapeÚfpn_outsr<   s	            r+   rI   zBeitUperHead.forwardû  s¸  € äR[Ð\`×\nÑ\nÓRo×p¹¸qÀ,‘LÐ!6°qÑ!9Õ:ÐpˆÑpà�‰˜×(Ñ(Ð)>Ó?Ô@ô  # 8›}ÐÜÐ+¨aÑ/°°BÓ7ò 	ˆAØ! ! a¡%™×.Ñ.¨q¨rÐ2ˆJØ& q¨1¡u™o´·±×0IÑ0IØ˜‘ *°:ÈT×M_ÑM_ð 1Jó 1ñ ˆH�Q˜‘UŠOð	ô =BÐBVÐYZÑBZÓ<[Ö\°qÐ%�D—N‘N 1Ñ% h¨q¡kÕ2Ð\ˆÐ\à�‰˜ ™Ô%äÐ+¨aÑ/°°BÓ7ò 	ˆAÜŸ-™-×3Ñ3Ø˜‘ (¨1¡+×"3Ñ"3°A°BÐ"7¸jÐX\×XjÑXjð 4ó ˆH�QŠKð	ô —9‘9˜X¨1Ô-ˆØ×$Ñ$ XÓ.ˆØ—‘ Ó(ˆàˆùó3 qùò ]s   ™FÃF#)r%   r&   r'   r(   r!   rC   ró  r6   r   rI   rP   rQ   s   @r+   rä  rä  Ä  s<   ø„ ñð$
˜zð $
¨dõ $
òLð¨U¯\©\ð ¸e¿l¹l÷ r*   rä  c                   óˆ   ‡ — e Zd ZdZ	 ddedededeeeeef   f   ddf
ˆ fd„Zd	e	j                  de	j                  fd
„Zˆ xZS )ÚBeitFCNHeadaÓ  
    Fully Convolution Networks for Semantic Segmentation. This head is implemented of
    [FCNNet](https://arxiv.org/abs/1411.4038>).

    Args:
        config (BeitConfig): Configuration.
        in_channels
        kernel_size (int): The kernel size for convs in the head. Default: 3.
        dilation (int): The dilation rate for convs in the head. Default: 1.


    Based on OpenMMLab's implementation, found in https://github.com/open-mmlab/mmsegmentation.
    rT   Úin_indexr�   rÄ  r/   Nc           
      ó<  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        || _
        |dz  |z  }g }|j                  t        | j                  | j
                  |||¬«      «       t        | j                  dz
  «      D ]5  }|j                  t        | j
                  | j
                  |||¬«      «       Œ7 | j                  dk(  rt        j                  «       | _        nt        j"                  |Ž | _        | j                  r8t        | j                  | j
                  z   | j
                  ||dz  ¬«      | _        t        j&                  | j
                  |j(                  d¬«      | _        y )Nro   )r�   rÃ  rÄ  r    r   rç  rÑ  )rB   rC   rX   rÁ  Úauxiliary_channelsrÏ  Úauxiliary_num_convsÚ	num_convsÚauxiliary_concat_inputÚconcat_inputrý  rÜ  rÀ  rJ  r	   r  ÚconvsÚ
SequentialÚconv_catr¡   r¥  r´  )	rD   rT   rý  r�   rÄ  Úconv_paddingr  rO  rE   s	           €r+   rC   zBeitFCNHead.__init__(  sX  ø€ ô 	‰ÑÔØ!×-Ñ-ˆÔØ×1Ñ1ˆŒØ×3Ñ3ˆŒØ"×9Ñ9ˆÔØ ˆŒà# qÑ(¨HÑ4ˆØˆØ�‰ÜØ× Ñ  $§-¡-¸[ÐR^Ðiqôô	
ô
 �t—~‘~¨Ñ)Ó*ò 	ˆAØ�L‰LÜØ—M‘M 4§=¡=¸kÐS_Ðjrôõð	ð �>‰>˜QÒÜŸ™›ˆD�JäŸ™¨Ð.ˆDŒJØ×ÒÜ*Ø× Ñ  4§=¡=Ñ0°$·-±-È[ÐbmÐqrÑbrôˆDŒMô Ÿ)™) D§M¡M°6×3DÑ3DÐRSÔTˆ�r*   rô  c                 óÐ   — || j                      }| j                  |«      }| j                  r(| j                  t	        j
                  ||gd¬«      «      }| j                  |«      }|S )Nr    ru   )rý  r  r  r  r6   r~   r´  )rD   rô  rF   r<   s       r+   rI   zBeitFCNHead.forwardJ  sX   € à-¨d¯m©mÑ<ˆØ—‘˜MÓ*ˆØ×ÒØ—]‘]¤5§9¡9¨m¸VÐ-DÈ!Ô#LÓMˆFØ—‘ Ó(ˆØˆr*   )ro   r   r    )r%   r&   r'   r(   r!   r—   r   r   rC   r6   r   rI   rP   rQ   s   @r+   rü  rü    sv   ø„ ñð tuñ UØ ð UØ,/ð UØBEð UØUZÐ[^Ð`eÐfiÐknÐfnÑ`oÐ[oÑUpð Uà	õ UðD¨U¯\©\ð ¸e¿l¹l÷ r*   rü  zf
    Beit Model transformer with a semantic segmentation head on top e.g. for ADE20k, CityScapes.
    c                   ó   ‡ — e Zd Zdeddfˆ fd„Zd„ Z ee«       ee	e
¬«      	 	 	 	 	 	 	 ddeej                     deej                     d	eej                     d
ee   dee   dedee   deee	f   fd„«       «       Zˆ xZS )ÚBeitForSemanticSegmentationrT   r/   Nc                 óx  •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        | j                  j                  «      dk7  rt        d«      ‚t        j                  t        j                  |j                  |j                  dd¬«      t        j                  |j                  «      t        j                  «       t        j                  |j                  |j                  dd¬«      «      | _        t        j                  t        j                  |j                  |j                  dd¬«      «      | _        t        j"                  «       | _        t        j&                  dd¬«      | _        t+        |«      | _        |j.                  rt1        |«      nd | _        | j5                  «        y )NFr¤  ræ  zÇBeitForSemanticSegmentation requires config.out_indices to be a list of 4 integers, specifying which features to use from the backbone. One can use [3, 5, 7, 11] in case of a base-sized architecture.ro   rœ   )rB   rC   r¥  rz  rc  rø   rT   Úout_indicesr¤   r	   r  rg  rX   rÇ  ÚGELUÚfpn1Úfpn2r  Úfpn3Ú	MaxPool2dÚfpn4rä  Údecode_headÚuse_auxiliary_headrü  Úauxiliary_headr‚  rç   s     €r+   rC   z$BeitForSemanticSegmentation.__init__[  sO  ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ˜f¸Ô>ˆŒ	ô ˆt�{‰{×&Ñ&Ó'¨1Ò,Üð-óð ô
 —M‘MÜ×Ñ˜v×1Ñ1°6×3EÑ3EÐSTÐ]^Ô_Ü�N‰N˜6×-Ñ-Ó.Ü�G‰G‹IÜ×Ñ˜v×1Ñ1°6×3EÑ3EÐSTÐ]^Ô_ó	
ˆŒ	ô —M‘MÜ×Ñ˜v×1Ñ1°6×3EÑ3EÐSTÐ]^Ô_ó
ˆŒ	ô —K‘K“MˆŒ	Ü—L‘L¨Q°qÔ9ˆŒ	ô (¨Ó/ˆÔØ5;×5NÒ5Nœk¨&Ô1ÐTXˆÔð 	�‰Õr*   c                 ón  — t         j                  j                  ||j                  dd  dd¬«      }|�0t         j                  j                  ||j                  dd  dd¬«      }t	        | j
                  j                  ¬«      } |||«      }|}|�% ||«      }	|| j
                  j                  |	z  z  }|S )NrÄ   r8  Frq   )Úignore_index)r	   r{   r|   r4   r   rT   Úsemantic_loss_ignore_indexÚauxiliary_loss_weight)
rD   r­  Úauxiliary_logitsr©  Úupsampled_logitsÚupsampled_auxiliary_logitsr°  Ú	main_lossr¬  Úauxiliary_losss
             r+   Úcompute_lossz(BeitForSemanticSegmentation.compute_loss{  sÁ   € äŸ=™=×4Ñ4Ø˜Ÿ™ b cÐ*°È5ð 5ó 
Ðð Ð'Ü)+¯©×)BÑ)BØ  v§|¡|°B°CÐ'8¸zÐY^ð *Có *Ð&ô $°·±×1WÑ1WÔXˆÙÐ-¨vÓ6ˆ	ØˆØÐ'Ù%Ð&@À&ÓIˆNØ�D—K‘K×5Ñ5¸ÑFÑFˆDàˆr*   r¨  r†   rÀ   r©  rÁ   rP  r…   rQ  c           	      óT  — |�|n| j                   j                  }|�|n| j                   j                  }|�$| j                   j                  dk(  rt	        d«      ‚| j                  |||d||¬«      }|r|j                  n|d   }	t        |	«      D �
�cg c]#  \  }
}|
dz   | j                   j                  v sŒ"|‘Œ% }}
}|j                  d   }| j                   j                  | j                   j                  z  }|D �cg c]3  }|dd…dd…dd…f   j                  ddd«      j                  |d||«      ‘Œ5 }}| j                  | j                  | j                   | j"                  g}t%        t'        |«      «      D ]  } ||   ||   «      ||<   Œ | j)                  |«      }d}| j*                  �| j+                  |«      }d}|�| j-                  |||«      }|s|r
|f|dd z   }n	|f|dd z   }|�|f|z   S |S t/        |||r|j                  nd|j0                  ¬	«      S c c}}
w c c}w )
aV  
        labels (`torch.LongTensor` of shape `(batch_size, height, width)`, *optional*):
            Ground truth semantic segmentation maps for computing the loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels > 1`, a classification loss is computed (Cross-Entropy).

        Returns:

        Examples:

        ```python
        >>> from transformers import AutoImageProcessor, BeitForSemanticSegmentation
        >>> from PIL import Image
        >>> import requests

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> image_processor = AutoImageProcessor.from_pretrained("microsoft/beit-base-finetuned-ade-640-640")
        >>> model = BeitForSemanticSegmentation.from_pretrained("microsoft/beit-base-finetuned-ade-640-640")

        >>> inputs = image_processor(images=image, return_tensors="pt")
        >>> outputs = model(**inputs)
        >>> # logits are of shape (batch_size, num_labels, height, width)
        >>> logits = outputs.logits
        ```Nr    z/The number of labels should be greater than oneTr¶  r   ro   rn   r«  )rT   r’  rP  r¥  r¤   rc  rF   rY  r  r4   r`   r^   rz   ry   r  r  r  r  rJ  rø   r  r  r  r   rX  )rD   r†   rÀ   r©  rÁ   rP  r…   rQ  rÔ   rô  ÚidxÚfeatureÚfeaturesr‘   Úpatch_resolutionr½   ÚopsrO  r­  r  r¬  r<   s                         r+   rI   z#BeitForSemanticSegmentation.forwardŽ  sb  € ðJ &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð Ð $§+¡+×"8Ñ"8¸AÒ"=ÜÐNÓOÐOà—)‘)ØØØ/Ø!%Ø%=Ø#ð ó 
ˆñ :E × 5Ò 5È'ÐRSÉ*Ðô 1:Ð:OÓ0P×w¡  WÐTWÐZ[ÑT[Ð_c×_jÑ_j×_vÑ_vÒTv’GÐwˆÑwØ!×'Ñ'¨Ñ*ˆ
ØŸ;™;×1Ñ1°T·[±[×5KÑ5KÑKÐànvö
ØijˆAŠa�‘’Qˆh‰K×Ñ  1 aÓ(×0Ñ0°¸RÐAQÐScÕdð
ˆð 
ð
 �y‰y˜$Ÿ)™) T§Y¡Y°·	±	Ð:ˆÜ”s˜8“}Ó%ò 	.ˆAØ ˜#˜a™& ¨!¡Ó-ˆH�QŠKð	.ð ×!Ñ! (Ó+ˆàÐØ×ÑÐ*Ø#×2Ñ2°8Ó<ÐàˆØÐØ×$Ñ$ VÐ-=¸vÓFˆDáÙ#Ø ˜ W¨Q¨R [Ñ0‘à ˜ W¨Q¨R [Ñ0�Ø)-Ð)9�T�G˜fÑ$ÐE¸vÐEä&ØØÙ3G˜'×/Ò/ÈTØ×)Ñ)ô	
ð 	
ùó; xùò
s   Â#HÂ7HÃ>8H%r¼  )r%   r&   r'   r!   rC   r  r   r™  r   r   r›  r   r6   r   r™   r   rÖ   rI   rP   rQ   s   @r+   r
  r
  T  sê   ø„ ð˜zð ¨dõ ò@ñ& +Ð+@ÓAÙÐ+BÐQ`Ôað 04Ø,0Ø)-Ø,0Ø/3Ø).Ø&*ñZ
à˜uŸ|™|Ñ,ðZ
ð ˜EŸL™LÑ)ðZ
ð ˜Ÿ™Ñ&ð	Z
ð
 $ D™>ðZ
ð ' t™nðZ
ð #'ðZ
ð ˜d‘^ðZ
ð 
ˆuÐ-Ð-Ñ	.òZ
ó bó BôZ
r*   r
  zM
    BEiT backbone, to be used with frameworks like DETR and MaskFormer.
    c                   óŠ   ‡ — e Zd Zˆ fd„Zd„ Z ee«       eee	¬«      	 	 	 d
de
dee   dee   dee   def
d	„«       «       Zˆ xZS )ÚBeitBackbonec                 ó¦  •— t         ‰| �  |«       t         ‰| �	  |«       t        |j                  dz   «      D �cg c]  }|j
                  ‘Œ c}| _        t        |«      | _        t        || j                  j                  j                  ¬«      | _        |j                  �rt        | j                  j                   «      dk7  rt#        d«      ‚|j
                  }t%        j&                  t%        j(                  ||dd¬«      t%        j*                  ||j,                  ¬«      t%        j.                  «       t%        j(                  ||dd¬«      «      | _        t%        j&                  t%        j(                  ||dd¬«      «      | _        t%        j4                  «       | _        t%        j8                  dd¬«      | _        | j=                  «        y c c}w )Nr    r®   ræ  z¸BeitBackbone requires config.out_indices to be a list of 4 integers, specifying which features to use from the backbone. One can use [3, 5, 7, 11] in case of a base-sized architecture.ro   rœ   r  )rB   rC   Ú_init_backbonerJ  rG  rX   Únum_featuresrS   rj   rC  r]   r    r}  Úadd_fpnrø   rT   r  r¤   r	   r  rg  rÇ  Úbatch_norm_epsr  r  r  r  r  r  r  r‚  )rD   rT   rŽ   rX   rE   s       €r+   rC   zBeitBackbone.__init__ô  s[  ø€ Ü‰Ñ˜Ô Ü‰Ñ˜vÔ&ä9>¸v×?WÑ?WÐZ[Ñ?[Ó9\Ö]°A˜V×/Ó/Ò]ˆÔÜ(¨Ó0ˆŒÜ" 6°t·±×7WÑ7W×7cÑ7cÔdˆŒà�>‹>Ü�4—;‘;×*Ñ*Ó+¨qÒ0Ü ð1óð ð
 !×,Ñ,ˆKÜŸ™Ü×"Ñ" ;°ÈÐSTÔUÜ—‘˜{°×0EÑ0EÔFÜ—‘“	Ü×"Ñ" ;°ÈÐSTÔUó	ˆDŒIô Ÿ™¤b×&8Ñ&8¸ÀkÐ_`ÐijÔ&kÓlˆDŒIÜŸ™›ˆDŒIÜŸ™°¸1Ô=ˆDŒIð 	�‰Õùò1 ^s   ºGc                 ó.   — | j                   j                  S rA   r„  rL   s    r+   r…  z!BeitBackbone.get_input_embeddings  r†  r*   r¨  r†   rP  rÁ   rQ  r/   c                 ó¸  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|j                  d   }| j                  |«      \  }\  }}|j                  dd }	| j                  |d||	|¬«      }
|r|
j                  n|
d   }d}t        | j                  |«      D ]e  \  }}|| j                  v sŒ| j                   j                  r5|dd…dd…dd…f   }|j                  ddd«      }|j                  |d||«      }||fz  }Œg | j                   j                  rY| j                  |d   «      | j!                  |d   «      | j#                  |d   «      | j%                  |d	   «      g}t'        |«      }|s|r|f|
dd z   }|S |f|
dd z   }|S t)        ||r|
j                  nd|
j*                  ¬
«      S )aL  
        Returns:

        Examples:

        ```python
        >>> from transformers import AutoImageProcessor, AutoBackbone
        >>> import torch
        >>> from PIL import Image
        >>> import requests

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> processor = AutoImageProcessor.from_pretrained("microsoft/beit-base-patch16-224")
        >>> model = AutoBackbone.from_pretrained(
        ...     "microsoft/beit-base-patch16-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, 14, 14]
        ```Nr   ro   T)rP  rÁ   rÂ   rQ  r    r)   rn   r   )Úfeature_mapsrF   rX  )rT   r’  rP  rÁ   r4   rj   r}  rF   ÚzipÚstage_namesÚout_featuresÚreshape_hidden_statesrz   ry   r+  r  r  r  r  rÖ   r   rX  )rD   r†   rP  rÁ   rQ  r‘   r”  r�   r�   rÂ   rÔ   rF   r/  ÚstagerÖ  r<   s                   r+   rI   zBeitBackbone.forward  s  € ðF &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà!×'Ñ'¨Ñ*ˆ
Ø8<¿¹ÈÓ8UÑ5ÐÑ5˜<¨Ø!×'Ñ'¨¨Ð+ˆ
à—,‘,ØØ!%Ø/Ø!Ø#ð ó 
ˆñ 2=˜×-Ò-À'È!Á*ˆàˆÜ#& t×'7Ñ'7¸Ó#Gò 	0ÑˆE�<Ø˜×)Ñ)Ò)Ø—;‘;×4Ò4Ø#/²°1±2²q°Ñ#9�LØ#/×#7Ñ#7¸¸1¸aÓ#@�LØ#/×#7Ñ#7¸
ÀBÈÐVaÓ#b�Là  Ñ/‘ð	0ð �;‰;×Òà—	‘	˜, q™/Ó*Ø—	‘	˜, q™/Ó*Ø—	‘	˜, q™/Ó*Ø—	‘	˜, q™/Ó*ð	ˆLô ! Ó.ˆLáÙ#Ø&˜¨7°1°2¨;Ñ6�ð ˆMð '˜¨7°1°2¨;Ñ6�ØˆMäØ%Ù3G˜'×/Ò/ÈTØ×)Ñ)ô
ð 	
r*   )NNN)r%   r&   r'   rC   r…  r   r™  r   r   r›  r   r   r™   rI   rP   rQ   s   @r+   r'  r'  í  s†   ø„ ôò<0ñ +Ð+@ÓAÙ¨>ÈÔXð 04Ø,0Ø&*ñS
àðS
ð ' t™nðS
ð $ D™>ð	S
ð
 ˜d‘^ðS
ð 
òS
ó Yó BôS
r*   r'  )r²  r¢  r
  rz  rb  r'  )r1   F)Wr(   Úcollections.abcra   rÈ   r‰   Údataclassesr   Útypingr   r   r   r   r6   Útorch.utils.checkpointr   r	   Útorch.nnr
   r   r   Úactivationsr   Úmodeling_outputsr   r   r   r   r   r   Úmodeling_utilsr   Úpytorch_utilsr   r   r   Úutilsr   r   r   r   r   r   Úutils.backbone_utilsr   Úconfiguration_beitr!   Ú
get_loggerr%   rÞ   r›  rš  rœ  r½  r¾  r$   rN   r™   r=   ÚModuler?   rS   r\   r¨   rØ   rä   rò   rð   r  r	  r  r¹   rC  rb  ÚBEIT_START_DOCSTRINGr™  rz  r€  r¢  r²  rÀ  rÍ  rØ  rä  rü  r
  r'  Ú__all__r)   r*   r+   ú<module>rE     s'  ðñ ã Û Û Ý !ß /Ó /ã Û ß ß AÑ Aå !÷÷ õ .ß vÑ v÷÷ õ 2Ý *ð 
ˆ×	Ñ	˜HÓ	%€ð €ð >Ð Ú&Ð ð <Ð Ø1Ð ð ôÐ!;ó ó ðñ2�U—\‘\ð ¨eð ÀTð ÐV[×VbÑVbó ô(-�2—9‘9ô -ô c7�R—Y‘Yô c7ôL#7˜"Ÿ)™)ô #7ôLP˜Ÿ	™	ô Pôf;#Ð-ô ;#ô|�R—Y‘Yô ð& Ø!ñÐ ô)�B—I‘Iô )ôX�r—y‘yô ô 
�—‘ô 
ô>�—	‘	ô >ôBP3˜rŸy™yô P3ôfT
�"—)‘)ô T
ôn(O˜/ô (OðV	Ð ðÐ ñ2 ØdØóôW
Ð#ó W
ó	ðW
ôt�—‘ô ñ& ðsð óô\
Ð!4ó \
óð\
ñ~ ðð óôQ
Ð!4ó Q
óðQ
ôh"�R—Y‘Yô "ôJ˜bŸi™iô ô""˜rŸy™yô "ôJR�2—9‘9ô Rôj8�"—)‘)ô 8ñv ðð ó	ôP
Ð"5ó P
óðP
ñf ðð ó	ôw
Ð&¨ó w
óðw
òt�r*   