+
    œ°³j„  ã                   óv  € R 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 ^R
IHt ]P0                  ! ]4      tR4R R llt]! R4      ]! R4      3R 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 ]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- R.]P<                  4      t, ! R/ R0]P<                  4      t-]! R1R(7       ! R2 R3](4      4       t.. R5Ot/R# )6zPyTorch MobileViTV2 model.N)Únn)ÚCrossEntropyLoss)Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttentionÚSemanticSegmenterOutput)ÚPreTrainedModel)Úauto_docstringÚlogging©ÚMobileViTV2Configc                óV   € V ^8„  d   QhR\         R\         R\         R,          R\         /# )é   ÚvalueÚdivisorÚ	min_valueNÚreturn)Úint)Úformats   "Úu/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/mobilevitv2/modeling_mobilevitv2.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   z-infÚinfc                óH   € V ^8„  d   QhR\         R\         R\         R\         /# )r   r   Úmin_valÚmax_valr   )Úfloat)r   s   "r   r   r   5   s)   € ÷ -ñ -”ð -¤ð -Äð -ÔY^ñ -r   c                 ó,   € \        V\        W 4      4      # ©N)r   Úmin©r   r!   r"   s   &&&r   Úclipr(   5   s   € Üˆwœ˜GÓ+Ó,Ð,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# )ÚMobileViTV2ConvLayerc                ó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   Ú!MobileViTV2ConvLayer.__annotate__;   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/   r0   Úpaddingr3   r1   r2   Úpadding_modegñhãˆµøä>gš™™™™™¹?T)Únum_featuresÚepsÚmomentumÚaffineÚtrack_running_statsN)ÚsuperÚ__init__r   Ú
ValueErrorr   ÚConv2dÚconvolutionÚBatchNorm2dÚnormalizationÚ
isinstancer7   r   Ú
activationÚ
hidden_act)Úselfr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r=   Ú	__class__s   &&&&&&&&&&& €r   rE   ÚMobileViTV2ConvLayer.__init__;   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   r8   s   "€r   r   r9   q   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# r%   )rH   rJ   rL   )rN   rS   s   &&r   ÚforwardÚMobileViTV2ConvLayer.forwardq   sK   € Ø×#Ñ# HÓ-ˆØ×ÑÒ)Ø×)Ñ)¨(Ó3ˆHØ�?‰?Ò&Ø—‘ xÓ0ˆHØˆr   )rL   rH   rJ   )r;   r;   Fr;   TT©	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rE   rX   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©rO   r8   s   @@r   r*   r*   :   s   ù‡ € ÷4#õ 4#÷l÷ ð r   r*   c                   óX   a a€ ] tR t^{t 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	# )ÚMobileViTV2InvertedResidualzQ
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.   r0   r3   r   N©r   r   )r   r8   s   "€r   r   Ú(MobileViTV2InvertedResidual.__annotate__€   s=   ø€ ÷ 
ñ 
Ù'ð
Ù69ð
ÙILð
ÙVYð
Ùehð
à	ñ
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/   r0   r1   r3   F©r-   r.   r/   r5   N)r;   r   )rD   rE   r   r   ÚroundÚexpand_ratiorF   Úuse_residualr*   Ú
expand_1x1Úconv_3x3Ú
reduce_1x1)rN   r,   r-   r.   r0   r3   Úexpanded_channelsrO   s   &&&&&& €r   rE   Ú$MobileViTV2InvertedResidual.__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                  /# rR   rT   )r   r8   s   "€r   r   rg   ¡   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# r%   )ro   rp   rq   rn   )rN   rS   Úresiduals   && r   rX   Ú#MobileViTV2InvertedResidual.forward¡   sJ   € Øˆà—?‘? 8Ó,ˆØ—=‘= Ó*ˆØ—?‘? 8Ó,ˆà&*×&7×&7Ð&7ˆxÕ"ÐE¸XÐEr   )rp   ro   rq   rn   )r;   ©
r[   r\   r]   r^   Ú__doc__rE   rX   r_   r`   ra   rb   s   @@r   rd   rd   {   s'   ù‡ € ñ÷
õ 
÷BF÷ Fð Fr   rd   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# )ÚMobileViTV2MobileNetLayerc                ó<   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[RR/# )r   r,   r-   r.   r0   Ú
num_stagesr   Nrf   )r   r8   s   "€r   r   Ú&MobileViTV2MobileNetLayer.__annotate__­   s=   ø€ ÷ 'ñ 'Ù'ð'Ù69ð'ÙILð'ÙVYð'Ùknð'à	ñ'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.   r0   N)rD   rE   r   Ú
ModuleListÚlayerÚrangerd   Úappend)	rN   r,   r-   r.   r0   r}   Úir‚   rO   s	   &&&&&&  €r   rE   Ú"MobileViTV2MobileNetLayer.__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                  /# rR   rT   )r   r8   s   "€r   r   r~   ½   s#   ø€ ÷ ñ ¡§¡ð ±·±ñ r   c                ó<   € V P                    F  pV! V4      pK  	  V# r%   ©r‚   )rN   rS   Úlayer_modules   && r   rX   Ú!MobileViTV2MobileNetLayer.forward½   s   € Ø ŸJœJˆLÙ# HÓ-ŠHñ 'àˆr   r‰   )r;   r;   rZ   rb   s   @@r   r{   r{   ¬   s   ù‡ € ÷'õ '÷ ÷ ð r   r{   c                   óT   a a€ ] tR t^Ã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	# )ÚMobileViTV2LinearSelfAttentionaY  
This layer applies a self-attention with linear complexity, as described in MobileViTV2 paper:
https://huggingface.co/papers/2206.02680

Args:
    config (`MobileVitv2Config`):
         Model configuration object
    embed_dim (`int`):
        `input_channels` from an expected input of size :math:`(batch_size, input_channels, height, width)`
c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r   r,   Ú	embed_dimr   Nrf   )r   r8   s   "€r   r   Ú+MobileViTV2LinearSelfAttention.__annotate__Ï   s#   ø€ ÷ #ñ #Ñ0ð #¹Sð #ÀTñ #r   c           
     óô   <€ \         SV `  4        \        VV^^V,          ,           R^RRR7      V n        \        P
                  ! VP                  R7      V n        \        VVVR^RRR7      V n        W n        R# )r;   TF)r,   r-   r.   r2   r/   r4   r5   ©ÚpN)	rD   rE   r*   Úqkv_projr   ÚDropoutÚattn_dropoutÚout_projr�   )rN   r,   r�   rO   s   &&&€r   rE   Ú'MobileViTV2LinearSelfAttention.__init__Ï   sy   ø€ Ü‰ÑÔä,ØØ!Ø˜a )�mÕ,ØØØ#Ø ô
