§
    ‚Š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	m
Z
 ddlmZmZmZmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlmZmZ ddlmZ ddlmZ  ej        e ¦  «        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(e G d„ de¦  «        ¦   «         Z) G d„ de)¦  «        Z*e G d„ de)¦  «        ¦   «         Z+ ed ¬!¦  «         G d"„ d#e)¦  «        ¦   «         Z, ed$¬!¦  «         G d%„ d&e	e)¦  «        ¦   «         Z-g d'¢Z.dS )(zPyTorch ConvNext model.é    N)Únné   )Úinitialization)ÚACT2FN)ÚBackboneMixinÚfilter_output_hidden_states)ÚBackboneOutputÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttention)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚlogging)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚConvNextConfigc                   óR   ‡ — e Zd ZdZdddœˆ fd„
Zdej        dej        fˆ 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).
    ç�íµ ÷Æ°>Úchannels_last©ÚepsÚdata_formatc                óz   •—  t          ¦   «         j        |fd|i|¤Ž |dvrt          d|› �¦  «        ‚|| _        d S )Nr   )r   Úchannels_firstzUnsupported data format: )ÚsuperÚ__init__ÚNotImplementedErrorr   )ÚselfÚnormalized_shaper   r   ÚkwargsÚ	__class__s        €úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/convnext/modeling_convnext.pyr!   zConvNextLayerNorm.__init__-   sY   ø€ Ø�‰ŒÔÐ)Ð=Ð=¨sÐ=°fÐ=Ð=Ð=ØÐAÐAÐAÝ%Ð&OÀ+Ð&OÐ&OÑPÔPÐPØ&ˆÔÐÐó    ÚfeaturesÚreturnc                 ó  •— | j         dk    rR|                     dddd¦  «        }t          ¦   «                              |¦  «        }|                     dddd¦  «        }n!t          ¦   «                              |¦  «        }|S )zŒ
        Args:
            features: Tensor of shape (batch_size, channels, height, width) OR (batch_size, height, width, channels)
        r   r   é   r   r   )r   Úpermuter    Úforward)r#   r)   r&   s     €r'   r.   zConvNextLayerNorm.forward3   sw   ø€ ð
 ÔÐ/Ò/Ð/Ø×'Ò'¨¨1¨a°Ñ3Ô3ˆHÝ‘w”w—’ xÑ0Ô0ˆHØ×'Ò'¨¨1¨a°Ñ3Ô3ˆHˆHå‘w”w—’ xÑ0Ô0ˆHØˆr(   ©	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   ÚtorchÚTensorr.   Ú__classcell__©r&   s   @r'   r   r   '   sƒ   ø€ € € € € ðð ð
 15À/ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð ¤ð °´ð ð ð ð ð ð ð ð ð ð r(   r   c                   óF   ‡ — 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        | _        d S )Nr   ©Úkernel_sizeÚstrider   r   r   )
