Ë
    S^(hœV  ã            	       óÜ  — 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&d1d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«      Z2d%Z3d&Z4 ed'e3«       G d(„ d)e2«      «       Z5 ed*e3«       G d+„ d,e2«      «       Z6 ed-e3«       G d.„ d/e2e«      «       Z7g d0¢Z8y)2zPyTorch ConvNext 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é   )ÚConvNextConfigr   zfacebook/convnext-tiny-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          úl/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/convnext/modeling_convnext.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 )
ÚConvNextDropPathzXDrop 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ConvNextDropPath.__init__R   s   ø€ Ü‰ÑÔØ"ˆ�r-   Úhidden_statesc                 óD   — t        || j                  | j                  «      S r1   )r,   r   r   ©r4   r6   s     r+   ÚforwardzConvNextDropPath.forwardV   s   € Ü˜¨¯©¸¿¹ÓFÐFr-   c                 ó8   — dj                  | j                  «      S )Nzp={})Úformatr   )r4   s    r+   Ú
extra_reprzConvNextDropPath.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ˆ fd„	Zdej                  dej                  fd„Zˆ xZS )ÚConvNextLayerNormaA  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   Ú	Parameterr$   ÚonesÚweightÚzerosÚbiasÚepsÚdata_formatÚNotImplementedErrorÚnormalized_shape)r4   rS   rP   rQ   r5   s       €r+   r3   zConvNextLayerNorm.__init__c   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 )NrI   rJ   r   T)Úkeepdimé   )r    )rQ   r$   r   Ú
functionalÚ
layer_normrS   rM   rO   rP   r    rA   ÚmeanÚpowÚsqrtÚto)r4   rT   Úinput_dtypeÚuÚss        r+   r9   zConvNextLayerNorm.forwardm   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-   )ç�íµ ÷Æ°>rI   )	r=   r>   r?   r@   r3   r$   rB   r9   rD   rE   s   @r+   rG   rG   ]   s(   ø„ ñõ
4ð˜Ÿ™ð ¨%¯,©,÷ r-   rG   c                   óZ   ‡ — e Zd ZdZˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚConvNextEmbeddingsz‡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Ústridera   rJ   ©rP   rQ   )
r2   r3   r   ÚConv2dÚnum_channelsÚhidden_sizesÚ
patch_sizeÚpatch_embeddingsrG   Ú	layernorm©r4   Úconfigr5   s     €r+   r3   zConvNextEmbeddings.__init__€   sr   ø€ Ü‰ÑÔÜ "§	¡	Ø×Ñ ×!4Ñ!4°QÑ!7ÀV×EVÑEVÐ_e×_pÑ_pô!
ˆÔô +¨6×+>Ñ+>¸qÑ+AÀtÐYiÔjˆŒØ"×/Ñ/ˆÕ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"   rj   Ú
ValueErrorrm   rn   )r4   rq   rj   Ú
embeddingss       r+   r9   zConvNextEmbeddings.forwardˆ   sV   € Ø#×)Ñ)¨!Ñ,ˆØ˜4×,Ñ,Ò,ÜØwóð ð ×*Ñ*¨<Ó8ˆ
Ø—^‘^ JÓ/ˆ
ØÐr-   ©
r=   r>   r?   r@   r3   r$   ÚFloatTensorrB   r9   rD   rE   s   @r+   rc   rc   {   s*   ø„ ñô0ð E×$5Ñ$5ð ¸%¿,¹,÷ r-   rc   c                   ó\   ‡ — e Zd ZdZdˆ fd„	Zdej                  dej                  fd„Zˆ xZ	S )ÚConvNextLayera3  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 ([`ConvNextConfig`]): 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        j                  d|z  |«      | _        |j                  dkD  r7t        j                  |j                  t        j                   |«      z  d¬	«      nd | _        |d
kD  rt%        |«      | _        y t        j&                  «       | _        y )Nr   r
   )rf   ÚpaddingÚgroupsra   ©rP   é   r   T)Úrequires_gradr   )r2   r3   r   ri   ÚdwconvrG   rn   ÚLinearÚpwconv1r   Ú
