+
    œ°³jÕ‡  ã                   óÔ  € R t ^ RIt^ RIt^ RIHt ^ RIHt ^RIHt ^RI	H
t
 ^RIHt ^RIHtHtHtHt ^RIHt ^R	IHtHtHt ^R
IHt ]P4                  ! ]4      tR6R R llt ! R R]P<                  4      t ! R R]P<                  4      t  ! R R]P<                  4      t! ! R R]P<                  4      t" ! R R]P<                  4      t# ! R R]P<                  4      t$ ! R R]P<                  4      t% ! R R]P<                  4      t& ! R R]P<                  4      t' ! R R ]P<                  4      t( ! R! R"]4      t) ! R# R$]P<                  4      t*] ! R% R&]4      4       t+] ! R' R(]+4      4       t,]! R)R*7       ! R+ R,]+4      4       t- ! R- R.]P<                  4      t. ! R/ R0]P<                  4      t/ ! R1 R2]P<                  4      t0]! R3R*7       ! R4 R5]+4      4       t1. R7Ot2R# )8zPyTorch MobileViT model.N)Únn)ÚCrossEntropyLoss)Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttentionÚSemanticSegmenterOutput)ÚPreTrainedModel)Úauto_docstringÚloggingÚ	torch_int©ÚMobileViTConfigc                óV   € V ^8„  d   QhR\         R\         R\         R,          R\         /# )é   ÚvalueÚdivisorÚ	min_valueNÚreturn)Úint)Úformats   "Úq/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/mobilevit/modeling_mobilevit.pyÚ__annotate__r   )   s-   € ÷ 
ñ 
œ#ð 
¬ð 
¼CÀ$½Jð 
ÔRUñ 
ó    c                ó°   € Vf   Tp\        V\        W^,          ,           4      V,          V,          4      pVRV ,          8  d	   W1,          p\        V4      # )zM
Ensure that all layers have a channel count that is divisible by `divisor`.
gÍÌÌÌÌÌì?)Úmaxr   )r   r   r   Ú	new_values   &&& r   Úmake_divisibler   )   sO   € ð ÒØˆ	Ü�Iœs 5°Q­;Õ#6Ó7¸7ÕBÀWÕLÓM€Ià�3˜•;ÔØÕˆ	Üˆy‹>Ðr   c                   óT   a a€ ] tR t^6t oRV3R lV 3R llltV3R lR ltRtVtV ;t# )ÚMobileViTConvLayerc                ój   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[RS[RS[RS[R	S[R
S[S[,          RR/# )r   ÚconfigÚin_channelsÚout_channelsÚkernel_sizeÚstrideÚgroupsÚbiasÚdilationÚuse_normalizationÚuse_activationr   N)r   r   ÚboolÚstr)r   Ú__classdict__s   "€r   r   ÚMobileViTConvLayer.__annotate__7   s}   ø€ ÷ 4#ñ 4#áð4#ñ ð4#ñ ð	4#ñ
 ð4#ñ ð4#ñ ð4#ñ ð4#ñ ð4#ñ  ð4#ñ ™s�
ð4#ð 
ñ4#r   c                óœ  <€ \         SV `  4        \        V^,
          ^,          4      V,          pW&,          ^ 8w  d   \        RV RV R24      hW6,          ^ 8w  d   \        RV RV R24      h\        P
                  ! VVVVVVVVRR7	      V n        V	'       d"   \        P                  ! VRRR	R	R
7      V n        MRV n        V
'       d|   \        V
\        4      '       d   \        V
,          V n        R# \        VP                  \        4      '       d   \        VP                  ,          V n        R# VP                  V n        R# RV n        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_statsN)ÚsuperÚ__init__r   Ú
ValueErrorr   ÚConv2dÚconvolutionÚBatchNorm2dÚnormalizationÚ
isinstancer.   r   Ú
activationÚ
hidden_act)Úselfr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r4   Ú	__class__s   &&&&&&&&&&& €r   r<   Ú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   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r   Úfeaturesr   ©ÚtorchÚTensor)r   r/   s   "€r   r   r0   m   s#   ø€ ÷ ñ ¡§¡ð ±·±ñ r   c                ó¤   € V P                  V4      pV P                  e   V P                  V4      pV P                  e   V P                  V4      pV# ©N)r?   rA   rC   )rE   rJ   s   &&r   ÚforwardÚMobileViTConvLayer.forwardm   sK   € Ø×#Ñ# HÓ-ˆØ×ÑÒ)Ø×)Ñ)¨(Ó3ˆHØ�?‰?Ò&Ø—‘ xÓ0ˆHØˆr   )rC   r?   rA   )r2   r2   Fr2   TT©	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r<   rP   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©rF   r/   s   @@r   r!   r!   6   s   ù‡ € ÷4#õ 4#÷l÷ ð r   r!   c                   óX   a a€ ] tR t^vt oRtRV3R lV 3R llltV3R lR ltRtVtV ;t	# )ÚMobileViTInvertedResidualzQ
Inverted residual block (MobileNetv2): https://huggingface.co/papers/1801.04381
c                ó<   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[RR/# )r   r#   r$   r%   r'   r*   r   N©r   r   )r   r/   s   "€r   r   Ú&MobileViTInvertedResidual.__annotate__{   s=   ø€ ÷ 
ñ 
Ù%ð
Ù47ð
ÙGJð
ÙTWð
Ùcfð
à	ñ
r   c           
     óV  <€ \         SV `  4        \        \        \	        W!P
                  ,          4      4      ^4      pVR9  d   \        RV R24      hV^8H  ;'       d    W#8H  V n        \        WV^R7      V n	        \        VVV^VVVR7      V n
        \        VVV^RR7      V n        R# )	é   zInvalid stride Ú.©r$   r%   r&   )r$   r%   r&   r'   r(   r*   F©r$   r%   r&   r,   N)r2   r   )r;   r<   r   r   ÚroundÚexpand_ratior=   Úuse_residualr!   Ú
expand_1x1Úconv_3x3Ú
reduce_1x1)rE   r#   r$   r%   r'   r*   Úexpanded_channelsrF   s   &&&&&& €r   r<   Ú"MobileViTInvertedResidual.__init__{   s¹   ø€ ô 	‰ÑÔÜ*¬3¬u°[×CVÑCVÕ5VÓ/WÓ+XÐZ[Ó\Ðà˜ÔÜ˜¨v¨h°aÐ8Ó9Ð9à# q™[×KÐK¨{Ñ/JˆÔä,ØÐ:KÐYZô
ˆŒô +ØØ)Ø*ØØØ$Øô
ˆŒô -ØØ)Ø%ØØ ô
ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rI   rK   )r   r/   s   "€r   r   r_   œ   s'   ø€ ÷ Fñ F¡§¡ð F±·±ñ Fr   c                ó¤   € TpV P                  V4      pV P                  V4      pV P                  V4      pV P                  '       d	   W!,           # T# rO   )rh   ri   rj   rg   )rE   rJ   Úresiduals   && r   rP   Ú!MobileViTInvertedResidual.forwardœ   sJ   € Øˆà—?‘? 8Ó,ˆØ—=‘= Ó*ˆØ—?‘? 8Ó,ˆà&*×&7×&7Ð&7ˆxÕ"ÐE¸XÐEr   )ri   rh   rj   rg   ©r2   ©
rS   rT   rU   rV   Ú__doc__r<   rP   rW   rX   rY   rZ   s   @@r   r\   r\   v   s'   ù‡ € ñ÷
õ 
÷BF÷ Fð Fr   r\   c                   óT   a a€ ] tR t^¦t oRV3R lV 3R llltV3R lR ltRtVtV ;t# )ÚMobileViTMobileNetLayerc                ó<   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[RR/# )r   r#   r$   r%   r'   Ú
num_stagesr   Nr^   )r   r/   s   "€r   r   Ú$MobileViTMobileNetLayer.__annotate__§   s=   ø€ ÷ 'ñ 'Ù%ð'Ù47ð'ÙGJð'ÙTWð'Ùilð'à	ñ'r   c                óæ   <€ \         SV `  4        \        P                  ! 4       V n        \        V4       F8  p\        TTTV^ 8X  d   TM^R7      pV P                  P                  V4       TpK:  	  R# )é    )r$   r%   r'   N)r;   r<   r   Ú
ModuleListÚlayerÚranger\   Úappend)	rE   r#   r$   r%   r'   rw   Úir|   rF   s	   &&&&&&  €r   r<   Ú MobileViTMobileNetLayer.__init__§   sc   ø€ ô 	‰ÑÔä—]’]“_ˆŒ
Ü�zÖ"ˆAÜ-ØØ'Ø)Ø!" a¤‘v¨Qô	ˆEð �J‰J×Ñ˜eÔ$Ø&ŠKó #r   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rI   rK   )r   r/   s   "€r   r   rx   ·   s#   ø€ ÷ ñ ¡§¡ð ±·±ñ r   c                ó<   € V P                    F  pV! V4      pK  	  V# rO   ©r|   )rE   rJ   Úlayer_modules   && r   rP   ÚMobileViTMobileNetLayer.forward·   s   € Ø ŸJœJˆLÙ# HÓ-ŠHñ 'àˆr   rƒ   )r2   r2   rR   rZ   s   @@r   ru   ru   ¦   s   ù‡ € ÷'õ '÷ ÷ ð r   ru   c                   óP   a a€ ] tR t^½t oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚMobileViTSelfAttentionc                ó*   <€ V ^8„  d   QhRS[ RS[RR/# ©r   r#   Úhidden_sizer   Nr^   )r   r/   s   "€r   r   Ú#MobileViTSelfAttention.__annotate__¾   s'   ø€ ÷ Gñ G™ð G¹Sð GÀTñ Gr   c                ó   <€ \         SV `  4        W!P                  ,          ^ 8w  d   \        RV RVP                   R24      hVP                  V n        \	        W!P                  ,          4      V n        V P                  V P
                  ,          V n        \        P                  ! W P                  VP                  R7      V n
        \        P                  ! W P                  VP                  R7      V n        \        P                  ! W P                  VP                  R7      V n        \        P                  ! VP                  4      V n        R# )rz   zThe hidden size z4 is not a multiple of the number of attention heads rb   )r)   N)r;   r<   Únum_attention_headsr=   r   Úattention_head_sizeÚall_head_sizer   ÚLinearÚqkv_biasÚqueryÚkeyr   ÚDropoutÚattention_probs_dropout_probÚdropout©rE   r#   rŠ   rF   s   &&&€r   r<   Ú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   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r   Úhidden_statesr   rK   )r   r/   s   "€r   r   r‹   Ñ   s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r   c                óB  € VP                   R R p. VORNV P                  N5pV P                  V4      P                  V4      P	                  ^^4      pV P                  V4      P                  V4      P	                  ^^4      pV P                  V4      P                  V4      P	                  ^^4      p\        P                  ! WEP	                  RR4      4      pV\        P                  ! V P                  4      ,          p\        P                  P                  VRR7      pV P                  V4      p\        P                  ! W†4      p	V	P                  ^ ^^^4      P!                  4       p	V	P#                  4       R R V P$                  3,           p
