ó
    ˆŽ¡jÕ‡  ã            	       óÚ  • S r SSKrSSKrSSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SS	KJrJrJrJr  SS
KJr  SSKJrJrJr  SSKJr  \R4                  " \5      rS=S\S\S\S-  S\4S jjr " S S\R>                  5      r  " S S\R>                  5      r! " S S\R>                  5      r" " S S\R>                  5      r# " S S\R>                  5      r$ " S S\R>                  5      r% " S S \R>                  5      r& " S! S"\R>                  5      r' " S# S$\R>                  5      r( " S% S&\R>                  5      r) " S' S(\5      r* " S) S*\R>                  5      r+\ " S+ S,\5      5       r,\ " S- S.\,5      5       r-\" S/S09 " S1 S2\,5      5       r. " S3 S4\R>                  5      r/ " S5 S6\R>                  5      r0 " S7 S8\R>                  5      r1\" S9S09 " S: S;\,5      5       r2/ S<Qr3g)>zPyTorch MobileViT model.é    N)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttentionÚSemanticSegmenterOutput)ÚPreTrainedModel)Úauto_docstringÚloggingÚ	torch_inté   )ÚMobileViTConfigÚvalueÚdivisorÚ	min_valueÚreturnc                 ó|   • Uc  Un[        U[        XS-  -   5      U-  U-  5      nUSU -  :  a  X1-  n[        U5      $ )zM
Ensure that all layers have a channel count that is divisible by `divisor`.
é   gÍÌÌÌÌÌì?)ÚmaxÚint)r   r   r   Ú	new_values       Ú¾C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/mobilevit/modeling_mobilevit.pyÚmake_divisibler   )   sO   € ð ÑØˆ	Ü�Iœs 5°Q©;Ñ#6Ó7¸7ÑBÀWÑLÓM€Ià�3˜‘;ÓØÑˆ	Üˆy‹>Ðó    c                   ó¨   ^ • \ rS rSr      SS\S\S\S\S\S\S\S	\S
\S\\-  SS4U 4S jjjrS\	R                  S\	R                  4S jrSrU =r$ )ÚMobileViTConvLayeré6   ÚconfigÚin_channelsÚout_channelsÚkernel_sizeÚstrideÚgroupsÚbiasÚdilationÚuse_normalizationÚuse_activationr   Nc                 óD  >• [         TU ]  5         [        US-
  S-  5      U-  nX&-  S:w  a  [        SU SU S35      eX6-  S:w  a  [        SU SU S35      e[        R
                  " UUUUUUUUSS	9	U l        U	(       a  [        R                  " US
SSSS9U l        OS U l        U
(       an  [        U
[        5      (       a  [        U
   U l        g [        UR                  [        5      (       a  [        UR                     U l        g UR                  U l        g S U l        g )Nr   r   r   zInput channels (z) are not divisible by z groups.zOutput channels (Úzeros)	r#   r$   r%   r&   Úpaddingr)   r'   r(   Úpadding_modegñhãˆµøä>gš™™™™™¹?T)Únum_featuresÚepsÚmomentumÚaffineÚtrack_running_stats)ÚsuperÚ__init__r   Ú
ValueErrorr   ÚConv2dÚconvolutionÚBatchNorm2dÚnormalizationÚ
isinstanceÚstrr   Ú
activationÚ
hidden_act)Úselfr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r.   Ú	__class__s               €r   r6   ÚMobileViTConvLayer.__init__7   s,  ø€ ô 	‰ÑÔÜ�{ Q‘¨!Ñ+Ó,¨xÑ7ˆàÑ 1Ó$ÜÐ/°¨}Ð<SÐTZÐS[Ð[cÐdÓeÐeØÑ  AÓ%ÜÐ0°°Ð>UÐV\ÐU]Ð]eÐfÓgÐgäŸ9š9Ø#Ø%Ø#ØØØØØØ ñ

ˆÔö Ü!#§¢Ø)ØØØØ$(ñ"ˆDÕð "&ˆDÔæÜ˜.¬#×.Ñ.Ü"(¨Ñ"8�•Ü˜F×-Ñ-¬s×3Ñ3Ü"(¨×):Ñ):Ñ";�•à"(×"3Ñ"3�•à"ˆD�Or   Úfeaturesc                 ó    • U R                  U5      nU R                  b  U R                  U5      nU R                  b  U R                  U5      nU$ ©N)r9   r;   r>   )r@   rC   s     r   ÚforwardÚMobileViTConvLayer.forwardm   sK   € Ø×#Ñ# HÓ-ˆØ×ÑÑ)Ø×)Ñ)¨(Ó3ˆHØ�?‰?Ñ&Ø—‘ xÓ0ˆHØˆr   )r>   r9   r;   )r   r   Fr   TT)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   Úboolr=   r6   ÚtorchÚTensorrF   Ú__static_attributes__Ú__classcell__©rA   s   @r   r    r    6   s²   ø† ð ØØØØ"&Ø%)ñ4#àð4#ð ð4#ð ð	4#ð
 ð4#ð ð4#ð ð4#ð ð4#ð ð4#ð  ð4#ð ˜s™
ð4#ð 
÷4#ð 4#ðl §¡ð °·±÷ ò r   r    c                   óˆ   ^ • \ rS rSrSr SS\S\S\S\S\SS	4U 4S
 jjjrS\R                  S\R                  4S jr
SrU =r$ )ÚMobileViTInvertedResidualév   zQ
Inverted residual block (MobileNetv2): https://huggingface.co/papers/1801.04381
r"   r#   r$   r&   r)   r   Nc           
      ó6  >• [         TU ]  5         [        [        [	        X!R
                  -  5      5      S5      nUS;  a  [        SU S35      eUS:H  =(       a    X#:H  U l        [        XUSS9U l	        [        UUUSUUUS9U l
        [        UUUSS	S
9U l        g )Né   )r   r   zInvalid stride Ú.r   ©r#   r$   r%   r   )r#   r$   r%   r&   r'   r)   F©r#   r$   r%   r+   )r5   r6   r   r   ÚroundÚexpand_ratior7   Úuse_residualr    Ú
expand_1x1Úconv_3x3Ú
reduce_1x1)r@   r"   r#   r$   r&   r)   Úexpanded_channelsrA   s          €r   r6   Ú"MobileViTInvertedResidual.__init__{   s¶   ø€ ô 	‰ÑÔÜ*¬3¬u°[×CVÑCVÑ5VÓ/WÓ+XÐZ[Ó\Ðà˜ÓÜ˜¨v¨h°aÐ8Ó9Ð9à# q™[×K¨{Ñ/JˆÔä,ØÐ:KÐYZñ
ˆŒô +ØØ)Ø*ØØØ$Øñ
ˆŒô -ØØ)Ø%ØØ ñ
ˆ�r   rC   c                 óš   • UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  (       a  X!-   $ U$ rE   )r]   r^   r_   r\   )r@   rC   Úresiduals      r   rF   Ú!MobileViTInvertedResidual.forwardœ   sG   € Øˆà—?‘? 8Ó,ˆØ—=‘= Ó*ˆØ—?‘? 8Ó,ˆà&*×&7×&7ˆxÑ"ÐE¸XÐEr   )r^   r]   r_   r\   ©r   )rH   rI   rJ   rK   Ú__doc__r   r   r6   rM   rN   rF   rO   rP   rQ   s   @r   rS   rS   v   sn   ø† ñð
 jkñ
Ø%ð
Ø47ð
ØGJð
ØTWð
Øcfð
à	÷
ð 
ðBF §¡ð F°·±÷ Fò Fr   rS   c                   ó„   ^ • \ rS rSr SS\S\S\S\S\SS4U 4S	 jjjrS
\R                  S\R                  4S jr	Sr
U =r$ )ÚMobileViTMobileNetLayeré¦   r"   r#   r$   r&   Ú
num_stagesr   Nc                 óÜ   >• [         TU ]  5         [        R                  " 5       U l        [        U5       H4  n[        UUUUS:X  a  UOSS9nU R                  R                  U5        UnM6     g )Nr   r   )r#   r$   r&   )r5   r6   r   Ú
ModuleListÚlayerÚrangerS   Úappend)	r@   r"   r#   r$   r&   rj   Úirm   rA   s	           €r   r6   Ú MobileViTMobileNetLayer.__init__§   sc   ø€ ô 	‰ÑÔä—]’]“_ˆŒ
Ü�zÖ"ˆAÜ-ØØ'Ø)Ø!" a£‘v¨Qñ	ˆEð �J‰J×Ñ˜eÔ$Ø&ŠKò #r   rC   c                 ó<   • U R                    H  nU" U5      nM     U$ rE   ©rm   )r@   rC   Úlayer_modules      r   rF   ÚMobileViTMobileNetLayer.forward·   s   € Ø ŸJœJˆLÙ# HÓ-ŠHñ 'àˆr   rs   )r   r   ©rH   rI   rJ   rK   r   r   r6   rM   rN   rF   rO   rP   rQ   s   @r   rh   rh   ¦   s`   ø† àopñ'Ø%ð'Ø47ð'ØGJð'ØTWð'Øilð'à	÷'ð 'ð  §¡ð °·±÷ ò r   rh   c                   ór   ^ • \ rS rSrS\S\SS4U 4S jjrS\R                  S\R                  4S jr	S	r
U =r$ )
ÚMobileViTSelfAttentioné½   r"   Úhidden_sizer   Nc                 ór  >• [         TU ]  5         X!R                  -  S:w  a  [        SU SUR                   S35      eUR                  U l        [	        X!R                  -  5      U l        U R                  U R
                  -  U l        [        R                  " X R                  UR                  S9U l
        [        R                  " X R                  UR                  S9U l        [        R                  " X R                  UR                  S9U l        [        R                  " UR                  5      U l        g )Nr   zThe hidden size z4 is not a multiple of the number of attention heads rW   )r(   )r5   r6   Únum_attention_headsr7   r   Úattention_head_sizeÚall_head_sizer   ÚLinearÚqkv_biasÚqueryÚkeyr   ÚDropoutÚattention_probs_dropout_probÚdropout©r@   r"   rz   rA   s      €r   r6   ÚMobileViTSelfAttention.__init__¾   sô   ø€ Ü‰ÑÔà×3Ñ3Ñ3°qÓ8ÜØ" ; -ð 0Ø×3Ñ3Ð4°Að7óð ð
 $*×#=Ñ#=ˆÔ Ü#& {×5OÑ5OÑ'OÓ#PˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y’Y˜{×,>Ñ,>ÀVÇ_Á_ÑUˆŒ
Ü—9’9˜[×*<Ñ*<À6Ç?Á?ÑSˆŒÜ—Y’Y˜{×,>Ñ,>ÀVÇ_Á_ÑUˆŒ
ä—z’z &×"EÑ"EÓFˆ�r   Úhidden_statesc                 ó*  • UR                   S S n/ UQSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      n[        R                  " XER	                  SS5      5      nU[        R                  " U R                  5      -  n[        R                  R                  USS9nU R                  U5      n[        R                  " X†5      n	U	R                  SSSS5      R!                  5       n	U	R#                  5       S S U R$                  4-   n
U	R                  " U
6 n	U	$ )Néÿÿÿÿr   r   éþÿÿÿ©Údimr   r   )Úshaper}   r�   ÚviewÚ	transposer‚   r   rM   ÚmatmulÚmathÚsqrtr   Ú
functionalÚsoftmaxr…   ÚpermuteÚ
contiguousÚsizer~   )r@   rˆ   Úinput_shapeÚhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapes              r   rF   ÚMobileViTSelfAttention.forwardÑ   sn  € Ø#×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆØ—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆØ—H‘H˜]Ó+×0Ñ0°Ó>×HÑHÈÈAÓNˆ	Ø—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆô !Ÿ<š<¨×5HÑ5HÈÈRÓ5PÓQÐØ+¬d¯iªi¸×8PÑ8PÓ.QÑQÐô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÐIˆð Ÿ,™, Ó7ˆäŸš _ÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ%×*Ò*Ð,CÐDˆØÐr   )r~   r}   r…   r‚   r|   r�   r   rv   rQ   s   @r   rx   rx   ½   sA   ø† ðG˜ð G¸Sð GÀT÷ Gð& U§\¡\ð °e·l±l÷ ò r   rx   c                   ór   ^ • \ rS rSrS\S\SS4U 4S jjrS\R                  S\R                  4S jr	S	r
U =r$ )
ÚMobileViTSelfOutputéë   r"   rz   r   Nc                 ó¢   >• [         TU ]  5         [        R                  " X"5      U l        [        R
                  " UR                  5      U l        g rE   ©r5   r6   r   r   Údenserƒ   Úhidden_dropout_probr…   r†   s      €r   r6   ÚMobileViTSelfOutput.__init__ì   s4   ø€ Ü‰ÑÔÜ—Y’Y˜{Ó8ˆŒ
Ü—z’z &×"<Ñ"<Ó=ˆ�r   rˆ   c                 óJ   • U R                  U5      nU R                  U5      nU$ rE   ©r¨   r…   ©r@   rˆ   s     r   rF   ÚMobileViTSelfOutput.forwardñ   s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr   r¬   rv   rQ   s   @r   r¤   r¤   ë   s=   ø† ð>˜ð >¸Sð >ÀT÷ >ð
 U§\¡\ð °e·l±l÷ ò r   r¤   c                   ór   ^ • \ rS rSrS\S\SS4U 4S jjrS\R                  S\R                  4S jr	S	r
U =r$ )
ÚMobileViTAttentioné÷   r"   rz   r   Nc                 ób   >• [         TU ]  5         [        X5      U l        [	        X5      U l        g rE   )r5   r6   rx   Ú	attentionr¤   Úoutputr†   s      €r   r6   ÚMobileViTAttention.__init__ø   s&   ø€ Ü‰ÑÔÜ/°ÓDˆŒÜ)¨&Ó>ˆ�r   rˆ   c                 óJ   • U R                  U5      nU R                  U5      nU$ rE   ©r³   r´   )r@   rˆ   Úself_outputsÚattention_outputs       r   rF   ÚMobileViTAttention.forwardý   s%   € Ø—~‘~ mÓ4ˆØŸ;™; |Ó4ÐØÐr   r·   rv   rQ   s   @r   r°   r°   ÷   s=   ø† ð?˜ð ?¸Sð ?ÀT÷ ?ð
  U§\¡\ð  °e·l±l÷  ò  r   r°   c                   óv   ^ • \ rS rSrS\S\S\SS4U 4S jjrS\R                  S\R                  4S	 jr	S
r
U =r$ )ÚMobileViTIntermediatei  r"   rz   Úintermediate_sizer   Nc                 óê   >• [         TU ]  5         [        R                  " X#5      U l        [        UR                  [        5      (       a  [        UR                     U l	        g UR                  U l	        g rE   )
r5   r6   r   r   r¨   r<   r?   r=   r   Úintermediate_act_fn©r@   r"   rz   r½   rA   s       €r   r6   ÚMobileViTIntermediate.__init__  sR   ø€ Ü‰ÑÔÜ—Y’Y˜{Ó>ˆŒ
Ü�f×'Ñ'¬×-Ñ-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r   rˆ   c                 óJ   • U R                  U5      nU R                  U5      nU$ rE   ©r¨   r¿   r­   s     r   rF   ÚMobileViTIntermediate.forward  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr   rÃ   rv   rQ   s   @r   r¼   r¼     sF   ø† ð9˜ð 9¸Sð 9ÐUXð 9Ð]a÷ 9ð U§\¡\ð °e·l±l÷ ò r   r¼   c                   óŽ   ^ • \ rS rSrS\S\S\SS4U 4S jjrS\R                  S	\R                  S\R                  4S
 jr	Sr
U =r$ )ÚMobileViTOutputi  r"   rz   r½   r   Nc                 ó¢   >• [         TU ]  5         [        R                  " X25      U l        [        R
                  " UR                  5      U l        g rE   r§   rÀ   s       €r   r6   ÚMobileViTOutput.__init__  s5   ø€ Ü‰ÑÔÜ—Y’YÐ0Ó>ˆŒ
Ü—z’z &×"<Ñ"<Ó=ˆ�r   rˆ   Úinput_tensorc                 óR   • U R                  U5      nU R                  U5      nX-   nU$ rE   r¬   )r@   rˆ   rÉ   s      r   rF   ÚMobileViTOutput.forward  s,   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØ%Ñ4ˆØÐr   r¬   rv   rQ   s   @r   rÆ   rÆ     sT   ø† ð>˜ð >¸Sð >ÐUXð >Ð]a÷ >ð
 U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ ò r   rÆ   c                   óv   ^ • \ rS rSrS\S\S\SS4U 4S jjrS\R                  S\R                  4S	 jr	S
r
U =r$ )ÚMobileViTTransformerLayeri  r"   rz   r½   r   Nc                 ó  >• [         TU ]  5         [        X5      U l        [	        XU5      U l        [        XU5      U l        [        R                  " X!R                  S9U l        [        R                  " X!R                  S9U l        g )N©r1   )r5   r6   r°   r³   r¼   ÚintermediaterÆ   r´   r   Ú	LayerNormÚlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterrÀ   s       €r   r6   Ú"MobileViTTransformerLayer.__init__   sg   ø€ Ü‰ÑÔÜ+¨FÓ@ˆŒÜ1°&ÐGXÓYˆÔÜ% fÐ;LÓMˆŒÜ "§¢¨[×>SÑ>SÑ TˆÔÜ!Ÿ|š|¨K×=RÑ=RÑSˆÕr   rˆ   c                 ó´   • U R                  U R                  U5      5      nX!-   nU R                  U5      nU R                  U5      nU R	                  X15      nU$ rE   )r³   rÓ   rÔ   rÐ   r´   )r@   rˆ   r¹   Úlayer_outputs       r   rF   Ú!MobileViTTransformerLayer.forward(  sX   € ØŸ>™>¨$×*?Ñ*?ÀÓ*NÓOÐØ(Ñ8ˆà×+Ñ+¨MÓ:ˆØ×(Ñ(¨Ó6ˆØ—{‘{ <Ó?ˆØÐr   )r³   rÐ   rÔ   rÓ   r´   rv   rQ   s   @r   rÍ   rÍ     sK   ø† ðT˜ð T¸Sð TÐUXð TÐ]a÷ Tð U§\¡\ð °e·l±l÷ ò r   rÍ   c                   óv   ^ • \ rS rSrS\S\S\SS4U 4S jjrS\R                  S\R                  4S	 jr	S
r
U =r$ )ÚMobileViTTransformeri2  r"   rz   rj   r   Nc           	      óð   >• [         TU ]  5         [        R                  " 5       U l        [        U5       H>  n[        UU[        X!R                  -  5      S9nU R                  R                  U5        M@     g )N)rz   r½   )
r5   r6   r   rl   rm   rn   rÍ   r   Ú	mlp_ratioro   )r@   r"   rz   rj   Ú_Útransformer_layerrA   s         €r   r6   ÚMobileViTTransformer.__init__3  sa   ø€ Ü‰ÑÔä—]’]“_ˆŒ
Ü�zÖ"ˆAÜ 9ØØ'Ü"% k×4DÑ4DÑ&DÓ"Eñ!Ðð
 �J‰J×ÑÐ/Ö0ò #r   rˆ   c                 ó<   • U R                    H  nU" U5      nM     U$ rE   rs   )r@   rˆ   rt   s      r   rF   ÚMobileViTTransformer.forward?  s    € Ø ŸJœJˆLÙ(¨Ó7ŠMñ 'àÐr   rs   rv   rQ   s   @r   rÚ   rÚ   2  sE   ø† ð
1˜ð 
1¸Sð 
1Ècð 
1ÐVZ÷ 
1ð U§\¡\ð °e·l±l÷ ò r   rÚ   c                   ó  ^ • \ rS rSrSr SS\S\S\S\S\S\S	\S
S4U 4S jjjrS\R                  S
\
\R                  \4   4S jrS\R                  S\S
\R                  4S jrS\R                  S
\R                  4S jrSrU =r$ )ÚMobileViTLayeriE  z;
MobileViT block: https://huggingface.co/papers/2110.02178
r"   r#   r$   r&   rz   rj   r)   r   Nc           	      óì  >• [         TU ]  5         UR                  U l        UR                  U l        US:X  a(  [        UUUUS:X  a  UOSUS:”  a  US-  OSS9U l        UnOS U l        [        UUUUR                  S9U l	        [        UUUSSSS9U l
        [        UUUS9U l        [        R                  " XQR                  S9U l        [        XUSS9U l        [        USU-  X!R                  S9U l        g )	Nr   r   )r#   r$   r&   r)   rX   F)r#   r$   r%   r*   r+   )rz   rj   rÏ   )r5   r6   Ú
patch_sizeÚpatch_widthÚpatch_heightrS   Údownsampling_layerr    Úconv_kernel_sizeÚconv_kxkÚconv_1x1rÚ   Útransformerr   rÑ   rÒ   Ú	layernormÚconv_projectionÚfusion)	r@   r"   r#   r$   r&   rz   rj   r)   rA   s	           €r   r6   ÚMobileViTLayer.__init__J  s  ø€ ô 	‰ÑÔØ!×,Ñ,ˆÔØ"×-Ñ-ˆÔà�Q‹;Ü&?ØØ'Ø)Ø!)¨Q£‘v°AØ*2°Q«,˜ Qš¸Añ'ˆDÔ#ð '‰Kà&*ˆDÔ#ä*ØØ#Ø$Ø×/Ñ/ñ	
ˆŒô +ØØ#Ø$ØØ#Ø ñ
ˆŒô 0ØØ#Ø!ñ
ˆÔô Ÿš k×7LÑ7LÑMˆŒä1Ø¸+ÐSTñ 
ˆÔô )Ø  K¡¸k×WnÑWnñ
ˆ�r   rC   c                 ón  • U R                   U R                  p2[        X#-  5      nUR                  u  pVpx[        R
                  R                  5       (       a$  [        [        R                  " Xs-  5      U-  5      O#[        [        R                  " Xs-  5      U-  5      n	[        R
                  R                  5       (       a$  [        [        R                  " X‚-  5      U-  5      O#[        [        R                  " X‚-  5      U-  5      n
SnX¨:w  d  X—:w  a#  [        R                  R                  XU
4SSS9nSnX¢-  nX“-  nXÜ-  nUR                  XV-  U-  X<U5      nUR                  SS5      nUR                  XVXä5      nUR                  SS5      nUR                  XT-  US5      nXx4UUUUUUS	.nUU4$ )
NFÚbilinear©r˜   ÚmodeÚalign_cornersTr   r   r   rŠ   )Ú	orig_sizeÚ
batch_sizeÚchannelsÚinterpolateÚnum_patchesÚnum_patches_widthÚnum_patches_height)ræ   rç   r   rŽ   rM   ÚjitÚ
is_tracingr   Úceilr’   r   r”   rù   Úreshaper�   )r@   rC   ræ   rç   Ú
patch_arear÷   rø   Úorig_heightÚ
orig_widthÚ
new_heightÚ	new_widthrù   Únum_patch_widthÚnum_patch_heightrú   ÚpatchesÚ	info_dicts                    r   Ú	unfoldingÚMobileViTLayer.unfolding„  sÂ  € Ø$(×$4Ñ$4°d×6GÑ6G�\Ü˜Ñ3Ó4ˆ
à8@¿¹Ñ5ˆ
˜kô �y‰y×#Ñ#×%Ñ%ô ”e—j’j Ñ!;Ó<¸|ÑKÔLä”T—Y’Y˜{Ñ9Ó:¸\ÑIÓJð 	ô �y‰y×#Ñ#×%Ñ%ô ”e—j’j Ñ!9Ó:¸[ÑHÔIä”T—Y’Y˜zÑ7Ó8¸;ÑFÓGð 	ð ˆØÓ" jÓ&?ä—}‘}×0Ñ0Ø¨IÐ6¸ZÐW\ð 1ð ˆHð ˆKð $Ñ2ˆØ%Ñ5ÐØ&Ñ8ˆð ×"Ñ"ØÑ!Ð$4Ñ4°lÐU`ó
ˆð ×#Ñ# A qÓ)ˆØ—/‘/ *¸ÓPˆØ×#Ñ# A qÓ)ˆØ—/‘/ *Ñ"9¸;ÈÓKˆð &Ð2Ø$Ø Ø&Ø&Ø!0Ø"2ñ
ˆ	ð ˜	Ð!Ð!r   r  r	  c                 óÀ  • U R                   U R                  pC[        X4-  5      nUS   nUS   nUS   nUS   n	US   n
UR                  5       R	                  XeUS5      nUR                  SS5      nUR                  Xg-  U	-  X¤U5      nUR                  SS	5      nUR                  XgX”-  X£-  5      nUS
   (       a"  [        R                  R                  X²S   SSS9nU$ )Nr÷   rø   rú   rü   rû   rŠ   r   r   r   rù   rö   rò   Fró   )
ræ   rç   r   r—   r�   r�   r   r   r”   rù   )r@   r  r	  ræ   rç   r  r÷   rø   rú   r  r  rC   s               r   ÚfoldingÚMobileViTLayer.folding·  s  € Ø$(×$4Ñ$4°d×6GÑ6G�\Ü˜Ñ3Ó4ˆ
à˜|Ñ,ˆ
Ø˜ZÑ(ˆØ Ñ.ˆØ$Ð%9Ñ:ÐØ#Ð$7Ñ8ˆð ×%Ñ%Ó'×,Ñ,¨ZÀ[ÐRTÓUˆØ×%Ñ% a¨Ó+ˆØ×#Ñ#ØÑ!Ð$4Ñ4°oÐU`ó
ˆð ×%Ñ% a¨Ó+ˆØ×#Ñ#ØÐ"2Ñ"AÀ?ÑC`ó
ˆð �]×#Ü—}‘}×0Ñ0Ø¨Ñ5¸JÐV[ð 1ð ˆHð ˆr   c                 óŠ  • U R                   (       a  U R                  U5      nUnU R                  U5      nU R                  U5      nU R                  U5      u  p4U R	                  U5      nU R                  U5      nU R                  X45      nU R                  U5      nU R                  [        R                  " X!4SS95      nU$ ©Nr   rŒ   )rè   rê   rë   r
  rì   rí   r  rî   rï   rM   Úcat)r@   rC   rc   r  r	  s        r   rF   ÚMobileViTLayer.forwardÔ  s²   € à×"×"Ø×.Ñ.¨xÓ8ˆHàˆð —=‘= Ó*ˆØ—=‘= Ó*ˆð "Ÿ^™^¨HÓ5Ñˆð ×"Ñ" 7Ó+ˆØ—.‘. Ó)ˆð —<‘< Ó3ˆà×'Ñ'¨Ó1ˆØ—;‘;œuŸyšy¨(Ð)=À1ÑEÓFˆØˆr   )	rë   rê   rî   rè   rï   rí   rç   ræ   rì   re   )rH   rI   rJ   rK   rf   r   r   r6   rM   rN   ÚtupleÚdictr
  r  rF   rO   rP   rQ   s   @r   rã   rã   E  sÎ   ø† ñð ñ8
àð8
ð ð8
ð ð	8
ð
 ð8
ð ð8
ð ð8
ð ð8
ð 
÷8
ð 8
ðt1" %§,¡,ð 1"°5¸¿¹ÀtÐ9KÑ3Lô 1"ðf˜uŸ|™|ð ¸ð ÀÇÁô ð: §¡ð °·±÷ ò r   rã   c            
       óp   ^ • \ rS rSrS\SS4U 4S jjr  SS\R                  S\S\S\	\
-  4S	 jjrS
rU =r$ )ÚMobileViTEncoderiî  r"   r   Nc           
      óä  >• [         T
U ]  5         Xl        [        R                  " 5       U l        SU l        S=p#UR                  S:X  a  SnSnOUR                  S:X  a  SnSn[        UUR                  S   UR                  S   SSS9nU R
                  R                  U5        [        UUR                  S   UR                  S   SS	S9nU R
                  R                  U5        [        UUR                  S   UR                  S	   SUR                  S   SS
9nU R
                  R                  U5        U(       a  US-  n[        UUR                  S	   UR                  S   SUR                  S   SUS9nU R
                  R                  U5        U(       a  US-  n[        UUR                  S   UR                  S   SUR                  S   S	US9n	U R
                  R                  U	5        g )NFrV   Té   r   r   )r#   r$   r&   rj   r   r   )r#   r$   r&   rz   rj   é   )r#   r$   r&   rz   rj   r)   é   )r5   r6   r"   r   rl   rm   Úgradient_checkpointingÚoutput_striderh   Úneck_hidden_sizesro   rã   Úhidden_sizes)r@   r"   Údilate_layer_4Údilate_layer_5r)   Úlayer_1Úlayer_2Úlayer_3Úlayer_4Úlayer_5rA   s             €r   r6   ÚMobileViTEncoder.__init__ï  sù  ø€ Ü‰ÑÔØŒä—]’]“_ˆŒ
Ø&+ˆÔ#ð +0Ð/ˆØ×Ñ 1Ó$Ø!ˆNØ!‰NØ×!Ñ! RÓ'Ø!ˆNàˆä)ØØ×0Ñ0°Ñ3Ø×1Ñ1°!Ñ4ØØñ
ˆð 	�
‰
×Ñ˜'Ô"ä)ØØ×0Ñ0°Ñ3Ø×1Ñ1°!Ñ4ØØñ
ˆð 	�
‰
×Ñ˜'Ô"ä ØØ×0Ñ0°Ñ3Ø×1Ñ1°!Ñ4ØØ×+Ñ+¨AÑ.Øñ
ˆð 	�
‰
×Ñ˜'Ô"æØ˜‰MˆHä ØØ×0Ñ0°Ñ3Ø×1Ñ1°!Ñ4ØØ×+Ñ+¨AÑ.ØØñ
ˆð 	�
‰
×Ñ˜'Ô"æØ˜‰MˆHä ØØ×0Ñ0°Ñ3Ø×1Ñ1°!Ñ4ØØ×+Ñ+¨AÑ.ØØñ
ˆð 	�
‰
×Ñ˜'Õ"r   rˆ   Úoutput_hidden_statesÚreturn_dictc                 óÆ   • U(       a  SOS n[        U R                  5       H  u  pVU" U5      nU(       d  M  XA4-   nM     U(       d  [        S X4 5       5      $ [        XS9$ )N© c              3   ó.   #   • U  H  oc  M  Uv •  M     g 7frE   r*  )Ú.0Úvs     r   Ú	<genexpr>Ú+MobileViTEncoder.forward.<locals>.<genexpr>H  s   é € ÐXÒ$F˜qŸ™Ò$Fùs   ‚Œ	)Úlast_hidden_staterˆ   )Ú	enumeraterm   r  r	   )r@   rˆ   r'  r(  Úall_hidden_statesrp   rt   s          r   rF   ÚMobileViTEncoder.forward9  sc   € ö #7™B¸DÐä(¨¯©Ö4‰OˆAÙ(¨Ó7ˆMç#Ð#Ø$5Ð8HÑ$HÒ!ñ	  5ö ÜÑX ]Ñ$FÓXÓXÐXä-ÀÑoÐor   )r"   r  rm   )FT)rH   rI   rJ   rK   r   r6   rM   rN   rL   r  r	   rF   rO   rP   rQ   s   @r   r  r  î  sb   ø† ðH#˜ð H#°4÷ H#ðZ &+Ø ñ	pà—|‘|ðpð #ðpð ð	pð
 
Ð/Ñ	/÷pó pr   r  c                   ó’   ^ • \ rS rSr% \\S'   SrSrSrSr	S/r
\R                  " 5       S\R                  S	S
4U 4S jj5       rSrU =r$ )ÚMobileViTPreTrainedModeliM  r"   Ú	mobilevitÚpixel_values)ÚimageTrã   Úmoduler   Nc                 ó  >• [         TU ]  U5        [        U[        R                  5      (       aÑ  [
        R                  " UR                  SU R                  R                  S9  UR                  b   [
        R                  " UR                  5        [        USS5      ba  [
        R                  " UR                  5        [
        R                  " UR                  5        [
        R                  " UR                   5        ggg)zInitialize the weightsg        )ÚmeanÚstdNÚrunning_mean)r5   Ú_init_weightsr<   r   r:   ÚinitÚnormal_Úweightr"   Úinitializer_ranger(   Úzeros_Úgetattrr=  Úones_Úrunning_varÚnum_batches_tracked)r@   r9  rA   s     €r   r>  Ú&MobileViTPreTrainedModel._init_weightsV  s«   ø€ ô 	‰Ñ˜fÔ%Ü�fœbŸn™n×-Ñ-Ü�LŠL˜Ÿ™¨S°d·k±k×6SÑ6SÒTØ�{‰{Ñ&Ü—’˜FŸK™KÔ(Ü�v˜~¨tÓ4Ñ@Ü—’˜F×/Ñ/Ô0Ü—
’
˜6×-Ñ-Ô.Ü—’˜F×6Ñ6Õ7ð Að	 .r   r*  )rH   rI   rJ   rK   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesrM   Úno_gradr   ÚModuler>  rO   rP   rQ   s   @r   r5  r5  M  sS   ø‡ àÓØ#ÐØ$€OØ!ÐØ&*Ð#Ø)Ð*Ðà
‡]‚]ƒ_ð
8 B§I¡Ið 
8°$ö 
8ó ö
8r   r5  c                   ó’   ^ • \ rS rSrSS\S\4U 4S jjjr\   SS\R                  S-  S\S-  S\S-  S	\
\-  4S
 jj5       rSrU =r$ )ÚMobileViTModelid  r"   Úexpand_outputc                 óF  >• [         TU ]  U5        Xl        X l        [	        UUR
                  UR                  S   SSS9U l        [        U5      U l	        U R                  (       a+  [	        UUR                  S   UR                  S   SS9U l
        U R                  5         g	)
a%  
expand_output (`bool`, *optional*, defaults to `True`):
    Whether to expand the output of the model using a 1x1 convolution. If `True`, the model will apply an additional
    1x1 convolution to expand the output channels from `config.neck_hidden_sizes[5]` to `config.neck_hidden_sizes[6]`.
r   r   r   )r#   r$   r%   r&   r  é   r   rX   N)r5   r6   r"   rS  r    Únum_channelsr  Ú	conv_stemr  ÚencoderÚconv_1x1_expÚ	post_init)r@   r"   rS  rA   s      €r   r6   ÚMobileViTModel.__init__f  s›   ø€ ô 	‰Ñ˜Ô ØŒØ*Ôä+ØØ×+Ñ+Ø×1Ñ1°!Ñ4ØØñ
ˆŒô (¨Ó/ˆŒà××Ü 2ØØ"×4Ñ4°QÑ7Ø#×5Ñ5°aÑ8Øñ	!ˆDÔð 	�‰Õr   Nr7  r'  r(  r   c                 ó°  • Ub  UOU R                   R                  nUb  UOU R                   R                  nUc  [        S5      eU R	                  U5      nU R                  UUUS9nU R                  (       a-  U R                  US   5      n[        R                  " USS/SS9nOUS   nS nU(       d  Ub  Xx4OU4n	X–SS  -   $ [        UUUR                  S	9$ )
Nz You have to specify pixel_values©r'  r(  r   r‹   rŠ   F)r�   Úkeepdimr   )r0  Úpooler_outputrˆ   )r"   r'  r(  r7   rW  rX  rS  rY  rM   r;  r
   rˆ   )
r@   r7  r'  r(  ÚkwargsÚembedding_outputÚencoder_outputsr0  Úpooled_outputr´   s
             r   rF   ÚMobileViTModel.forward…  s  € ð %9Ñ$DÑ È$Ï+É+×JjÑJjð 	ð &1Ñ%<‘kÀ$Ç+Á+×BYÑBYˆàÑÜÐ?Ó@Ð@àŸ>™>¨,Ó7ÐàŸ,™,ØØ!5Ø#ð 'ð 
ˆð ××Ø $× 1Ñ 1°/À!Ñ2DÓ EÐô "ŸJšJÐ'8¸rÀ2¸hÐPUÑV‰Mà /°Ñ 2ÐØ ˆMæØ;HÑ;TÐ'Ñ7Ð[lÐZnˆFØ¨A¨BÐ/Ñ/Ð/ä7Ø/Ø'Ø)×7Ñ7ñ
ð 	
r   )r"   rY  rW  rX  rS  )T)NNN)rH   rI   rJ   rK   r   rL   r6   r   rM   rN   r  r
   rF   rO   rP   rQ   s   @r   rR  rR  d  sw   ø† ñ˜ð ¸t÷ ð ð> ð -1Ø,0Ø#'ñ	(
à—l‘l TÑ)ð(
ð # T™kð(
ð ˜D‘[ð	(
ð 
Ð9Ñ	9ô(
ó ö(
r   rR  z‰
    MobileViT model with an image classification head on top (a linear layer on top of the pooled features), e.g. for
    ImageNet.
    )Úcustom_introc                   ó®   ^ • \ rS rSrS\SS4U 4S jjr\    SS\R                  S-  S\	S-  S\R                  S-  S	\	S-  S\
\-  4
S
 jj5       rSrU =r$ )ÚMobileViTForImageClassificationi±  r"   r   Nc                 ó~  >• [         TU ]  U5        UR                  U l        [        U5      U l        [
        R                  " UR                  SS9U l        UR                  S:”  a.  [
        R                  " UR                  S   UR                  5      O[
        R                  " 5       U l        U R                  5         g )NT)Úinplacer   rŠ   )r5   r6   Ú
num_labelsrR  r6  r   rƒ   Úclassifier_dropout_probr…   r   r  ÚIdentityÚ
classifierrZ  ©r@   r"   rA   s     €r   r6   Ú(MobileViTForImageClassification.__init__¸  s�   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ'¨Ó/ˆŒô —z’z &×"@Ñ"@È$ÑOˆŒàJP×J[ÑJ[Ð^_ÓJ_ŒB�IŠI�f×.Ñ.¨rÑ2°F×4EÑ4EÔFÔeg×epÒepÓerð 	Œð
 	�‰Õr   r7  r'  Úlabelsr(  c                 ój  • Ub  UOU R                   R                  nU R                  XUS9nU(       a  UR                  OUS   nU R	                  U R                  U5      5      nSn	Ub  U R                  X8U R                   5      n	U(       d  U4USS -   n
U	b  U	4U
-   $ U
$ [        U	UUR                  S9$ )ab  
labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
    Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
    config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss). If
    `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
Nr]  r   r   )ÚlossÚlogitsrˆ   )	r"   r(  r6  r_  rm  r…   Úloss_functionr   rˆ   )r@   r7  r'  rp  r(  r`  Úoutputsrc  rs  rr  r´   s              r   rF   Ú'MobileViTForImageClassification.forwardÇ  sÀ   € ð &1Ñ%<‘kÀ$Ç+Á+×BYÑBYˆà—.‘. Ðfq�.Ðrˆæ1<˜×-Ò-À'È!Á*ˆà—‘ §¡¨mÓ!<Ó=ˆàˆØÑØ×%Ñ% f°d·k±kÓBˆDæØ�Y ¨¨ Ñ,ˆFØ)-Ñ)9�T�G˜fÑ$ÐE¸vÐEä3ØØØ!×/Ñ/ñ
ð 	
r   )rm  r…   r6  rj  ©NNNN)rH   rI   rJ   rK   r   r6   r   rM   rN   rL   r  r   rF   rO   rP   rQ   s   @r   rg  rg  ±  sˆ   ø† ð˜ð °4÷ ð ð -1Ø,0Ø&*Ø#'ñ"
à—l‘l TÑ)ð"
ð # T™kð"
ð —‘˜tÑ#ð	"
ð
 ˜D‘[ð"
ð 
Ð5Ñ	5ô"
ó ö"
r   rg  c                   óv   ^ • \ rS rSrS\S\S\SS4U 4S jjrS\R                  S\R                  4S	 jr	S
r
U =r$ )ÚMobileViTASPPPoolingií  r"   r#   r$   r   Nc           
      ó|   >• [         TU ]  5         [        R                  " SS9U l        [        UUUSSSSS9U l        g )Nr   )Úoutput_sizeTÚrelu)r#   r$   r%   r&   r*   r+   )r5   r6   r   ÚAdaptiveAvgPool2dÚglobal_poolr    rë   )r@   r"   r#   r$   rA   s       €r   r6   ÚMobileViTASPPPooling.__init__î  sB   ø€ Ü‰ÑÔä×/Ò/¸AÑ>ˆÔä*ØØ#Ø%ØØØ"Ø!ñ
ˆ�r   rC   c                 ó¦   • UR                   SS  nU R                  U5      nU R                  U5      n[        R                  R                  XSSS9nU$ )Nr‹   rò   Fró   )rŽ   r~  rë   r   r”   rù   )r@   rC   Úspatial_sizes      r   rF   ÚMobileViTASPPPooling.forwardý  sQ   € Ø—~‘~ b cÐ*ˆØ×#Ñ# HÓ-ˆØ—=‘= Ó*ˆÜ—=‘=×,Ñ,¨XÈzÐinÐ,ÐoˆØˆr   )rë   r~  rv   rQ   s   @r   ry  ry  í  sF   ø† ð
˜ð 
¸Sð 
ÐPSð 
ÐX\÷ 
ð §¡ð °·±÷ ò r   ry  c                   ór   ^ • \ rS rSrSrS\SS4U 4S jjrS\R                  S\R                  4S jr	S	r
U =r$ )
ÚMobileViTASPPi  z{
ASPP module defined in DeepLab papers: https://huggingface.co/papers/1606.00915, https://huggingface.co/papers/1706.05587
r"   r   Nc                 óp  >• [         TU ]  5         UR                  S   nUR                  n[	        UR
                  5      S:w  a  [        S5      e[        R                  " 5       U l	        [        UUUSSS9nU R                  R                  U5        U R                  R                  UR
                   Vs/ s H  n[        UUUSUSS9PM     sn5        [        XU5      nU R                  R                  U5        [        USU-  USSS9U l        [        R                  " UR                   S	9U l        g s  snf )
Nr‹   r   z"Expected 3 values for atrous_ratesr   r|  rY   )r#   r$   r%   r)   r+   r  )Úp)r5   r6   r  Úaspp_out_channelsÚlenÚatrous_ratesr7   r   rl   Úconvsr    ro   Úextendry  Úprojectrƒ   Úaspp_dropout_probr…   )r@   r"   r#   r$   Úin_projectionÚrateÚ
pool_layerrA   s          €r   r6   ÚMobileViTASPP.__init__
  s-  ø€ Ü‰ÑÔà×.Ñ.¨rÑ2ˆØ×/Ñ/ˆäˆv×"Ñ"Ó# qÓ(ÜÐAÓBÐBä—]’]“_ˆŒ
ä*ØØ#Ø%ØØ!ñ
ˆð 	�
‰
×Ñ˜-Ô(à�
‰
×Ñð #×/Ò/ó
ò 0�Dô #ØØ +Ø!-Ø !Ø!Ø#)ôñ 0ñ
ô	
ô *¨&¸|ÓLˆ
Ø�
‰
×Ñ˜*Ô%ä)Ø  LÑ 0¸|ÐYZÐkqñ
ˆŒô —z’z F×$<Ñ$<Ñ=ˆ�ùò)
s   Â4D3rC   c                 óÌ   • / nU R                    H  nUR                  U" U5      5        M     [        R                  " USS9nU R	                  U5      nU R                  U5      nU$ r  )rŠ  ro   rM   r  rŒ  r…   )r@   rC   ÚpyramidÚconvÚpooled_featuress        r   rF   ÚMobileViTASPP.forward5  sW   € ØˆØ—J”JˆDØ�N‰N™4 ›>Ö*ñ ä—)’)˜G¨Ñ+ˆàŸ,™, wÓ/ˆØŸ,™, Ó7ˆØÐr   )rŠ  r…   rŒ  ©rH   rI   rJ   rK   rf   r   r6   rM   rN   rF   rO   rP   rQ   s   @r   r„  r„    s<   ø† ñð)>˜ð )>°4÷ )>ðV §¡ð °·±÷ ò r   r„  c                   ór   ^ • \ rS rSrSrS\SS4U 4S jjrS\R                  S\R                  4S jr	S	r
U =r$ )
ÚMobileViTDeepLabV3i@  zB
DeepLabv3 architecture: https://huggingface.co/papers/1706.05587
r"   r   Nc           
      óÜ   >• [         TU ]  5         [        U5      U l        [        R
                  " UR                  5      U l        [        UUR                  UR                  SSSSS9U l        g )Nr   FT)r#   r$   r%   r*   r+   r(   )r5   r6   r„  Úasppr   Ú	Dropout2drk  r…   r    r‡  rj  rm  rn  s     €r   r6   ÚMobileViTDeepLabV3.__init__E  s]   ø€ Ü‰ÑÔÜ! &Ó)ˆŒ	ä—|’| F×$BÑ$BÓCˆŒä,ØØ×0Ñ0Ø×*Ñ*ØØ#Ø Øñ
ˆ�r   rˆ   c                 ór   • U R                  US   5      nU R                  U5      nU R                  U5      nU$ )NrŠ   )r›  r…   rm  )r@   rˆ   rC   s      r   rF   ÚMobileViTDeepLabV3.forwardU  s6   € Ø—9‘9˜]¨2Ñ.Ó/ˆØ—<‘< Ó)ˆØ—?‘? 8Ó,ˆØˆr   )r›  rm  r…   r—  rQ   s   @r   r™  r™  @  s;   ø† ñð
˜ð 
°4÷ 
ð  U§\¡\ð °e·l±l÷ ò r   r™  zX
    MobileViT model with a semantic segmentation head on top, e.g. for Pascal VOC.
    c                   ó®   ^ • \ rS rSrS\SS4U 4S jjr\    SS\R                  S-  S\R                  S-  S\	S-  S	\	S-  S\
\-  4
S
 jj5       rSrU =r$ )Ú MobileViTForSemanticSegmentationi\  r"   r   Nc                 ó¤   >• [         TU ]  U5        UR                  U l        [        USS9U l        [        U5      U l        U R                  5         g )NF)rS  )r5   r6   rj  rR  r6  r™  Úsegmentation_headrZ  rn  s     €r   r6   Ú)MobileViTForSemanticSegmentation.__init__b  sD   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ'¨¸eÑDˆŒÜ!3°FÓ!;ˆÔð 	�‰Õr   r7  rp  r'  r(  c                 óz  • Ub  UOU R                   R                  nUb  UOU R                   R                  nUb%  U R                   R                  S:X  a  [	        S5      eU R                  USUS9nU(       a  UR                  OUS   nU R                  U5      nSn	UbQ  [        R                  R                  X‚R                  SS SSS	9n
[        U R                   R                  S
9nU" X¢5      n	U(       d%  U(       a
  U4USS -   nO	U4USS -   nU	b  U	4U-   $ U$ [        U	UU(       a  UR                  SS9$ SSS9$ )a$  
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
>>> import httpx
>>> from io import BytesIO
>>> import torch
>>> from PIL import Image
>>> from transformers import AutoImageProcessor, MobileViTForSemanticSegmentation

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

>>> image_processor = AutoImageProcessor.from_pretrained("apple/deeplabv3-mobilevit-small")
>>> model = MobileViTForSemanticSegmentation.from_pretrained("apple/deeplabv3-mobilevit-small")

>>> inputs = image_processor(images=image, return_tensors="pt")

>>> with torch.no_grad():
...     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‹   rò   Fró   )Úignore_indexr   )rr  rs  rˆ   Ú
attentions)r"   r'  r(  rj  r7   r6  rˆ   r£  r   r”   rù   rŽ   r   Úsemantic_loss_ignore_indexr   )r@   r7  rp  r'  r(  r`  ru  Úencoder_hidden_statesrs  rr  Úupsampled_logitsÚloss_fctr´   s                r   rF   Ú(MobileViTForSemanticSegmentation.forwardl  sm  € ðN %9Ñ$DÑ È$Ï+É+×JjÑJjð 	ð &1Ñ%<‘kÀ$Ç+Á+×BYÑBYˆàÑ $§+¡+×"8Ñ"8¸AÓ"=ÜÐNÓOÐOà—.‘.ØØ!%Ø#ð !ð 
ˆö :E × 5Ò 5È'ÐRSÉ*Ðà×'Ñ'Ð(=Ó>ˆàˆØÑä!Ÿ}™}×8Ñ8ØŸ\™\¨"¨#Ð.°ZÈuð  9ð  Ðô (°T·[±[×5[Ñ5[Ñ\ˆHÙÐ,Ó5ˆDæÞ#Ø ˜ W¨Q¨R [Ñ0‘à ˜ W¨Q¨R [Ñ0�Ø)-Ñ)9�T�G˜fÑ$ÐE¸vÐEä&ØØÞ3G˜'×/Ñ/Øñ	
ð 	
ð NRØñ	
ð 	
r   )r6  rj  r£  rw  )rH   rI   rJ   rK   r   r6   r   rM   rN   rL   r  r   rF   rO   rP   rQ   s   @r   r¡  r¡  \  s�   ø† ð˜ð °4÷ ð ð -1Ø&*Ø,0Ø#'ñL
à—l‘l TÑ)ðL
ð —‘˜tÑ#ðL
ð # T™kð	L
ð
 ˜D‘[ðL
ð 
Ð(Ñ	(ôL
ó öL
r   r¡  )rg  r¡  rR  r5  )rV   N)4rf   r’   rM   r   Útorch.nnr   Ú r   r?  Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr	   r
   r   r   Úmodeling_utilsr   Úutilsr   r   r   Úconfiguration_mobilevitr   Ú
