Ë
    S^(hÍ\  ã            	       ó  — d Z ddlmZmZmZ ddlZddlZddlmZ ddlm	Z	m
Z
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mZmZmZ ddlmZ ddlmZ  ej>                  e «      Z!dZ"dZ#g d¢Z$dZ%dZ&d3dejN                  de(de)dejN                  fd„Z* G d„ dejV                  «      Z, G d„ dejV                  «      Z- G d„ dejV                  «      Z. G d„ dejV                  «      Z/ G d„ d ejV                  «      Z0 G d!„ d"ejV                  «      Z1 G d#„ d$ejV                  «      Z2 G d%„ d&e«      Z3d'Z4d(Z5 ed)e4«       G d*„ d+e3«      «       Z6 ed,e4«       G d-„ d.e3«      «       Z7 ed/e4«       G d0„ d1e3e«      «       Z8g d2¢Z9y)4zPyTorch ConvNextV2 model.é    )ÚOptionalÚTupleÚUnionN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )ÚACT2FN)ÚBackboneOutputÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttention)ÚPreTrainedModel)Úadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstrings)ÚBackboneMixiné   )ÚConvNextV2Configr   zfacebook/convnextv2-tiny-1k-224)r   i   é   r   ztabby, tabby catÚinputÚ	drop_probÚtrainingÚreturnc                 ó  — |dk(  s|s| S d|z
  }| j                   d   fd| j                  dz
  z  z   }|t        j                  || j                  | j
                  ¬«      z   }|j                  «        | j                  |«      |z  }|S )aF  
    Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

    Comment by Ross Wightman: This is the same as the DropConnect impl I created for EfficientNet, etc networks,
    however, the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper...
    See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for changing the
    layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use 'survival rate' as the
    argument.
    ç        r   r   )r   )ÚdtypeÚdevice)ÚshapeÚndimÚtorchÚrandr    r!   Úfloor_Údiv)r   r   r   Ú	keep_probr"   Úrandom_tensorÚoutputs          úp/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/convnextv2/modeling_convnextv2.pyÚ	drop_pathr,   :   s�   € ð �CÒ™xØˆØ�I‘€IØ�[‰[˜‰^Ð ¨¯
