§
    ‚ŠtjÈ–  ã                   óœ  — d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
mZ ddlmZ dd	lmZmZmZmZ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 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(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/  ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z0 G d„ de,¦  «        Z1 G d„ de)¦  «        Z2 G d„ dej3        ¦  «        Z4 G d „ d!e(¦  «        Z5 G d"„ d#e+¦  «        Z6 G d$„ d%e&¦  «        Z7 G d&„ d'e*¦  «        Z8e G d(„ d)e-¦  «        ¦   «         Z9e G d*„ d+e9¦  «        ¦   «         Z: G d,„ d-ej3        ¦  «        Z; ed.¬¦  «         G d/„ d0e9¦  «        ¦   «         Z< ed1¬¦  «         G d2„ d3e9¦  «        ¦   «         Z= G d4„ d5e$¦  «        Z> G d6„ d7ej3        ¦  «        Z? G d8„ d9ej3        ¦  «        Z@ G d:„ d;ej3        ¦  «        ZA G d<„ d=ej3        ¦  «        ZB G d>„ d?ej3        ¦  «        ZC G d@„ dAej3        ¦  «        ZDe G dB„ dCe9¦  «        ¦   «         ZE edD¬¦  «         G dE„ dFe
e9¦  «        ¦   «         ZFg dG¢ZGdS )HzPyTorch BEiT model.é    )Ú	dataclassN)ÚTensorÚnné   )Úinitialization)ÚBackboneMixinÚfilter_output_hidden_states)Úcreate_bidirectional_mask)ÚBackboneOutputÚBaseModelOutputWithPoolingÚImageClassifierOutputÚMaskedLMOutputÚSemanticSegmenterOutput)ÚPreTrainedModel)ÚUnpack)Ú#compile_compatible_method_lru_cache)ÚTransformersKwargsÚauto_docstringÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚResNetConvLayer)ÚSwinDropPath)ÚViTAttentionÚViTEmbeddingsÚViTLayerÚViTMLPÚViTPatchEmbeddingsÚViTPreTrainedModelé   )Ú
BeitConfigz-
    Class for outputs of [`BeitModel`].
    )Úcustom_introc                   ó   — e Zd ZdZdS )ÚBeitModelOutputWithPoolingaF  
    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.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/beit/modular_beit.pyr&   r&   +   s   € € € € € ðð ð ð r,   r&   c                   ó   — e Zd ZdS )ÚBeitPatchEmbeddingsN©r'   r(   r)   r+   r,   r-   r/   r/   :   ó   € € € € € Ø€Dr,   r/   c                   óZ   — e Zd Zdeddfd„Z	 ddej        dej        dz  dej        fd„ZdS )	ÚBeitEmbeddingsÚconfigÚreturnNc                 ó.  — t           j                             | ¦  «         t          j        t	          j        dd|j        ¦  «        ¦  «        | _        |j        r-t          j        t	          j        dd|j        ¦  «        ¦  «        nd | _	        t          |¦  «        | _        |j        | _        | j        j        }|j        r0t          j        t	          j        d|dz   |j        ¦  «        ¦  «        nd | _        t          j        |j        ¦  «        | _        d S )Nr"   )r   ÚModuleÚ__init__Ú	ParameterÚtorchÚzerosÚhidden_sizeÚ	cls_tokenÚuse_mask_tokenÚ
mask_tokenr/   Úpatch_embeddingsÚ
patch_sizeÚnum_patchesÚ use_absolute_position_embeddingsÚposition_embeddingsÚDropoutÚhidden_dropout_probÚdropout)Úselfr4   rB   s      r-   r8   zBeitEmbeddings.__init__?   så   € Ý
Œ	×Ò˜4Ñ Ô Ð åœ¥e¤k°!°Q¸Ô8JÑ&KÔ&KÑLÔLˆŒØQWÔQfÐp�"œ,¥u¤{°1°a¸Ô9KÑ'LÔ'LÑMÔMÐMÐlpˆŒÝ 3°FÑ ;Ô ;ˆÔØ Ô+ˆŒØÔ+Ô7ˆð Ô6ð�BŒL�œ Q¨°a©¸Ô9KÑLÔLÑMÔMÐMàð 	Ô õ
 ”z &Ô"<Ñ=Ô=ˆŒˆˆr,   Úpixel_valuesÚbool_masked_posc                 óô  — |j         \  }}}}|                      |¦  «        }|                     ¦   «         \  }}}|�R| j                             ||d¦  «        }	|                     d¦  «                             |	¦  «        }
|d|
z
  z  |	|
z  z   }| j                             |dd¦  «        }t          j	        ||fd¬¦  «        }| j
        �||                      |||¦  «        z   }|                      |¦  «        }|S ©Néÿÿÿÿr"   ©Údim)Úshaper@   Úsizer?   ÚexpandÚ	unsqueezeÚtype_asr=   r:   ÚcatrD   Úinterpolate_pos_encodingrG   )rH   rI   rJ   Ú_ÚheightÚwidthÚ
embeddingsÚ
batch_sizeÚseq_lenÚmask_tokensÚmaskÚ
cls_tokenss               r-   ÚforwardzBeitEmbeddings.forwardN   s  € ð
 +Ô0Ñˆˆ1ˆf�eØ×*Ò*¨<Ñ8Ô8ˆ
Ø!+§¢Ñ!2Ô!2Ñˆ
�G˜QàÐ&Øœ/×0Ò0°¸WÀbÑIÔIˆKà"×,Ò,¨RÑ0Ô0×8Ò8¸ÑEÔEˆDØ# q¨4¡xÑ0°;ÀÑ3EÑEˆJà”^×*Ò*¨:°r¸2Ñ>Ô>ˆ
Ý”Y 
¨JÐ7¸QÐ?Ñ?Ô?ˆ
àÔ#Ð/Ø# d×&CÒ&CÀJÐPVÐX]Ñ&^Ô&^Ñ^ˆJà—\’\ *Ñ-Ô-ˆ
àÐr,   ©N)	r'   r(   r)   r#   r8   r:   r   Ú
BoolTensorr`   r+   r,   r-   r3   r3   >   s|   € € € € € ð>˜zð >¨dð >ð >ð >ð >ð$ 48ðð à”lðð Ô)¨DÑ0ðð 
Œð	ð ð ð ð ð r,   r3   c                   ó¢   ‡ — e Zd Zdeddfˆ fd„Ze 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 )ÚBeitRelativePositionBiasr4   r5   Nc                 óª  •— t          ¦   «                              ¦   «          |j        }t          |t          t
          f¦  «        s||f}|d         |j        z  |d         |j        z  f| _        d| j        d         z  dz
  d| j        d         z  dz
  z  dz   | _        t          j
        t          j        | j        |j        ¦  «        ¦  «        | _        d S ©Nr   r"   r   r   )Úsuperr8   Ú
image_sizeÚ
isinstanceÚtupleÚlistrA   Úwindow_sizeÚnum_relative_distancer   r9   r:   r;   Únum_attention_headsÚrelative_position_bias_table)rH   r4   rh   Ú	__class__s      €r-   r8   z!BeitRelativePositionBias.__init__i   sÏ   ø€ Ý‰Œ×ÒÑÔÐØÔ&ˆ
Ý˜*¥u­d mÑ4Ô4ð 	2Ø$ jÐ1ˆJØ& qœM¨VÔ->Ñ>À
È1ÄÐQWÔQbÑ@bÐcˆÔØ&'¨$Ô*:¸1Ô*=Ñ&=ÀÑ&AÀaÈ$ÔJZÐ[\ÔJ]ÑF]Ð`aÑFaÑ%bÐefÑ%fˆÔ"Ý,.¬LÝŒK˜Ô2°FÔ4NÑOÔOñ-
ô -
ˆÔ)Ð)Ð)r,   é
   )Úmaxsizerl   c                 óT  — d| d         z  dz
  d| d         z  dz
  z  dz   }| d         | d         z  }t          j        t          j        t          j        t          j        | d         ¦  «        t          j        | d         ¦  «        d¬¦  «        ¦  «        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         | 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        ¬	¦  «        }| 	                    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://huggingface.co/papers/2307.14460).
        r   r   r"   r   Úij)Úindexing)Ú	start_dimN)rQ   ÚdtyperM   )r   r   )