ˆŒô ŸJšJ¨×)<Ñ)<Ô=ˆÔÜ,ØØ!Ø"ØØØ#Ø ô
ˆŒð #Žr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r   Úhidden_statesr   rT   )r   r8   s   "€r   r   r�   è   s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r   c                óè  € V P                  V4      p\        P                  ! V^V P                  V P                  .^R7      w  r4p\        P                  P
                  P                  VRR7      pV P                  V4      pWF,          p\        P                  ! VRRR7      p\        P                  P
                  P                  V4      VP                  V4      ,          pV P                  V4      pV# )r;   )Úsplit_size_or_sectionsÚdim©rž   T©rž   Úkeepdiméÿÿÿÿ)r”   rU   Úsplitr�   r   Ú
functionalÚsoftmaxr–   ÚsumÚreluÚ	expand_asr—   )	rN   r›   ÚqkvÚqueryÚkeyr   Úcontext_scoresÚcontext_vectorÚouts	   &&       r   rX   Ú&MobileViTV2LinearSelfAttention.forwardè   sÈ   € à�m‰m˜MÓ*ˆô
 "ŸKšK¨ÀQÈÏÉÐX\×XfÑXfÐDgÐmnÔoÑˆ�Eô Ÿ™×,Ñ,×4Ñ4°UÀÐ4ÓCˆØ×*Ñ*¨>Ó:ˆð Õ-ˆäŸš >°rÀ4ÔHˆô �h‰h×!Ñ!×&Ñ& uÓ-°×0HÑ0HÈÓ0OÕOˆØ�m‰m˜CÓ ˆØˆ
