§
    ‚Štj„  ã            	       ó®  — d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ dd	lmZmZmZmZ dd
lmZ ddlmZmZ ddlmZ  ej        e¦  «        Zd=dedededz  defd„Z ed¦  «         ed¦  «        fdedededefd„Z G d„ dej        ¦  «        Z  G d„ dej        ¦  «        Z! G d„ dej        ¦  «        Z" G d„ d ej        ¦  «        Z# G d!„ d"ej        ¦  «        Z$ G d#„ d$ej        ¦  «        Z% G d%„ d&ej        ¦  «        Z& G d'„ d(e¦  «        Z' G d)„ d*ej        ¦  «        Z(e G d+„ d,e¦  «        ¦   «         Z)e G d-„ d.e)¦  «        ¦   «         Z* ed/¬0¦  «         G d1„ d2e)¦  «        ¦   «         Z+ G d3„ d4ej        ¦  «        Z, G d5„ d6ej        ¦  «        Z- G d7„ d8ej        ¦  «        Z. ed9¬0¦  «         G d:„ d;e)¦  «        ¦   «         Z/g d<¢Z0dS )>zPyTorch MobileViTV2 model.é    N)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttentionÚSemanticSegmenterOutput)ÚPreTrainedModel)Úauto_docstringÚloggingé   )ÚMobileViTV2Configé   ÚvalueÚdivisorÚ	min_valueÚreturnc                 ó–   — |€|}t          |t          | |dz  z   ¦  «        |z  |z  ¦  «        }|d| z  k     r||z  }t          |¦  «        S )zU
    Ensure that all layers have a channel count that is divisible by `divisor`.
    Né   gÍÌÌÌÌÌì?)ÚmaxÚint)r   r   r   Ú	new_values       úr/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/mobilevitv2/modeling_mobilevitv2.pyÚmake_divisibler   (   s^   € ð ÐØˆ	Ý�I�s 5¨7°Q©;Ñ#6Ñ7Ô7¸7ÑBÀWÑLÑMÔM€Ià�3˜‘;ÒÐØ�WÑˆ	Ýˆy‰>Œ>Ðó    z-infÚinfÚmin_valÚmax_valc                 ó>   — t          |t          || ¦  «        ¦  «        S ©N)r   Úmin©r   r    r!   s      r   Úclipr&   5   s   € Ýˆw�˜G UÑ+Ô+Ñ,Ô,Ð,r   c                   ó„   ‡ — e Zd Z	 	 	 	 	 	 ddededededed	ed
edededeez  ddfˆ fd„Zdej	        dej	        fd„Z
ˆ xZS )ÚMobileViTV2ConvLayerr   FTÚconfigÚin_channelsÚout_channelsÚkernel_sizeÚstrideÚgroupsÚbiasÚdilationÚuse_normalizationÚuse_activationr   Nc                 ón  •— t          ¦   «                              ¦   «          t          |dz
  dz  ¦  «        |z  }||z  dk    rt          d|› d|› d�¦  «        ‚||z  dk    rt          d|› d|› d�¦  «        ‚t	          j        ||||||||d¬	¦	  «	        | _        |	rt	          j        |d
ddd¬¦  «        | _        nd | _        |
rjt          |
t          ¦  «        rt          |
         | _        d S t          |j        t          ¦  «        rt          |j                 | _        d S |j        | _        d S d | _        d S )Nr   r   r   zInput channels (z) are not divisible by z groups.zOutput channels (Úzeros)	r*   r+   r,   r-   Úpaddingr0   r.   r/   Úpadding_modegñhãˆµøä>gš™™™™™¹?T)Únum_featuresÚepsÚmomentumÚaffineÚtrack_running_stats)ÚsuperÚ__init__r   Ú
ValueErrorr   ÚConv2dÚconvolutionÚBatchNorm2dÚnormalizationÚ
isinstanceÚstrr   Ú
activationÚ
hidden_act)Úselfr)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r5   Ú	__class__s               €r   r=   zMobileViTV2ConvLayer.__init__;   sz  ø€ õ 	‰Œ×ÒÑÔÐÝ�{ Q‘¨!Ñ+Ñ,Ô,¨xÑ7ˆà˜Ñ 1Ò$Ð$ÝÐd°ÐdÐdÐTZÐdÐdÐdÑeÔeÐeØ˜&Ñ  AÒ%Ð%ÝÐf°ÐfÐfÐV\ÐfÐfÐfÑgÔgÐgåœ9Ø#Ø%Ø#ØØØØØØ ð

ñ 

ô 

ˆÔð ð 		&Ý!#¤Ø)ØØØØ$(ð"ñ "ô "ˆDÔÐð "&ˆDÔàð 	#Ý˜.­#Ñ.Ô.ð 4Ý"(¨Ô"8�”��Ý˜FÔ-­sÑ3Ô3ð 4Ý"(¨Ô):Ô";�”��à"(Ô"3�”��à"ˆDŒOˆOˆOr   Úfeaturesc                 ó    — |                       |¦  «        }| j        �|                      |¦  «        }| j        �|                      |¦  «        }|S r#   )r@   rB   rE   )rG   rI   s     r   ÚforwardzMobileViTV2ConvLayer.forwardq   sO   € Ø×#Ò# HÑ-Ô-ˆØÔÐ)Ø×)Ò)¨(Ñ3Ô3ˆHØŒ?Ð&Ø—’ xÑ0Ô0ˆHØˆr   )r   r   Fr   TT)Ú__name__Ú
__module__Ú__qualname__r   r   ÚboolrD   r=   ÚtorchÚTensorrK   Ú__classcell__©rH   s   @r   r(   r(   :   sí   ø€ € € € € ð ØØØØ"&Ø%)ð4#ð 4#à!ð4#ð ð4#ð ð	4#ð
 ð4#ð ð4#ð ð4#ð ð4#ð ð4#ð  ð4#ð ˜s™
ð4#ð 
ð4#ð 4#ð 4#ð 4#ð 4#ð 4#ðl ¤ð °´ð ð ð ð ð ð ð ð r   r(   c                   ód   ‡ — e Zd ZdZ	 ddedededededd	fˆ fd
„Zdej        dej        fd„Z	ˆ xZ
S )ÚMobileViTV2InvertedResidualzY
    Inverted residual block (MobileNetv2): https://huggingface.co/papers/1801.04381
    r   r)   r*   r+   r-   r0   r   Nc           	      ó”  •— t          ¦   «                              ¦   «          t          t          t	          ||j        z  ¦  «        ¦  «        d¦  «        }|dvrt          d|› d�¦  «        ‚|dk    o||k    | _        t          |||d¬¦  «        | _	        t          |||d|||¬¦  «        | _
        t          |||dd	¬