r    r!   r   ÚConv2dÚnum_channelsÚhidden_sizesÚ
patch_sizeÚpatch_embeddingsr   Ú	layernorm©r#   Úconfigr&   s     €r'   r!   zConvNextEmbeddings.__init__F   s   ø€ Ý‰Œ×ÒÑÔÐÝ "¤	ØÔ Ô!4°QÔ!7ÀVÔEVÐ_eÔ_pð!
ñ !
ô !
ˆÔõ +¨6Ô+>¸qÔ+AÀtÐYiÐjÑjÔjˆŒØ"Ô/ˆÔÐÐr(   Úpixel_valuesr*   c                 ó¨   — |j         d         }|| j        k    rt          d¦  «        ‚|                      |¦  «        }|                      |¦  «        }|S )Nr   zeMake sure that the channel dimension of the pixel values match with the one set in the configuration.)Úshaper?   Ú
ValueErrorrB   rC   )r#   rF   r?   Ú
embeddingss       r'   r.   zConvNextEmbeddings.forwardN   s^   € Ø#Ô)¨!Ô,ˆØ˜4Ô,Ò,Ð,ÝØwñô ð ð ×*Ò*¨<Ñ8Ô8ˆ
Ø—^’^ JÑ/Ô/ˆ
ØÐr(   )
r0   r1   r2   r3   r!   r4   ÚFloatTensorr5   r.   r6   r7   s   @r'   r9   r9   A   si   ø€ € € € € ðð ð0ð 0ð 0ð 0ð 0ð EÔ$5ð ¸%¼,ð ð ð ð ð ð ð ð r(   r9   c                   ó^   ‡ — e Zd ZdZd
deddfˆ fd„Zdej        dej        fd„Zde	fd	„Z
ˆ xZS )ÚConvNextDropPathzÏStochastic depth (DropPath) per sample, for residual blocks.

    Identity when ``drop_prob`` is 0 or outside training. See `Deep Networks with Stochastic Depth
    <https://arxiv.org/abs/1603.09382>`_.
    ç        Ú	drop_probr*   Nc                 óV   •— t          ¦   «                              ¦   «          || _        d S ©N)r    r!   rO   )r#   rO   r&   s     €r'   r!   zConvNextDropPath.__init__a   s$   ø€ Ý‰Œ×ÒÑÔÐØ"ˆŒˆˆr(   Úhidden_statesc                 ó  — | j         dk    s| j        s|S d| j         z
  }|j        d         fd|j        dz
  z  z   }t	          j        ||j        |j        ¬¦  «        }t	          j        ||z   ¦  «        }| 	                    |¦  «        |z  S )NrN   r   r   )r   )ÚdtypeÚdevice)