r:   ÚflattenÚstackÚmeshgridÚarangeÚpermuteÚ
contiguousr;   rw   Úsum)rl   rm   Úwindow_areaÚcoords_flattenÚrelative_coordsÚrelative_position_indexs         r-   Ú generate_relative_position_indexz9BeitRelativePositionBias.generate_relative_position_indexu   s!  € ð "# [°¤^Ñ!3°aÑ!7¸AÀÈAÄÑ<NÐQRÑ<RÑ SÐVWÑ WÐØ! !”n {°1¤~Ñ5ˆõ œÝŒK�œ¥u¤|°KÀ´NÑ'CÔ'CÅUÄ\ÐR]Ð^_ÔR`ÑEaÔEaÐlpÐqÑqÔqÑrÔrØð
ñ 
ô 
ˆð *¨!¨!¨!¨Q¨Q¨Q°¨*Ô5¸ÀqÀqÀqÈ$ÐPQÐPQÐPQÀzÔ8RÑR×[Ò[Ð\]Ð_`ÐbcÑdÔd×oÒoÑqÔqˆà˜˜˜˜1˜1˜1˜a˜Ð Ð Ô  K°¤N°QÑ$6Ñ6Ð Ð Ñ Ø˜˜˜˜1˜1˜1˜a˜Ð Ð Ô  K°¤N°QÑ$6Ñ6Ð Ð Ñ Ø˜˜˜˜1˜1˜1˜a˜Ð Ð Ô  A¨°A¬Ñ$6¸Ñ$:Ñ:Ð Ð Ñ å"'¤+°KÀ!±OÐ3EÈÑ3IÐQ`ÔQfÐ"gÑ"gÔ"gÐØ*9×*=Ò*=¸bÑ*AÔ*AÐ    A B B Ñ'Ø)>ÀÑ)BÐ  1 2 2 Ñ&Ø)>ÀÑ)BÐ    A Ñ&Ø(=ÀÑ(AÐ Ñ%Ø&Ð&r,   FrV   c                 ó0  — 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
  …         }|                     d||d¦  «                             dddd¦  «        }t
          j                             |t          |¦  «        t          |¦  «        fd¬¦  «        }|                     dddd¦  «                             |
dz
  d¦  «        }t          j
        |||	dz
  d…         g¦  «        }|                      |¦  «        }||                     d¦  «                 }|                     |d         |d         z  dz   |d         |d         z  dz   d¦  «        }|                     ddd¦  «                             ¦   «         }|rKt
          j                             |                     d¦  «        ||fdd	¬
¦  «                             d¦  «        }|                     d¦  «        S )zu
        Modification of timm.models.beit.py: Attention._get_rel_pos_bias to support arbitrary window sizes.
        r   r   r"   r   NrM   Úbilinear)rQ   ÚmodeF©rQ   r†   Úalign_corners)rl   ro   rm   Úreshaper|   r   Ú
functionalÚinterpolater   r:   rU   rƒ   Úviewr}   rS   Úsqueeze)rH   rl   rV   Údim_sizeÚ
old_heightÚ	old_widthÚ
new_heightÚ	new_widthÚ old_relative_position_bias_tableÚold_num_relative_distanceÚnew_num_relative_distanceÚold_sub_tableÚnew_sub_tableÚ new_relative_position_bias_tabler‚   Úrelative_position_biass                   r-   r`   z BeitRelativePositionBias.forward‘   s`  € ð ˜Ô)¨!Ô,Ñ,¨qÑ0ˆ
Ø˜Ô(¨Ô+Ñ+¨aÑ/ˆ	à˜ QœÑ'¨!Ñ+ˆ
Ø˜ AœÑ&¨Ñ*ˆ	à+/Ô+LÐ(à$(Ô$>Ð!Ø$.°Ñ$:¸QÑ$>Ð!à8Ð9XÐ;TÐWXÑ;XÐ9XÔYˆà%×-Ò-¨a°¸JÈÑKÔK×SÒSÐTUÐWXÐZ[Ð]^Ñ_Ô_ˆÝœ×1Ò1Ø¥¨:Ñ!6Ô!6½	À)Ñ8LÔ8LÐ MÐT^ð 2ñ 
ô 
ˆð &×-Ò-¨a°°A°qÑ9Ô9×AÒAÐB[Ð^_ÑB_ÐacÑdÔdˆå+0¬9ØÐ<Ð=VÐYZÑ=ZÐ=\Ð=\Ô]Ð^ñ,
ô ,
Ð(ð #'×"GÒ"GÈÑ"TÔ"TÐØ!AÐBY×B^ÒB^Ð_aÑBbÔBbÔ!cÐð "8×!<Ò!<Ø˜ŒN˜[¨œ^Ñ+¨aÑ/°¸Q´À+ÈaÄ.Ñ1PÐSTÑ1TÐVXñ"
ô "
Ðð "8×!?Ò!?ÀÀ1ÀaÑ!HÔ!H×!SÒ!SÑ!UÔ!UÐà#ð 	Ý%'¤]×%>Ò%>Ø&×0Ò0°Ñ3Ô3Ø Ð)ØØ#ð	 &?ñ &ô &÷
 Šg�a‰jŒjð #ð &×/Ò/°Ñ2Ô2Ð2r,   )FN)r'   r(   r)   r#   r8   Ústaticmethodr   rj   Úintr:   r   rƒ   Úboolr`   Ú__classcell__©rp   s   @r-   rd   rd   h   sÇ   ø€ € € € € ð	
˜zð 	
¨dð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð Ø(Ð(°Ð4Ñ4Ô4ð'°e¸CÀ¸H´oð 'È%Ì,ð 'ð 'ð 'ñ 5Ô4ñ „\ð'ð4-3ð -3¸Tð -3Ð]bÔ]ið -3ð -3ð -3ð -3ð -3ð -3ð -3ð -3r,   rd   c                   ó$   ‡ — e Zd Zdefˆ fd„Zˆ xZS )ÚBeitAttentionr4   c                 ó®  •— t          ¦   «                              |¦  «         t          j        |j        |j        | j        z  ¦  «        | _        t          j        |j        |j        | j        z  d¬¦  «        | _        t          j        |j        |j        | j        z  ¦  «        | _	        t          j        |j        | j        z  |j        ¦  «        | _
        d S )NF)Úbias)rg   r8   r   ÚLinearr<   rn   Úhead_dimÚq_projÚk_projÚv_projÚo_proj©rH   r4   rp   s     €r-   r8   zBeitAttention.__init__Â   s«   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”i Ô 2°FÔ4NÐQUÔQ^Ñ4^Ñ_Ô_ˆŒÝ”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐejÐkÑkÔkˆŒÝ”i Ô 2°FÔ4NÐQUÔQ^Ñ4^Ñ_Ô_ˆŒÝ”i Ô :¸T¼]Ñ JÈFÔL^Ñ_Ô_ˆŒˆˆr,   )r'   r(   r)   r#   r8   r�   rž   s   @r-   r    r    Á   sO   ø€ € € € € ð`˜zð `ð `ð `ð `ð `ð `ð `ð `ð `ð `r,   r    c                   ó   — e Zd ZdS )ÚBeitMLPNr0   r+   r,   r-   r«   r«   Ê   r1   r,   r«   c                   ó   — e Zd ZdS )ÚBeitDropPathNr0   r+   r,   r-   r­   r­   Î   r1   r,   r­   c                   óœ   ‡ — e Zd ZdZddedefˆ fd„Z	 	 	 ddej        d	ej        dz  d