¦  «        | _        d S )Nr   )r   r   zInvalid stride ú.r   )r*   r+   r,   r   )r*   r+   r,   r-   r.   r0   F©r*   r+   r,   r2   )r<   r=   r   r   ÚroundÚexpand_ratior>   Úuse_residualr(   Ú
expand_1x1Úconv_3x3Ú
reduce_1x1)rG   r)   r*   r+   r-   r0   Úexpanded_channelsrH   s          €r   r=   z$MobileViTV2InvertedResidual.__init__€   sø   ø€ õ 	‰Œ×ÒÑÔÐÝ*­3­u°[À6ÔCVÑ5VÑ/WÔ/WÑ+XÔ+XÐZ[Ñ\Ô\Ðà˜ÐÐÝÐ8¨vÐ8Ð8Ð8Ñ9Ô9Ð9à# qš[ÐK¨{¸lÒ/JˆÔå.Ø Ð:KÐYZð
ñ 
ô 
ˆŒõ -ØØ)Ø*ØØØ$Øð
ñ 
ô 
ˆŒõ /ØØ)Ø%ØØ ð
ñ 
ô 
ˆŒˆˆr   rI   c                 ó    — |}|                       |¦  «        }|                      |¦  «        }|                      |¦  «        }| j        r||z   n|S r#   )r\   r]   r^   r[   )rG   rI   Úresiduals      r   rK   z#MobileViTV2InvertedResidual.forward¡   sR   € Øˆà—?’? 8Ñ,Ô,ˆØ—=’= Ñ*Ô*ˆØ—?’? 8Ñ,Ô,ˆà&*Ô&7ÐEˆx˜(Ñ"Ð"¸XÐEr   )r   ©rL   rM   rN   Ú__doc__r   r   r=   rP   rQ   rK   rR   rS   s   @r   rU   rU   {   s´   ø€ € € € € ðð ð
 lmð
ð 
Ø'ð
Ø69ð
ØILð
ØVYð
Øehð
à	ð
ð 
ð 
ð 
ð 
ð 
ðBF ¤ð F°´ð Fð Fð Fð Fð Fð Fð Fð Fr   rU   c                   ó`   ‡ — e Zd Z	 ddedededededdfˆ fd	„Zd
ej        dej        fd„Zˆ xZ	S )ÚMobileViTV2MobileNetLayerr   r)   r*   r+   r-   Ú
num_stagesr   Nc                 ó
  •— t          ¦   «                              ¦   «          t          j        ¦   «         | _        t          |¦  «        D ]9}t          ||||dk    r|nd¬¦  «        }| j                             |¦  «         |}Œ:d S )Nr   r   )r*   r+   r-   )r<   r=   r   Ú
ModuleListÚlayerÚrangerU   Úappend)	rG   r)   r*   r+   r-   rf   Úiri   rH   s	           €r   r=   z"MobileViTV2MobileNetLayer.__init__­   s”   ø€ õ 	‰Œ×ÒÑÔÐå”]‘_”_ˆŒ
Ý�zÑ"Ô"ð 	'ð 	'ˆAÝ/ØØ'Ø)Ø!" a¢ �v�v¨Qð	ñ ô ˆEð ŒJ×Ò˜eÑ$Ô$Ð$Ø&ˆKˆKð	'ð 	'r   rI   c                 ó0   — | j         D ]} ||¦  «        }Œ|S r#   ©ri   )rG   rI   Úlayer_modules      r   rK   z!MobileViTV2MobileNetLayer.forward½   s)   € Ø œJð 	.ð 	.ˆLØ#�| HÑ-Ô-ˆHˆHØˆr   )r   r   ©
rL   rM   rN   r   r   r=   rP   rQ   rK   rR   rS   s   @r   re   re   ¬   s›   ø€ € € € € àqrð'ð 'Ø'ð'Ø69ð'ØILð'ØVYð'Øknð'à	ð'ð 'ð 'ð 'ð 'ð 'ð  ¤ð °´ð ð ð ð ð ð ð ð r   re   c                   óT   ‡ — e Zd ZdZdededdfˆ fd„Zdej        dej        fd„Z	ˆ xZ
S )	Ú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)`
    r)   Ú	embed_dimr   Nc           	      ó  •— t          ¦   «                              ¦   «          t          ||dd|z  z   dddd¬¦  «        | _        t	          j        |j        ¬¦  «        | _        t          |||dddd¬¦  «        | _        || _        d S )Nr   r   TF)r)   r*   r+   r/   r,   r1   r2   ©Úp)	r<   r=   r(   Úqkv_projr   ÚDropoutÚattn_dropoutÚout_projrs   )rG   r)   rs   rH   s      €r   r=   z'MobileViTV2LinearSelfAttention.__init__Ï   sŸ   ø€ Ý‰Œ×ÒÑÔÐå,ØØ!Ø˜a )™mÑ,ØØØ#Ø ð
ñ 
ô 
ˆŒõ œJ¨Ô)<Ð=Ñ=Ô=ˆÔÝ,ØØ!Ø"ØØØ#Ø ð
ñ 
ô 
ˆŒð #ˆŒˆˆr   Úhidden_statesc                 óÌ  — |                       |¦  «        }t          j        |d| j        | j        gd¬¦  «        \  }}}t          j        j                             |d¬¦  «        }|                      |¦  «        }||z  }t          j        |dd¬¦  «        }t          j        j         	                    |¦  «        | 
                    |¦  «        z  }|                      |¦  «        }|S )Nr   )Úsplit_size_or_sectionsÚdiméÿÿÿÿ©r~   T©r~   Úkeepdim)rw   rP   Úsplitrs   r   Ú