rO   ÚtrainingrH   Úndimr4   ÚrandrT   rU   ÚfloorÚdiv)r#   rR   Ú	keep_probrH   Úrandom_tensors        r'   r.   zConvNextDropPath.forwarde   s“   € ØŒ>˜SÒ Ð ¨¬Ð Ø Ð Ø˜œÑ&ˆ	ØÔ$ QÔ'Ð)¨D°MÔ4FÈÑ4JÑ,KÑKˆÝœ
 5°Ô0CÈMÔL`ÐaÑaÔaˆÝœ M°IÑ$=Ñ>Ô>ˆØ× Ò  Ñ+Ô+¨mÑ;Ð;r(   c                 ó   — d| j         › �S )Nzp=)rO   )r#   s    r'   Ú
extra_reprzConvNextDropPath.extra_reprn   s   € Ø$�D”NÐ$Ð$Ð$r(   )rN   )r0   r1   r2   r3   Úfloatr!   r4   r5   r.   Ústrr^   r6   r7   s   @r'   rM   rM   Z   s›   ø€ € € € € ðð ð#ð # %ð #°$ð #ð #ð #ð #ð #ð #ð< U¤\ð <°e´lð <ð <ð <ð <ð%˜Cð %ð %ð %ð %ð %ð %ð %ð %r(   rM   c                   óH   ‡ — 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.
    r   c                 ó0  •— t          ¦   «                              ¦   «          t          j        ||dd|¬¦  «        | _        t          |d¬¦  «        | _        t          j        |d|z  ¦  «        | _        t          |j
                 | _        t          j        d|z  |¦  «        | _        |j        dk    r0t          j        |j        t          j        |¦  «        z  d¬	¦  «        nd | _        |d
k    rt%          |¦  «        nt          j        ¦   «         | _        d S )Né   r   )r<   ÚpaddingÚgroupsr   ©r   é   r   T)Úrequires_gradrN   )r    r!   r   r>   Údwconvr   rC   ÚLinearÚpwconv1r   Ú
hidden_actÚactÚpwconv2Úlayer_scale_init_valueÚ	Parameterr4   ÚonesÚlayer_scale_parameterrM   ÚIdentityÚ	drop_path)r#   rE   Údimru   r&   s       €r'   r!   zConvNextLayer.__init__€   só   ø€ Ý‰Œ×ÒÑÔÐÝ”i  S°aÀÈ3ÐOÑOÔOˆŒÝ*¨3°DÐ9Ñ9Ô9ˆŒÝ”y  a¨#¡gÑ.Ô.ˆŒÝ˜&Ô+Ô,ˆŒÝ”y  S¡¨#Ñ.Ô.ˆŒð Ô,¨qÒ0Ð0õ ŒL˜Ô6½¼ÀC¹¼ÑHÐX\Ð]Ñ]Ô]Ð]àð 	Ô"ð
 9BÀCº¸Õ)¨)Ñ4Ô4Ð4ÍRÌ[É]Ì]ˆŒˆˆr(   r)   r*   c                 óŽ  — |}|                       |¦  «        }|                     dddd¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }| j        �
| j        |z  }|                     dddd¦  «        }||                      |¦  «        z   }|S )Nr   r,   r   r   )rj   r-   rC   rl   rn   ro   rs   ru   )r#   r)   Úresiduals      r'   r.   zConvNextLayer.forwardŽ   s¿   € ØˆØ—;’;˜xÑ(Ô(ˆØ×#Ò# A q¨!¨QÑ/Ô/ˆØ—>’> (Ñ+Ô+ˆØ—<’< Ñ)Ô)ˆØ—8’8˜HÑ%Ô%ˆØ—<’< Ñ)Ô)ˆØÔ%Ð1ØÔ1°HÑ<ˆHØ×#Ò# A q¨!¨QÑ/Ô/ˆØ˜dŸnšn¨XÑ6Ô6Ñ6ˆØˆr(   )r   r/   r7   s   @r'   rb   rb   r   ss   ø€ € € € € ðð ð[ð [ð [ð [ð [ð [ð ¤ð °´ð ð ð ð ð ð ð ð r(   rb   c                   óH   ‡ — 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.
    r,   Nc           	      ó’  •‡‡‡— t          ¦   «                              ¦   «          |‰k    s|dk    rBt          j        t	          |dd¬¦  «        t          j        |‰||¬¦  «        g¦  «        | _        nt          j        ¦   «         | _        ‰pdg|z  Št          j        ˆˆˆfd„t          |¦  «        D ¦   «         ¦  «        | _        d S )Nr   r   r   r   r;   rN   c                 ó@   •— g | ]}t          ‰‰‰|         ¬ ¦  «        ‘ŒS ))rv   ru   )rb   )Ú.0ÚjrE   Údrop_path_ratesÚout_channelss     €€€r'   ú
<listcomp>z*ConvNextStage.__init__.<locals>.<listcomp>¶   s.   ø€ ÐiÐiÐiÐWX�]˜6 |¸ÈqÔ?QÐRÑRÔRÐiÐiÐir(   )	r    r!   r   Ú
ModuleListr   r>   Údownsampling_layerÚrangeÚlayers)	r#   rE   Úin_channelsr€   r<   r=   Údepthr   r&   s	    ` `   `€r'   r!   zConvNextStage.__init__¨   sÓ   øøøø€ Ý‰Œ×ÒÑÔÐà˜,Ò&Ð&¨&°1ª*¨*Ý&(¤må% k°tÐIYÐZÑZÔZÝ”I˜k¨<À[ÐY_Ð`Ñ`Ô`ðñ'ô 'ˆDÔ#Ð#õ ')¤m¡o¤oˆDÔ#Ø)Ð:¨c¨U°U©]ˆÝ”mØiÐiÐiÐiÐiÐiÕ\aÐbgÑ\hÔ\hÐiÑiÔiñ
ô 
ˆŒˆˆr(   r)   r*   c                 óZ   — | j         D ]} ||¦  «        }Œ| j        D ]} ||¦  «        }Œ|S rQ   )rƒ   r…   )r#   r)   Úlayers      r'   r.   zConvNextStage.forward¹   sH   € ØÔ,ð 	'ð 	'ˆEØ�u˜X‘”ˆHˆHØ”[ð 	'ð 	'ˆEØ�u˜X‘”ˆHˆHØˆr(   )r,   r,   r,   Nr/   r7   s   @r'   rz   rz   �   sm   ø€ € € € € ðð ð
ð 
ð 
ð 
ð 
ð 
ð" ¤ð °´ð ð ð ð ð ð ð ð r(   rz   c                   óh   ‡ — e Zd ZU eed<   dZdZdZddgZ e	j
        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚConvNextPreTrainedModelrE   ÚconvnextrF   )Úimagerb   rz   c                 óÒ   •— t          ¦   «                              |¦  «         t          |t          ¦  «        r-|j        �(t          j        |j        | j        j        ¦  «         dS dS dS )zInitialize the weightsN)	r    Ú_init_weightsÚ
