§
    ‚Štjìx  ã                   óf  — d Z ddlZddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
 ddl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¦   «         r	ddlmZmZ nd„ Zd„ Z ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z ed¬¦  «        e G d„ d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$ 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/„ d0ej        ¦  «        Z* G d1„ d2ej        ¦  «        Z+e G d3„ d4e¦  «        ¦   «         Z,e G d5„ d6e,¦  «        ¦   «         Z- ed7¬¦  «         G d8„ d9e,¦  «        ¦   «         Z. ed:¬¦  «         G d;„ d<e	e,¦  «        ¦   «         Z/g d=¢Z0dS )>z9PyTorch Dilated Neighborhood Attention Transformer model.é    N)Ú	dataclass)Únné   )ÚACT2FN)ÚBackboneMixinÚfilter_output_hidden_states)ÚBackboneOutput)ÚPreTrainedModel)ÚModelOutputÚOptionalDependencyNotAvailableÚauto_docstringÚis_natten_availableÚrequires_backends)Úcan_return_tupleé   )ÚDinatConfig)Ú
natten2davÚnatten2dqkrpbc                  ó   — t          ¦   «         ‚©N©r   ©ÚargsÚkwargss     úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/dinat/modeling_dinat.pyr   r   )   ó   € Ý,Ñ.Ô.Ð.ó    c                  ó   — t          ¦   «         ‚r   r   r   s     r   r   r   ,   r   r   zO
    Dinat encoder's outputs, with potential hidden states and attentions.
    )Úcustom_introc                   ó¼   — e Zd ZU dZdZej        dz  ed<   dZe	ej        df         dz  ed<   dZ
e	ej        df         dz  ed<   dZe	ej        df         dz  ed<   dS )ÚDinatEncoderOutputaí  
    reshaped_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage) of
        shape `(batch_size, hidden_size, height, width)`.

        Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
        include the spatial dimensions.
    NÚlast_hidden_state.Úhidden_statesÚ
attentionsÚreshaped_hidden_states)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   ÚtorchÚFloatTensorÚ__annotations__r#   Útupler$   r%   © r   r   r!   r!   0   sž   € € € € € € ðð ð 37Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;ØCGÐ˜E %Ô"3°SÐ"8Ô9¸DÑ@ÐGÐGÑGÐGÐGr   r!   zW
    Dinat model's outputs that also contains a pooling of the last hidden states.
    c                   óÚ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dS )	ÚDinatModelOutputa±  
    pooler_output (`torch.FloatTensor` of shape `(batch_size, hidden_size)`, *optional*, returned when `add_pooling_layer=True` is passed):
        Average pooling of the last layer hidden-state.
    reshaped_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage) of
        shape `(batch_size, hidden_size, height, width)`.

        Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
        include the spatial dimensions.
    Nr"   Úpooler_output.r#   r$   r%   )r&   r'   r(   r)   r"   r*   r+   r,   r1   r#   r-   r$   r%   r.   r   r   r0   r0   F   s¶   € € € € € € ð	ð 	ð 37Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø.2€M�5Ô$ tÑ+Ð2Ð2Ñ2Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;ØCGÐ˜E %Ô"3°SÐ"8Ô9¸DÑ@ÐGÐGÑGÐGÐGr   r0   z1
    Dinat outputs for image classification.
    c                   óÚ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dZe
ej        df         dz  ed<   dS )	ÚDinatImageClassifierOutputa7  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Classification (or regression if config.num_labels==1) loss.
    logits (`torch.FloatTensor` of shape `(batch_size, config.num_labels)`):
        Classification (or regression if config.num_labels==1) scores (before SoftMax).
    reshaped_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings + one for the output of each stage) of
        shape `(batch_size, hidden_size, height, width)`.

        Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
        include the spatial dimensions.
    NÚlossÚlogits.r#   r$   r%   )r&   r'   r(   r)   r4   r*   r+   r,   r5   r#   r-   r$   r%   r.   r   r   r3   r3   _   sµ   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø:>€M�5˜Ô*¨CÐ/Ô0°4Ñ7Ð>Ð>Ñ>Ø7;€J��eÔ'¨Ð,Ô-°Ñ4Ð;Ð;Ñ;ØCGÐ˜E %Ô"3°SÐ"8Ô9¸DÑ@ÐGÐGÑGÐGÐGr   r3   c                   óX   ‡ — e Zd ZdZˆ fd„Zdej        dz  deej                 fd„Z	ˆ xZ
S )ÚDinatEmbeddingsz6
    Construct the patch and position embeddings.
    c                 óè   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          j        |j        ¦  «        | _        t	          j        |j	        ¦  «        | _
        d S r   )ÚsuperÚ__init__ÚDinatPatchEmbeddingsÚpatch_embeddingsr   Ú	LayerNormÚ	embed_dimÚnormÚDropoutÚhidden_dropout_probÚdropout©ÚselfÚconfigÚ	__class__s     €r   r:   zDinatEmbeddings.__init__   sU   ø€ Ý‰Œ×ÒÑÔÐå 4°VÑ <Ô <ˆÔå”L Ô!1Ñ2Ô2ˆŒ	Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr   Úpixel_valuesNÚreturnc                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r   )r<   r?   rB   )rD   rG   Ú
embeddingss      r   ÚforwardzDinatEmbeddings.forward‡   s=   € Ø×*Ò*¨<Ñ8Ô8ˆ
Ø—Y’Y˜zÑ*Ô*ˆ
à—\’\ *Ñ-Ô-ˆ
àÐr   )r&   r'   r(   r)   r:   r*   r+   r-   ÚTensorrK   Ú__classcell__©rF   s   @r   r7   r7   z   ss   ø€ € € € € ðð ð>ð >ð >ð >ð >ð EÔ$5¸Ñ$<ð ÀÀuÄ|ÔATð ð ð ð ð ð ð ð r   r7   c                   óL   ‡ — e Zd ZdZˆ fd„Zdej        dz  dej        fd„Zˆ xZ	S )r;   zï
    This class turns `pixel_values` of shape `(batch_size, num_channels, height, width)` into the initial
    `hidden_states` (patch embeddings) of shape `(batch_size, height, width, hidden_size)` to be consumed by a
    Transformer.
    c           
      óR  •— t          ¦   «                              ¦   «          |j        }|j        |j        }}|| _        |dk    rnt          d¦  «        ‚t          j        t          j        | j        |dz  ddd¬¦  «        t          j        |dz  |ddd¬¦  «        ¦  «        | _	        d S )Né   z2Dinat only supports patch size of 4 at the moment.é   ©r   r   ©rR   rR   ©r   r   )Úkernel_sizeÚstrideÚpadding)