e	de
eef         dz  dee         dej        fd„Zˆ xZS )Ú	BeitLayerz?This corresponds to the Block class in the timm implementation.ç        r4   Údrop_path_ratec                 óö  •— t          ¦   «                              ¦   «          |j        | _        |dk    rt          |¦  «        nt	          j        ¦   «         | _        |j        }|dk    r0t	          j        |t          j
        |j        ¦  «        z  d¬¦  «        nd| _        |dk    r0t	          j        |t          j
        |j        ¦  «        z  d¬¦  «        nd| _        |j        rt          |¦  «        nd | _        d S )Nr°   r   T)Úrequires_gradg      ð?)rg   r8   rA   r­   r   ÚIdentityÚ	drop_pathÚlayer_scale_init_valuer9   r:   Úonesr<   Úlambda_1Úlambda_2Úuse_relative_position_biasrd   r™   )rH   r4   r±   Úinit_valuesrp   s       €r-   r8   zBeitLayer.__init__Õ   sú   ø€ Ý‰Œ×ÒÑÔÐØ Ô+ˆŒØ9GÈ#Ò9MÐ9M� nÑ5Ô5Ð5ÕSUÔS^ÑS`ÔS`ˆŒàÔ3ˆà^iÐlmÒ^mÐ^m�BŒL˜¥u¤z°&Ô2DÑ'EÔ'EÑEÐUYÐZÑZÔZÐZÐsvð 	Œð _jÐlmÒ^mÐ^m�BŒL˜¥u¤z°&Ô2DÑ'EÔ'EÑEÐUYÐZÑZÔZÐZÐsvð 	Œð KQÔJkÐ&uÕ&>¸vÑ&FÔ&FÐ&FÐquˆÔ#Ð#Ð#r,   NFÚhidden_statesÚattention_maskrV   Ú
resolutionÚkwargsr5   c                 ó&  — | j         �E|\  }}|| j        z  || j        z  f}|                       |||j        d         ¬¦  «        }	|�|	|z   n|	}|}
|                      |¦  «        } | j        |fd|i|¤Ž\  }}|                      |¦  «        }| j        |z  }|                      |¦  «        |
z   }|}
|                      |¦  «        }|  	                    |¦  «        }|                      |¦  «        }| j
        |z  }|                      |¦  «        |
z   }|S )Nr"   )rŽ   r½   )r™   rA   rP   Úlayernorm_beforeÚ	attentionrG   r¸   rµ   Úlayernorm_afterÚmlpr¹   )rH   r¼   r½   rV   r¾   r¿   rX   rY   rl   r™   ÚresidualrW   s               r-   r`   zBeitLayer.forwardã   s\  € ð Ô&Ð2Ø&‰MˆF�EØ! T¤_Ñ4°e¸t¼Ñ6NÐOˆKØ%)×%@Ò%@ØÐ5ÀÔ@SÐTUÔ@Vð &Añ &ô &Ð"ð <JÐ;UÐ&¨Ñ7Ð7Ð[qð ð
 !ˆØ×-Ò-¨mÑ<Ô<ˆØ)˜4œ>Øð
ð 
à)ð
ð ð
ð 
Ñˆ�qð
 Ÿš ]Ñ3Ô3ˆØœ¨Ñ5ˆØŸš }Ñ5Ô5¸Ñ@ˆð !ˆØ×,Ò,¨]Ñ;Ô;ˆØŸš Ñ/Ô/ˆØŸš ]Ñ3Ô3ˆØœ¨Ñ5ˆØŸš }Ñ5Ô5¸Ñ@ˆàÐr,   )r°   ©NFN)r'   r(   r)   r*   r#   Úfloatr8   r:   r   rœ   rj   r›   r   r   r`   r�   rž   s   @r-   r¯   r¯   Ò   sÛ   ø€ € € € € ØIÐIðvð v˜zð v¸5ð vð vð vð vð vð vð" /3Ø).Ø-1ð&ð &à”|ð&ð œ tÑ+ð&ð #'ð	&ð
 ˜#˜s˜(”O dÑ*ð&ð Ð+Ô,ð&ð 
Œð&ð &ð &ð &ð &ð &ð &ð &r,   r¯   c                   ó(   — e Zd ZdgZdgZdZdZd„ ZdS )ÚBeitPreTrainedModelr¯   z.*relative_position_index.*Fc                 ót  — t          j        | |¦  «         t          |t          ¦  «        r]t	          j        |j        ¦  «         |j        �t	          j        |j        ¦  «         |j        �t	          j        |j        ¦  «         dS dS t          |t          ¦  «        rt	          j        |j
        ¦  «         dS t          |t          ¦  «        rit          |j        t          j        ¦  «        rLt	          j        |j        | j        j        ¦  «         t	          j        |j        | j        j        ¦  «         dS dS dS )zInitialize the weightsN)r   Ú_init_weightsri   r3   ÚinitÚzeros_r=   r?   rD   rd   ro   r¯   r¸   r   r9   Ú	constant_r4   r¶   r¹   )rH   Úmodules     r-   rË   z!BeitPreTrainedModel._init_weights  s(  € åÔ% d¨FÑ3Ô3Ð3Ý�f�nÑ-Ô-ð 	TÝŒK˜Ô(Ñ)Ô)Ð)ØÔ Ð,Ý”˜FÔ-Ñ.Ô.Ð.ØÔ)Ð5Ý”˜FÔ6Ñ7Ô7Ð7Ð7Ð7ð 6Ð5å˜Õ 8Ñ9Ô9ð 	TÝŒK˜Ô;Ñ<Ô<Ð<Ð<Ð<Ý˜¥	Ñ*Ô*ð 	TÝ˜&œ/­2¬<Ñ8Ô8ð TÝ”˜vœ°´Ô0RÑSÔSÐSÝ”˜vœ°´Ô0RÑSÔSÐSÐSÐSð	Tð 	TðTð Tr,   N)r'   r(   r)   Ú_no_split_modulesÚ"_keys_to_ignore_on_load_unexpectedÚ_supports_flash_attnÚ_supports_flex_attnrË   r+   r,   r-   rÉ   rÉ     sE   € € € € € à$˜ÐØ*HÐ)IÐ&Ø ÐØÐðTð Tð Tð Tð Tr,   rÉ   c                   óÐ   ‡ — e Zd Zddededdfˆ fd„Ze ed¬¦  «        e	 	 	 dd	e	j
        d
e	j        dz  dede	j
        dz  dee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )Ú	BeitModelTr4   Úadd_pooling_layerr5   Nc                 ó  •‡— t          ¦   «                              ‰¦  «         ‰| _        t          ‰¦  «        | _        ‰j        rt          ‰¦  «        nd| _        ˆfd„t          ‰j	        ¦  «        D ¦   «         }t          j        ˆfd„|D ¦   «         ¦  «        | _        ‰j        rt          j        ¦   «         nt          j        ‰j        ‰j        ¬¦  «        | _        |rt'          ‰¦  «        nd| _        |                      ¦   «          dS )zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        Nc                 óV   •— g | ]%}‰j         |z  t          ‰j        d z
  d ¦  «        z  ‘Œ&S )r"   )r±   ÚmaxÚnum_hidden_layers)Ú.0Úir4   s     €r-   ú