isinstancerb   rs   ÚinitÚ	constant_rE   rp   )r#   Úmoduler&   s     €r'   r�   z%ConvNextPreTrainedModel._init_weightsÉ   sk   ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�mÑ,Ô,ð 	aØÔ+Ð7Ý”˜vÔ;¸T¼[Ô=_Ñ`Ô`Ð`Ð`Ð`ð	að 	aØ7Ð7r(   )r0   r1   r2   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚ_no_split_modulesr4   Úno_gradr�   r6   r7   s   @r'   r‹   r‹   Á   s}   ø€ € € € € € àÐÐÑØ"ÐØ$€OØ!ÐØ(¨/Ð:Ðà€U„]�_„_ðað að að añ „_ðað að að að ar(   r‹   c                   óˆ   ‡ — e Zd ZdZdeiZˆ fd„Ze ed¬¦  «        de	j
        dee         defd„¦   «         ¦   «         Zˆ xZS )ÚConvNextEncoderrR   c           
      ó:  •— t          ¦   «                              |¦  «         t          j        ¦   «         | _        d„ t          j        d|j        t          |j	        ¦  «        d¬¦  «         
                    |j	        ¦  «        D ¦   «         }|j        d         }t          |j        ¦  «        D ]Y}|j        |         }t          ||||dk    rdnd|j	        |         ||         ¬¦  «        }| j                             |¦  «         |}ŒZ|                      ¦   «          d S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS © )Útolist)r}   Úxs     r'   r�   z,ConvNextEncoder.__init__.<locals>.<listcomp>Ù   s0   € ð 
ð 
ð 
àð �HŠH‰JŒJð
ð 
ð 
r(   r   Úcpu)rU   r,   r   )r†   r€   r=   r‡   r   )r    r!   r   r‚   Ústagesr4   ÚlinspaceÚdrop_path_rateÚsumÚdepthsÚsplitr@   r„   Ú
num_stagesrz   ÚappendÚ	post_init)r#   rE   r   Úprev_chsÚiÚout_chsÚstager&   s          €r'   r!   zConvNextEncoder.__init__Ö   s"  ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”m‘o”oˆŒð
ð 
å”^ A vÔ'<½cÀ&Ä-Ñ>PÔ>PÐY^Ð_Ñ_Ô_×eÒeÐflÔfsÑtÔtð
ñ 
ô 
ˆð Ô& qÔ)ˆÝ�vÔ(Ñ)Ô)ð 	ð 	ˆAØÔ)¨!Ô,ˆGÝ!ØØ$Ø$Ø šE˜E�q�q qØ”m AÔ&Ø /°Ô 2ðñ ô ˆEð ŒK×Ò˜uÑ%Ô%Ð%ØˆHˆHà�ŠÑÔÐÐÐr(   F)Útie_last_hidden_statesr%   r*   c                 óL   — | j         D ]} ||¦  «        }Œt          |¬¦  «        S )N)Úlast_hidden_state)r¢   r
   )r#   rR   r%   Úlayer_modules       r'   r.   zConvNextEncoder.forwardí   s7   € ð !œKð 	8ð 	8ˆLØ(˜L¨Ñ7Ô7ˆMˆMå-ÀÐNÑNÔNÐNr(   )r0   r1   r2   r–   rz   Ú_can_record_outputsr!   r   r   r4   r5   r   r   r
   r.   r6   r7   s   @r'   r›   r›   Ò   s°   ø€ € € € € Ø%€OØ*¨MÐ:Ððð ð ð ð ð.  Ø€_¨EÐ2Ñ2Ô2ðOà”|ðOð Ð+Ô,ðOð 