r   )r–   r�   r—   r”   rx   rb   s   @@r   r�   r�   Ã   s#   ù‡ € ñ	÷#ó #÷2÷ ð r   r�   c                   óT   a a€ ] tR tR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# )ÚMobileViTV2FFNi  c          
      ó6   <€ V ^8„  d   QhRS[ RS[RS[RS[RR/# )r   r,   r�   Úffn_latent_dimÚffn_dropoutr   N©r   r   r#   )r   r8   s   "€r   r   ÚMobileViTV2FFN.__annotate__  s=   ø€ ÷ 0ñ 0á!ð0ñ ð0ñ ð	0ñ
 ð0ð 
ñ0r   c                óð   <€ \         SV `  4        \        VVV^^RRRR7      V n        \        P
                  ! V4      V n        \        VVV^^RRRR7      V n        \        P
                  ! V4      V n        R# )r;   TF)r,   r-   r.   r/   r0   r2   r4   r5   N)	rD   rE   r*   Úconv1r   r•   Údropout1Úconv2Údropout2)rN   r,   r�   r³   r´   rO   s   &&&&&€r   rE   ÚMobileViTV2FFN.__init__  s|   ø€ ô 	‰ÑÔÜ)ØØ!Ø'ØØØØ#Øô	
ˆŒ
ô Ÿ
š
 ;Ó/ˆŒä)ØØ&Ø"ØØØØ#Ø ô	
ˆŒ
ô Ÿ
š
 ;Ó/ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rš   rT   )r   r8   s   "€r   r   r¶   #  s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r   c                óŽ   € V P                  V4      pV P                  V4      pV P                  V4      pV P                  V4      pV# r%   )r¸   r¹   rº   r»   )rN   r›   s   &&r   rX   ÚMobileViTV2FFN.forward#  s@   € ØŸ
™
 =Ó1ˆØŸ™ mÓ4ˆØŸ
™
 =Ó1ˆØŸ™ mÓ4ˆØÐr   )r¸   rº   r¹   r»   ©ç        rZ   rb   s   @@r   r±   r±     s   ù‡ € ÷0õ 0÷@÷ ð r   r±   c                   óT   a a€ ] tR tR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# )ÚMobileViTV2TransformerLayeri+  c          
      ó6   <€ V ^8„  d   QhRS[ RS[RS[RS[RR/# )r   r,   r�   r³   Údropoutr   Nrµ   )r   r8   s   "€r   r   Ú(MobileViTV2TransformerLayer.__annotate__,  sD   ø€ ÷ Yñ Yá!ðYñ ðYñ ð	Yñ
 ðYð 
ñYr   c                óN  <€ \         SV `  4        \        P                  ! ^W!P                  R7      V n        \        W4      V n        \        P                  ! VR7      V n	        \        P                  ! ^W!P                  R7      V n
        \        WW1P                  4      V n        R# )r;   ©Ú
num_groupsÚnum_channelsr@   r’   N)rD   rE   r   Ú	GroupNormÚlayer_norm_epsÚlayernorm_beforer�   Ú	attentionr•   r¹   Úlayernorm_afterr±   r´   Úffn)rN   r,   r�   r³   rÅ   rO   s   &&&&&€r   rE   Ú$MobileViTV2TransformerLayer.__init__,  sr   ø€ ô 	‰ÑÔÜ "§¢¸È	×WlÑWlÔ mˆÔÜ7¸ÓJˆŒÜŸ
š
 WÔ-ˆŒÜ!Ÿ|š|°qÀy×VkÑVkÔlˆÔÜ! &°^×EWÑEWÓXˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rš   rT   )r   r8   s   "€r   r   rÆ   :  s#   ø€ ÷ 	ñ 	¡U§\¡\ð 	±e·l±lñ 	r   c                ó®   € V P                  V4      pV P                  V4      pW1,           pV P                  V4      pV P                  V4      pWA,           pV# r%   )rÍ   rÎ   rÏ   rÐ   )rN   r›   Úlayernorm_1_outÚattention_outputÚlayer_outputs   &&   r   rX   Ú#MobileViTV2TransformerLayer.forward:  sU   € Ø×/Ñ/°Ó>ˆØŸ>™>¨/Ó:ÐØ(Õ8ˆà×+Ñ+¨MÓ:ˆØ—x‘x Ó-ˆà#Õ3ˆØÐr   )rÎ   r¹   rÐ   rÏ   rÍ   rÀ   rZ   rb   s   @@r   rÃ   rÃ   +  s    ù‡ € ÷Yõ Y÷	÷ 	ð 	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# )ÚMobileViTV2TransformeriF  c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# )r   r,   Ún_layersÚd_modelr   Nrf   )r   r8   s   "€r   r   Ú#MobileViTV2Transformer.__annotate__G  s+   ø€ ÷ 1ñ 1Ñ0ð 1¹Cð 1É#ð 1ÐRVñ 1r   c                ój  <€ \         S	V `  4        VP                  pWC,          .V,          pV Uu. uF  p\        V^,          ^,          4      NK  	  pp\        P
                  ! 4       V n        \        V4       F1  p\        WWW,          R7      pV P                  P                  V4       K3  	  R# u upi )é   )r�   r³   N)
rD   rE   Úffn_multiplierr   r   r�   r‚   rƒ   rÃ   r„   )
rN   r,   rÛ   rÜ   rà   Úffn_dimsÚdÚ	block_idxÚtransformer_layerrO   s
   &&&&     €r   rE   ÚMobileViTV2Transformer.__init__G  s”   ø€ Ü‰ÑÔà×.Ñ.ˆà"Õ,Ð-°Õ8ˆñ 2:Ó:±¨A”C˜˜b� B�Ö'±ˆÐ:ä—]’]“_ˆŒ
Ü˜xžˆIÜ ;Ø¸(Õ:Mô!Ðð �J‰J×ÑÐ/Ö0ó	 )ùò ;s   °"B0c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rš   rT   )r   r8   s   "€r   r   rÝ   X  s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r   c                ó<   € V P                    F  pV! V4      pK  	  V# r%   r‰   )rN   r›   rŠ   s   && r   rX   ÚMobileViTV2Transformer.forwardX  s    € Ø ŸJœJˆLÙ(¨Ó7ŠMñ 'àÐr   r‰   rZ   rb   s   @@r   rÙ   rÙ   F  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# )ÚMobileViTV2Layeri^  z=
MobileViTV2 layer: https://huggingface.co/papers/2206.02680
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.   Úattn_unit_dimÚn_attn_blocksr3   r0   r   Nrf   )r   r8   s   "€r   r   ÚMobileViTV2Layer.__annotate__c  s[   ø€ ÷ ;
ñ ;
á!ð;
ñ ð;
ñ ð	;
ñ
 ð;