functionalÚsoftmaxry   ÚsumÚreluÚ	expand_asrz   )	rG   r{   ÚqkvÚqueryÚkeyr   Úcontext_scoresÚcontext_vectorÚouts	            r   rK   z&MobileViTV2LinearSelfAttention.forwardè   s×   € à�mŠm˜MÑ*Ô*ˆõ
 "œK¨ÀQÈÌÐX\ÔXfÐDgÐmnÐoÑoÔoÑˆˆs�Eõ œÔ,×4Ò4°UÀÐ4ÑCÔCˆØ×*Ò*¨>Ñ:Ô:ˆð ˜~Ñ-ˆåœ >°rÀ4ÐHÑHÔHˆõ ŒhÔ!×&Ò& uÑ-Ô-°×0HÒ0HÈÑ0OÔ0OÑOˆØ�mŠm˜CÑ Ô ˆØˆ
r   rb   rS   s   @r   rr   rr   Ã   sƒ   ø€ € € € € ð	ð 	ð#Ð0ð #¸Sð #ÀTð #ð #ð #ð #ð #ð #ð2 U¤\ð °e´lð ð ð ð ð ð ð ð r   rr   c                   ó\   ‡ — e Zd Z	 ddededededdf
ˆ fd„Zd	ej        dej        fd
„Z	ˆ xZ
S )ÚMobileViTV2FFNç        r)   rs   Úffn_latent_dimÚffn_dropoutr   Nc           
      ó  •— t          ¦   «                              ¦   «          t          |||ddddd¬¦  «        | _        t	          j        |¦  «        | _        t          |||ddddd¬¦  «        | _        t	          j        |¦  «        | _        d S )Nr   TF)r)   r*   r+   r,   r-   r/   r1   r2   )	r<   r=   r(   Úconv1r   rx   Údropout1Úconv2Údropout2)rG   r)   rs   r’   r“   rH   s        €r   r=   zMobileViTV2FFN.__init__  s¡   ø€ õ 	‰Œ×ÒÑÔÐÝ)ØØ!Ø'ØØØØ#Øð	
ñ 	
ô 	
ˆŒ
õ œ
 ;Ñ/Ô/ˆŒå)ØØ&Ø"ØØØØ#Ø ð	
ñ 	
ô 	
ˆŒ
õ œ
 ;Ñ/Ô/ˆŒˆˆr   r{   c                 ó®   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r#   )r•   r–   r—   r˜   )rG   r{   s     r   rK   zMobileViTV2FFN.forward#  sL   € ØŸ
š
 =Ñ1Ô1ˆØŸš mÑ4Ô4ˆØŸ
š
 =Ñ1Ô1ˆØŸš mÑ4Ô4ˆØÐr   ©r‘   ©rL   rM   rN   r   r   Úfloatr=   rP   rQ   rK   rR   rS   s   @r   r�   r�     sž   ø€ € € € € ð !ð0ð 0à!ð0ð ð0ð ð	0ð
 ð0ð 
ð0ð 0ð 0ð 0ð 0ð 0ð@ U¤\ð °e´lð ð ð ð ð ð ð ð r   r�   c                   ó\   ‡ — e Zd Z	 ddededededdf
ˆ fd„Zd	ej        dej        fd
„Z	ˆ xZ
S )ÚMobileViTV2TransformerLayerr‘   r)   rs   r’   Údropoutr   Nc                 ób  •— t          ¦   «                              ¦   «          t          j        d||j        ¬¦  «        | _        t          ||¦  «        | _        t          j        |¬¦  «        | _	        t          j        d||j        ¬¦  «        | _
        t          ||||j        ¦  «        | _        d S )Nr   ©Ú
num_groupsÚnum_channelsr8   ru   )r<   r=   r   Ú	GroupNormÚlayer_norm_epsÚlayernorm_beforerr   Ú	attentionrx   r–   Úlayernorm_afterr�   r“   Úffn)rG   r)   rs   r’   rŸ   rH   s        €r   r=   z$MobileViTV2TransformerLayer.__init__,  s–   ø€ õ 	‰Œ×ÒÑÔÐÝ "¤¸È	ÐW]ÔWlÐ mÑ mÔ mˆÔÝ7¸À	ÑJÔJˆŒÝœ
 WÐ-Ñ-Ô-ˆŒÝ!œ|°qÀyÐV\ÔVkÐlÑlÔlˆÔÝ! &¨)°^ÀVÔEWÑXÔXˆŒˆˆr   r{   c                 óÂ   — |                       |¦  «        }|                      |¦  «        }||z   }|                      |¦  «        }|                      |¦  «        }||z   }|S r#   )r¦   r§   r¨   r©   )rG   r{   Úlayernorm_1_outÚattention_outputÚlayer_outputs        r   rK   z#MobileViTV2TransformerLayer.forward:  se   € Ø×/Ò/°Ñ>Ô>ˆØŸ>š>¨/Ñ:Ô:ÐØ(¨=Ñ8ˆà×+Ò+¨MÑ:Ô:ˆØ—x’x Ñ-Ô-ˆà# mÑ3ˆØÐr   rš   r›   rS   s   @r   rž   rž   +  s©   ø€ € € € € ð ðYð Yà!ðYð ðYð ð	Yð
 ðYð 
ðYð Yð Yð Yð Yð Yð	 U¤\ð 	°e´lð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r   rž   c                   óT   ‡ — e Zd Zdedededdfˆ fd„Zdej        dej        fd„Zˆ xZ	S )	ÚMobileViTV2Transformerr)   Ún_layersÚd_modelr   Nc                 ó8  •— t          ¦   «                              ¦   «          |j        }||z  g|z  }d„ |D ¦   «         }t          j        ¦   «         | _        t          |¦  «        D ]4}t          ||||         ¬¦  «        }| j                             |¦  «         Œ5d S )Nc                 ó8   — g | ]}t          |d z  d z  ¦  «        ‘ŒS )é   )r   )Ú.0Úds     r   ú
<listcomp>z3MobileViTV2Transformer.__init__.<locals>.<listcomp>O  s(   € Ð:Ð:Ð:¨A•C˜˜b™ B™Ñ'Ô'Ð:Ð:Ð:r   )rs   r’   )	r<   r=   Úffn_multiplierr   rh   ri   rj   rž   rk   )	rG   r)   r°   r±   r¸   Úffn_dimsÚ	block_idxÚtransformer_layerrH   s	           €r   r=   zMobileViTV2Transformer.__init__G  s±   ø€ Ý‰Œ×ÒÑÔÐàÔ.ˆà" WÑ,Ð-°Ñ8ˆð ;Ð:°Ð:Ñ:Ô:ˆå”]‘_”_ˆŒ
Ý˜x™œð 	1ð 	1ˆIÝ ;Ø '¸(À9Ô:Mð!ñ !ô !Ðð ŒJ×ÒÐ/Ñ0Ô0Ð0Ð0ð		1ð 	1r   r{   c                 ó0   — | j         D ]} ||¦  «        }Œ|S r#   rn   )rG   r{   ro   s      r   rK   zMobileViTV2Transformer.forwardX  s*   € Ø œJð 	8ð 	8ˆLØ(˜L¨Ñ7Ô7ˆMˆMØÐr   rp   rS   s   @r   r¯   r¯   F  s�   ø€ € € € € ð1Ð0ð 1¸Cð 1È#ð 1ÐRVð 1ð 1ð 1ð 1ð 1ð 1ð" U¤\ð °e´lð ð ð ð ð ð ð ð r   r¯   c                   óì   ‡ — e Zd ZdZ	 	 	 ddededededed	ed
eddfˆ fd„Zdej        de	ej        e	eef         f         fd„Z
dej        de	eef         dej        fd„Zdej        dej        fd„Zˆ xZS )ÚMobileViTV2LayerzE
    MobileViTV2 layer: https://huggingface.co/papers/2206.02680
    r   r   r)   r*   r+   Úattn_unit_dimÚn_attn_blocksr0   r-   r   Nc                 ó  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |}|dk    r/t          ||||dk    r|nd|dk    r|dz  nd¬¦  «        | _        |}nd | _        t          ||||j        |¬¦  «        | _	        t          |||ddd¬¦  «        | _
        t          |||¬¦  «        | _        t          j        d||j        ¬¦  «        | _        t          |||dd	d¬¦  «        | _        d S )