hidden_actÚactÚpwconv2Úlayer_scale_init_valuerK   r$   rL   Úlayer_scale_parameterr/   ÚIdentityr,   )r4   rp   Údimr,   r5   s       €r+   r3   zConvNextLayer.__init__¡   sÔ   ø€ Ü‰ÑÔÜ—i‘i  S°aÀÈ3ÔOˆŒÜ*¨3°DÔ9ˆŒÜ—y‘y  a¨#¡gÓ.ˆŒÜ˜&×+Ñ+Ñ,ˆŒÜ—y‘y  S¡¨#Ó.ˆŒð ×,Ñ,¨qÒ0ô �L‰L˜×6Ñ6¼¿¹ÀSÓ9JÑJÐZ^Õ_àð 	Ô"ð
 9BÀCºÔ)¨)Ó4ˆ�ÌRÏ[É[Ë]ˆ�r-   r6   r   c                 ób  — |}| j                  |«      }|j                  dddd«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }| j                  �| j                  |z  }|j                  dddd«      }|| j                  |«      z   }|S )Nr   rW   r
   r   )r   Úpermutern   r�   rƒ   r„   r†   r,   )r4   r6   r   rT   s       r+   r9   zConvNextLayer.forward¯   s¦   € ØˆØ�K‰K˜Ó&ˆØ�I‰I�a˜˜A˜qÓ!ˆØ�N‰N˜1ÓˆØ�L‰L˜‹OˆØ�H‰H�Q‹KˆØ�L‰L˜‹OˆØ×%Ñ%Ð1Ø×*Ñ*¨QÑ.ˆAØ�I‰I�a˜˜A˜qÓ!ˆà�D—N‘N 1Ó%Ñ%ˆØˆr-   )r   ru   rE   s   @r+   rx   rx   “   s+   ø„ ñõ[ð U×%6Ñ%6ð ¸5¿<¹<÷ r-   rx   c                   ó\   ‡ — e Zd ZdZdˆ fd„	Zdej                  dej                  fd„Zˆ xZ	S )ÚConvNextStagea™  ConvNeXT stage, consisting of an optional downsampling layer + multiple residual blocks.

    Args:
        config ([`ConvNextConfig`]): 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   ra   rJ   rh   re   r   )rˆ   r,   )r2   r3   r   Ú
SequentialrG   ri   Údownsampling_layerr‡   Úrangerx   Úlayers)
r4   rp   Úin_channelsÚout_channelsrf   rg   ÚdepthÚdrop_path_ratesÚjr5   s
            €r+   r3   zConvNextStage.__init__Ê   s¤   ø€ Ü‰ÑÔà˜,Ò&¨&°1ª*Ü&(§m¡mÜ! +°4ÐEUÔVÜ—	‘	˜+ |ÀÐU[Ô\ó'ˆDÕ#ô
 ')§k¡k£mˆDÔ#Ø)Ò:¨c¨U°U©]ˆÜ—m‘mÜ]bÐchÓ]iÖjÐXYŒm˜F¨ÀÐPQÑ@RÖSÒjð
ˆ�ùÚjs   ÂB:r6   r   c                 óJ   — | j                  |«      }| j                  |«      }|S r1   )r�   r‘   r8   s     r+   r9   zConvNextStage.forwardÙ   s&   € Ø×/Ñ/°Ó>ˆØŸ™ MÓ2ˆØÐr-   )rW   rW   rW   Nru   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 )ÚConvNextEncoderc           
      ó(  •— 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   rW   r   )r’   r“   rg   r”   r•   )r2   r3   r   Ú
ModuleListÚstagesr$   ÚlinspaceÚdrop_path_rateÚsumÚdepthsÚsplitÚtolistrk   r�   Ú
num_stagesrŒ   Úappend)	r4   rp   rT   r•   Úprev_chsÚiÚout_chsÚstager5   s	           €r+   r3   zConvNextEncoder.__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*ConvNextEncoder.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ConvNextEncoder.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$   rv   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)ÚConvNextPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Úconvnextrq   rx   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        «      rG|j                  �:|j                  j
                  j                  | j                  j                   «       yyy)zInitialize the weightsr   )rZ   ÚstdNg      ð?)Ú