ñ ð;
ñ ð;
ñ ð;
ð 
ñ;
r   c           	     óò  <€ \         S	V `  4        VP                  V n        VP                  V n        Tp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                  VR7      V n	        \        VVV^RRR7      V n
        \        WVR7      V n        \        P                  ! ^WAP                  R7      V n        \        VVV^RRR7      V n        R# )	r   )r-   r.   r0   r3   N)r-   r.   r/   r1   F)r-   r.   r/   r4   r5   )rÜ   rÛ   rÈ   T)rD   rE   Ú
patch_sizeÚpatch_widthÚpatch_heightrd   Údownsampling_layerr*   Úconv_kernel_sizeÚconv_kxkÚconv_1x1rÙ   Útransformerr   rË   rÌ   Ú	layernormÚconv_projection)
rN   r,   r-   r.   rì   rí   r3   r0   Úcnn_out_dimrO   s
   &&&&&&&& €r   rE   ÚMobileViTV2Layer.__init__c  s  ø€ ô 	‰ÑÔØ!×,Ñ,ˆÔØ"×-Ñ-ˆÔà#ˆà�QŒ;Ü&AØØ'Ø)Ø!)¨Q¤‘v°AØ*2°Q¬,˜ Qž¸Aô'ˆDÔ#ð '‰Kà&*ˆDÔ#ô -ØØ#Ø$Ø×/Ñ/Øô
ˆŒô -ØØ#Ø$ØØ#Ø ô
ˆŒô 2°&ÐZgÔhˆÔô Ÿš°À×TiÑTiÔjˆŒô  4ØØ#Ø$ØØ"Ø ô 
ˆÖr   c                óz   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  S[S[S[3,          3,          /# )r   Úfeature_mapr   ©rU   rV   Útupler   )r   r8   s   "€r   r   rî      s8   ø€ ÷ 	0ñ 	0¡U§\¡\ð 	0±e¹E¿L¹LÉ%ÑPSÑUXÐPXÍ/Ð<YÕ6Zñ 	0r   c                ó"  € VP                   w  r#rE\        P                  P                  VV P                  V P
                  3V P                  V P
                  3R 7      pVP                  W#V P                  V P
                  ,          R4      pWdV33# ))r/   r0   r¢   )Úshaper   r¤   Úunfoldrò   rñ   Úreshape)rN   rý   Ú
batch_sizer-   Ú
img_heightÚ	img_widthÚpatchess   &&     r   Ú	unfoldingÚMobileViTV2Layer.unfolding   sŠ   € Ø9D×9JÑ9JÑ6ˆ
 Ü—-‘-×&Ñ&ØØ×*Ñ*¨D×,<Ñ,<Ð=Ø×%Ñ% t×'7Ñ'7Ð8ð 'ó 
ˆð
 —/‘/ *¸4×;LÑ;LÈt×O_ÑO_Õ;_ÐacÓdˆà YÐ/Ð/Ð/r   c                ój   <€ V ^8„  d   QhRS[ P                  RS[S[S[3,          RS[ P                  /# )r   r  Úoutput_sizer   rþ   )r   r8   s   "€r   r   rî   «  s2   ø€ ÷ ñ ™uŸ|™|ð ¹%ÁÁSÀ½/ð ÉeÏlÉlñ r   c                óô   € VP                   w  r4rVVP                  W4V,          V4      p\        P                  P	                  VVV P
                  V P                  3V P
                  V P                  3R 7      pV# ))r  r/   r0   )r  r  r   r¤   Úfoldrò   rñ   )rN   r  r  r  Úin_dimrð   Ú	n_patchesrý   s   &&&     r   ÚfoldingÚMobileViTV2Layer.folding«  st   € Ø4;·M±MÑ1ˆ
˜JØ—/‘/ *°zÕ.AÀ9ÓMˆä—m‘m×(Ñ(ØØ#Ø×*Ñ*¨D×,<Ñ,<Ð=Ø×%Ñ% t×'7Ñ'7Ð8ð	 )ó 
ˆð Ðr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rR   rT   )r   r8   s   "€r   r   rî   ¸  s#   ø€ ÷ ñ ¡§¡ð ±·±ñ r   c                ó>  € V P                   '       d   V P                  V4      pV P                  V4      pV P                  V4      pV P                  V4      w  r#V P	                  V4      pV P                  V4      pV P                  W#4      pV P                  V4      pV# r%   )ró   rõ   rö   r  r÷   rø   r  rù   )rN   rS   r  r  s   &&  r   rX   ÚMobileViTV2Layer.forward¸  s”   € à×"×"Ð"Ø×.Ñ.¨xÓ8ˆHð —=‘= Ó*ˆØ—=‘= Ó*ˆð  $Ÿ~™~¨hÓ7Ñˆð ×"Ñ" 7Ó+ˆØ—.‘. Ó)ˆð —<‘< Ó5ˆà×'Ñ'¨Ó1ˆØˆr   )rö   rõ   rù   ró   rø   rò   rñ   r÷   )r   r;   r   )r[   r\   r]   r^   ry   rE   r  r  rX   r_   r`   ra   rb   s   @@r   rê   rê   ^  s8   ù‡ € ñ÷;
õ ;
÷z	0ð 	0÷ð ÷÷ ð 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# )ÚMobileViTV2EncoderiÐ  c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r   r,   r   Nr   )r   r8   s   "€r   r   ÚMobileViTV2Encoder.__annotate__Ñ  s    ø€ ÷ O#ñ O#Ñ0ð O#°Tñ O#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P                  ,          ^^@R7      ^^R7      p\        ^@VP                  ,          ^R7      p\        ^€VP                  ,          ^R7      p\        RVP                  ,          ^R7      p\        RVP                  ,          ^R7      p	\        RVP                  ,          ^R7      p
\        VVV^^R7      pV P
                  P                  V4       \        VVV^^R7      pV P
                  P                  V4       \        VVV\        VP                  ^ ,          VP                  ,          ^R7      VP                  ^ ,          R	7      pV P
                  P                  V4       V'       d
   V^,          p\        VVV	\        VP                  ^,          VP                  ,          ^R7      VP                  ^,          VR