<listcomp>z&BeitModel.__init__.<locals>.<listcomp>2  sE   ø€ ð 
ð 
ð 
ØQRˆFÔ! AÑ%­¨FÔ,DÀqÑ,HÈ!Ñ(LÔ(LÑLð
ð 
ð 
r,   c                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS ))r±   )r¯   )rÛ   Úrr4   s     €r-   rÝ   z&BeitModel.__init__.<locals>.<listcomp>5  s&   ø€ Ð$bÐ$bÐ$bÈQ¥Y¨vÀaÐ%HÑ%HÔ%HÐ$bÐ$bÐ$br,   ©Úeps)rg   r8   r4   r3   rZ   Ú!use_shared_relative_position_biasrd   Úshared_position_biasÚrangerÚ   r   Ú
ModuleListÚlayersÚuse_mean_poolingr´   Ú	LayerNormr<   Úlayer_norm_epsÚ	layernormÚ
BeitPoolerÚpoolerÚ	post_init)rH   r4   rÖ   Údrop_path_ratesrp   s    `  €r-   r8   zBeitModel.__init__&  s  øø€ õ
 	‰Œ×Ò˜Ñ Ô Ð ØˆŒå(¨Ñ0Ô0ˆŒà06Ô0XÐbÕ$ VÑ,Ô,Ð,Ð^bð 	Ô!ð
ð 
ð 
ð 
ÝV[Ð\bÔ\tÑVuÔVuð
ñ 
ô 
ˆõ ”mÐ$bÐ$bÐ$bÐ$bÐRaÐ$bÑ$bÔ$bÑcÔcˆŒð $Ô4Ðu�BŒK‰MŒMˆM½"¼,ÀvÔGYÐ_eÔ_tÐ:uÑ:uÔ:uð 	Œð ->ÐG•j Ñ(Ô(Ð(À4ˆŒð 	�ŠÑÔÐÐÐr,   F)Útie_last_hidden_statesrI   rJ   rV   r½   r¿   c                 óâ  — |                       ||¬¦  «        }|j        dd…         }t          | j        ||¬¦  «        }| j        �O|\  }}	|| j        j        z  |	| j        j        z  f}
|                      |
||j        d         ¬¦  «        }|�||z   n|}|}| j        D ]} ||f|||dœ|¤Ž}Œ|                      |¦  «        }| j        �|                      |¦  «        nd}t          ||¬¦  «        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).
        )rJ   r   N)r4   Úinputs_embedsr½   r"   )rV   rŽ   )r½   rV   r¾   )Úlast_hidden_stateÚpooler_output)
rZ   rP   r
   r4   rã   rA   ræ   rê   rì   r&   )rH   rI   rJ   rV   r½   r¿   Úembedding_outputr¾   rX   rY   rl   Úshared_relative_position_biasr¼   ÚlayerÚsequence_outputÚpooled_outputs                   r-   r`   zBeitModel.forward?  sW  € ð  Ÿ?š?¨<È˜?ÑYÔYÐØ!Ô'¨¨¨Ô+ˆ
å2Ø”;Ø*Ø)ð
ñ 
ô 
ˆð Ô$Ð0Ø&‰MˆF�EØ! T¤[Ô%;Ñ;¸UÀdÄkÔF\Ñ=\Ð]ˆKØ,0×,EÒ,EØÐ6NÐYiÔYoÐpqÔYrð -Fñ -ô -Ð)ð
 "Ð-ð .°Ñ>Ð>à2ð ð )ˆØ”[ð 	ð 	ˆEØ!˜EØðà-Ø)AØ%ð	ð ð
 ðð ˆMˆMð Ÿ.š.¨Ñ7Ô7ˆØ8<¼Ð8O˜Ÿš OÑ4Ô4Ð4ÐUYˆå)¸OÐ[hÐiÑiÔiÐir,   )TrÆ   )r'   r(   r)   r#   rœ   r8   r   r   r   r:   r   rb   r   r   r&   r`   r�   rž   s   @r-   rÕ   rÕ   $  s
  ø€ € € € € ðð ˜zð ¸dð Èdð ð ð ð ð ð ð2  Ø€_¨EÐ2Ñ2Ô2Øð 48Ø).Ø.2ð-jð -jà”lð-jð Ô)¨DÑ0ð-jð #'ð	-jð
 œ tÑ+ð-jð Ð+Ô,ð-jð 
$ð-jð -jð -jñ „^ñ 3Ô2ñ  Ôð-jð -jð -jð -jð -jr,   rÕ   c                   óL   ‡ — 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ë   r4   r5   Nc                 ó¤   •— t          ¦   «                              ¦   «          |j        r t          j        |j        |j        ¬¦  «        nd | _        d S )Nrà   )rg   r8   rç   r   rè   r<   ré   rê   r©   s     €r-   r8   zBeitPooler.__init__s  sJ   ø€ Ý‰Œ×ÒÑÔÐàKQÔKbÐl�BŒL˜Ô+°Ô1FÐGÑGÔGÐGÐhlð 	Œˆˆr,   r¼   c                 ó–   — | j         �7|                       |d d …dd …d d …f                              d¦  «        ¦  «        n|d d …df         S )Nr"   r   )rê   Úmean©rH   r¼   s     r-   r`   zBeitPooler.forwardy  sX   € àBFÄ.ÐB\ˆt�~Š~˜m¨A¨A¨A¨q¨r¨r°1°1°1¨HÔ5×:Ò:¸1Ñ=Ô=Ñ>Ô>Ð>ÐboÐpqÐpqÐpqÐstÐptÔbuÐur,   )	r'   r(   r)   r#   r8   r:   r   r`   r�   rž   s   @r-   rë   rë   r  s{   ø€ € € € € ð
˜zð 
¨dð 
ð 
ð 
ð 
ð 
ð 
ðv U¤\ð v°e´lð vð vð vð vð vð vð vð v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d„ Zee	 	 	 	 	 ddej	        dz  dej
        dz  d	ej	        dz  d
edej	        dz  dee         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚBeitForMaskedImageModelingr4   r5   Nc                 óH  •— t          ¦   «                              |¦  «         |j        | _        t          |d¬¦  «        | _        t          j        |j        |j        ¬¦  «        | _	        t          j
        |j        |j        ¦  «        | _        |                      ¦   «          d S )NF©rÖ   rà   )rg   r8   Ú
num_labelsrÕ   Úbeitr   rè   r<   ré   rê   r£   Ú
vocab_sizeÚlm_headrí   r©   s     €r-   r8   z#BeitForMaskedImageModeling.__init__‡  sˆ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ˜f¸Ð>Ñ>Ô>ˆŒ	õ œ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”y Ô!3°VÔ5FÑGÔGˆŒð 	�ŠÑÔÐÐÐr,   c                 ó   — d S ra   r+   )rH   s    r-   Úget_output_embeddingsz0BeitForMaskedImageModeling.get_output_embeddings”  s   € Øˆtr,   FrI   rJ   ÚlabelsrV   r½   r¿   c                 ó,  —  | j         |f|||dœ|¤Ž}|j        }|                      |¦  «        }|                      |dd…dd…f         ¦  «        }	d}
|�%t	          j        ¦   «         } ||	|         |¦  «        }
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).

        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]
        ```)rJ   rV   r½   Nr"   ©ÚlossÚlogitsr¼   Ú
attentions)	r  rò   rê   r  r   ÚCrossEntropyLossr   r¼   r  )rH   rI   rJ   r  rV   r½   r¿   Úoutputsr÷   Úprediction_scoresÚmasked_lm_lossÚloss_fcts               r-   r`   z"BeitForMaskedImageModeling.forward—  sÏ   € ðX �$”)Øð
à+Ø%=Ø)ð	
ð 
ð
 ð
ð 
ˆð "Ô3ˆØŸ.š.¨Ñ9Ô9ˆØ ŸLšL¨¸¸¸¸A¸B¸B¸Ô)?Ñ@Ô@ÐàˆØÐÝÔ*Ñ,Ô,ˆHØ%˜XÐ&7¸Ô&HÈ&ÑQÔQˆNåØØ$Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r,   )NNNFN)r'   r(   r)   r#   r8   r  r   r   r:   r   rb   rœ   r   r   rj   r   r`   r�   rž   s   @r-   rÿ   rÿ   ~  s  ø€ € € € € ð˜zð ¨dð ð ð ð ð ð ðð ð ð Øð -1Ø37Ø&*Ø).Ø.2ð@
ð @
à”l TÑ)ð@
ð Ô)¨DÑ0ð@
ð ”˜tÑ#ð	@
ð
 #'ð@