r9   r:   Ú
patch_sizeÚnum_channelsr>   Ú
ValueErrorr   Ú
SequentialÚConv2dÚ
projection)rD   rE   rY   rZ   Úhidden_sizerF   s        €r   r:   zDinatPatchEmbeddings.__init__—   s­   ø€ Ý‰Œ×ÒÑÔÐØÔ&ˆ
Ø$*Ô$7¸Ô9I�kˆØ(ˆÔà˜Š?ˆ?Øõ ÐQÑRÔRÐRåœ-ÝŒI�dÔ'¨¸Ñ)9ÀvÐV\ÐflÐmÑmÔmÝŒI�k QÑ&¨ÀÐPVÐ`fÐgÑgÔgñ
ô 
ˆŒˆˆr   rG   NrH   c                 ó¬   — |j         \  }}}}|| j        k    rt          d¦  «        ‚|                      |¦  «        }|                     dddd¦  «        }|S )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.r   rR   r   r   )ÚshaperZ   r[   r^   Úpermute)rD   rG   Ú_rZ   ÚheightÚwidthrJ   s          r   rK   zDinatPatchEmbeddings.forward¨   sh   € Ø)5Ô);Ñ&ˆˆ<˜ Ø˜4Ô,Ò,Ð,ÝØwñô ð ð —_’_ \Ñ2Ô2ˆ
Ø×'Ò'¨¨1¨a°Ñ3Ô3ˆ
àÐr   )
r&   r'   r(   r)   r:   r*   r+   rL   rK   rM   rN   s   @r   r;   r;   �   sn   ø€ € € € € ðð ð
ð 
ð 
ð 
ð 
ð"	 EÔ$5¸Ñ$<ð 	ÀÄð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r   r;   c                   ól   ‡ — e Zd ZdZej        fdedej        ddfˆ fd„Zde	j
        de	j
        fd„Zˆ xZS )	ÚDinatDownsamplerzâ
    Convolutional Downsampling Layer.

    Args:
        dim (`int`):
            Number of input channels.
        norm_layer (`nn.Module`, *optional*, defaults to `nn.LayerNorm`):
            Normalization layer class.
    ÚdimÚ
norm_layerrH   Nc                 óÀ   •— t          ¦   «                              ¦   «          || _        t          j        |d|z  dddd¬¦  «        | _         |d|z  ¦  «        | _        d S )NrR   rS   rT   rU   F)rV   rW   rX   Úbias)r9   r:   rh   r   r]   Ú	reductionr?   )rD   rh   ri   rF   s      €r   r:   zDinatDownsampler.__init__¿   s]   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝœ 3¨¨C©¸VÈFÐ\bÐinÐoÑoÔoˆŒØ�J˜q 3™wÑ'Ô'ˆŒ	ˆ	ˆ	r   Úinput_featurec                 ó²   — |                       |                     dddd¦  «        ¦  «                             dddd¦  «        }|                      |¦  «        }|S )Nr   r   r   rR   )rl   rb   r?   )rD   rm   s     r   rK   zDinatDownsampler.forwardÅ   sV   € ØŸš }×'<Ò'<¸QÀÀ1ÀaÑ'HÔ'HÑIÔI×QÒQÐRSÐUVÐXYÐ[\Ñ]Ô]ˆØŸ	š	 -Ñ0Ô0ˆØÐr   )r&   r'   r(   r)   r   r=   ÚintÚModuler:   r*   rL   rK   rM   rN   s   @r   rg   rg   ´   s�   ø€ € € € € ðð ð :<¼ð (ð (˜Cð (¨R¬Yð (È$ð (ð (ð (ð (ð (ð (ð U¤\ð °e´lð ð ð ð ð ð ð ð r   rg   c                   ó\   ‡ — e Zd Zˆ fd„Z	 ddej        dedz  deej                 fd„Zˆ xZ	S )	ÚNeighborhoodAttentionc                 óÊ  •— t          ¦   «                              ¦   «          ||z  dk    rt          d|› d|› d�¦  «        ‚|| _        t	          ||z  ¦  «        | _        | j        | j        z  | _        || _        || _        t          j
        t          j        |d| j        z  dz
  d| j        z  dz
  ¦  «        ¦  «        | _        t          j        | j        | j        |j        ¬¦  «        | _        t          j        | j        | j        |j        ¬¦  «        | _        t          j        | j        | j        |j        ¬¦  «        | _        t          j        |j        ¦  «        | _        d S )Nr   zThe hidden size (z6) is not a multiple of the number of attention heads (ú)rR   r   )rk   )r9   r:   r[   Únum_attention_headsro   Úattention_head_sizeÚall_head_sizerV   Údilationr   Ú	Parameterr*   ÚzerosÚrpbÚLinearÚqkv_biasÚqueryÚkeyÚvaluer@   Úattention_probs_dropout_probrB   ©rD   rE   rh   Ú	num_headsrV   rx   rF   s         €r   r:   zNeighborhoodAttention.__init__Ì   sG  ø€ Ý‰Œ×ÒÑÔÐØ�‰?˜aÒÐÝØk CÐkÐkÐ_hÐkÐkÐkñô ð ð $-ˆÔ Ý#& s¨Y¡Ñ#7Ô#7ˆÔ Ø!Ô5¸Ô8PÑPˆÔØ&ˆÔØ ˆŒõ ”<¥¤¨I¸¸DÔ<LÑ8LÈqÑ8PÐTUÐX\ÔXhÑThÐklÑTlÑ nÔ nÑoÔoˆŒå”Y˜tÔ1°4Ô3EÈFÌOÐ\Ñ\Ô\ˆŒ
Ý”9˜TÔ/°Ô1CÈ&Ì/ÐZÑZÔZˆŒÝ”Y˜tÔ1°4Ô3EÈFÌOÐ\Ñ\Ô\ˆŒ
å”z &Ô"EÑFÔFˆŒˆˆr   Fr#   Úoutput_attentionsNrH   c                 ó¤  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|t          j        | j        ¦  «        z  }t          ||| j
        | j        | j        ¦  «        }t          j                             |d¬¦  «        }	|                      |	¦  «        }	t#          |	|| j        | j        ¦  «        }