7      pV P
                  P                  V4       V'       d
   V^,          p\        VV	V
\        VP                  ^,          VP                  ,          ^R7      VP                  ^,          VR
7      pV P
                  P                  V4       R# )FTr'   ©r   r   ©r   é   i€  é   )r-   r.   r0   r}   )r-   r.   rì   rí   )r-   r.   rì   rí   r3   N)rD   rE   r,   r   r�   r‚   Úgradient_checkpointingÚoutput_strider   r(   Úwidth_multiplierr{   r„   rê   Úbase_attn_unit_dimsrí   )rN   r,   Údilate_layer_4Údilate_layer_5r3   Úlayer_0_dimÚlayer_1_dimÚlayer_2_dimÚlayer_3_dimÚlayer_4_dimÚlayer_5_dimÚlayer_1Úlayer_2Úlayer_3Úlayer_4Úlayer_5rO   s   &&              €r   rE   ÚMobileViTV2Encoder.__init__Ñ  sx  ø€ Ü‰ÑÔØŒä—]’]“_ˆŒ
Ø&+ˆÔ#ð +0Ð/ˆØ×Ñ 1Ô$Ø!ˆNØ!‰NØ×!Ñ! RÔ'Ø!ˆNàˆä$Ü�r˜F×3Ñ3Õ3¸RÈÔLÐVWÐceô
ˆô % R¨&×*AÑ*AÕ%AÈ2ÔNˆÜ$ S¨6×+BÑ+BÕ%BÈAÔNˆÜ$ S¨6×+BÑ+BÕ%BÈAÔNˆÜ$ S¨6×+BÑ+BÕ%BÈAÔNˆÜ$ S¨6×+BÑ+BÕ%BÈAÔNˆä+ØØ#Ø$ØØô
ˆð 	�
‰
×Ñ˜'Ô"ä+ØØ#Ø$ØØô
ˆð 	�
‰
×Ñ˜'Ô"ä"ØØ#Ø$Ü(¨×)CÑ)CÀAÕ)FÈ×I`ÑI`Õ)`ÐjkÔlØ ×.Ñ.¨qÕ1ô
ˆð 	�
‰
×Ñ˜'Ô"çØ˜�MˆHä"ØØ#Ø$Ü(¨×)CÑ)CÀAÕ)FÈ×I`ÑI`Õ)`ÐjkÔlØ ×.Ñ.¨qÕ1Øô
ˆð 	�
‰
×Ñ˜'Ô"çØ˜�MˆHä"ØØ#Ø$Ü(¨×)CÑ)CÀAÕ)FÈ×I`ÑI`Õ)`ÐjkÔlØ ×.Ñ.¨qÕ1Øô
ˆð 	�
‰
×Ñ˜'Ö"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   )rU   rV   r6   rÿ   r   )r   r8   s   "€r   r   r  "  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r%   © )Ú.0Úvs   & r   Ú	<genexpr>Ú-MobileViTV2Encoder.forward.<locals>.<genexpr>1  s   é € ÐXÑ$F˜qŸšÓ$Fùs   ‚Œ
)Úlast_hidden_stater›   r6  )Ú	enumerater‚   rÿ   r   )rN   r›   r2  r3  Úall_hidden_statesr…   rŠ   s   &&&&   r   rX   ÚMobileViTV2Encoder.forward"  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,   r  r‚   )FTrZ   rb   s   @@r   r  r  Ð  s$   ù‡ € ÷O#ó O#÷b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# )ÚMobileViTV2PreTrainedModeli6  Úmobilevitv2Úpixel_valuesTrê   c                ó8   <€ V ^8„  d   QhRS[ P                  RR/# )r   Úmoduler   N)r   ÚModule)r   r8   s   "€r   r   Ú'MobileViTV2PreTrainedModel.__annotate__@  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 weightsrÁ   )ÚmeanÚstdNÚrunning_mean)rD   Ú_init_weightsrK   r   rI   ÚinitÚnormal_Úweightr,   Úinitializer_ranger2   Úzeros_ÚgetattrrJ  Úones_Úrunning_varÚnum_batches_tracked)rN   rD  rO   s   &&€r   rK  Ú(MobileViTV2PreTrainedModel._init_weights?  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   r8   s   "€r   r   rF  6  s   ø‡ ‚ áÑò r   r6  )Úimage)r[   r\   r]   r^   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesrU   Úno_gradrK  Ú__annotate_func__r_   r`   ra   rb   s   @@r   r@  r@  6  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	# )	ÚMobileViTV2ModeliM  c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   r,   Úexpand_output)r   r6   )r   r8   s   "€r   r   ÚMobileViTV2Model.__annotate__O  s   ø€ ÷ ñ Ñ0ð Áñ r   c           
     ó  <€ \         SV `  V4       Wn        W n        \	        \        ^ VP                  ,          ^^@R7      ^^R7      p\        VVP                  V^^RRR7      V n	        \        V4      V n        V P                  4        R# )zð
expand_output (`bool`, *optional*, defaults to `True`):
    Whether to expand the output of the model. If `True`, the model will output pooled features in addition to
    hidden states. If `False`, only the hidden states will be returned.
r'   r  T©r-   r.   r/   r0   r4   r5   N)rD   rE   r,   rb  r   r(   r!  r*   rÊ   Ú	conv_stemr  ÚencoderÚ	post_init)rN   r,   rb  r%  rO   s   &&& €r   rE   ÚMobileViTV2Model.__init__O  s‡   ø€ ô 	‰Ñ˜Ô ØŒØ*Ôä$Ü�r˜F×3Ñ3Õ3¸RÈÔLÐVWÐceô
ˆô .ØØ×+Ñ+Ø$ØØØ"Øô
ˆŒô *¨&Ó1ˆŒð 	�‰Ör   c          	      ó€   <€ V ^8„  d   QhRS[ P                  R,          RS[R,          RS[R,          RS[S[,          /# )r   rB  Nr2  r3  r   )rU   rV   r6   rÿ   r   )r   r8   s   "€r   r   rc  l  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                  '       d&   V^ ,          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©r2  r3  Fr    ºr;   NN)r;  Úpooler_outputr›   éþÿÿÿr¢   )r,   r2  r3  rF   rf  rg  rb  rU   rH  r   r›   )
rN   rB  r2  r3  ÚkwargsÚembedding_outputÚencoder_outputsr;  Úpooled_outputÚoutputs
   &&&&,     r   rX   ÚMobileViTV2Model.forwardk  s÷   € ð %9Ò$DÑ È$Ï+É+×JjÑJjð 	ð &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆàÒÜÐ?Ó@Ð@àŸ>™>¨,Ó7ÐàŸ,™,ØØ!5Ø#ð 'ó 
ˆð ××ÐØ /°Õ 2Ðô "ŸJšJÐ'8¸rÀ2¸hÐPUÔV‰Mà /°Õ 2ÐØ ˆMçØ;HÒ;TÐ'Ñ7Ð[lÐZnˆFØ¨BÕ/Õ/Ð/ä7Ø/Ø'Ø)×7Ñ7ô
ð 	
r   )r,   rf  rg  rb  )T)NNN©
r[   r\   r]   r^   rE   r   rX   r_   r`   ra   rb   s   @@r   r`  r`  M  s-   ù‡ € ÷õ ð8 ÷(
ñ (
ó ÷(
ð (
r   r`  z‹
    MobileViTV2 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	# )Ú!MobileViTV2ForImageClassificationi—  c                ó$   <€ V ^8„  d   QhRS[ RR/# r  r   )r   r8   s   "€r   r   Ú.MobileViTV2ForImageClassification.__annotate__ž  s   ø€ ÷ ñ Ñ0ð °Tñ r   c                ó\  <€ \         SV `  V4       VP                  V n        \        V4      V n        \        R VP                  ,          ^R7      pVP                  ^ 8”  d"   \        P                  ! W!P                  R7      M\        P                  ! 4       V n
        V P                  4        R# )r  r  )Úin_featuresÚout_featuresN)rD   rE   Ú
num_labelsr`  rA  r   r!  r   ÚLinearÚIdentityÚ
classifierrh  )rN   r,   r.   rO   s   && €r   rE   Ú*MobileViTV2ForImageClassification.__init__ž  s�   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ+¨FÓ3ˆÔä% c¨F×,CÑ,CÕ&CÈQÔOˆð × Ñ  1Ô$ô �IŠI ,×=NÑ=NÕOä—’“ð 	Œð 	�‰Ö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  Nr2  Úlabelsr3  r   )rU   rV   r6   rÿ   r	   )r   r8   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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).
Nrl  ºr   NN)ÚlossÚlogitsr›   )r,   r3  rA  rn  r‚  Úloss_functionr	   r›   )rN   rB  r2  r…  r3  rp  Úoutputsrs  r‰  rˆ  rt  s   &&&&&,     r   rX   Ú)MobileViTV2ForImageClassification.forward¯  s¸   € ð &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆà×"Ñ" <ÐhsÐ"Ótˆç1<˜×-Ò-À'È!Å*ˆà—‘ Ó/ˆàˆØÒØ×%Ñ% f°d·k±kÓBˆDçØ�Y ¨¥Õ,ˆFØ)-Ò)9�T�G˜fÕ$ÐE¸vÐEä3ØØØ!×/Ñ/ô
ð 	
r   )r‚  rA  r  ©NNNNrv  rb   s   @@r   ry  ry  —  s-   ù‡ € ÷ó ð" ÷"
ñ "
ó ÷"
ð "
r   ry  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# )ÚMobileViTV2ASPPPoolingiÖ  c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# )r   r,   r-   r.   r   Nrf   )r   r8   s   "€r   r   Ú#MobileViTV2ASPPPooling.__annotate__×  s,   ø€ ÷ 
ñ 
Ñ0ð 
¹sð 
ÑRUð 
ÐZ^ñ 
r   c           
     óŠ   <€ \         SV `  4        \        P                  ! ^R7      V n        \        VVV^^RRR7      V n        R# )r;   )r  Tr§   re  N)rD   rE   r   ÚAdaptiveAvgPool2dÚglobal_poolr*   rö   )rN   r,   r-   r.   rO   s   &&&&€r   rE   ÚMobileViTV2ASPPPooling.__init__×  sB   ø€ Ü‰ÑÔä×/Ò/¸AÔ>ˆÔä,ØØ#Ø%ØØØ"Ø!ô
ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rR   rT   )r   r8   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   NÚbilinearF©ÚsizeÚmodeÚalign_cornersro  )r  r”  rö   r   r¤   Úinterpolate)rN   rS   Úspatial_sizes   && r   rX   ÚMobileViTV2ASPPPooling.forwardæ  sQ   € Ø—~‘~ b cÐ*ˆØ×#Ñ# HÓ-ˆØ—=‘= Ó*ˆÜ—=‘=×,Ñ,¨XÈzÐinÐ,ÓoˆØˆr   )rö   r”  rZ   rb   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	# )ÚMobileViTV2ASPPiî  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/# r  r   )r   r8   s   "€r   r   ÚMobileViTV2ASPP.__annotate__ó  s   ø€ ÷ *>ñ *>Ñ0ð *>°Tñ *>r   c                ó´  <€ \         SV `  4        \        R VP                  ,          ^R7      pT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  r  z"Expected 3 values for atrous_ratesr§   rk   )r-   r.   r/   r3   r5   r’   N)rD   rE   r   r!  Úaspp_out_channelsÚlenÚatrous_ratesrF   r   r�   Úconvsr*   r„   Úextendr�  Úprojectr•   Úaspp_dropout_probrÅ   )	rN   r,   Úencoder_out_channelsr-   r.   Úin_projectionÚrateÚ
pool_layerrO   s	   &&      €r   rE   ÚMobileViTV2ASPP.__init__ó  s;  ø€ Ü‰ÑÔä-¨c°F×4KÑ4KÕ.KÐUVÔWÐØ*ˆØ×/Ñ/ˆäˆv×"Ñ"Ó# qÔ(ÜÐAÓBÐBä—]’]“_ˆŒ
ä,ØØ#Ø%ØØ!ô
ˆð 	�
‰
×Ñ˜-Ô(à�
‰
×Ñð #×/Ò/ó
ñ 0�Dô %ØØ +Ø!-Ø !Ø!Ø#)÷ñ 0ñ
ô	
ô ,¨FÀÓNˆ
Ø�
‰
×Ñ˜*Ô%ä+Ø  LÕ 0¸|ÐYZÐkqô
ˆŒô —z’z F×$<Ñ$<Ô=ˆŽùò)
s   Ã	Ec                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rR   rT   )r   r8   s   "€r   r   r£    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¨  r„   rU   Úcatrª  rÅ   )rN   rS   ÚpyramidÚconvÚpooled_featuress   &&   r   rX   ÚMobileViTV2ASPP.forward  sW   € ØˆØ—J”JˆDØ�N‰N™4 ›>Ö*ñ ä—)’)˜G¨Ô+ˆàŸ,™, wÓ/ˆØŸ,™, Ó7ˆØÐr   )r¨  rÅ   rª  rx   rb   s   @@r   r¡  r¡  î  s$   ù‡ € ñ÷*>ó *>÷X÷ ð 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	# )ÚMobileViTV2DeepLabV3i+  zB
DeepLabv3 architecture: https://huggingface.co/papers/1706.05587
c                ó$   <€ V ^8„  d   QhRS[ RR/# r  r   )r   r8   s   "€r   r   Ú!MobileViTV2DeepLabV3.__annotate__0  s   ø€ ÷ 
ñ 
Ñ0ð 
°Tñ 
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# )r;   FT)r-   r.   r/   r4   r5   r2   N)rD   rE   r¡  Úasppr   Ú	Dropout2dÚclassifier_dropout_probrÅ   r*   r¥  r  r‚  ©rN   r,   rO   s   &&€r   rE   ÚMobileViTV2DeepLabV3.__init__0  s]   ø€ Ü‰ÑÔÜ# FÓ+ˆŒ	ä—|’| F×$BÑ$BÓCˆŒä.ØØ×0Ñ0Ø×*Ñ*ØØ#Ø Øô
ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rš   rT   )r   r8   s   "€r   r   r»  @  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# )r;   r¢   )r½  rÅ   r‚  )rN   r›   rS   s   && r   rX   ÚMobileViTV2DeepLabV3.forward@  s6   € Ø—9‘9˜]¨2Õ.Ó/ˆØ—<‘< Ó)ˆØ—?‘? 8Ó,ˆØˆr   )r½  r‚  rÅ   rx   rb   s   @@r   r¹  r¹  +  s#   ù‡ € ñ÷
ó 
÷ ÷ ð r   r¹  zZ
    MobileViTV2 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	# )Ú"MobileViTV2ForSemanticSegmentationiG  c                ó$   <€ V ^8„  d   QhRS[ RR/# r  r   )r   r8   s   "€r   r   Ú/MobileViTV2ForSemanticSegmentation.__annotate__M  s   ø€ ÷ ñ Ñ0ð °Tñ 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)rb  N)rD   rE   r  r`  rA  r¹  Úsegmentation_headrh  rÀ  s   &&€r   rE   Ú+MobileViTV2ForSemanticSegmentation.__init__M  sE   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ+¨FÀ%ÔHˆÔÜ!5°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…  r2  r3  r   )rU   rV   r6   rÿ   r
   )r   r8   s   "€r   r   rÈ  X  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      # )a2  
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, MobileViTV2ForSemanticSegmentation