Nr   r   )r*   r+   r-   r0   )r*   r+   r,   r.   F)r*   r+   r,   r1   r2   )r±   r°   r¡   T)r<   r=   Ú
patch_sizeÚpatch_widthÚpatch_heightrU   Údownsampling_layerr(   Úconv_kernel_sizeÚconv_kxkÚconv_1x1r¯   Útransformerr   r¤   r¥   Ú	layernormÚconv_projection)
rG   r)   r*   r+   r¿   rÀ   r0   r-   Úcnn_out_dimrH   s
            €r   r=   zMobileViTV2Layer.__init__c  sO  ø€ õ 	‰Œ×ÒÑÔÐØ!Ô,ˆÔØ"Ô-ˆÔà#ˆà�QŠ;ˆ;Ý&AØØ'Ø)Ø!)¨Q¢ �v�v°AØ*2°Qª,¨,˜ Q™˜¸Að'ñ 'ô 'ˆDÔ#ð 'ˆKˆKà&*ˆDÔ#õ -ØØ#Ø$ØÔ/Øð
ñ 
ô 
ˆŒõ -ØØ#Ø$ØØ#Ø ð
ñ 
ô 
ˆŒõ 2°&À-ÐZgÐhÑhÔhˆÔõ œ°ÀÐTZÔTiÐjÑjÔjˆŒõ  4ØØ#Ø$ØØ"Ø ð 
ñ  
ô  
ˆÔÐÐr   Úfeature_mapc                 óä   — |j         \  }}}}t          j                             || j        | j        f| j        | j        f¬¦  «        }|                     ||| j        | j        z  d¦  «        }|||ffS )N)r,   r-   r   )Úshaper   r„   ÚunfoldrÄ   rÃ   Úreshape)rG   rÍ   Ú
batch_sizer*   Ú
img_heightÚ	img_widthÚpatchess          r   Ú	unfoldingzMobileViTV2Layer.unfolding   sƒ   € Ø9DÔ9JÑ6ˆ
�K ¨YÝ”-×&Ò&ØØÔ*¨DÔ,<Ð=ØÔ% tÔ'7Ð8ð 'ñ 
ô 
ˆð
 —/’/ *¨k¸4Ô;LÈtÔO_Ñ;_ÐacÑdÔdˆà˜ YÐ/Ð/Ð/r   rÕ   Úoutput_sizec                 óÈ   — |j         \  }}}}|                     |||z  |¦  «        }t          j                             ||| j        | j        f| j        | j        f¬¦  «        }|S )N)r×   r,   r-   )rÏ   rÑ   r   r„   ÚfoldrÄ   rÃ   )rG   rÕ   r×   rÒ   Úin_dimrÂ   Ú	n_patchesrÍ   s           r   ÚfoldingzMobileViTV2Layer.folding«  sr   € Ø4;´MÑ1ˆ
�F˜J¨	Ø—/’/ *¨f°zÑ.AÀ9ÑMÔMˆå”m×(Ò(ØØ#ØÔ*¨DÔ,<Ð=ØÔ% tÔ'7Ð8ð	 )ñ 
ô 
ˆð Ðr   rI   c                 ól  — | j         r|                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        \  }}|                      |¦  «        }|                      |¦  «        }|                      ||¦  «        }|                      |¦  «        }|S r#   )rÅ   rÇ   rÈ   rÖ   rÉ   rÊ   rÜ   rË   )rG   rI   rÕ   r×   s       r   rK   zMobileViTV2Layer.forward¸  s¯   € àÔ"ð 	9Ø×.Ò.¨xÑ8Ô8ˆHð —=’= Ñ*Ô*ˆØ—=’= Ñ*Ô*ˆð  $Ÿ~š~¨hÑ7Ô7Ñˆ�ð ×"Ò" 7Ñ+Ô+ˆØ—.’. Ñ)Ô)ˆð —<’< ¨Ñ5Ô5ˆà×'Ò'¨Ñ1Ô1ˆØˆr   )r   r   r   )rL   rM   rN   rc   r   r   r=   rP   rQ   ÚtuplerÖ   rÜ   rK   rR   rS   s   @r   r¾   r¾   ^  s<  ø€ € € € € ðð ð ØØð;
ð ;
à!ð;
ð ð;
ð ð	;
ð
 ð;
ð ð;
ð ð;
ð ð;
ð 
ð;
ð ;
ð ;
ð ;
ð ;
ð ;
ðz	0 U¤\ð 	0°e¸E¼LÈ%ÐPSÐUXÐPXÌ/Ð<YÔ6Zð 	0ð 	0ð 	0ð 	0ð˜uœ|ð ¸%ÀÀSÀ¼/ð ÈeÌlð ð ð ð ð ¤ð °´ð ð ð ð ð ð ð ð r   r¾   c            
       óV   ‡ — e Zd Zdeddfˆ fd„Z	 	 ddej        ded	edee	z  fd
„Z
ˆ xZS )ÚMobileViTV2Encoderr)   r   Nc           	      ó"  •— t          ¦   «                              ¦   «          || _        t          j        ¦   «         | _        d| _        dx}}|j        dk    rd}d}n|j        dk    rd}d}t          t          d|j
        z  dd¬¦  «        dd¬	¦  «        }t          d|j
        z  d¬
¦  «        }t          d|j
        z  d¬
¦  «        }t          d|j
        z  d¬