ð œ tÑ+ð@
ð Ð+Ô,ð@
ð 
�Ñ	ð@
ð @
ð @
ñ „^ñ Ôð@
ð @
ð @
ð @
ð @
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	 	 	 ddej        dz  dej        dz  de	d	e
e         deez  f
d
„¦   «         ¦   «         Zˆ xZS )ÚBeitForImageClassificationr4   r5   Nc                 ó:  •— t          ¦   «                              |¦  «         |j        | _        t          |d¬¦  «        | _        |j        dk    rt          j        |j        |j        ¦  «        nt          j        ¦   «         | _	        |  
                    ¦   «          d S )NTr  r   )rg   r8   r  rÕ   r  r   r£   r<   r´   Ú
classifierrí   r©   s     €r-   r8   z#BeitForImageClassification.__init__ã  s‹   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ˜f¸Ð=Ñ=Ô=ˆŒ	ð OUÔN_ÐbcÒNcÐNc�"œ) FÔ$6¸Ô8IÑJÔJÐJÕikÔitÑivÔivˆŒð 	�ŠÑÔÐÐÐr,   FrI   r  rV   r¿   c                 óÔ   —  | j         |fd|i|¤Ž}|j        }|                      |¦  «        }d}|�|                      ||| j        ¦  «        }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).
        rV   Nr
  )r  ró   r  Úloss_functionr4   r   r¼   r  )	rH   rI   r  rV   r¿   r  rø   r  r  s	            r-   r`   z"BeitForImageClassification.forwardï  s™   € ð �$”)Øð
ð 
à%=ð
ð ð
ð 
ˆð  Ô-ˆà—’ Ñ/Ô/ˆàˆØÐØ×%Ò% f¨f°d´kÑBÔBˆDå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r,   ©NNF)r'   r(   r)   r#   r8   r   r   r:   r   rœ   r   r   rj   r   r`   r�   rž   s   @r-   r  r  Ü  sÐ   ø€ € € € € ð
˜zð 
¨dð 
ð 
ð 
ð 
ð 
ð 
ð Øð -1Ø&*Ø).ð	 
ð  
à”l TÑ)ð 
ð ”˜tÑ#ð 
ð #'ð	 
ð
 Ð+Ô,ð 
ð 
Ð&Ñ	&ð 
ð  
ð  
ñ „^ñ Ôð 
ð  
ð  
ð  
ð  
r,   r  c                   óœ   ‡ — e Zd Z	 	 	 	 	 	 	 ddededeeeef         z  d	ed
eeeef         z  ez  dedeeeef         z  dedefˆ fd„Zˆ xZS )ÚBeitConvLayerr   r"   r   FÚreluÚin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingr¢   ÚdilationÚgroupsÚ
activationc
           
      óŠ   •— t          ¦   «                              ¦   «          t          j        ||||||||¬¦  «        | _        d S )N)r  r  r  r   r!  r"  r#  r¢   )rg   r8   r   ÚConv2dÚconvolution)rH   r  r  r  r   r!  r¢   r"  r#  r$  rp   s             €r-   r8   zBeitConvLayer.__init__  sR   ø€ õ 	‰Œ×ÒÑÔÐÝœ9Ø#Ø%Ø#ØØØØØð	
ñ 	
ô 	
ˆÔÐÐr,   )r   r"   r   Fr"   r"   r  )	r'   r(   r)   r›   rj   Ústrrœ   r8   r�   rž   s   @r-   r  r    sÝ   ø€ € € € € ð
 ./ØØ/0ØØ*+ØØ ð
ð 
àð
ð ð
ð ˜5  c œ?Ñ*ð	
ð
 ð
ð �u˜S #˜X”Ñ&¨Ñ,ð
ð ð
ð ˜˜c 3˜hœÑ'ð
ð ð
ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
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eef         dej        fd	„Zˆ xZ	S )
ÚBeitPyramidPoolingBlockÚ
pool_scaler  Úchannelsr5   Nc                 ó¨   •— t          ¦   «                              ¦   «          t          j        |¦  «        | _        t          ||d¬¦  «        | _        d S )Nr"   ©r  )rg   r8   r   ÚAdaptiveAvgPool2dÚpoolingr  Úconv)rH   r+  r  r,  rp   s       €r-   r8   z BeitPyramidPoolingBlock.__init__/  sE   ø€ Ý‰Œ×ÒÑÔÐÝÔ+¨JÑ7Ô7ˆŒÝ! +¨xÀQÐGÑGÔGˆŒ	ˆ	ˆ	r,   ÚinputrQ   c                 ó    — |                       |¦  «        }|                      |¦  «        }t          j                             ||dd¬¦  «        }|S )Nr…   Fr‡   )r0  r1  r   rŠ   r‹   )rH   r2  rQ   Úhidden_states       r-   r`   zBeitPyramidPoolingBlock.forward4  sI   € Ø—|’| EÑ*Ô*ˆØ—y’y Ñ.Ô.ˆÝ”}×0Ò0°ÀDÈzÐinÐ0ÑoÔoˆØÐr,   )
r'   r(   r)   r›   r8   r:   r   rj   r`   r�   rž   s   @r-   r*  r*  .  s˜   ø€ € € € € ðH 3ð H°Sð HÀCð HÈDð Hð Hð Hð Hð Hð Hð
˜Uœ\ð °°s¸C°x´ð ÀUÄ\ð ð ð ð ð ð ð ð r,   r*  c                   ót   ‡ — e Zd ZdZdeedf         dededdfˆ fd„Zd	ej        de	ej                 fd
„Z
ˆ xZS )ÚBeitPyramidPoolingModuleak  
    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.

    Based on OpenMMLab's implementation, found in https://github.com/open-mmlab/mmsegmentation.
    Úpool_scales.r  r,  r5   Nc                 óÂ   •‡‡— t          ¦   «                              ¦   «          || _        ‰| _        ‰| _        t          j        ˆˆfd„|D ¦   «         ¦  «        | _        d S )Nc                 ó4   •— g | ]}t          |‰‰¬ ¦  «        ‘ŒS ))r+  r  r,  )r*  )rÛ   r+  r,  r  s     €€r-   rÝ   z5BeitPyramidPoolingModule.__init__.<locals>.<listcomp>N  s9   ø€ ð ð ð àõ (°:È;ÐaiÐjÑjÔjðð ð r,   )rg   r8   r7  r  r,  r   rå   Úblocks)rH   r7  r  r,  rp   s     ``€r-   r8   z!BeitPyramidPoolingModule.__init__H  st   øøø€ Ý‰Œ×ÒÑÔÐØ&ˆÔØ&ˆÔØ ˆŒÝ”mðð ð ð ð à"-ðñ ô ñ
ô 
ˆŒˆˆr,   r¼   c                 óf   ‡‡— ‰                      ¦   «         dd …         Šˆˆfd„| j        D ¦   «         S )Nr   c                 ó*   •— g | ]} |‰‰¬ ¦  «        ‘ŒS ))rQ   r+   )rÛ   Úblockr¼   Úoriginal_sizes     €€r-   rÝ   z4BeitPyramidPoolingModule.forward.<locals>.<listcomp>V  s(   ø€ ÐRÐRÐR¸U���m¨-Ð8Ñ8Ô8ÐRÐRÐRr,   )rQ   r:  )rH   r¼   r>  s    `@r-   r`   z BeitPyramidPoolingModule.forwardT  s=   øø€ Ø%×*Ò*Ñ,Ô,¨Q¨R¨RÔ0ˆØRÐRÐRÐRÐRÀdÄkÐRÑRÔRÐRr,   )r'   r(   r)   r*   rj   r›   r8   r:   r   rk   r`   r�   rž   s   @r-   r6  r6  ;  s¢   ø€ € € € € ð
ð 
ð

 E¨#¨s¨(¤Oð 

À#ð 

ÐQTð 

ÐY]ð 

ð 

ð 

ð 

ð 

ð 