>>> 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/mobilevitv2-1.0-imagenet1k-256")
>>> model = MobileViTV2ForSemanticSegmentation.from_pretrained("apple/mobilevitv2-1.0-imagenet1k-256")

>>> 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 oneTrl  r˜  Fr™  )Úignore_indexrm  r‡  )rˆ  r‰  r›   Ú
attentionsro  )r,   r2  r3  r  rF   rA  r›   rÊ  r   r¤   r�  r  r   Úsemantic_loss_ignore_indexr
   )rN   rB  r…  r2  r3  rp  r‹  Úencoder_hidden_statesr‰  rˆ  Úupsampled_logitsÚloss_fctrt  s   &&&&&,       r   rX   Ú*MobileViTV2ForSemanticSegmentation.forwardW  sk  € ð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�  rv  rb   s   @@r   rÆ  rÆ  G  s1   ù‡ € ÷ó ð ÷L
ñ L
ó ÷L
ð L
r   rÆ  )ri   N)ry  rÆ  r`  r@  )0ry   rU   r   Útorch.nnr   Ú r   rL  Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr   r   r	   r
   Úmodeling_utilsr   Úutilsr   r   Úconfiguration_mobilevitv2r   Ú
get_loggerr[   Úloggerr   r#   r(   rE  r*   rd   r{   r�   r±   rÃ   rÙ   rê   r  r@  r`  ry  r�  r¡  r¹  rÆ  Ú__all__r6  r   r   Ú<module>rà     s»  ðñ  !ã Ý Ý %å &Ý !Ý 9÷ó õ .ß ,Ý 8ð 
×	Ò	˜HÓ	%€÷
ñ ).¨f«ÉÈeË÷ -ô
=˜2Ÿ9™9ô =ôB-F "§)¡)ô -Fôb §	¡	ô ô.< R§Y¡Yô <ô~&�R—Y‘Yô &ôR "§)¡)ô ô6˜RŸY™Yô ô0oÐ1ô oôdcp˜Ÿ™ô cpðL ô8 ó 8ó ð8ð, ôF
Ð1ó F
ó ðF
ñR ðôô5
Ð(Bó 5
óð5
ôr˜RŸY™Yô ô09�b—i‘iô 9ôz˜2Ÿ9™9ô ñ8 ðôô
X
Ð)Có X
óð
X
òv‚r   