¦  «        }t          d|j
        z  d¬
¦  «        }	t          d|j
        z  d¬
¦  «        }
t          |||dd¬¦  «        }| j                             |¦  «         t          |||dd¬¦  «        }| j                             |¦  «         t          |||t          |j        d         |j
        z  d¬
¦  «        |j        d         ¬¦  «        }| j                             |¦  «         |r|dz  }t          |||	t          |j        d         |j
        z  d¬
¦  «        |j        d         |¬¦  «        }| j                             |¦  «         |r|dz  }t          ||	|
t          |j        d         |j
        z  d¬
¦  «        |j        d         |¬¦  «        }| j                             |¦  «         d S )NFr   Tr´   r   é    é@   r%   ©r   r   ©r   é€   é   i€  é   )r*   r+   r-   rf   r   r   )r*   r+   r¿   rÀ   )r*   r+   r¿   rÀ   r0   )r<   r=   r)   r   rh   ri   Úgradient_checkpointingÚoutput_strider   r&   Úwidth_multiplierre   rk   r¾   Úbase_attn_unit_dimsrÀ   )rG   r)   Údilate_layer_4Údilate_layer_5r0   Ú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_5rH   s                   €r   r=   zMobileViTV2Encoder.__init__Ñ  sò  ø€ Ý‰Œ×ÒÑÔÐØˆŒå”]‘_”_ˆŒ
Ø&+ˆÔ#ð +0Ð/ˆ˜ØÔ 1Ò$Ð$Ø!ˆNØ!ˆNˆNØÔ! RÒ'Ð'Ø!ˆNàˆå$Ý�r˜FÔ3Ñ3¸RÈÐLÑLÔLÐVWÐceð
ñ 
ô 
ˆõ % R¨&Ô*AÑ%AÈ2ÐNÑNÔNˆÝ$ S¨6Ô+BÑ%BÈAÐNÑNÔNˆÝ$ S¨6Ô+BÑ%BÈAÐNÑNÔNˆÝ$ S¨6Ô+BÑ%BÈAÐNÑNÔNˆÝ$ S¨6Ô+BÑ%BÈAÐNÑNÔNˆå+ØØ#Ø$ØØð
ñ 
ô 
ˆð 	Œ
×Ò˜'Ñ"Ô"Ð"å+ØØ#Ø$ØØð
ñ 
ô 
ˆð 	Œ
×Ò˜'Ñ"Ô"Ð"å"ØØ#Ø$Ý(¨Ô)CÀAÔ)FÈÔI`Ñ)`ÐjkÐlÑlÔlØ Ô.¨qÔ1ð
ñ 
ô 
ˆð 	Œ
×Ò˜'Ñ"Ô"Ð"àð 	Ø˜‰MˆHå"ØØ#Ø$Ý(¨Ô)CÀAÔ)FÈÔI`Ñ)`ÐjkÐlÑlÔlØ Ô.¨qÔ1Øð
ñ 
ô 
ˆð 	Œ
×Ò˜'Ñ"Ô"Ð"àð 	Ø˜‰MˆHå"ØØ#Ø$Ý(¨Ô)CÀAÔ)FÈÔI`Ñ)`ÐjkÐlÑlÔlØ Ô.¨qÔ1Øð
ñ 
ô 
ˆð 	Œ
×Ò˜'Ñ"Ô"Ð"Ð"Ð"r   FTr{   Úoutput_hidden_statesÚreturn_dictc                 óÄ   — |rdnd }t          | j        ¦  «        D ]\  }} ||¦  «        }|r||fz   }Œ|st          d„ ||fD ¦   «         ¦  «        S t          ||¬¦  «        S )N© c              3   ó   K  — | ]}|®|V — Œ	d S r#   rý   )rµ   Úvs     r   ú	<genexpr>z-MobileViTV2Encoder.forward.<locals>.<genexpr>1  s"   è è € ÐXÐX˜qÈ!È-˜È-È-È-È-ÐXÐXr   )Úlast_hidden_stater{   )Ú	enumerateri   rÞ   r	   )rG   r{   rú   rû   Úall_hidden_statesrl   ro   s          r   rK   zMobileViTV2Encoder.forward"  s™   € ð #7Ð@˜B˜B¸DÐå(¨¬Ñ4Ô4ð 	Ið 	I‰OˆAˆ|Ø(˜L¨Ñ7Ô7ˆMà#ð IØ$5¸Ð8HÑ$HÐ!øàð 	YÝÐXÐX ]Ð4EÐ$FÐXÑXÔXÑXÔXÐXå-ÀÐ]nÐoÑoÔoÐor   )FT)rL   rM   rN   r   r=   rP   rQ   rO   rÞ   r	   rK   rR   rS   s   @r   rà   rà   Ð  s±   ø€ € € € € ðO#Ð0ð O#°Tð O#ð O#ð O#ð O#ð O#ð O#ðh &+Ø ð	pð pà”|ðpð #ðpð ð	pð
 
Ð/Ñ	/ðpð pð pð pð pð pð pð pr   rà   c                   ó~   ‡ — e Zd ZU eed<   dZdZdZdZdgZ	 e
j        ¦   «         dej        dd	fˆ fd
„¦   «         Zˆ xZS )ÚMobileViTV2PreTrainedModelr)   Úmobilevitv2Úpixel_values)ÚimageTr¾   Úmoduler   Nc                 óÊ  •— t          ¦   «                              |¦  «         t          |t          j        ¦  «        r¤t          j        |j        d| j        j	        ¬¦  «         |j
        �t          j        |j
        ¦  «         t          |dd¦  «        �Ot          j        |j        ¦  «         t          j        |j        ¦  «         t          j        |j        ¦  «         dS dS dS )zInitialize the weightsr‘   )ÚmeanÚstdNÚrunning_mean)r<   Ú_init_weightsrC   r   rA   ÚinitÚnormal_Úweightr)   Úinitializer_ranger/   Úzeros_Úgetattrr  Úones_Úrunning_varÚnum_batches_tracked)rG   r	  rH   s     €r   r  z(MobileViTV2PreTrainedModel._init_weights?  sÍ   ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�bœnÑ-Ô-ð 	8ÝŒL˜œ¨S°d´kÔ6SÐTÑTÔTÐTØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ý�v˜~¨tÑ4Ô4Ð@Ý”˜FÔ/Ñ0Ô0Ð0Ý”
˜6Ô-Ñ.Ô.Ð.Ý”˜FÔ6Ñ7Ô7Ð7Ð7Ð7ð	8ð 	8ð AÐ@r   )rL   rM   rN   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesrP   Úno_gradr   ÚModuler  rR   rS   s   @r   r  r  6  s�   ø€ € € € € € àÐÐÑØ%ÐØ$€OØ!ÐØ&*Ð#Ø+Ð,Ðà€U„]�_„_ð
8 B¤Ið 
8°$ð 
8ð 
8ð 
8ð 
8ð 
8ñ „_ð
8ð 
8ð 
8ð 
8ð 
8r   r  c                   ó|   ‡ — e Zd Zddedefˆ fd„Ze	 	 	 ddej        dz  dedz  dedz  d	e	e
z  fd
„¦   «         Zˆ xZS )ÚMobileViTV2ModelTr)   Úexpand_outputc           	      óJ  •— t          ¦   «                              |¦  «         || _        || _        t	          t          d|j        z  dd¬¦  «        dd¬¦  «        }t          ||j        |ddd	d	¬
¦  «        | _	        t          |¦  «        | _        |                      ¦   «          dS )a  
        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´   rã   r%   r   rä   r   r   T©r*   r+   r,   r-   r1   r2   N)r<   r=   r)   r"  r   r&   rë   r(   r£   Ú	conv_stemrà   ÚencoderÚ	post_init)rG   r)   r"  rï   rH   s       €r   r=   zMobileViTV2Model.__init__O  s¹   ø€ õ 	‰Œ×Ò˜Ñ Ô Ð ØˆŒØ*ˆÔå$Ý�r˜FÔ3Ñ3¸RÈÐLÑLÔLÐVWÐceð