ðS U¤\ð S°d¸5¼<Ô6Hð Sð Sð Sð Sð Sð Sð Sð Sr,   r6  c                   óŒ   ‡ — e Zd ZdZdeddfˆ fd„Zdeej                 dej        fd„Z	de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://huggingface.co/papers/1807.10221).

    Based on OpenMMLab's implementation, found in https://github.com/open-mmlab/mmsegmentation.
    r4   r5   Nc           	      ó~  •— t          ¦   «                              ¦   «          |j        | _        |j        gdz  | _        |j        | _        t          j        | j        |j        d¬¦  «        | _	        t          | j        | j        d         | j        ¦  «        | _        t          | j        d         t          | j        ¦  «        | j        z  z   | j        dd¬¦  «        | _        t          j        ¦   «         | _        t          j        ¦   «         | _        | j        d d…         D ]f}| j                             t          || j        d¬¦  «        ¦  «         | j                             t          | j        | j        dd¬¦  «        ¦  «         Œgt          t          | j        ¦  «        | j        z  | j        dd¬¦  «        | _        d S )Né   r"   r.  rM   r   ©r  r!  )rg   r8   r7  r<   r  r,  r   r&  r  r  r6  Úpsp_modulesr  ÚlenÚpsp_bottleneckrå   Úlateral_convsÚ	fpn_convsÚappendÚfpn_bottleneck)rH   r4   r  rp   s      €r-   r8   zBeitUperHead.__init__a  sŸ  ø€ Ý‰Œ×ÒÑÔÐà!Ô-ˆÔØ"Ô.Ð/°!Ñ3ˆÔØÔ*ˆŒÝœ) D¤M°6Ô3DÐRSÐTÑTÔTˆŒõ 4ØÔØÔ˜RÔ ØŒMñ
ô 
ˆÔõ
 ,ØÔ˜RÔ ¥3 tÔ'7Ñ#8Ô#8¸4¼=Ñ#HÑHØŒMØØð	
ñ 
ô 
ˆÔõ  œ]™_œ_ˆÔÝœ™œˆŒØÔ+¨C¨R¨CÔ0ð 	ið 	iˆKØÔ×%Ò%¥m°KÀÄÐ\]Ð&^Ñ&^Ô&^Ñ_Ô_Ð_ØŒN×!Ò!¥-°´¸t¼}ÐZ[ÐefÐ"gÑ"gÔ"gÑhÔhÐhÐhå+Ý�Ô Ñ!Ô! D¤MÑ1ØŒMØØð	
ñ 
ô 
ˆÔÐÐr,   r¼   c                 ó”   — |d         }t          j        |g|                      |¦  «        ¢d¬¦  «        }|                      |¦  «        S rL   )r:   rU   rD  rF  )rH   r¼   r4  s      r-   Úpsp_forwardzBeitUperHead.psp_forwardƒ  sK   € Ø$ RÔ(ˆÝ”y ,Ð!P°×1AÒ1AÀ,Ñ1OÔ1OÐ!PÐVWÐXÑXÔXˆØ×"Ò" <Ñ0Ô0Ð0r,   Úencoder_hidden_statesc                 ó¬  — g }t          | j        |¦  «        D ]#\  }}|                      ||¦  «        ¦  «         Œ$|                     |                      |¦  «        ¦  «         t	          |¦  «        }t          |dz
  dd¦  «        D ]U}||dz
           j        dd …         }||dz
           t          j         	                    ||         |dd¬¦  «        z   ||dz
  <   ŒVg }t          |dz
  ¦  «        D ]1}|                      | j
        |         ||         ¦  «        ¦  «         Œ2|                     |d         ¦  «         t          |dz
  dd¦  «        D ]A}t          j         	                    ||         |d         j        dd …         dd¬¦  «        ||<   ŒBt          j        |d¬¦  «        }|                      |¦  «        }	|                      |	¦  «        }	|	S )	Nr"   r   rM   r   r…   Fr‡   rN   )ÚziprG  rI  rL  rE  rä   rP   r   rŠ   r‹   rH  r:   rU   rJ  r  )
rH   rM  ÚlateralsÚlateral_convr4  Úused_backbone_levelsrÜ   Ú
prev_shapeÚfpn_outsÚoutputs
             r-   r`   zBeitUperHead.forwardˆ  sù  € àˆÝ*-¨dÔ.@ÐBWÑ*XÔ*Xð 	8ð 	8Ñ&ˆL˜,Ø�OŠO˜L˜L¨Ñ6Ô6Ñ7Ô7Ð7Ð7à�Š˜×(Ò(Ð)>Ñ?Ô?Ñ@Ô@Ð@õ  # 8™}œ}ÐÝÐ+¨aÑ/°°BÑ7Ô7ð 	ð 	ˆAØ! ! a¡%œÔ.¨q¨r¨rÔ2ˆJØ& q¨1¡uœoµ´×0IÒ0IØ˜” *°:ÈUð 1Jñ 1ô 1ñ ˆH�Q˜‘U‰OˆOð
 ˆÝÐ+¨aÑ/Ñ0Ô0ð 	<ð 	<ˆAØ�OŠOÐ-˜DœN¨1Ô-¨h°q¬kÑ:Ô:Ñ;Ô;Ð;Ð;à�Š˜ œÑ%Ô%Ð%åÐ+¨aÑ/°°BÑ7Ô7ð 	ð 	ˆAÝœ-×3Ò3Ø˜” (¨1¤+Ô"3°A°B°BÔ"7¸jÐX]ð 4ñ ô ˆH�Q‰KˆKõ ”9˜X¨1Ð-Ñ-Ô-ˆØ×$Ò$ XÑ.Ô.ˆØ—’ Ñ(Ô(ˆàˆr,   )r'   r(   r)   r*   r#   r8   rk   r:   r   rL  r`   r�   rž   s   @r-   r@  r@  Y  s¬   ø€ € € € € ðð ð 
˜zð  
¨dð  
ð  
ð  
ð  
ð  
ð  
ðD1¨¨e¬lÔ);ð 1ÀÄð 1ð 1ð 1ð 1ð
¨T°%´,Ô-?ð ÀEÄLð ð ð ð ð ð ð ð r,   r@  c                   ó‚   ‡ — e Zd ZdZ	 ddedededeeeef         z  d	d
f
ˆ fd„Zde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://huggingface.co/papers/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.
    r   r   r"   r4   Úin_indexr  r"  r5   Nc           
      óÌ  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        |j        | _	        || _
        |dz  |z  }t          j        ¦   «         | _        | j        dk    r†| j                             t          | j        | j        |||¬¦  «        ¦  «         t!          | j        dz
  ¦  «        D ]8}| j                             t          | j        | j        |||¬¦  «        ¦  «         Œ9| j	        r-t          | j        | j        z   | j        ||dz  ¬¦  «        | _        t          j        | j        |j        d¬¦  «        | _        d S )Nr   r   )r  r!  r"  r"   rC  r.  )rg   r8   r<   r  Úauxiliary_channelsr,  Úauxiliary_num_convsÚ	num_convsÚauxiliary_concat_inputÚconcat_inputrX  r   rå   ÚconvsrI  r  rä   Úconv_catr&  r  r  )rH   r4   rX  r  r"  Úconv_paddingrW   rp   s          €r-   r8   zBeitFCNHead.__init__¹  sz  ø€ õ 	‰Œ×ÒÑÔÐØ!Ô-ˆÔØÔ1ˆŒØÔ3ˆŒØ"Ô9ˆÔØ ˆŒà# qÑ(¨HÑ4ˆÝ”]‘_”_ˆŒ
ØŒ>˜AÒÐØŒJ×ÒÝØÔ$ d¤mÀÐVbÐmuðñ ô ñô ð õ
 ˜4œ>¨AÑ-Ñ.Ô.ð 	ð 	�Ø”