|
                     ddddd¦  «                             ¦   «         }
|
                     ¦   «         d d…         | j        fz   }|
                     |¦  «        }
|r|
|	fn|
f}|S )	Néÿÿÿÿr   rR   )rh   r   r   rQ   éþÿÿÿ)ra   rv   r~   ÚviewÚ	transposer   r€   ÚmathÚsqrtr   r{   rV   rx   r   Ú
functionalÚsoftmaxrB   r   rb   Ú
contiguousÚsizerw   )rD   r#   r„   Úinput_shapeÚhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                r   rK   zNeighborhoodAttention.forwardâ   s¿  € ð
 $Ô)¨#¨2¨#Ô.ˆØC˜ÐC bÐC¨$Ô*BÐCÐCˆØ—j’j Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆØ—H’H˜]Ñ+Ô+×0Ò0°Ñ>Ô>×HÒHÈÈAÑNÔNˆ	Ø—j’j Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆð
 "¥D¤I¨dÔ.FÑ$GÔ$GÑGˆõ )¨°iÀÄÈ4ÔK[Ð]aÔ]jÑkÔkÐõ œ-×/Ò/Ð0@ÀbÐ/ÑIÔIˆð Ÿ,š, Ñ7Ô7ˆå" ?°KÀÔAQÐSWÔS`ÑaÔaˆØ%×-Ò-¨a°°A°q¸!Ñ<Ô<×GÒGÑIÔIˆØ"/×"4Ò"4Ñ"6Ô"6°s¸°sÔ";¸tÔ?QÐ>SÑ"SÐØ%×*Ò*Ð+BÑCÔCˆà6GÐ]�= /Ð2Ð2ÈmÐM]ˆàˆr   ©F©
r&   r'   r(   r:   r*   rL   Úboolr-   rK   rM   rN   s   @r   rr   rr   Ë   s„   ø€ € € € € ðGð Gð Gð Gð Gð2 */ð!ð !à”|ð!ð   $™;ð!ð 
ˆuŒ|Ô	ð	!ð !ð !ð !ð !ð !ð !ð !r   rr   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚNeighborhoodAttentionOutputc                 ó¸   •— t          ¦   «                              ¦   «          t          j        ||¦  «        | _        t          j        |j        ¦  «        | _        d S r   )r9   r:   r   r|   Údenser@   r�   rB   ©rD   rE   rh   rF   s      €r   r:   z$NeighborhoodAttentionOutput.__init__  sD   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜s CÑ(Ô(ˆŒ
Ý”z &Ô"EÑFÔFˆŒˆˆr   r#   Úinput_tensorrH   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r   ©r    rB   )rD   r#   r¢   s      r   rK   z#NeighborhoodAttentionOutput.forward  s*   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆàÐr   ©r&   r'   r(   r:   r*   rL   rK   rM   rN   s   @r   rž   rž     sn   ø€ € € € € ðGð Gð Gð Gð Gð
 U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r   rž   c                   ó\   ‡ — e Zd Zˆ fd„Z	 ddej        dedz  deej                 fd„Zˆ xZ	S )	ÚNeighborhoodAttentionModulec                 ó¢   •— t          ¦   «                              ¦   «          t          |||||¦  «        | _        t	          ||¦  «        | _        d S r   )r9   r:   rr   rD   rž   Úoutputr‚   s         €r   r:   z$NeighborhoodAttentionModule.__init__  sE   ø€ Ý‰Œ×ÒÑÔÐÝ)¨&°#°yÀ+ÈxÑXÔXˆŒ	Ý1°&¸#Ñ>Ô>ˆŒˆˆr   Fr#   r„   NrH   c                 ó†   — |                       ||¦  «        }|                      |d         |¦  «        }|f|dd …         z   }|S ©Nr   r   )rD   r©   )rD   r#   r„   Úself_outputsÚattention_outputr™   s         r   rK   z#NeighborhoodAttentionModule.forward  sK   € ð
 —y’y Ð0AÑBÔBˆØŸ;š; |°A¤¸ÑFÔFÐØ#Ð%¨°Q°R°RÔ(8Ñ8ˆØˆr   rš   r›   rN   s   @r   r§   r§     s   ø€ € € € € ð?ð ?ð ?ð ?ð ?ð */ðð à”|ðð   $™;ðð 
ˆuŒ|Ô	ð	ð ð ð ð ð ð ð r   r§   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚDinatIntermediatec                 ó$  •— t          ¦   «                              ¦   «          t          j        |t	          |j        |z  ¦  «        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _        d S |j        | _        d S r   )r9   r:   r   r|   ro   Ú	mlp_ratior    Ú
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnr¡   s      €r   r:   zDinatIntermediate.__init__%  sx   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜s¥C¨Ô(8¸3Ñ(>Ñ$?Ô$?Ñ@Ô@ˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$r   r#   rH   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r   )r    rµ   ©rD   r#   s     r   rK   zDinatIntermediate.forward-  s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐr   r¥   rN   s   @r   r¯   r¯   $  s^   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð r   r¯   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚDinatOutputc                 óâ   •— t          ¦   «                              ¦   «          t          j        t	          |j        |z  ¦  «        |¦  «        | _        t          j        |j        ¦  «        | _	        d S r   )
r9   r:   r   r|   ro   r±   r    r@   rA   rB   r¡   s      €r   r:   zDinatOutput.__init__4  sT   ø€ Ý‰Œ×ÒÑÔÐÝ”Y�s 6Ô#3°cÑ#9Ñ:Ô:¸CÑ@Ô@ˆŒ
Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr   r#   rH   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r   r¤   r·   s     r   rK   zDinatOutput.forward9  s*   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØÐr   r¥   rN   s   @r   r¹   r¹   3  s^   ø€ € € € € ð>ð >ð >ð >ð >ð
 U¤\ð °e´lð ð ð ð ð ð ð ð r   r¹   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 )ÚDinatDropPathzÏ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_probrH   Nc                 óV   •— t          ¦   «                              ¦   «          || _        d S r   )r9   r:   r¿   )rD   r¿   rF   s     €r   r:   zDinatDropPath.__init__G  s$   ø€ Ý‰Œ×ÒÑÔÐØ"ˆŒˆˆr   r#   c                 ó  — | 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 )Nr¾   r   r   )r   )ÚdtypeÚdevice)
r¿   Útrainingra   Úndimr*   ÚrandrÂ   rÃ   ÚfloorÚdiv)rD   r#   Ú	keep_probra   Úrandom_tensors        r   rK   zDinatDropPath.forwardK  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=)r¿   ©rD   s    r   Ú
extra_reprzDinatDropPath.extra_reprT  s   € Ø$�D”NÐ$Ð$Ð$r   ©r¾   )r&   r'   r(   r)   Úfloatr:   r*   rL   rK   r´   rÍ   rM   rN   s   @r   r½   r½   @  s›   ø€ € € € € ðð ð#ð # %ð #°$ð #ð #ð #ð #ð #ð #ð< U¤\ð <°e´lð <ð <ð <ð <ð%˜Cð %ð %ð %ð %ð %ð %ð %ð %r   r½   c            	       ór   ‡ — e Zd Zd
ˆ fd„	Zd„ Z	 ddej        dedz  deej        ej        f         fd	„Z	ˆ xZ
S )Ú
DinatLayerr¾   c                 óª  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        || _        | j        | j        z  | _        t          j        ||j        ¬¦  «        | _	        t          |||| j        | j        ¬¦  «        | _        |dk    rt          |¦  «        nt          j        ¦   «         | _        t          j        ||j        ¬¦  «        | _        t!          ||¦  «        | _        t%          ||¦  «        | _        |j        dk    r2t          j        |j        t-          j        d|f¦  «        z  d¬¦  «        nd | _        d S )N©Úeps)rV   rx   r¾   r   rR   T)Úrequires_grad)r9   r:   Úchunk_size_feed_forwardrV   rx   Úwindow_sizer   r=   Úlayer_norm_epsÚlayernorm_beforer§   Ú	attentionr½   ÚIdentityÚ	drop_pathÚlayernorm_afterr¯   Úintermediater¹   r©   Úlayer_scale_init_valuery   r*   ÚonesÚlayer_scale_parameters)rD   rE   rh   rƒ   rx   Údrop_path_raterF   s         €r   r:   zDinatLayer.__init__Y  s?  ø€ Ý‰Œ×ÒÑÔÐØ'-Ô'EˆÔ$Ø!Ô-ˆÔØ ˆŒØÔ+¨d¬mÑ;ˆÔÝ "¤¨S°fÔ6KÐ LÑ LÔ LˆÔÝ4Ø�C˜°Ô0@È4Ì=ð
ñ 
ô 
ˆŒð ;IÈ3Ò:NÐ:N� ~Ñ6Ô6Ð6ÕTVÔT_ÑTaÔTaˆŒÝ!œ|¨C°VÔ5JÐKÑKÔKˆÔÝ-¨f°cÑ:Ô:ˆÔÝ! &¨#Ñ.Ô.ˆŒð Ô,¨qÒ0Ð0õ ŒL˜Ô6½¼ÀQÈÀHÑ9MÔ9MÑMÐ]aÐbÑbÔbÐbàð 	Ô#Ð#Ð#r   c                 óØ   — | j         }d}||k     s||k     rRdx}}t          d||z
  ¦  «        }t          d||z
  ¦  «        }	dd||||	f}t          j                             ||¦  «        }||fS )N)r   r   r   r   r   r   r   )r×   Úmaxr   rŒ   Úpad)
rD   r#   rd   re   r×   Ú
pad_valuesÚpad_lÚpad_tÚpad_rÚpad_bs
             r   Ú	maybe_padzDinatLayer.maybe_padm  sŠ   € ØÔ&ˆØ'ˆ
Ø�KÒÐ 5¨;Ò#6Ð#6ØÐˆE�EÝ˜˜;¨Ñ.Ñ/Ô/ˆEÝ˜˜;¨Ñ/Ñ0Ô0ˆEØ˜Q  u¨e°UÐ;ˆJÝœM×-Ò-¨m¸ZÑHÔHˆMØ˜jÐ(Ð(r   Fr#   r„   NrH   c                 óÄ  — |                      ¦   «         \  }}}}|}|                      |¦  «        }|                      |||¦  «        \  }}|j        \  }	}
}}	|                      ||¬¦  «        }|d         }|d         dk    p|d         dk    }|r&|d d …d |…d |…d d …f                              ¦   «         }| j        �| j        d         |z  }||                      |¦  «        z   }|                      |¦  «        }|  	                    |  
                    |¦  «        ¦  «        }| j        �| j        d         |z  }||                      |¦  «        z   }|r
||d         fn|f}|S )N)r„   r   r   é   r   )r�   rÙ   rë   ra   rÚ   rŽ   rá   rÜ   rÝ   r©   rÞ   )rD   r#   r„   Ú
batch_sizerd   re   ÚchannelsÚshortcutræ   rc   Ú
height_padÚ	width_padÚattention_outputsr­   Ú
was_paddedÚlayer_outputÚlayer_outputss                    r   rK   zDinatLayer.forwardx  s“  € ð
 /<×.@Ò.@Ñ.BÔ.BÑ+ˆ
�F˜E 8Ø ˆà×-Ò-¨mÑ<Ô<ˆà$(§N¢N°=À&È%Ñ$PÔ$PÑ!ˆ�zà&3Ô&9Ñ#ˆˆ:�y !à ŸNšN¨=ÐL]˜NÑ^Ô^Ðà,¨QÔ/Ðà ”] QÒ&Ð;¨*°Q¬-¸!Ò*;ˆ
Øð 	TØ/°°°°7°F°7¸F¸U¸FÀAÀAÀAÐ0EÔF×QÒQÑSÔSÐàÔ&Ð2Ø#Ô:¸1Ô=Ð@PÑPÐà  4§>¢>Ð2BÑ#CÔ#CÑCˆà×+Ò+¨MÑ:Ô:ˆØ—{’{ 4×#4Ò#4°\Ñ#BÔ#BÑCÔCˆàÔ&Ð2ØÔ6°qÔ9¸LÑHˆLà$ t§~¢~°lÑ'CÔ'CÑCˆà@QÐf˜Ð'8¸Ô';Ð<Ð<ÐXdÐWfˆØÐr   rÎ   rš   )r&   r'   r(   r:   rë   r*   rL   rœ   r-   rK   rM   rN   s   @r   rÑ   rÑ   X  sš   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð(	)ð 	)ð 	)ð */ð$ð $à”|ð$ð   $™;ð$ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð	$ð $ð $ð $ð $ð $ð $ð $r   rÑ   c                   ó\   ‡ — e Zd Zˆ fd„Z	 ddej        dedz  deej                 fd„Zˆ xZ	S )	Ú
DinatStagec                 ó4  •‡‡‡‡‡— t          ¦   «                              ¦   «          ‰| _        ‰| _        t	          j        ˆˆˆˆˆfd„t          |¦  «        D ¦   «         ¦  «        | _        |� |‰t          j        ¬¦  «        | _	        nd | _	        d| _
        d S )Nc           
      óP   •— g | ]"}t          ‰‰‰‰|         ‰|         ¬ ¦  «        ‘Œ#S ))rE   rh   rƒ   rx   râ   )rÑ   )Ú.0ÚirE   Ú	dilationsrh   râ   rƒ   s     €€€€€r   ú
<listcomp>z'DinatStage.__init__.<locals>.<listcomp>¥  sR   ø€ ð 	ð 	ð 	ð õ Ø!ØØ'Ø& qœ\Ø#1°!Ô#4ðñ ô ð	ð 	ð 	r   )rh   ri   F)r9   r:   rE   rh   r   Ú
ModuleListÚrangeÚlayersr=   Ú
downsampleÚpointing)	rD   rE   rh   Údepthrƒ   rý   râ   r  rF   s	    `` ``` €r   r:   zDinatStage.__init__   sµ   øøøøøø€ Ý‰Œ×ÒÑÔÐØˆŒØˆŒÝ”mð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ ˜u™œð	ñ 	ô 	ñ
ô 
ˆŒð Ð!Ø(˜j¨S½R¼\ÐJÑJÔJˆDŒOˆOà"ˆDŒOàˆŒˆˆr   Fr#   r„   NrH   c                 óö   — |                      ¦   «         \  }}}}t          | j        ¦  «        D ]\  }} |||¦  «        }|d         }Œ|}	| j        �|                      |	¦  «        }||	f}
|r|
|dd …         z  }
|
S r«   )r�   Ú	enumerater  r  )rD   r#   r„   rc   rd   re   rü   Úlayer_modulerö   Ú!hidden_states_before_downsamplingÚstage_outputss              r   rK   zDinatStage.forward¹  s¥   € ð
 ,×0Ò0Ñ2Ô2Ñˆˆ6�5˜!Ý(¨¬Ñ5Ô5ð 	-ð 	-‰OˆAˆ|Ø(˜L¨Ð8IÑJÔJˆMØ)¨!Ô,ˆMˆMà,9Ð)ØŒ?Ð&Ø ŸOšOÐ,MÑNÔNˆMà&Ð(IÐJˆàð 	/Ø˜]¨1¨2¨2Ô.Ñ.ˆMØÐr   rš   r›   rN   s   @r   rø   rø   Ÿ  s   ø€ € € € € ðð ð ð ð ð8 */ðð à”|ðð   $™;ðð 