ñ 
ô 
ˆõ .ØØÔ+Ø$ØØØ"Øð
ñ 
ô 
ˆŒõ *¨&Ñ1Ô1ˆŒð 	�ŠÑÔÐÐÐr   Nr  rú   rû   r   c                 ó‚  — |�|n| j         j        }|�|n| j         j        }|€t          d¦  «        ‚|                      |¦  «        }|                      |||¬¦  «        }| j        r"|d         }t          j        |ddgd¬¦  «        }n
|d         }d }|s|�||fn|f}	|	|dd …         z   S t          |||j
        ¬	¦  «        S )
Nz You have to specify pixel_values©rú   rû   r   éþÿÿÿr   Fr�   r   )r  Úpooler_outputr{   )r)   rú   rû   r>   r%  r&  r"  rP   r  r
   r{   )
rG   r  rú   rû   ÚkwargsÚembedding_outputÚencoder_outputsr  Úpooled_outputÚoutputs
             r   rK   zMobileViTV2Model.forwardk  s  € ð %9Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàÐÝÐ?Ñ@Ô@Ð@àŸ>š>¨,Ñ7Ô7ÐàŸ,š,ØØ!5Ø#ð 'ñ 
ô 
ˆð Ôð 	!Ø /°Ô 2Ðõ "œJÐ'8¸rÀ2¸hÐPUÐVÑVÔVˆMˆMà /°Ô 2ÐØ ˆMàð 	0Ø;HÐ;TÐ'¨Ð7Ð7Ð[lÐZnˆFØ˜O¨A¨B¨BÔ/Ñ/Ð/å7Ø/Ø'Ø)Ô7ð
ñ 
ô 
ð 	
r   )T)NNN)rL   rM   rN   r   rO   r=   r   rP   rQ   rÞ   r
   rK   rR   rS   s   @r   r!  r!  M  s¼   ø€ € € € € ðð Ð0ð Àð ð ð ð ð ð ð8 ð -1Ø,0Ø#'ð	(