©
°Q©Ñ 7Ñ7€EØ¤§
¡
¨5¸¿¹ÈEÏLÉLÔ YÑY€MØ×ÑÔØ�Y‰Y�yÓ! MÑ1€FØ€Mó    c                   óx   ‡ — e Zd ZdZd	dee   ddfˆ fd„Zdej                  dej                  fd„Z	de
fd„Zˆ xZS )
ÚConvNextV2DropPathzXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).Nr   r   c                 ó0   •— t         ‰| �  «        || _        y ©N)ÚsuperÚ__init__r   )Úselfr   Ú	__class__s     €r+   r3   zConvNextV2DropPath.__init__R   s   ø€ Ü‰ÑÔØ"ˆ�r-   Úhidden_statesc                 óD   — t        || j                  | j                  «      S r1   )r,   r   r   ©r4   r6   s     r+   ÚforwardzConvNextV2DropPath.forwardV   s   € Ü˜¨¯©¸¿¹ÓFÐFr-   c                 ó8   — dj                  | j                  «      S )Nzp={})Úformatr   )r4   s    r+   Ú
extra_reprzConvNextV2DropPath.extra_reprY   s   € Ø�}‰}˜TŸ^™^Ó,Ð,r-   r1   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úfloatr3   r$   ÚTensorr9   Ústrr<   Ú__classcell__©r5   s   @r+   r/   r/   O   sG   ø„ Ùbñ# (¨5¡/ð #¸Tõ #ðG U§\¡\ð G°e·l±ló Gð-˜C÷ -r-   r/   c                   ó`   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚConvNextV2GRNz)GRN (Global Response Normalization) layerÚdimc                 óâ   •— t         ‰| �  «        t        j                  t	        j
                  ddd|«      «      | _        t        j                  t	        j
                  ddd|«      «      | _        y )Nr   )r2   r3   r   Ú	Parameterr$   ÚzerosÚweightÚbias)r4   rH   r5   s     €r+   r3   zConvNextV2GRN.__init__`   sL   ø€ Ü‰ÑÔÜ—l‘l¤5§;¡;¨q°!°Q¸Ó#<Ó=ˆŒÜ—L‘L¤§¡¨Q°°1°cÓ!:Ó;ˆ�	r-   r6   r   c                 óÂ   — t         j                  j                  |ddd¬«      }||j                  dd¬«      dz   z  }| j                  ||z  z  | j
                  z   |z   }|S )Né   )r   rO   T)ÚordrH   Úkeepdiméÿÿÿÿ)rH   rQ   ç�íµ ÷Æ°>)r$   ÚlinalgÚnormÚmeanrL   rM   )r4   r6   Úglobal_featuresÚnorm_featuress       r+   r9   zConvNextV2GRN.forwarde   si   € äŸ,™,×+Ñ+¨M¸qÀfÐVZÐ+Ó[ˆØ'¨?×+?Ñ+?ÀBÐPTÐ+?Ó+UÐX\Ñ+\Ñ]ˆØŸ™ }°}Ñ'DÑEÈÏ	É	ÑQÐTaÑaˆàÐr-   )
r=   r>   r?   r@   Úintr3   r$   ÚFloatTensorr9   rD   rE   s   @r+   rG   rG   ]   s1   ø„ Ù3ð<˜Cõ <ð
 U×%6Ñ%6ð ¸5×;LÑ;L÷ r-   rG   c                   ó\   ‡ — e Zd ZdZdˆ fd„	Zdej                  dej                  fd„Zˆ xZS )ÚConvNextV2LayerNormaA  LayerNorm that supports two data formats: channels_last (default) or channels_first.
    The ordering of the dimensions in the inputs. channels_last corresponds to inputs with shape (batch_size, height,
    width, channels) while channels_first corresponds to inputs with shape (batch_size, channels, height, width).
    c                 óN  •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        t        j                  t	        j                  |«      «      | _        || _	        || _
        | j                  dvrt        d| j                  › �«      ‚|f| _        y )N)Úchannels_lastÚchannels_firstzUnsupported data format: )r2   r3   r   rJ   r$   ÚonesrL   rK   rM   ÚepsÚdata_formatÚNotImplementedErrorÚnormalized_shape)r4   rd   ra   rb   r5   s       €r+   r3   zConvNextV2LayerNorm.__init__u   s…   ø€ Ü‰ÑÔÜ—l‘l¤5§:¡:Ð.>Ó#?Ó@ˆŒÜ—L‘L¤§¡Ð-=Ó!>Ó?ˆŒ	ØˆŒØ&ˆÔØ×ÑÐ#FÑFÜ%Ð(AÀ$×BRÑBRÐASÐ&TÓUÐUØ!1Ð 3ˆÕr-   Úxr   c                 ód  — | j                   dk(  rWt        j                  j                  j	                  || j
                  | j                  | j                  | j                  «      }|S | j                   dk(  rº|j                  }|j                  «       }|j                  dd¬«      }||z
  j                  d«      j                  dd¬«      }||z
  t        j                  || j                  z   «      z  }|j                  |¬«      }| j                  d d …d d f   |z  | j                  d d …d d f   z   }|S )Nr^   r_   r   T)rQ   rO   )r    )rb   r$   r   Ú
functionalÚ
layer_normrd   rL   rM   ra   r    rA   rV   ÚpowÚsqrtÚto)r4   re   Úinput_dtypeÚuÚss        r+   r9   zConvNextV2LayerNorm.forward   s
  € Ø×Ñ˜Ò.Ü—‘×#Ñ#×.Ñ.¨q°$×2GÑ2GÈÏÉÐVZ×V_ÑV_Ðae×aiÑaiÓjˆAð ˆð ×ÑÐ!1Ò1ØŸ'™'ˆKØ—‘“	ˆAØ—‘�q $�Ó'ˆAØ�Q‘—‘˜A“×#Ñ# A¨tÐ#Ó4ˆAØ�Q‘œ%Ÿ*™* Q¨¯©¡\Ó2Ñ2ˆAØ—‘˜;�Ó'ˆAØ—‘šA˜t T˜MÑ*¨QÑ.°·±º1¸dÀD¸=Ñ1IÑIˆAØˆr-   )rS   r^   )	r=   r>   r?   r@   r3   r$   rB   r9   rD   rE   s   @r+   r\   r\   o   s(   ø„ ñõ
4ð˜Ÿ™ð ¨%¯,©,÷ r-   r\   c                   óZ   ‡ — e Zd ZdZˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚConvNextV2Embeddingsz‡This class is comparable to (and inspired by) the SwinEmbeddings class
    found in src/transformers/models/swin/modeling_swin.py.
    c                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  d   |j                  |j                  ¬«      | _        t        |j
                  d   dd¬«      | _	        |j                  | _        y )Nr   ©Úkernel_sizeÚstriderS   r_   ©ra   rb   )
r2   r3   r   ÚConv2dÚnum_channelsÚhidden_sizesÚ
patch_sizeÚpatch_embeddingsr\   Ú	layernorm©r4   Úconfigr5   s     €r+   r3   zConvNextV2Embeddings.__init__“   sr   ø€ Ü‰ÑÔÜ "§	¡	Ø×Ñ ×!4Ñ!4°QÑ!7ÀV×EVÑEVÐ_e×_pÑ_pô!
ˆÔô -¨V×-@Ñ-@ÀÑ-CÈÐ[kÔlˆŒØ"×/Ñ/ˆÕr-   Úpixel_valuesr   c                 óœ   — |j                   d   }|| j                  k7  rt        d«      ‚| j                  |«      }| j	                  |«      }|S )Nr   zeMake sure that the channel dimension of the pixel values match with the one set in the configuration.)r"   rw   Ú
ValueErrorrz   r{   )r4   r~   rw   Ú
embeddingss       r+   r9   zConvNextV2Embeddings.forward›   sV   € Ø#×)Ñ)¨!Ñ,ˆØ˜4×,Ñ,Ò,ÜØwóð ð ×*Ñ*¨<Ó8ˆ
Ø—^‘^ JÓ/ˆ
ØÐr-   ©
r=   r>   r?   r@   r3   r$   rZ   rB   r9   rD   rE   s   @r+   rp   rp   Ž   s*   ø„ ñô0ð E×$5Ñ$5ð ¸%¿,¹,÷ r-   rp   c                   ó\   ‡ — e Zd ZdZdˆ fd„	Zdej                  dej                  fd„Zˆ xZ	S )ÚConvNextV2Layera5  This corresponds to the `Block` class in the original implementation.

    There are two equivalent implementations: [DwConv, LayerNorm (channels_first), Conv, GELU,1x1 Conv]; all in (N, C,
    H, W) (2) [DwConv, Permute to (N, H, W, C), LayerNorm (channels_last), Linear, GELU, Linear]; Permute back

    The authors used (2) as they find it slightly faster in PyTorch.

    Args:
        config ([`ConvNextV2Config`]): Model configuration class.
        dim (`int`): Number of input channels.
        drop_path (`float`): Stochastic depth rate. Default: 0.0.
    c                 ó°  •— t         ‰| �  «        t        j                  ||dd|¬«      | _        t        |d¬«      | _        t        j                  |d|z  «      | _        t        |j                     | _        t        d|z  «      | _        t        j                  d|z  |«      | _        |dkD  rt        |«      | _        y t        j                   «       | _        y )Nr   r
   )rs   ÚpaddingÚgroupsrS   ©ra   é   r   )r2   r3   r   rv   Údwconvr\   r{   ÚLinearÚpwconv1r   Ú
hidden_actÚactrG   ÚgrnÚpwconv2r/   ÚIdentityr,   )r4   r}   rH   r,   r5   s       €r+   r3   zConvNextV2Layer.__init__´   s¡   ø€ Ü‰ÑÔä—i‘i  S°aÀÈ3ÔOˆŒÜ,¨S°dÔ;ˆŒä—y‘y  a¨#¡gÓ.ˆŒÜ˜&×+Ñ+Ñ,ˆŒÜ   S¡Ó)ˆŒÜ—y‘y  S¡¨#Ó.ˆŒØ:CÀcº/Ô+¨IÓ6ˆ�ÌrÏ{É{Ë}ˆ�r-   r6   r   c                 óN  — |}| j                  |«      }|j                  dddd«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }| j                  |«      }|j                  dddd«      }|| j                  |«      z   }|S )Nr   rO   r
   r   )rŠ   Úpermuter{   rŒ   rŽ   r�   r�   r,   )r4   r6   r   re   s       r+   r9   zConvNextV2Layer.forwardÀ   s—   € ØˆØ�K‰K˜Ó&ˆà�I‰I�a˜˜A˜qÓ!ˆØ�N‰N˜1ÓˆØ�L‰L˜‹OˆØ�H‰H�Q‹KˆØ�H‰H�Q‹KˆØ�L‰L˜‹Oˆà�I‰I�a˜˜A˜qÓ!ˆà�D—N‘N 1Ó%Ñ%ˆØˆr-   )r   r‚   rE   s   @r+   r„   r„   ¦   s+   ø„ ñõ
]ð U×%6Ñ%6ð ¸5¿<¹<÷ r-   r„   c                   ó\   ‡ — e Zd ZdZdˆ fd„	Zdej                  dej                  fd„Zˆ xZ	S )ÚConvNextV2Stagea�  ConvNeXTV2 stage, consisting of an optional downsampling layer + multiple residual blocks.

    Args:
        config ([`ConvNextV2Config`]): Model configuration class.
        in_channels (`int`): Number of input channels.
        out_channels (`int`): Number of output channels.
        depth (`int`): Number of residual blocks.
        drop_path_rates(`List[float]`): Stochastic depth rates for each layer.
    c                 ó~  •— t         ‰	| �  «        ||k7  s|dkD  r?t        j                  t	        |dd¬«      t        j
                  ||||¬«      «      | _        nt        j                  «       | _        |xs dg|z  }t        j                  t        |«      D �cg c]  }t        ||||   ¬«      ‘Œ c}Ž | _
        y c c}w )Nr   rS   r_   ru   rr   r   )rH   r,   )r2   r3   r   Ú
Sequentialr\   rv   Údownsampling_layerr‘   Úranger„   Úlayers)
r4   r}   Úin_channelsÚout_channelsrs   rt   ÚdepthÚdrop_path_ratesÚjr5   s
            €r+   r3   zConvNextV2Stage.__init__Ý   s¤   ø€ Ü‰ÑÔà˜,Ò&¨&°1ª*Ü&(§m¡mÜ# K°TÐGWÔXÜ—	‘	˜+ |ÀÐU[Ô\ó'ˆDÕ#ô
 ')§k¡k£mˆDÔ#Ø)Ò:¨c¨U°U©]ˆÜ—m‘mÜ_dÐejÓ_kÖlÐZ[Œo˜f¨,À/ÐRSÑBTÖUÒlð
ˆ�ùÚls   ÂB:r6   r   c                 óJ   — | j                  |«      }| j                  |«      }|S r1   )r˜   rš   r8   s     r+   r9   zConvNextV2Stage.forwardì   s&   € Ø×/Ñ/°Ó>ˆØŸ™ MÓ2ˆØÐr-   )rO   rO   rO   Nr‚   rE   s   @r+   r•   r•   Ò   s*   ø„ ñõ
ð U×%6Ñ%6ð ¸5¿<¹<÷ r-   r•   c                   óf   ‡ — e Zd Zˆ fd„Z	 	 ddej
                  dee   dee   dee	e
f   fd„Zˆ xZS )ÚConvNextV2Encoderc           
      ó(  •— t         ‰| �  «        t        j                  «       | _        t        j                  d|j                  t        |j                  «      «      j                  |j                  «      D �cg c]  }|j                  «       ‘Œ }}|j                  d   }t        |j                  «      D ]V  }|j                  |   }t        ||||dkD  rdnd|j                  |   ||   ¬«      }| j                  j!                  |«       |}ŒX y c c}w )Nr   rO   r   )r›   rœ   rt   r�   rž   )r2   r3   r   Ú
ModuleListÚstagesr$   ÚlinspaceÚdrop_path_rateÚsumÚdepthsÚsplitÚtolistrx   r™   Ú
num_stagesr•   Úappend)	r4   r}   re   rž   Úprev_chsÚiÚout_chsÚstager5   s	           €r+   r3   zConvNextV2Encoder.__init__ô   sõ   ø€ Ü‰ÑÔÜ—m‘m“oˆŒä %§¡¨q°&×2GÑ2GÌÈVÏ]É]ÓI[Ó \× bÑ bÐci×cpÑcpÓ qö
ØˆA�H‰H�Jð
ˆð 
ð ×&Ñ& qÑ)ˆÜ�v×(Ñ(Ó)ò 	ˆAØ×)Ñ)¨!Ñ,ˆGÜ#ØØ$Ø$Ø šE‘q qØ—m‘m AÑ&Ø /°Ñ 2ôˆEð �K‰K×Ñ˜uÔ%Ø‰Hñ	ùò	
s   Á8Dr6   Úoutput_hidden_statesÚreturn_dictr   c                 ó¾   — |rdnd }t        | j                  «      D ]  \  }}|r||fz   } ||«      }Œ |r||fz   }|st        d„ ||fD «       «      S t        ||¬«      S )N© c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr1   rµ   )Ú.0Úvs     r+   ú	<genexpr>z,ConvNextV2Encoder.forward.<locals>.<genexpr>  s   è ø€ ÒX˜qÈ!É-œÑXùs   ‚Š)Úlast_hidden_stater6   )Ú	enumerater¥   Útupler   )r4   r6   r²   r³   Úall_hidden_statesr¯   Úlayer_modules          r+   r9   zConvNextV2Encoder.forward  s…   € ñ #7™B¸DÐä(¨¯©Ó5ò 	8‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!á(¨Ó7‰Mð		8ñ  Ø 1°]Ð4DÑ DÐáÜÑX ]Ð4EÐ$FÔXÓXÐXä-Ø+Ø+ô
ð 	
r-   )FT)r=   r>   r?   r3   r$   rZ   r   Úboolr   r   r   r9   rD   rE   s   @r+   r¢   r¢   ó   sT   ø„ ôð. 05Ø&*ñ	
à×(Ñ(ð
ð ' t™nð
ð ˜d‘^ð	
ð
 
ˆuÐ4Ð4Ñ	5÷
r-   r¢   c                   ó(   — e Zd ZdZeZdZdZdgZd„ Z	y)ÚConvNextV2PreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Ú
convnextv2r~   r„   c                 ó¸  — t        |t        j                  t        j                  f«      rm|j                  j
                  j                  d| j                  j                  ¬«       |j                  �%|j                  j
                  j                  «        yyt        |t        j                  t        f«      rJ|j                  j
                  j                  «        |j                  j
                  j                  d«       yt        |t        «      rI|j                  j
                  j                  «        |j                  j
                  j                  «        yy)zInitialize the weightsr   )rV   ÚstdNg      ð?)Ú
isinstancer   r‹   rv   rL   ÚdataÚnormal_r}   Úinitializer_rangerM   Úzero_Ú	LayerNormr\   Úfill_rG   )r4   Úmodules     r+   Ú_init_weightsz'ConvNextV2PreTrainedModel._init_weights-  sä   € ä�fœrŸy™y¬"¯)©)Ð4Ô5ð �M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô/BÐ CÔDØ�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)Ü˜¤Ô.Ø�M‰M×Ñ×$Ñ$Ô&Ø�K‰K×Ñ×"Ñ"Õ$ð /r-   N)
r=   r>   r?   r@   r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚ_no_split_modulesrÍ   rµ   r-   r+   rÁ   rÁ   "  s'   „ ñð
 $€LØ$ÐØ$€OØ*Ð+Ðó%r-   rÁ   aL  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass. Use it
    as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`ConvNextV2Config`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
aI  
    Args:
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`ConvNextImageProcessor`]. See
            [`ConvNextImageProcessor.__call__`] for details.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
zSThe bare ConvNextV2 model outputting raw features without any specific head on top.c                   ó¤   ‡ — e Zd Zˆ fd„Z ee«       eeee	de
¬«      	 	 	 d	deej                     dee   dee   deeef   fd„«       «       Zˆ xZS )
ÚConvNextV2Modelc                 óø   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        j                  |j                  d   |j                  ¬«      | _        | j                  «        y )NrR   rˆ   )r2   r3   r}   rp   r�   r¢   Úencoderr   rÊ   rx   Úlayer_norm_epsr{   Ú	post_initr|   s     €r+   r3   zConvNextV2Model.__init__[  s`   ø€ Ü‰Ñ˜Ô ØˆŒä.¨vÓ6ˆŒÜ(¨Ó0ˆŒô Ÿ™ f×&9Ñ&9¸"Ñ&=À6×CXÑCXÔYˆŒð 	�‰Õr-   Úvision)Ú
checkpointÚoutput_typerÎ   ÚmodalityÚexpected_outputr~   r²   r³   r   c                 ód  — |�|n| j                   j                  }|�|n| j                   j                  }|€t        d«      ‚| j	                  |«      }| j                  |||¬«      }|d   }| j                  |j                  ddg«      «      }|s
||f|dd  z   S t        |||j                  ¬«      S )Nz You have to specify pixel_values©r²   r³   r   éþÿÿÿrR   r   )rº   Úpooler_outputr6   )
r}   r²   Úuse_return_dictr€   r�   rÕ   r{   rV   r   r6   )r4   r~   r²   r³   Úembedding_outputÚencoder_outputsrº   Úpooled_outputs           r+   r9   zConvNextV2Model.forwardh  sÖ   € ð %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐÜÐ?Ó@Ð@àŸ?™?¨<Ó8ÐàŸ,™,ØØ!5Ø#ð 'ó 
ˆð ,¨AÑ.Ðð Ÿ™Ð'8×'=Ñ'=¸rÀ2¸hÓ'GÓHˆáØ% }Ð5¸ÈÈÐ8KÑKÐKä7Ø/Ø'Ø)×7Ñ7ô
ð 	
r-   )NNN)r=   r>   r?   r3   r   ÚCONVNEXTV2_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCr   Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr   r$   rZ   r¿   r   r   r9   rD   rE   s   @r+   rÓ   rÓ   U  sŽ   ø„ ôñ +Ð+FÓGÙØ&Ø<Ø$ØØ.ôð 59Ø/3Ø&*ñ	"
à˜u×0Ñ0Ñ1ð"
ð ' t™nð"
ð ˜d‘^ð	"
ð
 