ˆuŒ|Ô	ð	ð ð ð ð ð ð ð r   rø   c                   óp   ‡ — e Zd Zˆ fd„Z	 	 	 	 ddej        dedz  dedz  dedz  d	edz  d
eez  fd„Z	ˆ xZ
S )ÚDinatEncoderc                 ór  •‡ ‡‡— t          ¦   «                              ¦   «          t          ‰j        ¦  «        ‰ _        ‰‰ _        d„ t          j        d‰j        t          ‰j        ¦  «        d¬¦  «        D ¦   «         Št          j        ˆˆˆ fd„t          ‰ j        ¦  «        D ¦   «         ¦  «        ‰ _        d S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r.   )Úitem)rû   Úxs     r   rþ   z)DinatEncoder.__init__.<locals>.<listcomp>Ó  s    € ÐlÐlÐl˜Aˆq�vŠv‰xŒxÐlÐlÐlr   r   Úcpu)rÃ   c                 óV  •— g | ]¥}t          ‰t          ‰j        d |z  z  ¦  «        ‰j        |         ‰j        |         ‰j        |         ‰t          ‰j        d|…         ¦  «        t          ‰j        d|dz   …         ¦  «        …         |‰j        dz
  k     rt          nd¬¦  «        ‘Œ¦S )rR   Nr   )rE   rh   r  rƒ   rý   râ   r  )	rø   ro   r>   Údepthsrƒ   rý   ÚsumÚ