(ð	Oð Oð Oñ 3Ô2ñ  ÔðOð Oð Oð Oð Or(   r›   c            	       ór   ‡ — e Zd Zˆ fd„Zee	 ddej        dz  dee	         de
fd„¦   «         ¦   «         Zˆ xZS )ÚConvNextModelc                 ó&  •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        t          j        |j	        d         |j
        ¬¦  «        | _        |                      ¦   «          d S )Néÿÿÿÿrg   )r    r!   rE   r9   rJ   r›   Úencoderr   Ú	LayerNormr@   Úlayer_norm_epsrC   rª   rD   s     €r'   r!   zConvNextModel.__init__ü   s{   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒå,¨VÑ4Ô4ˆŒÝ& vÑ.Ô.ˆŒõ œ fÔ&9¸"Ô&=À6ÔCXÐYÑYÔYˆŒð 	�ŠÑÔÐÐÐr(   NrF   r%   r*   c                 óú   — |€t          d¦  «        ‚|                      |¦  «        } | j        |fi |¤Ž}|j        }|                      |                     ddg¦  «        ¦  «        }t          |||j        ¬¦  «        S )Nz You have to specify pixel_valueséþÿÿÿr·   )r±   Úpooler_outputrR   )rI   rJ   r¸   r±   rC   Úmeanr   rR   )r#   rF   r%   Úembedding_outputÚencoder_outputsr±   Úpooled_outputs          r'   r.   zConvNextModel.forward	  s˜   € ð
 ÐÝÐ?Ñ@Ô@Ð@àŸ?š?¨<Ñ8Ô8ÐØ:F¸$¼,ÐGWÐ:bÐ:bÐ[aÐ:bÐ:bˆØ+Ô=Ðð ŸšÐ'8×'=Ò'=¸rÀ2¸hÑ'GÔ'GÑHÔHˆå7Ø/Ø'Ø)Ô7ð
ñ 
ô 
ð 	
r(   rQ   )r0   r1   r2   r!   r   r   r4   rK   r   r   r   r.   r6   r7   s   @r'   rµ   rµ   ú   s‘   ø€ € € € € ðð ð ð ð ð Øà7;ð
ð 
Ø!Ô-°Ñ4ð
ØGMÐN`ÔGað
à	1ð
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
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.
    )Úcustom_introc            	       óz   ‡ — e Zd ZdZˆ fd„Zee	 ddej        dz  dej	        dz  de
fd„¦   «         ¦   «         Zˆ xZS )	ÚConvNextForImageClassificationFc                 óN  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        |j        dk    r+t          j        |j        d         |j        ¦  «        | _        nt          j	        ¦   «         | _        |  
                    ¦   «          d S )Nr   r·   )r    r!   Ú
num_labelsrµ   rŒ   r   rk   r@   Ú
classifierrt   rª   rD   s     €r'   r!   z'ConvNextForImageClassification.__init__(  s‰   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ% fÑ-Ô-ˆŒð Ô˜qÒ Ð Ý œi¨Ô(;¸BÔ(?ÀÔARÑSÔSˆDŒOˆOå œk™mœmˆDŒOð 	�ŠÑÔÐÐÐr(   NrF   Úlabelsr*   c                 óÆ   —  | j         |fi |¤Ž}|j        }|                      |¦  «        }d}|�|                      ||| j        ¬¦  «        }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).
        N)rÈ   Úpooled_logitsrE   )ÚlossÚlogitsrR   )rŒ   r½   rÇ   Úloss_functionrE   r   rR   )r#   rF   rÈ   r%   ÚoutputsrÁ   rÌ   rË   s           r'   r.   z&ConvNextForImageClassification.forward7  s„   € ð =J¸D¼MÈ,Ð<aÐ<aÐZ`Ð<aÐ<aˆØÔ-ˆØ—’ Ñ/Ô/ˆàˆØÐØ×%Ò%¨VÀ6ÐRVÔR]Ð%Ñ^Ô^ˆDå3ØØØ!Ô/ð
ñ 
ô 
ð 	
r(   )NN)r0   r1   r2   Úaccepts_loss_kwargsr!   r   r   r4   rK   Ú
LongTensorr   r.   r6   r7   s   @r'   rÄ   rÄ     sœ   ø€ € € € € ð  Ððð ð ð ð ð Øà_cð
ð 
Ø!Ô-°Ñ4ð
ØEJÔEUÐX\ÑE\ð
à	-ð
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
r(   rÄ   zQ
    ConvNeXt backbone, to be used with frameworks like DETR and MaskFormer.
    c            	       ó|   ‡ — e Zd ZdZˆ fd„Zeeedej	        de
e         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚConvNextBackboneFc                 ó–  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |j        d         g|j        z   | _        i }t          | j	        | j
        ¦  «        D ]\  }}t          |d¬¦  «        ||<   Œt          j        |¦  «        | _        |                      ¦   «          d S )Nr   r   )r   )r    r!   r9   rJ   r›   r¸   r@   Únum_featuresÚzipÚout_featuresÚchannelsr   r   Ú