ˆuÐ>Ð>Ñ	?ò"
óó Hô"
r-   rÓ   zŠ
    ConvNextV2 Model with an image classification head on top (a linear layer on top of the pooled features), e.g. for
    ImageNet.
    c                   óÂ   ‡ — e Zd Zˆ fd„Z ee«       eeee	e
¬«      	 	 	 	 d	deej                     deej                     dee   dee   deeef   f
d„«       «       Zˆ xZS )
Ú ConvNextV2ForImageClassificationc                 ó0  •— t         ‰| �  |«       |j                  | _        t        |«      | _        |j                  dkD  r-t        j                  |j                  d   |j                  «      nt        j                  «       | _	        | j                  «        y )Nr   rR   )r2   r3   Ú
num_labelsrÓ   rÂ   r   r‹   rx   r‘   Ú
classifierr×   r|   s     €r+   r3   z)ConvNextV2ForImageClassification.__init__ž  sy   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ)¨&Ó1ˆŒð FL×EVÑEVÐYZÒEZŒB�I‰I�f×)Ñ)¨"Ñ-¨v×/@Ñ/@ÔAÔ`b×`kÑ`kÓ`mð 	Œð
 	�‰Õr-   )rÙ   rÚ   rÎ   rÜ   r~   Úlabelsr²   r³   r   c                 ó  — |�|n| j                   j                  }| j                  |||¬«      }|r|j                  n|d   }| j	                  |«      }d}|��‡| j                   j
                  €�| j                  dk(  rd| j                   _        nl| j                  dkD  rL|j                  t        j                  k(  s|j                  t        j                  k(  rd| j                   _        nd| j                   _        | j                   j
                  dk(  rIt        «       }	| j                  dk(  r& |	|j                  «       |j                  «       «      }nŒ |	||«      }n‚| j                   j
                  dk(  r=t        «       }	 |	|j                  d| j                  «      |j                  d«      «      }n,| j                   j
                  dk(  rt        «       }	 |	||«      }|s|f|dd z   }