V	P                  ! V
!  p	V	# )N©Údiméÿÿÿÿéþÿÿÿ)ÚshaperŽ   r’   ÚviewÚ	transposer“   r   rL   ÚmatmulÚmathÚsqrtr   Ú
functionalÚsoftmaxr–   ÚpermuteÚ
contiguousÚsizer�   )rE   r›   Úinput_shapeÚhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapes   &&         r   rP   Ú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   rR   rZ   s   @@r   r‡   r‡   ½   s    ù‡ € ÷Gó G÷&÷ ð r   r‡   c                   óP   a a€ ] tR t^ët oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚMobileViTSelfOutputc                ó*   <€ V ^8„  d   QhRS[ RS[RR/# r‰   r^   )r   r/   s   "€r   r   Ú MobileViTSelfOutput.__annotate__ì   s"   ø€ ÷ >ñ >™ð >¹Sð >ÀTñ >r   c                ó¤   <€ \         SV `  4        \        P                  ! W"4      V n        \        P
                  ! VP                  4      V n        R # rO   ©r;   r<   r   r�   Údenser”   Úhidden_dropout_probr–   r—   s   &&&€r   r<   ÚMobileViTSelfOutput.__init__ì   s4   ø€ Ü‰ÑÔÜ—Y’Y˜{Ó8ˆŒ
Ü—z’z &×"<Ñ"<Ó=ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rš   rK   )r   r/   s   "€r   r   r¹   ñ   ó#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r   c                óJ   € V P                  V4      pV P                  V4      pV# rO   ©r¼   r–   ©rE   r›   s   &&r   rP   ÚMobileViTSelfOutput.forwardñ   s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr   rÂ   rR   rZ   s   @@r   r·   r·   ë   s   ù‡ € ÷>ó >÷
÷ ð r   r·   c                   óP   a a€ ] tR t^÷t oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚMobileViTAttentionc                ó*   <€ V ^8„  d   QhRS[ RS[RR/# r‰   r^   )r   r/   s   "€r   r   ÚMobileViTAttention.__annotate__ø   s"   ø€ ÷ ?ñ ?™ð ?¹Sð ?ÀTñ ?r   c                ód   <€ \         SV `  4        \        W4      V n        \	        W4      V n        R # rO   )r;   r<   r‡   Ú	attentionr·   Úoutputr—   s   &&&€r   r<   ÚMobileViTAttention.__init__ø   s&   ø€ Ü‰ÑÔÜ/°ÓDˆŒÜ)¨&Ó>ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rš   rK   )r   r/   s   "€r   r   rÈ   ý   s#   ø€ ÷  ñ  ¡U§\¡\ð  ±e·l±lñ  r   c                óJ   € V P                  V4      pV P                  V4      pV# rO   ©rÊ   rË   )rE   r›   Úself_outputsÚattention_outputs   &&  r   rP   ÚMobileViTAttention.forwardý   s%   € Ø—~‘~ mÓ4ˆØŸ;™; |Ó4ÐØÐr   rÏ   rR   rZ   s   @@r   rÆ   rÆ   ÷   s   ù‡ € ÷?ó ?÷
 ÷  ð  r   rÆ   c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚMobileViTIntermediatei  c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# ©r   r#   rŠ   Úintermediate_sizer   Nr^   )r   r/   s   "€r   r   Ú"MobileViTIntermediate.__annotate__  s+   ø€ ÷ 9ñ 9™ð 9¹Sð 9ÑUXð 9Ð]añ 9r   c                óø   <€ \         SV `  4        \        P                  ! W#4      V n        \        VP                  \        4      '       d   \        VP                  ,          V n	        R # VP                  V n	        R # rO   )
r;   r<   r   r�   r¼   rB   rD   r.   r   Úintermediate_act_fn©rE   r#   rŠ   r×   rF   s   &&&&€r   r<   ÚMobileViTIntermediate.__init__  sR   ø€ Ü‰ÑÔÜ—Y’Y˜{Ó>ˆŒ
Ü�f×'Ñ'¬×-Ò-Ü'-¨f×.?Ñ.?Õ'@ˆDÖ$à'-×'8Ñ'8ˆDÖ$r   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rš   rK   )r   r/   s   "€r   r   rØ     rÀ   r   c                óJ   € V P                  V4      pV P                  V4      pV# rO   ©r¼   rÚ   rÃ   s   &&r   rP   ÚMobileViTIntermediate.forward  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr   rß   rR   rZ   s   @@r   rÔ   rÔ     s   ù‡ € ÷9ó 9÷÷ ð r   rÔ   c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚMobileViTOutputi  c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# rÖ   r^   )r   r/   s   "€r   r   ÚMobileViTOutput.__annotate__  s+   ø€ ÷ >ñ >™ð >¹Sð >ÑUXð >Ð]añ >r   c                ó¤   <€ \         SV `  4        \        P                  ! W24      V n        \        P
                  ! VP                  4      V n        R # rO   r»   rÛ   s   &&&&€r   r<   ÚMobileViTOutput.__init__  s5   ø€ Ü‰ÑÔÜ—Y’YÐ0Ó>ˆŒ
Ü—z’z &×"<Ñ"<Ó=ˆŽr   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r   r›   Úinput_tensorr   rK   )r   r/   s   "€r   r   rä     s1   ø€ ÷ ñ ¡U§\¡\ð ÁÇÁð ÑRW×R^ÑR^ñ r   c                óZ   € V P                  V4      pV P                  V4      pW,           pV# rO   rÂ   )rE   r›   rè   s   &&&r   rP   ÚMobileViTOutput.forward  s,   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØ%Õ4ˆØÐr   rÂ   rR   rZ   s   @@r   râ   râ     s   ù‡ € ÷>ó >÷
÷ ð r   râ   c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚMobileViTTransformerLayeri  c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# rÖ   r^   )r   r/   s   "€r   r   Ú&MobileViTTransformerLayer.__annotate__   s1   ø€ ÷ Tñ T™ð T¹Sð TÑUXð TÐ]añ Tr   c                ó   <€ \         SV `  4        \        W4      V n        \	        WV4      V n        \        WV4      V n        \        P                  ! W!P                  R 7      V n        \        P                  ! W!P                  R 7      V n        R# )©r7   N)r;   r<   rÆ   rÊ   rÔ   Úintermediaterâ   rË   r   Ú	LayerNormÚlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterrÛ   s   &&&&€r   r<   Ú"MobileViTTransformerLayer.__init__   sg   ø€ Ü‰ÑÔÜ+¨FÓ@ˆŒÜ1°&ÐGXÓYˆÔÜ% fÐ;LÓMˆŒÜ "§¢¨[×>SÑ>SÔ TˆÔÜ!Ÿ|š|¨K×=RÑ=RÔSˆÖr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rš   rK   )r   r/   s   "€r   r   rî   (  s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r   c                ó¼   € V P                  V P                  V4      4      pW!,           pV P                  V4      pV P                  V4      pV P	                  W14      pV# rO   )rÊ   rô   rõ   rñ   rË   )rE   r›   rÑ   Úlayer_outputs   &&  r   rP   Ú!MobileViTTransformerLayer.forward(  sX   € ØŸ>™>¨$×*?Ñ*?ÀÓ*NÓOÐØ(Õ8ˆà×+Ñ+¨MÓ:ˆØ×(Ñ(¨Ó6ˆØ—{‘{ <Ó?ˆØÐr   )rÊ   rñ   rõ   rô   rË   rR   rZ   s   @@r   rì   rì     s    ù‡ € ÷Tó T÷÷ ð r   rì   c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚMobileViTTransformeri2  c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# )r   r#   rŠ   rw   r   Nr^   )r   r/   s   "€r   r   Ú!MobileViTTransformer.__annotate__3  s*   ø€ ÷ 
1ñ 
1™ð 
1¹Sð 
1Écð 
1ÐVZñ 
1r   c           	     ó   <€ \         SV `  4        \        P                  ! 4       V n        \        V4       FE  p\        VV\        W!P                  ,          4      R 7      pV P                  P                  V4       KG  	  R# ))rŠ   r×   N)
r;   r<   r   r{   r|   r}   rì   r   Ú	mlp_ratior~   )rE   r#   rŠ   rw   Ú_Útransformer_layerrF   s   &&&&  €r   r<   ÚMobileViTTransformer.__init__3  sa   ø€ Ü‰ÑÔä—]’]“_ˆŒ
Ü�zÖ"ˆAÜ 9ØØ'Ü"% k×4DÑ4DÕ&DÓ"Eô!Ðð
 �J‰J×ÑÐ/Ö0ó #r   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rš   rK   )r   r/   s   "€r   r   rþ   ?  rÀ   r   c                ó<   € V P                    F  pV! V4      pK  	  V# rO   rƒ   )rE   r›   r„   s   && r   rP   ÚMobileViTTransformer.forward?  s    € Ø ŸJœJˆLÙ(¨Ó7ŠMñ 'àÐr   rƒ   rR   rZ   s   @@r   rü   rü   2  s   ù‡ € ÷
1ó 
1÷÷ ð r   rü   c                   ó|   a a€ ] tR tRt oRtRV3R lV 3R llltV3R lR ltV3R lR ltV3R	 lR
 ltRt	Vt
V ;t# )ÚMobileViTLayeriE  z;
MobileViT block: https://huggingface.co/papers/2110.02178
c                óH   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[RS[RS[RR	/# )
r   r#   r$   r%   r'   rŠ   rw   r*   r   Nr^   )r   r/   s   "€r   r   ÚMobileViTLayer.__annotate__J  s[   ø€ ÷ 8
ñ 8
áð8
ñ ð8
ñ ð	8
ñ
 ð8
ñ ð8
ñ ð8
ñ ð8
ð 
ñ8
r   c           	     ó.  <€ \         SV `  4        VP                  V n        VP                  V n        V^8X  d2   \        TTTV^8X  d   TM^V^8”  d
   V^,          M^R7      V n        TpMRV n        \        VVVVP                  R7      V n	        \        VVV^RRR7      V n
        \        VVVR7      V n        \        P                  ! WQP                  R7      V n        \        WV^R7      V n        \        V^V,          W!P                  R7      V n        R# )r   )r$   r%   r'   r*   Nrc   F)r$   r%   r&   r+   r,   )rŠ   rw   rð   )r;   r<   Ú
patch_sizeÚpatch_widthÚpatch_heightr\   Údownsampling_layerr!   Úconv_kernel_sizeÚconv_kxkÚconv_1x1rü   Útransformerr   rò   ró   Ú	layernormÚconv_projectionÚfusion)	rE   r#   r$   r%   r'   rŠ   rw   r*   rF   s	   &&&&&&&&€r   r<   Ú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   c                ód   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  S[3,          /# rI   )rL   rM   ÚtupleÚdict)r   r/   s   "€r   r   r
  „  s-   ø€ ÷ 1"ñ 1"¡%§,¡,ð 1"±5¹¿¹ÁtÐ9KÕ3Lñ 1"r   c                ó   € V P                   V P                  r2\        W#,          4      pVP                  w  rVrx\        P
                  P                  4       '       d-   \        \        P                  ! Ws,          4      V,          4      M+\        \        P                  ! Ws,          4      V,          4      p	\        P
                  P                  4       '       d-   \        \        P                  ! W‚,          4      V,          4      M+\        \        P                  ! W‚,          4      V,          4      p