ð (
à”l TÑ)ð(
ð # T™kð(
ð ˜D‘[ð	(
ð 
Ð9Ñ	9ð(
ð (
ð (
ñ „^ð(
ð (
ð (
ð (
ð (
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                   ó�   ‡ — e Zd Zdeddfˆ fd„Ze	 	 	 	 d
dej        dz  dedz  dej        dz  dedz  de	e
z  f
d	„¦   «         Zˆ xZS )Ú!MobileViTV2ForImageClassificationr)   r   Nc                 ó`  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          d|j        z  d¬¦  «        }|j        dk    rt          j        ||j        ¬¦  «        nt          j	        ¦   «         | _
        |                      ¦   «          d S )Nrè   r   rå   r   )Úin_featuresÚout_features)r<   r=   Ú
num_labelsr!  r  r   rë   r   ÚLinearÚIdentityÚ
classifierr'  )rG   r)   r+   rH   s      €r   r=   z*MobileViTV2ForImageClassification.__init__ž  s¡   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ+¨FÑ3Ô3ˆÔå% c¨FÔ,CÑ&CÈQÐOÑOÔOˆð Ô  1Ò$Ð$õ ŒI ,¸VÔ=NÐOÑOÔOÐOå”‘”ð 	Œð 	�ŠÑÔÐÐÐr   r  rú   Úlabelsrû   c                 ó@  — |�|n| j         j        }|                      |||¬¦  «        }|r|j        n|d         }|                      |¦  «        }d}	|�|                      ||| j         ¦  «        }	|s|f|dd…         z   }
|	�|	f|
z   n|
S t          |	||j        ¬¦  «        S )aŠ  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss). If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Nr)  r   r   )ÚlossÚlogitsr{   )r)   rû   r  r+  r:  Úloss_functionr   r{   )rG   r  rú   r;  rû   r,  Úoutputsr/  r>  r=  r0  s              r   rK   z)MobileViTV2ForImageClassification.forward¯  sÕ   € ð &1Ð%<�k�kÀ$Ä+ÔBYˆà×"Ò" <ÐFZÐhsÐ"ÑtÔtˆà1<ÐL˜Ô-Ð-À'È!Ä*ˆà—’ Ñ/Ô/ˆàˆØÐØ×%Ò% f¨f°d´kÑBÔBˆDàð 	FØ�Y ¨¨¨¤Ñ,ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå3ØØØ!Ô/ð
ñ 
ô 
ð 	
r   ©NNNN)rL   rM   rN   r   r=   r   rP   rQ   rO   rÞ   r   rK   rR   rS   s   @r   r3  r3  —  sË   ø€ € € € € ðÐ0ð °Tð ð ð ð ð ð ð" ð -1Ø,0Ø&*Ø#'ð"
ð "
à”l TÑ)ð"
ð # T™kð"
ð ”˜tÑ#ð	"
ð
 ˜D‘[ð"
ð 
Ð5Ñ	5ð"
ð "
ð "
ñ „^ð"
ð "
ð "
ð "
ð "
r   r3  c                   óT   ‡ — e Zd Zdedededdfˆ fd„Zdej        dej        fd„Zˆ xZ	S )	ÚMobileViTV2ASPPPoolingr)   r*   r+   r   Nc           	      ó²   •— t          ¦   «                              ¦   «          t          j        d¬¦  «        | _        t          |||dddd¬¦  «        | _        d S )Nr   )r×   Tr‡   r$  )r<   r=   r   ÚAdaptiveAvgPool2dÚglobal_poolr(   rÈ   )rG   r)   r*   r+   rH   s       €r   r=   zMobileViTV2ASPPPooling.__init__×  s^   ø€ Ý‰Œ×ÒÑÔÐåÔ/¸AÐ>Ñ>Ô>ˆÔå,ØØ#Ø%ØØØ"Ø!ð
ñ 
ô 
ˆŒˆˆr   rI   c                 ó¾   — |j         dd …         }|                      |¦  «        }|                      |¦  «        }t          j                             ||dd¬¦  «        }|S )Nr*  ÚbilinearF©ÚsizeÚmodeÚalign_corners)rÏ   rF  rÈ   r   r„   Úinterpolate)rG   rI   Úspatial_sizes      r   rK   zMobileViTV2ASPPPooling.forwardæ  sZ   € Ø”~ b c cÔ*ˆØ×#Ò# HÑ-Ô-ˆØ—=’= Ñ*Ô*ˆÝ”=×,Ò,¨X¸LÈzÐinÐ,ÑoÔoˆØˆr   rp   rS   s   @r   rC  rC  Ö  s‚   ø€ € € € € ð
Ð0ð 
¸sð 
ÐRUð 
ÐZ^ð 
ð 
ð 
ð 
ð 
ð 
ð ¤ð °´ð ð ð ð ð ð ð ð r   rC  c                   óP   ‡ — e Zd ZdZdeddfˆ fd„Zdej        dej        fd„Zˆ xZ	S )ÚMobileViTV2ASPPzƒ
    ASPP module defined in DeepLab papers: https://huggingface.co/papers/1606.00915, https://huggingface.co/papers/1706.05587
    r)   r   Nc                 ó’  •‡‡‡— t          ¦   «                              ¦   «          t          d‰j        z  d¬¦  «        }|Š‰j        Št          ‰j        ¦  «        dk    rt          d¦  «        ‚t          j	        ¦   «         | _
        t          ‰‰‰dd¬¦  «        }| j
                             |¦  «         | j
                             ˆˆˆfd	„‰j        D ¦   «         ¦  «         t          ‰‰‰¦  «        }| j
                             |¦  «         t          ‰d
‰z  ‰dd¬¦  «        | _        t          j        ‰j        ¬¦  «        | _        d S )Nrè   r   rå   r   z"Expected 3 values for atrous_ratesr   r‡   rX   c           
      ó:   •— g | ]}t          ‰‰‰d |d¬¦  «        ‘ŒS )r   r‡   )r*   r+   r,   r0   r2   )r(   )rµ   Úrater)   r*   r+   s     €€€r   r·   z,MobileViTV2ASPP.__init__.<locals>.<listcomp>	  sL   ø€ ð 
ð 
ð 
ð õ %ØØ +Ø!-Ø !Ø!Ø#)ðñ ô ð
ð 
ð 
r   é   ru   )r<   r=   r   rë   Úaspp_out_channelsÚlenÚatrous_ratesr>   r   rh   Úconvsr(   rk   ÚextendrC  Úprojectrx   Úaspp_dropout_probrŸ   )rG   r)   Úencoder_out_channelsÚin_projectionÚ
pool_layerr*   r+   rH   s    `   @@€r   r=   zMobileViTV2ASPP.__init__ó  so  øøøø€ Ý‰Œ×ÒÑÔÐå-¨c°FÔ4KÑ.KÐUVÐWÑWÔWÐØ*ˆØÔ/ˆåˆvÔ"Ñ#Ô# qÒ(Ð(ÝÐAÑBÔBÐBå”]‘_”_ˆŒ
å,ØØ#Ø%ØØ!ð
ñ 
ô 
ˆð 	Œ
×Ò˜-Ñ(Ô(Ð(àŒ
×Òð
ð 
ð 
ð 
ð 
ð 
ð #Ô/ð
ñ 
ô 
ñ	
ô 	
ð 	
õ ,¨F°KÀÑNÔNˆ
ØŒ
×Ò˜*Ñ%Ô%Ð%å+Ø  LÑ 0¸|ÐYZÐkqð
ñ 
ô 
ˆŒõ ”z FÔ$<Ð=Ñ=Ô=ˆŒˆˆr   rI   c                 óÚ   — g }| j         D ] }|                      ||¦  «        ¦  «         Œ!t          j        |d¬¦  «        }|                      |¦  «        }|                      |¦  «        }|S )Nr   r€   )rX  rk   rP   ÚcatrZ  rŸ   )rG   rI   ÚpyramidÚconvÚpooled_featuress        r   rK   zMobileViTV2ASPP.forward  sq   € ØˆØ”Jð 	+ð 	+ˆDØ�NŠN˜4˜4 ™>œ>Ñ*Ô*Ð*Ð*Ý”)˜G¨Ð+Ñ+Ô+ˆàŸ,š, wÑ/Ô/ˆØŸ,š, Ñ7Ô7ˆØÐr   ©
rL   rM   rN   rc   r   r=   rP   rQ   rK   rR   rS   s   @r   rP  rP  î  s}   ø€ € € € € ðð ð*>Ð0ð *>°Tð *>ð *>ð *>ð *>ð *>ð *>ðX ¤ð °´ð ð ð ð ð ð ð ð r   rP  c                   óP   ‡ — e Zd ZdZdeddfˆ fd„Zdej        dej        fd„Zˆ xZ	S )ÚMobileViTV2DeepLabV3zJ
    DeepLabv3 architecture: https://huggingface.co/papers/1706.05587
    r)   r   Nc           	      óö   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          j        |j        ¦  «        | _        t          ||j	        |j
        dddd¬¦  «        | _        d S )Nr   FT)r*   r+   r,   r1   r2   r/   )r<   r=   rP  Úasppr   Ú	Dropout2dÚclassifier_dropout_probrŸ   r(   rU  r7  r:  ©rG   r)   rH   s     €r   r=   zMobileViTV2DeepLabV3.__init__0  sq   ø€ Ý‰Œ×ÒÑÔÐÝ# FÑ+Ô+ˆŒ	å”| FÔ$BÑCÔCˆŒå.ØØÔ0ØÔ*ØØ#Ø Øð