|�|f|
z   S |
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   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationrR   rO   )ÚlossÚlogitsr6   )r}   rá   rÂ   rà   rí   Úproblem_typerì   r    r$   ÚlongrY   r	   Úsqueezer   Úviewr   r   r6   )r4   r~   rî   r²   r³   Úoutputsrä   rô   ró   Úloss_fctr*   s              r+   r9   z(ConvNextV2ForImageClassification.forward¬  sÁ  € ð( &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—/‘/ ,ÐEYÐgr�/Ósˆá1<˜×-Ò-À'È!Á*ˆà—‘ Ó/ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? aÒ'Ø/;�D—K‘KÕ,Ø—_‘_ qÒ(¨f¯l©l¼e¿j¹jÒ.HÈFÏLÉLÔ\a×\eÑ\eÒLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—?‘? aÒ'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�ÙØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä3ØØØ!×/Ñ/ô
ð 	
r-   )NNNN)r=   r>   r?   r3   r   rå   r   Ú_IMAGE_CLASS_CHECKPOINTr   rç   Ú_IMAGE_CLASS_EXPECTED_OUTPUTr   r$   rZ   Ú
LongTensorr¿   r   r   r9   rD   rE   s   @r+   rê   rê   •  s£   ø„ ôñ +Ð+FÓGÙØ*Ø8Ø$Ø4ô	ð 59Ø-1Ø/3Ø&*ñ3
à˜u×0Ñ0Ñ1ð3
ð ˜×)Ñ)Ñ*ð3
ð ' t™nð	3
ð
 ˜d‘^ð3