R pW¨8w  g   W—8w  d'   \        P                  P                  WV
3RR R7      pRpW¢,          pW“,          pWÜ,          pVP                  WV,          V,          W<V4      pVP                  ^^4      pVP                  WVWä4      pVP                  ^^4      pVP                  WT,          VR4      pRWx3RVRVRVRVR	VR
V/pVV3# )FÚbilinear©r«   ÚmodeÚalign_cornersTÚ	orig_sizeÚ
batch_sizeÚchannelsÚinterpolateÚnum_patchesÚnum_patches_widthÚnum_patches_heightrŸ   )r  r  r   r¡   rL   ÚjitÚ
is_tracingr   Úceilr¥   r   r§   r#  Úreshaper£   )rE   rJ   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Ø˜*Ø˜Ø˜;Ø˜;Ø Ø Ð"2ð
ˆ	ð ˜	Ð!Ð!r   c                óT   <€ V ^8„  d   QhRS[ P                  RS[RS[ P                  /# )r   r2  r3  r   )rL   rM   r  )r   r/   s   "€r   r   r
  ·  s*   ø€ ÷ ñ ™uŸ|™|ð ¹ð ÁÇÁñ r   c                ó(  € V P                   V P                  rC\        W4,          4      pVR ,          pVR,          pVR,          pVR,          p	VR,          p
VP                  4       P	                  WeVR
4      pVP                  ^^4      pVP                  Wg,          V	,          W¤V4      pVP                  ^^4      pVP                  WgW”,          W£,          4      pVR,          '       d*   \        P                  P                  W²R,          RRR	7      pV# )r!  r"  r$  r&  r%  r#  r   r  Fr  rŸ   )
r  r  r   rª   r¢   r£   r*  r   r§   r#  )rE   r2  r3  r  r  r+  r!  r"  r$  r1  r0  rJ   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                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rI   rK   )r   r/   s   "€r   r   r
  Ô  s#   ø€ ÷ ñ ¡§¡ð ±·±ñ r   c                ó’  € V P                   '       d   V P                  V4      pTpV P                  V4      pV P                  V4      pV P                  V4      w  r4V P	                  V4      pV P                  V4      pV P                  W44      pV P                  V4      pV P                  \        P                  ! W!3^R7      4      pV# ©r2   r�   )r  r  r  r4  r  r  r8  r  r  rL   Úcat)rE   rJ   ro   r2  r3  s   &&   r   rP   Ú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  rq   )rS   rT   rU   rV   rs   r<   r4  r8  rP   rW   rX   rY   rZ   s   @@r   r  r  E  s9   ù‡ € ñ÷8
õ 8
÷t1"ð 1"÷fð ÷:÷ ð r   r  c                   óT   a a€ ] tR tRt oV3R lV 3R lltRV3R lR lltRtVtV ;t# )ÚMobileViTEncoderiî  c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r   r#   r   Nr   )r   r/   s   "€r   r   ÚMobileViTEncoder.__annotate__ï  s   ø€ ÷ H#ñ H#™ð H#°4ñ H#r   c           
     ó„  <€ \         S
V `  4        Wn        \        P                  ! 4       V n        R V n        R ;r#VP                  ^8X  d   RpRpMVP                  ^8X  d   Rp^p\        VVP                  ^ ,          VP                  ^,          ^^R7      pV P
                  P                  V4       \        VVP                  ^,          VP                  ^,          ^^R7      pV P
                  P                  V4       \        VVP                  ^,          VP                  ^,          ^VP                  ^ ,          ^R7      pV P
                  P                  V4       V'       d
   V^,          p\        VVP                  ^,          VP                  ^,          ^VP                  ^,          ^VR7      pV P
                  P                  V4       V'       d
   V^,          p\        VVP                  ^,          VP                  ^,          ^VP                  ^,          ^VR7      p	V P
                  P                  V	4       R# )FT)r$   r%   r'   rw   )r$   r%   r'   rŠ   rw   )r$   r%   r'   rŠ   rw   r*   N)r;   r<   r#   r   r{   r|   Úgradient_checkpointingÚoutput_strideru   Úneck_hidden_sizesr~   r  Úhidden_sizes)rE   r#   Údilate_layer_4Údilate_layer_5r*   Úlayer_1Úlayer_2Úlayer_3Úlayer_4Úlayer_5rF   s   &&        €r   r<   Ú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   c          	      óV   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[S[,          /# )r   r›   Úoutput_hidden_statesÚreturn_dictr   )rL   rM   r-   r  r   )r   r/   s   "€r   r   rC  9  sC   ø€ ÷ pñ pá—|‘|ðpñ #ðpñ ð	pñ
 
Ñ/Õ	/ñpr   c                ó  € V'       d   RMR p\        V P                  4       F   w  rVV! V4      pV'       g   K  WA3,           pK"  	  V'       g/   \        ;QJ d    . R W3 4       F  NK  	  5# ! R W3 4       4      # \        WR7      # )Nc              3   ó0   "  € T F  qf   K  Vx € K  	  R # 5irO   © )Ú.0Úvs   & r   Ú	<genexpr>Ú+MobileViTEncoder.forward.<locals>.<genexpr>H  s   é € ÐXÑ$F˜qŸšÓ$Fùs   ‚Œ
)Úlast_hidden_stater›   rV  )Ú	enumerater|   r  r   )rE   r›   rR  rS  Úall_hidden_statesr   r„   s   &&&&   r   rP   ÚMobileViTEncoder.forward9  sw   € ÷ #7™B¸DÐä(¨¯©Ö4‰OˆAÙ(¨Ó7ˆMç#Ñ#Ø$5Ð8HÕ$HÒ!ñ	  5÷ ß”5ÑX ]Ñ$FÓX—5ÐX�5ÑX ]Ñ$FÓXÓXÐXä-ÀÔoÐor   )r#   rE  r|   )FTrR   rZ   s   @@r   r@  r@  î  s$   ù‡ € ÷H#ó H#÷Tp÷ pò pr   r@  c                   óˆ   a a€ ] tR tRt oRtRtR
tRtR.t]	P                  ! 4       V3R lV 3R ll4       tV3R ltR	tVtV ;t# )ÚMobileViTPreTrainedModeliM  Ú	mobilevitÚpixel_valuesTr  c                ó8   <€ V ^8„  d   QhRS[ P                  RR/# )r   Úmoduler   N)r   ÚModule)r   r/   s   "€r   r   Ú%MobileViTPreTrainedModel.__annotate__W  s   ø€ ÷ 
8ñ 
8¡B§I¡Ið 
8°$ñ 
8r   c                ó  <€ \         SV `  V4       \        V\        P                  4      '       dÙ   \
        P                  ! VP                  RV P                  P                  R7       VP                  e!   \
        P                  ! VP                  4       \        VRR4      ec   \
        P                  ! VP                  4       \
        P                  ! VP                  4       \
        P                  ! VP                   4       R# R# R# )zInitialize the weightsg        )ÚmeanÚstdNÚrunning_mean)r;   Ú_init_weightsrB   r   r@   ÚinitÚnormal_Úweightr#   Úinitializer_ranger)   Úzeros_Úgetattrrj  Úones_Úrunning_varÚnum_batches_tracked)rE   rd  rF   s   &&€r   rk  Ú&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   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )r   r#   r   )r   r/   s   "€r   r   rf  M  s   ø‡ ‚ áÑò r   rV  )Úimage)rS   rT   rU   rV   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesrL   Úno_gradrk  Ú__annotate_func__rW   rX   rY   rZ   s   @@r   r`  r`  M  sK   ù‡ € ð $ÐØ$€OØ!ÐØ&*Ð#Ø)Ð*Ðà
‡]‚]ƒ_÷
8ò 
8ó ð
8÷ … r   r`  c                   ób   a a€ ] tR tRt oRV3R lV 3R lllt]RV3R lR ll4       tRtVtV ;t	# )	ÚMobileViTModelid  c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   r#   Úexpand_output)r   r-   )r   r/   s   "€r   r   ÚMobileViTModel.__annotate__f  s   ø€ ÷ ñ ™ð ¹tñ r   c                ón  <€ \         SV `  V4       Wn        W n        \	        VVP
                  VP                  ^ ,          ^^R7      V n        \        V4      V n	        V P                  '       d7   \	        VVP                  ^,          VP                  ^,          ^R7      V n
        V P                  4        R# )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'   rc   N)r;   r<   r#   r‚  r!   Únum_channelsrG  Ú	conv_stemr@  ÚencoderÚconv_1x1_expÚ	post_init)rE   r#   r‚  rF   s   &&&€r   r<   ÚMobileViTModel.__init__f  sž   ø€ ô 	‰Ñ˜Ô ØŒØ*Ôä+ØØ×+Ñ+Ø×1Ñ1°!Õ4ØØô
ˆŒô (¨Ó/ˆŒà××ÐÜ 2ØØ"×4Ñ4°QÕ7Ø#×5Ñ5°aÕ8Øô	!ˆDÔð 	�‰Ör   c          	      ó€   <€ V ^8„  d   QhRS[ P                  R,          RS[R,          RS[R,          RS[S[,          /# )r   rb  NrR  rS  r   )rL   rM   r-   r  r   )r   r/   s   "€r   r   rƒ  †  sJ   ø€ ÷ (
ñ (
á—l‘l TÕ)ð(
ñ # T�kð(
ñ ˜D•[ð	(
ñ 
Ñ9Õ	9ñ(
r   c                óî  € Ve   TMV P                   P                  pVe   TMV P                   P                  pVf   \        R4      hV P	                  V4      pV P                  VVVR7      pV P                  '       d5   V P                  V^ ,          4      p\        P                  ! VRR.RR7      pMV^ ,          pR pV'       g   Ve   Wx3MV3p	W–R,          ,           # \        VVVP                  R7      # )	Nz You have to specify pixel_values©rR  rS  F)rž   Úkeepdimºr2   NN)r[  Úpooler_outputr›   r    rŸ   )r#   rR  rS  r=   r†  r‡  r‚  rˆ  rL   rh  r   r›   )
rE   rb  rR  rS  ÚkwargsÚembedding_outputÚencoder_outputsr[  Úpooled_outputrË   s
   &&&&,     r   rP   Ú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Ø¨BÕ/Õ/Ð/ä7Ø/Ø'Ø)×7Ñ7ô
ð 	
r   )r#   rˆ  r†  r‡  r‚  )T)NNN©
rS   rT   rU   rV   r<   r   rP   rW   rX   rY   rZ   s   @@r   r€  r€  d  s-   ù‡ € ÷õ ð> ÷(
ñ (
ó ÷(
ð (
r   r€  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                   ó^   a a€ ] tR tRt oV3R lV 3R llt]RV3R lR ll4       tRtVtV ;t	# )ÚMobileViTForImageClassificationi±  c                ó$   <€ V ^8„  d   QhRS[ RR/# rB  r   )r   r/   s   "€r   r   Ú,MobileViTForImageClassification.__annotate__¸  s   ø€ ÷ ñ ™ð °4ñ r   c                ó�  <€ \         SV `  V4       VP                  V n        \        V4      V n        \
        P                  ! VP                  R R7      V n        VP                  ^ 8”  d3   \
        P                  ! VP                  R,          VP                  4      M\
        P                  ! 4       V n        V P                  4        R# )T)ÚinplaceNrŸ   )r;   r<   Ú
num_labelsr€  ra  r   r”   Úclassifier_dropout_probr–   r�   rG  ÚIdentityÚ
classifierr‰  ©rE   r#   rF   s   &&€r   r<   Ú(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   c                ó¨   <€ V ^8„  d   QhRS[ P                  R,          RS[R,          RS[ P                  R,          RS[R,          RS[S[,          /# )r   rb  NrR  ÚlabelsrS  r   )rL   rM   r-   r  r	   )r   r/   s   "€r   r   r›  È  s]   ø€ ÷ "
ñ "
á—l‘l TÕ)ð"
ñ # T�kð"
ñ —‘˜tÕ#ð	"
ñ
 ˜D•[ð"
ñ 
Ñ5Õ	5ñ"
r   c                ó   € Ve   TMV P                   P                  pV P                  WVR7      pV'       d   VP                  MV^,          pV P	                  V P                  V4      4      pRp	Ve   V P                  W8V P                   4      p	V'       g"   V3VR,          ,           p
V	e   V	3V
,           # T
# \        V	VVP                  R7      # )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   NN)ÚlossÚlogitsr›   )	r#   rS  ra  r�  r¡  r–   Úloss_functionr	   r›   )rE   rb  rR  r¥  rS  r‘  Úoutputsr”  r©  r¨  rË   s   &&&&&,     r   rP   Ú'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   )r¡  r–   ra  rž  ©NNNNr–  rZ   s   @@r   r™  r™  ±  s-   ù‡ € ÷ó ð ÷"
ñ "
ó ÷"
ð "
r   r™  c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚMobileViTASPPPoolingií  c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# )r   r#   r$   r%   r   Nr^   )r   r/   s   "€r   r   Ú!MobileViTASPPPooling.__annotate__î  s+   ø€ ÷ 
ñ 
™ð 
¹Sð 
ÑPSð 
ÐX\ñ 
r   c           
     óŠ   <€ \         SV `  4        \        P                  ! ^R7      V n        \        VVV^^RRR7      V n        R# )r2   )Úoutput_sizeTÚrelu)r$   r%   r&   r'   r+   r,   N)r;   r<   r   ÚAdaptiveAvgPool2dÚglobal_poolr!   r  )rE   r#   r$   r%   rF   s   &&&&€r   r<   ÚMobileViTASPPPooling.__init__î  sB   ø€ Ü‰ÑÔä×/Ò/¸AÔ>ˆÔä*ØØ#Ø%ØØØ"Ø!ô
ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rI   rK   )r   r/   s   "€r   r   r±  ý  s#   ø€ ÷ ñ ¡§¡ð ±·±ñ r   c                ó¬   € VP                   RR pV P                  V4      pV P                  V4      p\        P                  P                  WRRR7      pV# )r   Nr  Fr  r    )r¡   r¶  r  r   r§   r#  )rE   rJ   Úspatial_sizes   && r   rP   ÚMobileViTASPPPooling.forwardý  sQ   € Ø—~‘~ b cÐ*ˆØ×#Ñ# HÓ-ˆØ—=‘= Ó*ˆÜ—=‘=×,Ñ,¨XÈzÐinÐ,ÓoˆØˆr   )r  r¶  rR   rZ   s   @@r   r¯  r¯  í  s   ù‡ € ÷
ó 
÷÷ ð r   r¯  c                   óT   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltRtVtV ;t	# )ÚMobileViTASPPi  z{
ASPP module defined in DeepLab papers: https://huggingface.co/papers/1606.00915, https://huggingface.co/papers/1706.05587
c                ó$   <€ V ^8„  d   QhRS[ RR/# rB  r   )r   r/   s   "€r   r   ÚMobileViTASPP.__annotate__
  s   ø€ ÷ )>ñ )>™ð )>°4ñ )>r   c                óš  <€ \         SV `  4        VP                  R,          pVP                  p\	        VP
                  4      ^8w  d   \        R4      h\        P                  ! 4       V n	        \        VVV^RR7      pV P                  P                  V4       V P                  P                  VP
                   Uu. uF  p\        VVV^VRR7      NK  	  up4       \        WV4      pV P                  P                  V4       \        V^V,          V^RR7      V n        \        P                  ! VP                   R7      V n        R# u upi )r   z"Expected 3 values for atrous_ratesr´  rd   )r$   r%   r&   r*   r,   )ÚpNr    )r;   r<   rG  Úaspp_out_channelsÚlenÚatrous_ratesr=   r   r{   Úconvsr!   r~   Úextendr¯  Úprojectr”   Úaspp_dropout_probr–   )rE   r#   r$   r%   Úin_projectionÚrateÚ
pool_layerrF   s   &&     €r   r<   ÚMobileViTASPP.__init__
  s-  ø€ Ü‰ÑÔà×.Ñ.¨rÕ2ˆØ×/Ñ/ˆäˆv×"Ñ"Ó# qÔ(ÜÐAÓBÐBä—]’]“_ˆŒ
ä*ØØ#Ø%ØØ!ô
ˆð 	�
‰
×Ñ˜-Ô(à�
‰
×Ñð #×/Ò/ó
ñ 0�Dô #ØØ +Ø!-Ø !Ø!Ø#)÷ñ 0ñ
ô	
ô *¨&¸|ÓLˆ
Ø�
‰
×Ñ˜*Ô%ä)Ø  LÕ 0¸|ÐYZÐkqô
ˆŒô —z’z F×$<Ñ$<Ô=ˆŽùò)
s   Â<Ec                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rI   rK   )r   r/   s   "€r   r   r¿  5  s#   ø€ ÷ ñ ¡§¡ð ±·±ñ r   c                óÒ   € . pV P                    F  pVP                  V! V4      4       K  	  \        P                  ! V^R7      pV P	                  V4      pV P                  V4      pV# r<  )rÅ  r~   rL   r=  rÇ  r–   )rE   rJ   ÚpyramidÚconvÚpooled_featuress   &&   r   rP   ÚMobileViTASPP.forward5  sW   € ØˆØ—J”JˆDØ�N‰N™4 ›>Ö*ñ ä—)’)˜G¨Ô+ˆàŸ,™, wÓ/ˆØŸ,™, Ó7ˆØÐr   )rÅ  r–   rÇ  rr   rZ   s   @@r   r½  r½    s$   ù‡ € ñ÷)>ó )>÷V÷ ð r   r½  c                   óT   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltRtVtV ;t	# )ÚMobileViTDeepLabV3i@  zB
DeepLabv3 architecture: https://huggingface.co/papers/1706.05587
c                ó$   <€ V ^8„  d   QhRS[ RR/# rB  r   )r   r/   s   "€r   r   ÚMobileViTDeepLabV3.__annotate__E  s   ø€ ÷ 
ñ 
™ð 
°4ñ 
r   c           
     óä   <€ \         SV `  4        \        V4      V n        \        P
                  ! VP                  4      V n        \        VVP                  VP                  ^RRRR7      V n        R# )r2   FT)r$   r%   r&   r+   r,   r)   N)r;   r<   r½  Úasppr   Ú	Dropout2drŸ  r–   r!   rÂ  rž  r¡  r¢  s   &&€r   r<   ÚMobileViTDeepLabV3.__init__E  s]   ø€ Ü‰ÑÔÜ! &Ó)ˆŒ	ä—|’| F×$BÑ$BÓCˆŒä,ØØ×0Ñ0Ø×*Ñ*ØØ#Ø Øô
ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rš   rK   )r   r/   s   "€r   r   rÖ  U  s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r   c                óz   € V P                  VR,          4      pV P                  V4      pV P                  V4      pV# )r2   rŸ   )rØ  r–   r¡  )rE   r›   rJ   s   && r   rP   ÚMobileViTDeepLabV3.forwardU  s6   € Ø—9‘9˜]¨2Õ.Ó/ˆØ—<‘< Ó)ˆØ—?‘? 8Ó,ˆØˆr   )rØ  r¡  r–   rr   rZ   s   @@r   rÔ  rÔ  @  s#   ù‡ € ñ÷
ó 
÷ ÷ ð r   rÔ  zX
    MobileViT model with a semantic segmentation head on top, e.g. for Pascal VOC.
    c                   ó^   a a€ ] tR tRt oV3R lV 3R llt]RV3R lR ll4       tRtVtV ;t	# )Ú MobileViTForSemanticSegmentationi\  c                ó$   <€ V ^8„  d   QhRS[ RR/# rB  r   )r   r/   s   "€r   r   Ú-MobileViTForSemanticSegmentation.__annotate__b  s   ø€ ÷ ñ ™ð °4ñ r   c                ó¬   <€ \         SV `  V4       VP                  V n        \        VR R7      V n        \        V4      V n        V P                  4        R# )F)r‚  N)r;   r<   rž  r€  ra  rÔ  Úsegmentation_headr‰  r¢  s   &&€r   r<   Ú)MobileViTForSemanticSegmentation.__init__b  sD   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ'¨¸eÔDˆŒÜ!3°FÓ!;ˆÔð 	�‰Ör   c                ó¨   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[R,          RS[R,          RS[S[,          /# )r   rb  Nr¥  rR  rS  r   )rL   rM   r-   r  r
   )r   r/   s   "€r   r   rá  m  sd   ø€ ÷ L
ñ L
á—l‘l TÕ)ðL
ñ —‘˜tÕ#ðL
ñ # T�kð	L
ñ
 ˜D•[ðL
ñ 
Ñ(Õ	(ñL
r   c                óÜ  € Ve   TMV P                   P                  pVe   TMV P                   P                  pVe'   V P                   P                  ^8X  d   \	        R4      hV P                  VRVR7      pV'       d   VP                  MV^,          pV P                  V4      pRp	VeX   \        P                  P                  W‚P                  RR RRR7      p
\        V P                   P                  R7      pV! W¢4      p	V'       g<   V'       d   V3VR	,          ,           pMV3VR
,          ,           pV	e   V	3V,           # T# \        T	TV'       d   VP                  RR7      # RRR7      # )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
```Nz/The number of labels should be greater than oneTr�  r  Fr  )Úignore_indexr�  r§  )r¨  r©  r›   Ú
attentionsr    )r#   rR  rS  rž  r=   ra  r›   rã  r   r§   r#  r¡   r   Úsemantic_loss_ignore_indexr
   )rE   rb  r¥  rR  rS  r‘  r«  Úencoder_hidden_statesr©  r¨  Úupsampled_logitsÚloss_fctrË   s   &&&&&,       r   rP   Ú(MobileViTForSemanticSegmentation.forwardl  si  € ð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¨R¥[Õ0‘à ˜ W¨R¥[Õ0�Ø)-Ò)9�T�G˜fÕ$ÐE¸vÐEä&ØØß3G˜'×/Ñ/Øô	
ð 	
ð NRØô	
ð 	
r   )ra  rž  rã  r­  r–  rZ   s   @@r   rß  rß  \  s1   ù‡ € ÷ó ð ÷L
ñ L
ó ÷L
ð L
r   rß  )ra   N)r™  rß  r€  r`  )3rs   r¥   rL   r   Útorch.nnr   Ú r   rl  Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr   r   r	   r
   Úmodeling_utilsr   Úutilsr   r   r   Úconfiguration_mobilevitr   Ú
get_loggerrS   Úloggerr   re  r!   r\   ru   r‡   r·   rÆ   rÔ   râ   rì   rü   r  r@  r`  r€  r™  r¯  r½  rÔ  rß  Ú__all__rV  r   r   Ú<module>rù     sÜ  ðñ  ã ã Ý Ý %å &Ý !Ý 9÷ó õ .ß 7Ñ 7Ý 4ð 
×	Ò	˜HÓ	%€÷
ô=˜Ÿ™ô =ô@-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   