get_loggerrH   Úloggerr   r   rP  r    rS   rh   rx   r¤   r°   r¼   rÆ   rÍ   rÚ   rã   r  r5  rR  rg  ry  r„  r™  r¡  Ú__all__r*  r   r   Ú<module>r¸     sý  ðñ  ã ã Ý Ý %å &Ý !Ý 9÷ó õ .ß 7Ñ 7Ý 4ð 
×	Ò	˜HÓ	%€ñ
˜#ð 
¨ð 
¸CÀ$¹Jð 
ÐRUõ 
ô=˜Ÿ™ô =ô@-F §	¡	ô -Fô`˜bŸi™iô ô.+˜RŸY™Yô +ô\	˜"Ÿ)™)ô 	ô	 ˜Ÿ™ô 	 ô˜BŸI™Iô ô
�b—i‘iô 
ô §	¡	ô ô&˜2Ÿ9™9ô ô&fÐ/ô fôR\p�r—y‘yô \pð~ ô8˜ó 8ó ð8ð, ôI
Ð-ó I
ó ðI
ñX ðñô3
Ð&>ó 3
óð3
ôl˜2Ÿ9™9ô ô08�B—I‘Iô 8ôv˜Ÿ™ô ñ8 ðñô
X
Ð'?ó X
óð
X
òv�r   