ð 
ˆuÐ:Ð:Ñ	;ò3
óó Hô3
r-   rê   zT
    ConvNeXT V2 backbone, to be used with frameworks like DETR and MaskFormer.
    c                   óŒ   ‡ — e Zd Zˆ fd„Z ee«       eee¬«      	 	 dde	j                  dee   dee   defd„«       «       Zˆ xZS )	ÚConvNextV2Backbonec                 óŽ  •— t         ‰| �  |«       t         ‰| �	  |«       t        |«      | _        t        |«      | _        |j                  d   g|j                  z   | _        i }t        | j                  | j                  «      D ]  \  }}t        |d¬«      ||<   Œ t        j                  |«      | _        | j!                  «        y )Nr   r_   )rb   )r2   r3   Ú_init_backbonerp   r�   r¢   rÕ   rx   Únum_featuresÚzipÚ_out_featuresÚchannelsr\   r   Ú
ModuleDictÚhidden_states_normsr×   )r4   r}   r  r±   rw   r5   s        €r+   r3   zConvNextV2Backbone.__init__ñ  s¶   ø€ Ü‰Ñ˜Ô Ü‰Ñ˜vÔ&ä.¨vÓ6ˆŒÜ(¨Ó0ˆŒØ#×0Ñ0°Ñ3Ð4°v×7JÑ7JÑJˆÔð !ÐÜ#& t×'9Ñ'9¸4¿=¹=Ó#Iò 	iÑˆE�<Ü)<¸\ÐWgÔ)hÐ Ò&ð	iä#%§=¡=Ð1DÓ#EˆÔ ð 	�‰Õr-   )rÚ   rÎ   r~   r²   r³   r   c                 ó¼  — |�|n| j                   j                  }|�|n| j                   j                  }| j                  |«      }| j	                  |d|¬«      }|r|j
                  n|d   }d}t        | j                  |«      D ]/  \  }}	|| j                  v sŒ | j                  |   |	«      }	||	fz  }Œ1 |s|f}