isinstancer   r€   ri   rM   ÚdataÚnormal_rp   Úinitializer_rangerO   Úzero_Ú	LayerNormrG   Úfill_rx   r†   r…   )r4   Úmodules     r+   Ú_init_weightsz%ConvNextPreTrainedModel._init_weights  sí   € ä�fœrŸy™y¬"¯)©)Ð4Ô5ð �M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô/@Ð AÔBØ�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)Ü˜¤Ô.Ø×+Ñ+Ð7Ø×,Ñ,×1Ñ1×7Ñ7¸¿¹×8ZÑ8ZÕ[ð 8ð /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¸   aJ  
    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 ([`ConvNextConfig`]): 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.
aF  
    Args:
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. 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.
zQThe bare ConvNext 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 )
ÚConvNextModelc                 óø   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        j                  |j                  d   |j                  ¬«      | _        | j                  «        y )Néÿÿÿÿr|   )r2   r3   rp   rc   rt   r™   Úencoderr   rÁ   rk   Úlayer_norm_epsrn   Ú	post_initro   s     €r+   r3   zConvNextModel.__init__G  s`   ø€ Ü‰Ñ˜Ô ØˆŒä,¨VÓ4ˆŒÜ& vÓ.ˆŒô Ÿ™ f×&9Ñ&9¸"Ñ&=À6×CXÑCXÔYˆŒð 	�‰Õr-   Úvision)Ú
checkpointÚoutput_typerÅ   ÚmodalityÚexpected_outputrq   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   éþÿÿÿrÌ   r   )r±   Úpooler_outputr6   )
rp   r©   Úuse_return_dictrs   rt   rÍ   rn   rZ   r   r6   )r4   rq   r©   rª   Úembedding_outputÚencoder_outputsr±   Úpooled_outputs           r+   r9   zConvNextModel.forwardT  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   ÚCONVNEXT_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCr   Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr   r$   rv   r¶   r   r   r9   rD   rE   s   @r+   rÊ   rÊ   B  sŽ   ø„ ô
ñ +Ð+DÓEÙØ&Ø<Ø$ØØ.ôð 59Ø/3Ø&*ñ	"
à˜u×0Ñ0Ñ1ð"
ð ' t™nð"
ð ˜d‘^ð	"
ð
 
ˆuÐ>Ð>Ñ	?ò"
óó Fô"
r-   rÊ   zˆ
    ConvNext 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 )
ÚConvNextForImageClassificationc                 ó0  •— t         ‰| �  |«       |j                  | _        t        |«      | _        |j                  dkD  r-t        j                  |j                  d   |j                  «      nt        j                  «       | _	        | j                  «        y )Nr   rÌ   )r2   r3   Ú
num_labelsrÊ   r¹   r   r€   rk   r‡   Ú
classifierrÏ   ro   s     €r+   r3   z'ConvNextForImageClassification.__init__‰  sy   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ% fÓ-ˆŒð FL×EVÑEVÐYZÒEZŒB�I‰I�f×)Ñ)¨"Ñ-¨v×/@Ñ/@ÔAÔ`b×`kÑ`kÓ`mð 	Œð
 	�‰Õr-   )rÑ   rÒ   rÅ   rÔ   rq   Ú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_classificationrÌ   rW   )ÚlossÚlogitsr6   )rp   rÙ   r¹   rØ   rå   Úproblem_typerä   r    r$   ÚlongÚintr	   Úsqueezer   Úviewr   r   r6   )r4   rq   ræ   r©   rª   ÚoutputsrÜ   rì   rë   Úloss_fctr*   s              r+   r9   z&ConvNextForImageClassification.forward—  sÁ  € ð( &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—-‘- ÐCWÐep�-Óqˆá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$   rv   Ú
LongTensorr¶   r   r   r9   rD   rE   s   @r+   râ   râ   �  s£   ø„ ôñ +Ð+DÓEÙØ*Ø8Ø$Ø4ô	ð 59Ø-1Ø/3Ø&*ñ3
à˜u×0Ñ0Ñ1ð3
ð ˜×)Ñ)Ñ*ð3
ð ' t™nð	3
ð
 ˜d‘^ð3
ð 
ˆuÐ:Ð:Ñ	;ò3
óó Fô3
r-   râ   zQ
    ConvNeXt 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 )	ÚConvNextBackbonec                 óŽ  •— t         ‰| �  |«       t         ‰| �	  |«       t        |«      | _        t        |«      | _        |j                  d   g|j                  z   | _        i }t        | j                  | j                  «      D ]  \  }}t        |d¬«      ||<   Œ t        j                  |«      | _        | j!                  «        y )Nr   rJ   )rQ   )r2   r3   Ú_init_backbonerc   rt   r™   rÍ   rk   Únum_featuresÚzipÚ_out_featuresÚchannelsrG   r   Ú
ModuleDictÚhidden_states_normsrÏ   )r4   rp   r   r¨   rj   r5   s        €r+   r3   zConvNextBackbone.__init__Û  s¶   ø€ Ü‰Ñ˜Ô Ü‰Ñ˜vÔ&ä,¨VÓ4ˆŒÜ& vÓ.ˆŒØ#×0Ñ0°Ñ3Ð4°v×7JÑ7JÑJˆÔð !ÐÜ#& t×'9Ñ'9¸4¿=¹=Ó#Iò 	gÑˆE�<Ü):¸<ÐUeÔ)fÐ Ò&ð	gä#%§=¡=Ð1DÓ#EˆÔ ð 	�‰Õr-   )rÒ   rÅ   rq   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 )az  
        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/convnext-tiny-224")
        >>> model = AutoBackbone.from_pretrained("facebook/convnext-tiny-224")

        >>> inputs = processor(image, return_tensors="pt")
        >>> outputs = model(**inputs)
        ```NTrÖ   r   r¬   )Úfeature_mapsr6   Ú