×!Ò!Ý!ØœØœØ$/Ø ,Ø!)ðñ ô ñô ð ð ð Ôð 	Ý)ØÔ  4¤=Ñ0°$´-È[ÐbmÐqrÑbrðñ ô ˆDŒMõ œ) D¤M°6Ô3DÐRSÐTÑTÔTˆŒˆˆr,   rM  c                 óÜ   — || j                  }|}| j        D ]} ||¦  «        }Œ| j        r+|                      t	          j        ||gd¬¦  «        ¦  «        }|                      |¦  «        }|S )Nr"   rN   )rX  r_  r^  r`  r:   rU   r  )rH   rM  rÅ   r¼   r1  s        r-   r`   zBeitFCNHead.forwardÜ  s~   € Ø(¨¬Ô7ˆØ ˆØ”Jð 	0ð 	0ˆDØ ˜D Ñ/Ô/ˆMˆMØÔð 	WØ ŸMšM­%¬)°X¸}Ð4MÐSTÐ*UÑ*UÔ*UÑVÔVˆMØŸš¨Ñ6Ô6ˆØÐr,   )r   r   r"   )r'   r(   r)   r*   r#   r›   rj   r8   rk   r:   r   r`   r�   rž   s   @r-   rW  rW  ª  sÅ   ø€ € € € € ðð ð noð!Uð !UØ ð!UØ,/ð!UØBEð!UØUXÐ[`ÐadÐfiÐaiÔ[jÑUjð!Uà	ð!Uð !Uð !Uð !Uð !Uð !UðF¨T°%´,Ô-?ð ÀEÄLð ð ð ð ð ð ð ð r,   rW  c            	       óZ   ‡ — e Zd ZdZddedededdfˆ fd„Zd	ej        dej        fd
„Zˆ xZ	S )ÚBeitFPNUpBlockuE   4x upsampling block: ConvTranspose â†’ BN â†’ GELU â†’ ConvTranspose.r   r<   r  r   r5   Nc                 ó  •— t          ¦   «                              ¦   «          t          j        ||||¬¦  «        | _        t          j        |¦  «        | _        t          j        ¦   «         | _        t          j        ||||¬¦  «        | _	        d S )N©r  r   )
rg   r8   r   ÚConvTranspose2dÚconv_transpose1ÚBatchNorm2dÚnormalizationÚGELUr$  Úconv_transpose2)rH   r<   r  r   rp   s       €r-   r8   zBeitFPNUpBlock.__init__ê  sz   ø€ Ý‰Œ×ÒÑÔÐÝ!Ô1°+¸{ÐXcÐlrÐsÑsÔsˆÔÝœ^¨KÑ8Ô8ˆÔÝœ'™)œ)ˆŒÝ!Ô1°+¸{ÐXcÐlrÐsÑsÔsˆÔÐÐr,   r¼   c                 ó®   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ra   )rh  rj  r$  rl  rý   s     r-   r`   zBeitFPNUpBlock.forwardñ  sR   € Ø×,Ò,¨]Ñ;Ô;ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš¨Ñ6Ô6ˆØ×,Ò,¨]Ñ;Ô;ˆØÐr,   )r   r   )
r'   r(   r)   r*   r›   r8   r:   r   r`   r�   rž   s   @r-   rd  rd  ç  s–   ø€ € € € € ØOÐOðtð t Cð t°cð tÀsð tÐSWð tð tð tð tð tð tð U¤\ð °e´lð ð ð ð ð ð ð ð r,   rd  c                   ól   ‡ — e Zd ZdZdefˆ fd„Zdeej        df         deej        df         fd„Z	ˆ xZ
S )ÚBeitFPNNeckz¤
    4-level feature pyramid neck for BeiT. Produces x4 upsample, x2 upsample,
    identity, and x2 downsample outputs from the four selected ViT feature maps.
    r4   c                 óþ   •— t          ¦   «                              ¦   «          t          |j        ¦  «        | _        t          j        |j        |j        dd¬¦  «        | _        t          j        dd¬¦  «        | _	        d S )Nr   rf  )
rg   r8   rd  r<   Úfpn1r   rg  Úfpn2Ú	MaxPool2dÚfpn4r©   s     €r-   r8   zBeitFPNNeck.__init__ÿ  sh   ø€ Ý‰Œ×ÒÑÔÐÝ" 6Ô#5Ñ6Ô6ˆŒ	ÝÔ& vÔ'9¸6Ô;MÐ[\ÐefÐgÑgÔgˆŒ	Ý”L¨Q°qÐ9Ñ9Ô9ˆŒ	ˆ	ˆ	r,   Úfeature_maps.r5   c                 ó°   — |                       |d         ¦  «        |                      |d         ¦  «        |d         |                      |d         ¦  «        fS rf   )rq  rr  rt  )rH   ru  s     r-   r`   zBeitFPNNeck.forward  sL   € à�IŠI�l 1”oÑ&Ô&Ø�IŠI�l 1”oÑ&Ô&Ø˜ŒOØ�IŠI�l 1”oÑ&Ô&ð	
ð 	
r,   )r'   r(   r)   r*   r#   r8   rj   r:   r   r`   r�   rž   s   @r-   ro  ro  ù  s‰   ø€ € € € € ðð ð
:˜zð :ð :ð :ð :ð :ð :ð
 E¨%¬,¸Ð*;Ô$<ð 
ÀÀuÄ|ÐUXÐGXÔAYð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r,   ro  c                   ó®   ‡ — e Zd Zdeddfˆ fd„Zeee	 	 	 ddej	        dz  dej	        dz  de
d	ee         deez  f
d
„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚBeitForSemanticSegmentationr4   r5   Nc                 ó˜  •— t          ¦   «                              |¦  «         |j        | _        t          |d¬¦  «        | _        t          | j        j        ¦  «        dk    rt          d¦  «        ‚t          |¦  «        | _
        t          |¦  «        | _        |j        rt          |¦  «        nd | _        |                      ¦   «          d S )NFr  rB  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.)rg   r8   r  rÕ   r  rE  r4   Úout_indicesÚ
ValueErrorro  Úfpnr@  Údecode_headÚuse_auxiliary_headrW  Úauxiliary_headrí   r©   s     €r-   r8   z$BeitForSemanticSegmentation.__init__  sÁ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ˜f¸Ð>Ñ>Ô>ˆŒ	åˆtŒ{Ô&Ñ'Ô'¨1Ò,Ð,Ýð-ñô ð õ
 ˜vÑ&Ô&ˆŒõ (¨Ñ/Ô/ˆÔØ5;Ô5NÐX�k¨&Ñ1Ô1Ð1ÐTXˆÔð 	�ŠÑÔÐÐÐr,   FrI   r  rV   r¿   c                 óL  ‡‡‡‡— |�| j         j        dk    rt          d¦  «        ‚ | j        |fd|i|¤Ž}|j        Š|j        \  Š}}}|| j         j        z  Š|| j         j        z  Št          ˆˆˆˆfd„| j         j        D ¦   «         ¦  «        }	|  	                    |	¦  «        }	|  
                    |	¦  «        }
d}| j        �|                      |	¦  «        }d}|�.|                      |
|| j         j        || j         j        ¬¦  «        }t          ||
|j        |j        ¬¦  «        S )aD  
        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).

        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 onerV   c              3   óš   •K  — | ]E}‰|d z
           dd…d d…f                               d d¦  «                             ‰d‰‰¦  «        V — ŒFdS )r"   Nr   rM   )Ú	transposer‰   )rÛ   rÜ   r[   rM  Úpatch_heightÚpatch_widths     €€€€r-   ú	<genexpr>z6BeitForSemanticSegmentation.forward.<locals>.<genexpr>U  sx   øè è € ð 