ñ 
ô 
ˆŒˆˆr   r{   c                 ó�   — |                       |d         ¦  «        }|                      |¦  «        }|                      |¦  «        }|S )Nr   )rh  rŸ   r:  )rG   r{   rI   s      r   rK   zMobileViTV2DeepLabV3.forward@  s?   € Ø—9’9˜]¨2Ô.Ñ/Ô/ˆØ—<’< Ñ)Ô)ˆØ—?’? 8Ñ,Ô,ˆØˆr   rd  rS   s   @r   rf  rf  +  s|   ø€ € € € € ðð ð
Ð0ð 
°Tð 
ð 
ð 
ð 
ð 
ð 
ð  U¤\ð °e´lð ð ð ð ð ð ð ð r   rf  zZ
    MobileViTV2 model with a semantic segmentation head on top, e.g. for Pascal VOC.
    c                   ó�   ‡ — e Zd Zdeddfˆ fd„Ze	 	 	 	 d
dej        dz  dej        dz  dedz  dedz  de	e
z  f
d	„¦   «         Zˆ xZS )Ú"MobileViTV2ForSemanticSegmentationr)   r   Nc                 óÞ   •— t          ¦   «                              |¦  «         |j        | _        t          |d¬¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S )NF)r"  )r<   r=   r7  r!  r  rf  Úsegmentation_headr'  rk  s     €r   r=   z+MobileViTV2ForSemanticSegmentation.__init__M  sb   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ+¨FÀ%ÐHÑHÔHˆÔÝ!5°fÑ!=Ô!=ˆÔð 	�ŠÑÔÐÐÐr   r  r;  rú   rû   c                 óB  — |�|n| j         j        }|�|n| j         j        }|�| j         j        dk    rt	          d¦  «        ‚|                      |d|¬¦  «        }|r|j        n|d         }|                      |¦  «        }d}	|�Vt          j	         
                    ||j        dd…         dd¬	¦  «        }
t          | j         j        ¬
¦  «        } ||
|¦  «        }	|s)|r|f|dd…         z   }n|f|dd…         z   }|	�|	f|z   n|S t          |	||r|j        ndd¬¦  «        S )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, 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
        ```Nr   z/The number of labels should be greater than oneTr)  r*  rH  FrI  )Úignore_indexr   )r=  r>  r{   Ú
attentions)r)   rú   rû   r7  r>   r  r{   rp  r   r„   rM  rÏ   r   Úsemantic_loss_ignore_indexr   )rG   r  r;  rú   rû   r,  r@  Úencoder_hidden_statesr>  r=  Úupsampled_logitsÚloss_fctr0  s                r   rK   z*MobileViTV2ForSemanticSegmentation.forwardW  s�  € ðN %9Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàÐ $¤+Ô"8¸AÒ"=Ð"=ÝÐNÑOÔOÐOà×"Ò"ØØ!%Ø#ð #ñ 
ô 
ˆð :EÐ T Ô 5Ð 5È'ÐRSÌ*Ðà×'Ò'Ð(=Ñ>Ô>ˆàˆØÐå!œ}×8Ò8Ø˜Vœ\¨"¨#¨#Ô.°ZÈuð  9ñ  ô  Ðõ (°T´[Ô5[Ð\Ñ\Ô\ˆHØ�8Ð,¨fÑ5Ô5ˆDàð 	FØ#ð 1Ø ˜ W¨Q¨R¨R¤[Ñ0��à ˜ W¨Q¨R¨R¤[Ñ0�Ø)-Ð)9�T�G˜fÑ$Ð$¸vÐEå&ØØØ3GÐQ˜'Ô/Ð/ÈTØð	
ñ 
ô 
ð 	
r   rA  )rL   rM   rN   r   r=   r   rP   rQ   rO   rÞ   r   rK   rR   rS   s   @r   rn  rn  G  sÙ   ø€ € € € € ðÐ0ð °Tð ð ð ð ð ð ð ð -1Ø&*Ø,0Ø#'ðL
ð L
à”l TÑ)ðL
ð ”˜tÑ#ðL
ð # T™kð	L
ð
 ˜D‘[ðL
ð 
Ð(Ñ	(ðL
ð L
ð L
ñ „^ðL
ð L
ð L
ð L
ð L
r   rn  )r3  rn  r!  r  )r   N)1rc   rP   r   Útorch.nnr   Ú r   r  Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr	   r
   r   r   Úmodeling_utilsr   Úutilsr   r   Úconfiguration_mobilevitv2r   Ú
get_loggerrL   Úloggerr   r   rœ   r&   r  r(   rU   re   rr   r�   rž   r¯   r¾   rà   r  r!  r3  rC  rP  rf  rn  Ú__all__rý   r   r   ú<module>rƒ     sð  ðð  !Ð  à €€€Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8ð 
ˆÔ	˜HÑ	%Ô	%€ð
ð 
˜#ð 
¨ð 
¸CÀ$¹Jð 
ÐRUð 
ð 
ð 
ð 
ð ).¨¨f©¬ÈÈÈeÉÌð -ð -�ð - ð -Àð -ÐY^ð -ð -ð -ð -ð
=ð =ð =ð =ð =˜2œ9ñ =ô =ð =ðB-Fð -Fð -Fð -Fð -F "¤)ñ -Fô -Fð -Fðbð ð ð ð  ¤	ñ ô ð ð.<ð <ð <ð <ð < R¤Yñ <ô <ð <ð~&ð &ð &ð &ð &�R”Yñ &ô &ð &ðRð ð ð ð  "¤)ñ ô ð ð6ð ð ð ð ˜RœYñ ô ð ð0oð oð oð oð oÐ1ñ oô oð oðdcpð cpð cpð cpð cp˜œñ cpô cpð cpðL ð8ð 8ð 8ð 8ð 8 ñ 8ô 8ñ „ð8ð, ðF
ð F
ð F
ð F
ð F
Ð1ñ F
ô F
ñ „ðF
ðR €ððñ ô ð5
ð 5
ð 5
ð 5
ð 5
Ð(Bñ 5
ô 5
ñô ð5
ðrð ð ð ð ˜RœYñ ô ð ð09ð 9ð 9ð 9ð 9�b”iñ 9ô 9ð 9ðzð ð ð ð ˜2œ9ñ ô ð ð8 €ððñ ô ð
X
ð X
ð X
ð X
ð X
Ð)Cñ X
ô X
ñô ð
X
ðvð ð €€€r   