ModuleDictÚhidden_states_normsrª   )r#   rE   rÙ   r®   r?   r&   s        €r'   r!   zConvNextBackbone.__init__Y  sÈ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å,¨VÑ4Ô4ˆŒÝ& vÑ.Ô.ˆŒØ#Ô0°Ô3Ð4°vÔ7JÑJˆÔð !ÐÝ#& tÔ'8¸$¼-Ñ#HÔ#Hð 	gð 	gÑˆE�<Ý):¸<ÐUeÐ)fÑ)fÔ)fÐ Ñ&Ð&Ý#%¤=Ð1DÑ#EÔ#EˆÔ ð 	�ŠÑÔÐÐÐr(   rF   r%   r*   c                 ó4  — |                       |¦  «        } | j        |fi |¤Ž}|j        }g }t          | j        |¦  «        D ]9\  }}|| j        v r+ | j        |         |¦  «        }|                     |¦  «         Œ:t          t          |¦  «        |¬¦  «        S )a¹  
        Examples:

        ```python
        >>> from transformers import AutoImageProcessor, AutoBackbone
        >>> import torch
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> 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)
        ```)Úfeature_mapsrR   )
rJ   r¸   rR   rÕ   Ústage_namesrÖ   rÙ   r©   r	   Útuple)	r#   rF   r%   r¿   rÀ   rR   rÛ   r®   Úhidden_states	            r'   r.   zConvNextBackbone.forwardi  s´   € ð8  Ÿ?š?¨<Ñ8Ô8ÐØ:F¸$¼,ÐGWÐ:bÐ:bÐ[aÐ:bÐ:bˆØ'Ô5ˆàˆÝ#& tÔ'7¸Ñ#GÔ#Gð 	2ð 	2ÑˆE�<Ø˜Ô)Ð)Ð)Ø>˜tÔ7¸Ô>¸|ÑLÔL�Ø×#Ò# LÑ1Ô1Ð1øå­5°Ñ+>Ô+>ÈmÐ\Ñ\Ô\Ð\r(   )r0   r1   r2   Úhas_attentionsr!   r   r   r   r4   r5   r   r   r	   r.   r6   r7   s   @r'   rÒ   rÒ   Q  s¤   ø€ € € € € ð €Nðð ð ð ð ð  Ø Øð#]à”lð#]ð Ð+Ô,ð#]ð 
ð	#]ð #]ð #]ñ „^ñ !Ô ñ Ôð#]ð #]ð #]ð #]ð #]r(   rÒ   )rÄ   rµ   r‹   rÒ   )/r3   r4   r   Ú r   r‘   Úactivationsr   Úbackbone_utilsr   r   Úmodeling_outputsr	   r
   r   r   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_convnextr   Ú
get_loggerr0   Úloggerr¹   r   ÚModuler9   rM   rb   rz   r‹   r›   rµ   rÄ   rÒ   Ú__all__rž   r(   r'   ú<module>rî      sz  ðð Ð à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hðð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð 
ˆÔ	˜HÑ	%Ô	%€ðð ð ð ð ˜œñ ô ð ð4ð ð ð ð ˜œñ ô ð ð2%ð %ð %ð %ð %�r”yñ %ô %ð %ð0(ð (ð (ð (ð (�B”Iñ (ô (ð (ðV!ð !ð !ð !ð !�B”Iñ !ô !ð !ðH ðað að að að a˜oñ aô añ „ðað %Oð %Oð %Oð %Oð %OÐ-ñ %Oô %Oð %OðP ð!
ð !
ð !
ð !
ð !
Ð+ñ !
ô !
ñ „ð!
ðH €ððñ ô ð)
ð )
ð )
ð )
ð )
Ð%<ñ )
ô )
ñô ð)
ðX €ððñ ô ð
9]ð 9]ð 9]ð 9]ð 9]�}Ð&=ñ 9]ô 9]ñô ð
9]ðx mÐ
lÐ
l€€€r(   