|r|
|fz  }
|
S t        ||r|d¬«      S dd¬«      S )a„  
        Returns:

        Examples:

        ```python
        >>> from transformers import AutoImageProcessor, AutoBackbone
        >>> import torch
        >>> from PIL import Image
        >>> import requests

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> processor = AutoImageProcessor.from_pretrained("facebook/convnextv2-tiny-1k-224")
        >>> model = AutoBackbone.from_pretrained("facebook/convnextv2-tiny-1k-224")

        >>> inputs = processor(image, return_tensors="pt")
        >>> outputs = model(**inputs)
        ```NTrÞ   r   rµ   )Úfeature_mapsr6   Ú
attentions)r}   rá   r²   r�   rÕ   r6   r  Ústage_namesÚout_featuresr  r   )r4   r~   r²   r³   râ   rù   r6   r	  r±   Úhidden_stater*   s              r+   r9   zConvNextV2Backbone.forward  s  € ð8 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð  Ÿ?™?¨<Ó8Ðà—,‘,ØØ!%Ø#ð ó 
ˆñ 2=˜×-Ò-À'È!Á*ˆàˆÜ#& t×'7Ñ'7¸Ó#Gò 	0ÑˆE�<Ø˜×)Ñ)Ò)Ø>˜t×7Ñ7¸Ñ>¸|ÓL�Ø  Ñ/‘ð	0ñ
 Ø"�_ˆFÙ#Ø˜=Ð*Ñ*�ØˆMäØ%Ù+?˜-Øô