attentions)rp   rÙ   r©   rt   rÍ   r6   rü   Ústage_namesÚout_featuresr   r   )r4   rq   r©   rª   rÚ   rò   r6   r  r¨   Úhidden_stater*   s              r+   r9   zConvNextBackbone.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   ø„ ôñ" +Ð+DÓEÙ¨>ÈÔXð 04Ø&*ñ	9
à—l‘lð9
ð ' t™nð9
ð ˜d‘^ð	9
ð
 
ò9
ó Yó Fô9
r-   rø   )râ   rÊ   r¸   rø   )r   F)9r@   Ú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_convnextr   Ú
get_loggerr=   Úloggerrß   rÞ   rà   rô   rõ   rB   rA   r¶   r,   ÚModuler/   rG   rc   rx   rŒ   r™   r¸   ÚCONVNEXT_START_DOCSTRINGrÝ   rÊ   râ   rø   Ú__all__r¬   r-   r+   ú<module>r     s·  ðñ ç )Ñ )ã Û Ý ß AÑ Aå !÷ó õ .÷õ õ 2Ý 2ð 
ˆ×	Ñ	˜HÓ	%€ð #€ð 3Ð Ú'Ð ð 7Ð Ø1Ð ñ�U—\‘\ð ¨eð ÀTð ÐV[×VbÑVbó ô*-�r—y‘yô -ô˜Ÿ	™	ô ô<˜Ÿ™ô ô0)�B—I‘Iô )ôX�B—I‘Iô ô@,
�b—i‘iô ,
ô^\˜oô \ð6	Ð ðÐ ñ ØWØóô8
Ð+ó 8
ó	ð8
ñv ðð óôI
Ð%<ó I
óðI
ñX ðð ó	ôM
Ð.°ó M
óðM
ò` m�r-   