num_levelsrg   )rû   Úi_layerrE   ÚdprrD   s     €€€r   rþ   z)DinatEncoder.__init__.<locals>.<listcomp>Õ  sÌ   ø€ ð ð ð ð õ Ø!Ý˜FÔ,¨q°'©zÑ9Ñ:Ô:Ø œ-¨Ô0Ø$Ô.¨wÔ7Ø$Ô.¨wÔ7Ø#&¥s¨6¬=¸¸'¸Ô+BÑ'CÔ'CÅcÈ&Ì-ÐXeÐZaÐdeÑZeÐXeÔJfÑFgÔFgÐ'gÔ#hØ4;¸d¼oÐPQÑ>QÒ4QÐ4QÕ/Ð/ÐX\ðñ ô ðð ð r   )r9   r:   Úlenr  r  rE   r*   Úlinspacerâ   r  r   rÿ   r   Úlevels)rD   rE   r  rF   s   ``@€r   r:   zDinatEncoder.__init__Ï  s»   øøøø€ Ý‰Œ×ÒÑÔÐÝ˜fœmÑ,Ô,ˆŒØˆŒØlÐl¥¤°°6Ô3HÍ#ÈfÌmÑJ\ÔJ\ÐejÐ!kÑ!kÔ!kÐlÑlÔlˆÝ”mðð ð ð ð ð õ  % T¤_Ñ5Ô5ðñ ô ñ
ô 
ˆŒˆˆr   FTr#   r„   NÚoutput_hidden_statesÚ(output_hidden_states_before_downsamplingÚreturn_dictrH   c                 ó   — |rdnd }|rdnd }|rdnd }|r$|                      dddd¦  «        }	||fz  }||	fz  }t          | j        ¦  «        D ]�\  }
} |||¦  «        }|d         }|d         }|r'|r%|                      dddd¦  «        }	||fz  }||	fz  }n(|r&|s$|                      dddd¦  «        }	||fz  }||	fz  }|r||dd …         z  }Œ‚|st          d„ |||fD ¦   «         ¦  «        S t	          ||||¬¦  «        S )Nr.   r   r   r   rR   c              3   ó   K  — | ]}|®|V — Œ	d S r   r.   )rû   Úvs     r   ú	<genexpr>z'DinatEncoder.forward.<locals>.<genexpr>
  s(   è è € ÐmÐm˜qÐ_`Ð_l˜Ð_lÐ_lÐ_lÐ_lÐmÐmr   )r"   r#   r$   r%   )rb   r  r  r-   r!   )rD   r#   r„   r  r  r  Úall_hidden_statesÚall_reshaped_hidden_statesÚall_self_attentionsÚreshaped_hidden_staterü   r  rö   r  s                 r   rK   zDinatEncoder.forwardã  s¾  € ð #7Ð@˜B˜B¸DÐØ+?Ð%I R RÀTÐ"Ø$5Ð?˜b˜b¸4Ðàð 	Cà$1×$9Ò$9¸!¸QÀÀ1Ñ$EÔ$EÐ!Ø -Ð!1Ñ1ÐØ&Ð+@Ð*BÑBÐ&å(¨¬Ñ5Ô5ð 	9ð 	9‰OˆAˆ|Ø(˜L¨Ð8IÑJÔJˆMà)¨!Ô,ˆMØ0=¸aÔ0@Ð-à#ð 	GÐ(Pð 	Gà(I×(QÒ(QÐRSÐUVÐXYÐ[\Ñ(]Ô(]Ð%Ø!Ð&GÐ%IÑIÐ!Ø*Ð/DÐ.FÑFÐ*Ð*Ø%ð GÐ.Vð Gà(5×(=Ò(=¸aÀÀAÀqÑ(IÔ(IÐ%Ø! mÐ%5Ñ5Ð!Ø*Ð/DÐ.FÑFÐ*à ð 9Ø# }°Q°R°RÔ'8Ñ8Ð#øàð 	nÝÐmÐm ]Ð4EÐGZÐ$[ÐmÑmÔmÑmÔmÐmå!Ø+Ø+Ø*Ø#=ð	
ñ 
ô 
ð 	
r   )FFFT)r&   r'   r(   r:   r*   rL   rœ   r-   r!   rK   rM   rN   s   @r   r  r  Î  s±   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð. */Ø,1Ø@EØ#'ð.
ð .
à”|ð.
ð   $™;ð.
ð # T™kð	.
ð
 37¸±+ð.
ð ˜D‘[ð.
ð 
Ð#Ñ	#ð.
ð .
ð .
ð .
ð .
ð .
ð .
ð .
r   r  c                   ó&   — e Zd ZU eed<   dZdZdZdS )ÚDinatPreTrainedModelrE   ÚdinatrG   )ÚimageN)r&   r'   r(   r   r,   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesr.   r   r   r&  r&    s/   € € € € € € àÐÐÑØÐØ$€OØ!ÐÐÐr   r&  c                   ó„   ‡ — e Zd Zdˆ fd„	Zd„ Ze	 	 	 	 ddej        dz  dedz  dedz  dedz  d	e	e
z  f
d
„¦   «         Zˆ xZS )Ú
DinatModelTc                 óö  •— t          ¦   «                              |¦  «         t          | dg¦  «         || _        t	          |j        ¦  «        | _        t          |j        d| j        dz
  z  z  ¦  «        | _	        t          |¦  «        | _        t          |¦  «        | _        t          j        | j	        |j        ¬¦  «        | _        |rt          j        d¦  «        nd| _        |                      ¦   «          dS )zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        ÚnattenrR   r   rÓ   N)r9   r:   r   rE   r  r  r  ro   r>   Únum_featuresr7   rJ   r  Úencoderr   r=   rØ   Ú	layernormÚAdaptiveAvgPool1dÚpoolerÚ	post_init)rD   rE   Úadd_pooling_layerrF   s      €r   r:   zDinatModel.__init__  sÙ   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð å˜$  
Ñ+Ô+Ð+àˆŒÝ˜fœmÑ,Ô,ˆŒÝ Ô 0°1¸¼È1Ñ9LÑ3MÑ MÑNÔNˆÔå)¨&Ñ1Ô1ˆŒÝ# FÑ+Ô+ˆŒåœ dÔ&7¸VÔ=RÐSÑSÔSˆŒØ1BÐL•bÔ*¨1Ñ-Ô-Ð-ÈˆŒð 	�ŠÑÔÐÐÐr   c                 ó   — | j         j        S r   ©rJ   r<   rÌ   s    r   Úget_input_embeddingszDinatModel.get_input_embeddings4  ó   € ØŒÔ/Ð/r   NrG   r„   r  r  rH   c                 ó<  — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|€t	          d¦  «        ‚|                      |¦  «        }|                      ||||¬¦  «        }|d         }|                      |¦  «        }d }	| j        �R|                      | 	                    dd¦  «         
                    dd¦  «        ¦  «        }	t          j	        |	d¦  «        }	|s||	f|dd …         z   }
|
S t          ||	|j        |j        |j        ¬¦  «        S )Nz You have to specify pixel_values©r„   r  r  r   r   rR   )r"   r1   r#   r$   r%   )rE   r„   r  r  r[   rJ   r1  r2  r4  Úflattenr‰   r*   r0   r#   r$   r%   )rD   rG   r„   r  r  r   Úembedding_outputÚencoder_outputsÚsequence_outputÚpooled_outputr©   s              r   rK   zDinatModel.forward7  sW  € ð 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàÐÝÐ?Ñ@Ô@Ð@àŸ?š?¨<Ñ8Ô8ÐàŸ,š,ØØ/Ø!5Ø#ð	 'ñ 
ô 
ˆð *¨!Ô,ˆØŸ.š.¨Ñ9Ô9ˆàˆØŒ;Ð"Ø ŸKšK¨×(?Ò(?ÀÀ1Ñ(EÔ(E×(OÒ(OÐPQÐSTÑ(UÔ(UÑVÔVˆMÝ!œM¨-¸Ñ;Ô;ˆMàð 	Ø% }Ð5¸ÈÈÈÔ8KÑKˆFàˆMåØ-Ø'Ø)Ô7Ø&Ô1Ø#2Ô#Ið
ñ 
ô 
ð 	
r   )T)NNNN)r&   r'   r(   r:   r9  r   r*   r+   rœ   r-   r0   rK   rM   rN   s   @r   r-  r-    sÉ   ø€ € € € € ðð ð ð ð ð ð,0ð 0ð 0ð ð 26Ø)-Ø,0Ø#'ð-
ð -
àÔ'¨$Ñ.ð-
ð   $™;ð-
ð # T™kð	-
ð
 ˜D‘[ð-
ð 
Ð!Ñ	!ð-
ð -
ð -
ñ „^ð-
ð -
ð -
ð -
ð -
r   r-  z¦
    Dinat Model transformer with an image classification head on top (a linear layer on top of the final hidden state
    of the [CLS] token) e.g. for ImageNet.
    c                   ó’   ‡ — e Zd Zˆ 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dz  de	e
z  fd	„¦   «         Zˆ xZS )ÚDinatForImageClassificationc                 ób  •— t          ¦   «                              |¦  «         t          | dg¦  «         |j        | _        t	          |¦  «        | _        |j        dk    r$t          j        | j        j        |j        ¦  «        nt          j	        ¦   «         | _
        |                      ¦   «          d S )Nr/  r   )r9   r:   r   Ú
num_labelsr-  r'  r   r|   r0  rÛ   Ú
classifierr5  rC   s     €r   r:   z$DinatForImageClassification.__init__o  s�   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜$  
Ñ+Ô+Ð+à Ô+ˆŒÝ Ñ'Ô'ˆŒ
ð FLÔEVÐYZÒEZÐEZ�BŒI�d”jÔ-¨vÔ/@ÑAÔAÐAÕ`bÔ`kÑ`mÔ`mð 	Œð
 	�ŠÑÔÐÐÐr   NrG   Úlabelsr„   r  r  rH   c                 óH  — |�|n| j         j        }|                      ||||¬¦  «        }|d         }|                      |¦  «        }	d}
|�|                      ||	| j         ¦  «        }
|s|	f|dd…         z   }|
�|
f|z   n|S t          |
|	|j        |j        |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   rR   )r4   r5   r#   r$   r%   )	rE   r  r'  rF  Úloss_functionr3   r#   r$   r%   )rD   rG   rG  r„   r  r  r   r™   rA  r5   r4   r©   s               r   rK   z#DinatForImageClassification.forward  sÞ   € ð  &1Ð%<�k�kÀ$Ä+ÔBYˆà—*’*ØØ/Ø!5Ø#ð	 ñ 
ô 
ˆð   œ
ˆà—’ Ñ/Ô/ˆàˆØÐØ×%Ò% f¨f°d´kÑBÔBˆDàð 	FØ�Y ¨¨¨¤Ñ,ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå)ØØØ!Ô/ØÔ)Ø#*Ô#Að
ñ 
ô 
ð 	
r   )NNNNN)r&   r'   r(   r:   r   r*   r+   Ú
LongTensorrœ   r-   r3   rK   rM   rN   s   @r   rC  rC  h  sÊ   ø€ € € € € ðð ð ð ð ð  ð 26Ø*.Ø)-Ø,0Ø#'ð*
ð *
àÔ'¨$Ñ.ð*
ð Ô  4Ñ'ð*
ð   $™;ð	*
ð
 # T™kð*
ð ˜D‘[ð*
ð 
Ð+Ñ	+ð*
ð *
ð *
ñ „^ð*
ð *
ð *
ð *
ð *
r   rC  zL
    NAT backbone, to be used with frameworks like DETR and MaskFormer.
    c                   ó”   ‡ — e Zd Zˆ fd„Zd„ Zeee	 	 	 d
dej	        de
dz  de
dz  de
dz  def
d	„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚDinatBackbonec                 ó   •‡— t          ¦   «                              ‰¦  «         t          | dg¦  «         t          ‰¦  «        | _        t          ‰¦  «        | _        ‰j        gˆfd„t          t          ‰j
        ¦  «        ¦  «        D ¦   «         z   | _        i }t          | j        | j        ¦  «        D ]\  }}t          j        |¦  «        ||<   Œt          j        |¦  «        | _        |                      ¦   «          d S )Nr/  c                 óD   •— g | ]}t          ‰j        d |z  z  ¦  «        ‘ŒS )rR   )ro   r>   )rû   rü   rE   s     €r   rþ   z*DinatBackbone.__init__.<locals>.<listcomp>º  s.   ø€ Ð1rÐ1rÐ1rÐSTµ#°fÔ6FÈÈAÉÑ6MÑ2NÔ2NÐ1rÐ1rÐ1rr   )r9   r:   r   r7   rJ   r  r1  r>   r   r  r  r0  ÚzipÚout_featuresrï   r   r=   Ú
ModuleDictÚhidden_states_normsr5  )rD   rE   rR  ÚstagerZ   rF   s    `   €r   r:   zDinatBackbone.__init__³  sú   øø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜$  
Ñ+Ô+Ð+å)¨&Ñ1Ô1ˆŒÝ# FÑ+Ô+ˆŒØ#Ô-Ð.Ð1rÐ1rÐ1rÐ1rÕX]Õ^aÐbhÔboÑ^pÔ^pÑXqÔXqÐ1rÑ1rÔ1rÑrˆÔð !ÐÝ#& tÔ'8¸$¼-Ñ#HÔ#Hð 	Dð 	DÑˆE�<Ý)+¬°lÑ)CÔ)CÐ Ñ&Ð&Ý#%¤=Ð1DÑ#EÔ#EˆÔ ð 	�ŠÑÔÐÐÐr   c                 ó   — | j         j        S r   r8  rÌ   s    r   r9  z"DinatBackbone.get_input_embeddingsÅ  r:  r   NrG   r  r„   r  rH   c                 óÞ  — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|                      |¦  «        }|                      ||ddd¬¦  «        }|j        }d}	t          | j        |¦  «        D ]¼\  }
}|
| j	        v r®|j
        \  }}}}|                     dddd¦  «                             ¦   «         }|                     |||z  |¦  «        } | j        |
         |¦  «        }|                     ||||¦  «        }|                     dddd¦  «                             ¦   «         }|	|fz  }	Œ½|s|	f}|r||j        fz  }|S t!          |	|r|j        nd|j        ¬	¦  «        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("shi-labs/nat-mini-in1k-224")
        >>> model = AutoBackbone.from_pretrained(
        ...     "shi-labs/nat-mini-in1k-224", out_features=["stage1", "stage2", "stage3", "stage4"]
        ... )

        >>> inputs = processor(image, return_tensors="pt")

        >>> outputs = model(**inputs)

        >>> feature_maps = outputs.feature_maps
        >>> list(feature_maps[-1].shape)
        [1, 512, 7, 7]
        ```NT)r„   r  r  r  r.   r   rR   r   r   )Úfeature_mapsr#   r$   )rE   r  r  r„   rJ   r1  r%   rO  Ústage_namesrP  ra   rb   rŽ   rˆ   rR  r#   r	   r$   )rD   rG   r  r„   r  r   r>  r™   r#   rV  rS  Úhidden_staterî   rZ   rd   re   r©   s                    r   rK   zDinatBackbone.forwardÈ  sÑ  € ðL &1Ð%<�k�kÀ$Ä+ÔBYˆà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐàŸ?š?¨<Ñ8Ô8Ðà—,’,ØØ/Ø!%Ø59Øð ñ 
ô 
ˆð  Ô6ˆàˆÝ#& tÔ'7¸Ñ#GÔ#Gð 	0ð 	0ÑˆE�<Ø˜Ô)Ð)Ð)Ø:FÔ:LÑ7�
˜L¨&°%Ø+×3Ò3°A°q¸!¸QÑ?Ô?×JÒJÑLÔL�Ø+×0Ò0°¸VÀe¹^È\ÑZÔZ�Ø>˜tÔ7¸Ô>¸|ÑLÔL�Ø+×0Ò0°¸VÀUÈLÑYÔY�Ø+×3Ò3°A°q¸!¸QÑ?Ô?×JÒJÑLÔL�Ø  Ñ/�øàð 	Ø"�_ˆFØ#ð 3Ø˜7Ô0Ð2Ñ2�ØˆMåØ%Ø3GÐQ˜'Ô/Ð/ÈTØÔ)ð
ñ 
ô 
ð 	
r   )NNN)r&   r'   r(   r:   r9  r   r   r   r*   rL   rœ   r	   rK   rM   rN   s   @r   rL  rL  ­  sÙ   ø€ € € € € ðð ð ð ð ð$0ð 0ð 0ð Ø Øð -1Ø)-Ø#'ðJ
ð J
à”lðJ
ð # T™kðJ
ð   $™;ð	J
ð
 ˜D‘[ðJ
ð 
ðJ
ð J
ð J
ñ „^ñ !Ô ñ ÔðJ
ð J
ð J
ð J
ð J
r   rL  )rC  r-  r&  rL  )1r)   rŠ   Údataclassesr   r*   r   Úactivationsr   Úbackbone_utilsr   r   Úmodeling_outputsr	   Úmodeling_utilsr
   Úutilsr   r   r   r   r   Úutils.genericr   Úconfiguration_dinatr   Únatten.functionalr   r   r!   r0   r3   rp   r7   r;   rg   rr   rž   r§   r¯   r¹   r½   rÑ   rø   r  r&  r-  rC  rL  Ú__all__r.   r   r   ú<module>rc     sÌ  ðð @Ð ?à €€€Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ .Ð .Ð .Ð .Ð .Ð .Ø -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð ÐÑÔð /Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð/ð /ð /ð/ð /ð /ð €ððñ ô ð
 ðHð Hð Hð Hð H˜ñ Hô Hñ „ñô ðHð  €ððñ ô ð
 ðHð Hð Hð Hð H�{ñ Hô Hñ „ñô ðHð& €ððñ ô ð
 ðHð Hð Hð Hð H ñ Hô Hñ „ñô ðHð*ð ð ð ð �b”iñ ô ð ð,!ð !ð !ð !ð !˜2œ9ñ !ô !ð !ðHð ð ð ð �r”yñ ô ð ð.8ð 8ð 8ð 8ð 8˜BœIñ 8ô 8ð 8ðv
ð 
ð 
ð 
ð 
 "¤)ñ 
ô 
ð 
ðð ð ð ð  "¤)ñ ô ð ð"ð ð ð ð ˜œ	ñ ô ð ð	ð 	ð 	ð 	ð 	�"”)ñ 	ô 	ð 	ð%ð %ð %ð %ð %�B”Iñ %ô %ð %ð0Dð Dð Dð Dð D�”ñ Dô Dð DðN,ð ,ð ,ð ,ð ,�”ñ ,ô ,ð ,ð^C
ð C
ð C
ð C
ð C
�2”9ñ C
ô C
ð C
ðL ð"ð "ð "ð "ð "˜?ñ "ô "ñ „ð"ð ðH
ð H
ð H
ð H
ð H
Ð%ñ H
ô H
ñ „ðH
ðV €ððñ ô ð<
ð <
ð <
ð <
ð <
Ð"6ñ <
ô <
ñô ð<
ð~ €ððñ ô ð
c
ð c
ð c
ð c
ð c
�MÐ#7ñ c
ô c
ñô ð
c
ðL aÐ
`Ð
`€€€r   