ð 
àð " ! a¡%Ô(¨¨¨¨A¨B¨B¨Ô/×9Ò9¸!¸QÑ?Ô?×GÒGÈ
ÐTVÐXdÐfqÑrÔrð
ð 
ð 
ð 
ð 
ð 
r,   )Úignore_indexÚauxiliary_logitsÚauxiliary_loss_weightr
  )r4   r  r{  r  r¼   rP   rA   rj   rz  r|  r}  r  r  Úsemantic_loss_ignore_indexrˆ  r   r  )rH   rI   r  rV   r¿   r  rW   rX   rY   ru  r  r‡  r  r[   rM  rƒ  r„  s                @@@@r-   r`   z#BeitForSemanticSegmentation.forward%  s‘  øøøø€ ðB Ð $¤+Ô"8¸AÒ"=Ð"=ÝÐNÑOÔOÐOØ�$”)Øð
ð 
à%=ð
ð ð
ð 
ˆð !(Ô 5ÐØ'3Ô'9Ñ$ˆ
�A�v˜uØ ¤Ô!7Ñ7ˆØ˜tœ{Ô5Ñ5ˆõ ð 
ð 
ð 
ð 
ð 
ð 
ð 
à”[Ô,ð
ñ 
ô 
ñ 
ô 
ˆð —x’x Ñ-Ô-ˆà×!Ò! ,Ñ/Ô/ˆàÐØÔÐ*Ø#×2Ò2°<Ñ@Ô@ÐàˆØÐØ×%Ò%ØØØ!œ[ÔCØ!1Ø&*¤kÔ&Gð &ñ ô ˆDõ 'ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r,   r  )r'   r(   r)   r#   r8   r   r	   r   r:   r   rœ   r   r   rj   r   r`   r�   rž   s   @r-   rx  rx    sé   ø€ € € € € ð˜zð ¨dð ð ð ð ð ð ð* Ø Øð -1Ø&*Ø).ð	G
ð G
à”l TÑ)ðG
ð ”˜tÑ#ðG
ð #'ð	G
ð
 Ð+Ô,ðG
ð 
Ð(Ñ	(ðG
ð G
ð G
ñ „^ñ !Ô ñ ÔðG
ð G
ð G
ð G
ð G
r,   rx  zM
    BEiT backbone, to be used with frameworks like DETR and MaskFormer.
    c            	       ón   ‡ — e Zd Zˆ fd„Zeeededee	         de
fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚBeitBackbonec                 óL  •‡— t          ¦   «                              ‰¦  «         ˆfd„t          ‰j        dz   ¦  «        D ¦   «         | _        t          ‰d¬¦  «        | _        ‰j        rt          ‰¦  «        nt          j
        ¦   «         | _        |                      ¦   «          d S )Nc                 ó   •— g | ]	}‰j         ‘Œ
S r+   )r<   )rÛ   rW   r4   s     €r-   rÝ   z)BeitBackbone.__init__.<locals>.<listcomp>{  s   ø€ Ð]Ð]Ð]°A˜VÔ/Ð]Ð]Ð]r,   r"   Fr  )rg   r8   rä   rÚ   Únum_featuresrÕ   r  Úadd_fpnro  r   r´   r|  rí   r©   s    `€r-   r8   zBeitBackbone.__init__x  s–   øø€ Ý‰Œ×Ò˜Ñ Ô Ð à]Ð]Ð]Ð]½¸vÔ?WÐZ[Ñ?[Ñ9\Ô9\Ð]Ñ]Ô]ˆÔÝ˜f¸Ð>Ñ>Ô>ˆŒ	Ø*0¬.ÐK•;˜vÑ&Ô&Ð&½b¼k¹m¼mˆŒð 	�ŠÑÔÐÐÐr,   rI   r¿   r5   c                 óÐ  — |j         \  }}}}|| j        j        z  }|| j        j        z  } | j        |fi |¤Ž}	|	j        }
d}t          | j        |
¦  «        D ]_\  }}|| j        v rQ| j        j        r?|dd…dd…dd…f         }| 	                    dd¦  «        }| 
                    |d||¦  «        }||fz  }Œ`|                      |¦  «        }t          ||	j        |	j        ¬¦  «        S )a:  
        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]
        ```r+   Nr"   r   rM   )ru  r¼   r  )rP   r4   rA   r  r¼   rO  Ústage_namesÚout_featuresÚreshape_hidden_statesr‚  r‰   r|  r   r  )rH   rI   r¿   r[   rW   rX   rY   rƒ  r„  r  r¼   ru  Ústager4  s                 r-   r`   zBeitBackbone.forward‚  s&  € ð@ (4Ô'9Ñ$ˆ
�A�v˜uØ ¤Ô!7Ñ7ˆØ˜tœ{Ô5Ñ5ˆØ�$”)˜LÐ3Ð3¨FÐ3Ð3ˆàÔ-ˆØˆÝ#& tÔ'7¸Ñ#GÔ#Gð 	0ð 	0ÑˆE�<Ø˜Ô)Ð)Ð)Ø”;Ô4ð cØ#/°°°°1°2°2°q°q°q°Ô#9�LØ#/×#9Ò#9¸!¸QÑ#?Ô#?�LØ#/×#7Ò#7¸
ÀBÈÐVaÑ#bÔ#b�Là  Ñ/�øà—x’x Ñ-Ô-ˆåØ%Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r,   )r'   r(   r)   r8   r   r	   r   r   r   r   r   r`   r�   rž   s   @r-   r‹  r‹  r  s�   ø€ € € € € ðð ð ð ð ð Ø Øð3
àð3
ð Ð+Ô,ð3
ð 
ð	3
ð 3
ð 3
ñ „^ñ !Ô ñ Ôð3
ð 3
ð 3
ð 3
ð 3
r,   r‹  )r  rÿ   rx  rÕ   rÉ   r‹  )Hr*   Údataclassesr   r:   r   r   Ú r   rÌ   Úbackbone_utilsr   r	   Úmasking_utilsr
   Úmodeling_outputsr   r   r   r   r   Úmodeling_utilsr   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úresnet.modeling_resnetr   Úswin.modeling_swinr   Úvit.modeling_vitr   r   r   r   r    r!   Úconfiguration_beitr#   r&   r/   r3   r7   rd   r    r«   r­   r¯   rÉ   rÕ   rë   rÿ   r  r  r*  r6  r@  rW  rd  ro  rx  r‹  Ú__all__r+   r,   r-   ú<module>r¥     s™  ðð Ð à !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø @Ð @Ð @Ð @Ð @Ð @Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø -Ð -Ð -Ð -Ð -Ð -Ø tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tØ *Ð *Ð *Ð *Ð *Ð *ð €ððñ ô ð
 ðð ð ð ð Ð!;ñ ô ñ „ñô ðð	ð 	ð 	ð 	ð 	Ð,ñ 	ô 	ð 	ð'ð 'ð 'ð 'ð '�]ñ 'ô 'ð 'ðTV3ð V3ð V3ð V3ð V3˜rœyñ V3ô V3ð V3ðr`ð `ð `ð `ð `�Lñ `ô `ð `ð	ð 	ð 	ð 	ð 	ˆfñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�<ñ 	ô 	ð 	ð7ð 7ð 7ð 7ð 7�ñ 7ô 7ð 7ðt ðTð Tð Tð Tð TÐ,ñ Tô Tñ „ðTð. ðJjð Jjð Jjð Jjð JjÐ#ñ Jjô Jjñ „ðJjðZ	vð 	vð 	vð 	vð 	v�”ñ 	vô 	vð 	vð €ððñ ô ðS
ð S
ð S
ð S
ð S
Ð!4ñ S
ô S
ñô ðS
ðl €ððñ ô ð/
ð /
ð /
ð /
ð /
Ð!4ñ /
ô /
ñô ð/
ðd
ð 
ð 
ð 
ð 
�Oñ 
ô 
ð 
ð4
ð 
ð 
ð 
ð 
˜bœiñ 
ô 
ð 
ðSð Sð Sð Sð S˜rœyñ Sô Sð Sð<Nð Nð Nð Nð N�2”9ñ Nô Nð Nðb:ð :ð :ð :ð :�"”)ñ :ô :ð :ðzð ð ð ð �R”Yñ ô ð ð$
ð 
ð 
ð 
ð 
�"”)ñ 
ô 
ð 
ð* ð`
ð `
ð `
ð `
ð `
Ð"5ñ `
ô `
ñ „ð`
ðF €ððñ ô ð
A
ð A
ð A
ð A
ð A
�=Ð"5ñ A
ô A
ñô ð
A
ðHð ð €€€r,   