ð 	
àEIØô
ð 	
r-   )NN)r=   r>   r?   r3   r   rå   r   r   rç   r$   rB   r   r¿   r9   rD   rE   s   @r+   rÿ   rÿ   é  sm   ø„ ôñ" +Ð+FÓGÙ¨>ÈÔXð 04Ø&*ñ	9
à—l‘lð9
ð ' t™nð9
ð ˜d‘^ð	9
ð
 
ò9
ó Yó Hô9
r-   rÿ   )rê   rÓ   rÁ   rÿ   )r   F):r@   Útypingr   r   r   r$   Útorch.utils.checkpointr   Útorch.nnr   r   r	   Úactivationsr   Úmodeling_outputsr   r   r   r   Úmodeling_utilsr   Úutilsr   r   r   r   r   Úutils.backbone_utilsr   Úconfiguration_convnextv2r   Ú
get_loggerr=   Úloggerrç   ræ   rè   rû   rü   rB   rA   r¿   r,   ÚModuler/   rG   r\   rp   r„   r•   r¢   rÁ   ÚCONVNEXTV2_START_DOCSTRINGrå   rÓ   rê   rÿ   Ú__all__rµ   r-   r+   ú<module>r     sÅ  ðñ  ç )Ñ )ã Û Ý ß AÑ Aå !÷ó õ .÷õ õ 2Ý 6ð 
ˆ×	Ñ	˜HÓ	%€ð %€ð 8Ð Ú'Ð ð <Ð Ø1Ð ñ�U—\‘\ð ¨eð ÀTð ÐV[×VbÑVbó ô*-˜Ÿ™ô -ô�B—I‘Iô ô$˜"Ÿ)™)ô ô>˜2Ÿ9™9ô ô0(�b—i‘iô (ôX�b—i‘iô ôB,
˜Ÿ	™	ô ,
ô^% ô %ð6	Ð ð
Ð ñ ØYØóô
8
Ð/ó 8
óð
8
ñv ðð óôI
Ð'@ó I
óðI
ñX ðð ó	ôM
Ð2°Mó M
óðM
ò` u�r-   