Ë
    ÜÓ^jsÒ  ã                   óF  — d Z ddl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 ddlmZ dd	lmZ dd
lmZ ddlmZmZmZmZmZmZ ddlmZ ddlmZmZ ddlm Z   ejB                  e"«      Z# ed¬«      e G d„ de«      «       «       Z$ G d„ dejJ                  «      Z& G d„ dejJ                  «      Z' G d„ dejJ                  «      Z( G d„ dejJ                  «      Z) G d„ dejJ                  «      Z* G d„ dejJ                  «      Z+ G d „ d!ejJ                  «      Z, G d"„ d#ejJ                  «      Z- G d$„ d%e«      Z. G d&„ d'ejJ                  «      Z/e G d(„ d)e«      «       Z0e G d*„ d+e0«      «       Z1 G d,„ d-ejJ                  «      Z2 ed.¬«       G d/„ d0e0«      «       Z3 G d1„ d2ejJ                  «      Z4 G d3„ d4ejJ                  «      Z5 ed5¬«       G d6„ d7e0«      «       Z6 ed8¬«       G d9„ d:e0«      «       Z7 ed;¬«       G d<„ d=e0«      «       Z8e G d>„ d?e0«      «       Z9g d@¢Z:y)AzPyTorch ViLT model.é    N)Ú	dataclass)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚMaskedLMOutputÚModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚPreTrainedModel)Úauto_docstringÚloggingé   )Ú
ViltConfigzF
    Class for outputs of [`ViltForImagesAndTextClassification`].
    )Úcustom_introc                   óÊ   — 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ej                        dz  ed<   dZe
eej                        dz  ed<   y)Ú(ViltForImagesAndTextClassificationOutputa7  
    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).
    hidden_states (`list[tuple(torch.FloatTensor)]`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        List of tuples of `torch.FloatTensor` (one for each image-text pair, each tuple containing the output of
        the embeddings + one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`.
        Hidden-states of the model at the output of each layer plus the initial embedding outputs.
    NÚlossÚlogitsÚhidden_statesÚ
attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r   r   ÚlistÚtupler   © ó    úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/vilt/modeling_vilt.pyr   r   ,   sq   … ñ	ð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø;?€M�4˜˜e×/Ñ/Ñ0Ñ1°DÑ8Ó?Ø8<€J��U˜5×,Ñ,Ñ-Ñ.°Ñ5Ô<r'   r   c                   ó4   ‡ — e Zd ZdZˆ fd„Zdd„Z	 dd„Zˆ xZS )ÚViltEmbeddingsz¢
    Construct the text and patch embeddings.

    Text embeddings are equivalent to BERT embeddings.

    Patch embeddings are equivalent to ViT embeddings.
    c                 ó,  •— t         ‰| �  «        t        |«      | _        t	        j
                  t        j                  dd|j                  «      «      | _	        t        |«      | _        | j                  j                  }t	        j
                  t        j                  d|dz   |j                  «      «      | _        t	        j                  |j                  |j                  «      | _        t	        j"                  |j$                  «      | _        || _        y ©Nr   )ÚsuperÚ__init__ÚTextEmbeddingsÚtext_embeddingsr   Ú	Parameterr!   ÚzerosÚhidden_sizeÚ	cls_tokenÚViltPatchEmbeddingsÚpatch_embeddingsÚnum_patchesÚposition_embeddingsÚ	EmbeddingÚmodality_type_vocab_sizeÚtoken_type_embeddingsÚDropoutÚhidden_dropout_probÚdropoutÚconfig)Úselfr?   r7   Ú	__class__s      €r(   r.   zViltEmbeddings.__init__M   sÄ   ø€ Ü‰ÑÔô  .¨fÓ5ˆÔäŸ™¤e§k¡k°!°Q¸×8JÑ8JÓ&KÓLˆŒÜ 3°FÓ ;ˆÔØ×+Ñ+×7Ñ7ˆÜ#%§<¡<´·±¸A¸{ÈQ¹ÐPV×PbÑPbÓ0cÓ#dˆÔ ä%'§\¡\°&×2QÑ2QÐSY×SeÑSeÓ%fˆÔ"Ü—z‘z &×"<Ñ"<Ó=ˆŒØˆ�r'   c                 ó`  — | j                   j                  j                  j                  \  }}}}| j                  |«      }|d d …d d d …d d …f   j	                  «       }t
        j                  j                  ||j                  d   |j                  d   f¬«      j                  «       }|d d …df   j                  d¬«      d d …df   }	|d d …df   j                  d¬«      d d …df   }
|j                  \  }}}}| j                  j                  | j                  j                  z  }| j                  d d …dd …d d …f   j                  dd«      j                  d|||«      }t!        j"                  t%        |	|
«      D ��cg c]R  \  }}t
        j                  j'                  t
        j                  j                  |||fdd¬	«      d||z
  d||z
  f«      ‘ŒT c}}d¬«      }|j)                  d«      j                  dd«      }|j)                  d«      j                  dd«      }t!        j*                  t!        j,                  t!        j.                  |j                  d
   «      t!        j.                  |j                  d   «      d¬«      d¬«      j1                  |j2                  ¬«      }|d d d d …d d …d d …f   }|j5                  |j                  d   |j                  d   ddd«      }|j)                  dd«      }|j)                  d«      }|dk  s|�t7        |t8        «      s|	|
z  }|j;                  «       }n|	|
z  }t=        |j;                  «       |«      }|j?                  d¬«      }d|z
  j?                  d¬«      }|d d …df   jA                  «       }|D �cg c]  }||d d …df   |k(     ‘Œ }}|D �cg c]  }||d d …df   |k(     ‘Œ }}|D �cg c]  }|jC                  d«      ‘Œ }}|D �cg c]  }|jC                  d«      ‘Œ }}|D �cg c]  }||z
  ‘Œ	 }}g } tE        t%        |||«      «      D ]Ç  \  }!\  }}"}#|#dk  rOt!        jF                  t!        jH                  |«      j	                  «       |«      }$| jK                  ||!   |$   «       Œ^t!        jF                  t!        jH                  |"«      j	                  «       |#d¬«      }%| jK                  t!        j"                  ||!   ||!   |%   gd¬«      «       ŒÉ t!        j"                  | d¬«      } || d d …df   | d d …df   f   j                  |d|«      }|| d d …df   | d d …df   f   j                  |d«      }|| d d …df   | d d …df   f   j                  |dd«      }|| d d …df   | d d …df   f   j                  |d|«      }| jL                  j5                  |dd«      }&t!        j"                  |&|fd¬«      }t!        j"                  | j                  d d …dd d …f   d d …d d d …f   j5                  |dd«      |fd¬«      }||z   }| jO                  |«      }t!        j"                  t!        jH                  |j                  d   d«      j1                  |«      |gd¬«      }|||||fffS c c}}w c c}w c c}w c c}w c c}w c c}w )Né   r   )Úsizer   r   ©ÚdimÚbilinearT)rD   ÚmodeÚalign_cornerséþÿÿÿéÿÿÿÿÚij)Úindexing©ÚdeviceF)Úas_tuple)Úreplacement)(r6   Ú
projectionÚweightÚshapeÚfloatr   Ú
functionalÚinterpolateÚlongÚsumr?   Ú
image_sizeÚ
patch_sizer8   Ú	transposeÚviewr!   ÚcatÚzipÚpadÚflattenÚstackÚmeshgridÚarangeÚtorO   ÚexpandÚ
isinstanceÚintÚmaxÚminÚnonzeroÚuniquerD   Ú	enumerateÚmultinomialÚonesÚappendr4   r>   )'r@   Úpixel_valuesÚ
pixel_maskÚmax_image_lengthÚ_ÚphÚpwÚxÚx_maskÚx_hÚx_wÚ
batch_sizeÚnum_channelsÚheightÚwidthÚ	patch_dimÚspatial_posÚhÚwÚ	pos_embedÚpatch_indexÚeffective_resolutionÚ	valid_idxÚnon_valid_idxÚunique_rowsÚuÚvalid_row_idxÚnon_valid_row_idxÚvÚ
valid_numsÚnon_valid_numsÚpad_numsÚselectÚiÚnvÚpÚvalid_choiceÚ
pad_choiceÚ
cls_tokenss'                                          r(   Úvisual_embedzViltEmbeddings.visual_embed\   sW  € Ø×,Ñ,×7Ñ7×>Ñ>×DÑD‰ˆˆ1ˆb�"à×!Ñ! ,Ó/ˆØšA˜t¢Qª˜MÑ*×0Ñ0Ó2ˆÜ—‘×*Ñ*¨6¸¿¹À¹ÀQÇWÁWÈQÁZÐ8PÐ*ÓQ×VÑVÓXˆØ’Q˜�T‰l×Ñ 1ÐÓ%¢a¨ dÑ+ˆØ’Q˜�T‰l×Ñ 1ÐÓ%¢a¨ dÑ+ˆà23·'±'Ñ/ˆ
�L &¨%Ø—K‘K×*Ñ*¨d¯k©k×.DÑ.DÑDˆ	Ø×.Ñ.ªq°!±"²a¨xÑ8×BÑBÀ1ÀaÓH×MÑMÈaÐQ]Ð_hÐjsÓtˆÜ—I‘Iô    S›M÷ñ �A�qô —‘×!Ñ!Ü—M‘M×-Ñ-Ø#Ø ˜VØ'Ø&*ð	 .ó ð ˜ ™	 1 f¨q¡jÐ1õóð ô
ˆ	ð  ×%Ñ% aÓ(×2Ñ2°1°aÓ8ˆ	Ø�I‰I�a‹L×"Ñ" 1 aÓ(ˆä—k‘kÜ�N‰Nœ5Ÿ<™<¨¯©°RÑ(8Ó9¼5¿<¹<ÈÏÉÐUWÑHXÓ;YÐdhÔiÐoqô
ç
‰"�F—M‘Mˆ"Ó
"ð 	ð " $¨ªa²²AÐ"5Ñ6ˆØ!×(Ñ(¨¯©°a©¸&¿,¹,Àq¹/È2ÈrÐSUÓVˆØ!×)Ñ)¨!¨QÓ/ˆØ—‘ Ó"ˆà˜aÒÐ#3Ð#;Ä:ÐN^Ô`cÔCdð
 $'¨¡9Ð Ø3×7Ñ7Ó9Ñà#&¨¡9Ð Ü"Ð#7×#;Ñ#;Ó#=Ð?OÓPÐà—N‘N¨E�NÓ2ˆ	Ø˜V™×,Ñ,°eÐ,Ó<ˆØ¢ 1 ‘o×,Ñ,Ó.ˆØBMÖN¸Q˜ 9ªQ°¨T¡?°aÑ#7Ó8ÐNˆÐNØNYÖZÈ˜]¨=º¸A¸Ñ+>À!Ñ+CÓDÐZÐÐZà)6Ö7 A�a—f‘f˜Q•iÐ7ˆ
Ð7Ø->Ö?¨˜!Ÿ&™& �)Ð?ˆÐ?Ø2<Ö=¨QÐ$ qÓ(Ð=ˆÐ=àˆÜ&¤s¨:°~ÀxÓ'PÓQò 	f‰MˆA‰z��2�qØ�AŠvÜ$×0Ñ0´·±¸A³×1DÑ1DÓ1FÐHXÓY�Ø—‘˜m¨AÑ.¨|Ñ<Õ=ä"×.Ñ.¬u¯z©z¸"«~×/CÑ/CÓ/EÀqÐVZÔ[�
Ø—‘œeŸi™i¨°qÑ)9Ð;LÈQÑ;OÐPZÑ;[Ð(\ÐbcÔdÕeð	fô —‘˜6 qÔ)ˆØˆf’Q˜�T‰l˜F¢1 a 4™LÐ(Ñ)×.Ñ.¨z¸2¸|ÓLˆØ˜šq !˜t™ fªQ°¨T¡lÐ2Ñ3×8Ñ8¸ÀRÓHˆà! &ª¨A¨¡,°²q¸!°t±Ð"<Ñ=×BÑBÀ:ÈrÐSTÓUˆØ˜f¢Q¨ T™l¨F²1°a°4©LÐ8Ñ9×>Ñ>¸zÈ2È|Ó\ˆ	à—^‘^×*Ñ*¨:°r¸2Ó>ˆ
Ü�I‰I�z 1�o¨1Ô-ˆÜ—I‘IØ×%Ñ%¢a¨ªA gÑ.ªq°$º¨zÑ:×AÑAÀ*ÈbÐRTÓUÐW`ÐaÐghô
ˆ	ð �	‰MˆØ�L‰L˜‹Oˆä—‘œEŸJ™J v§|¡|°A¡¸Ó:×=Ñ=¸fÓEÀvÐNÐTUÔVˆà�&˜;¨°¨Ð8Ð8Ð8ùóSùòP OùÚZùâ7ùÚ?ùÚ=s%   Å?AZ
ÎZÎ5ZÏZ!Ï/Z&ÐZ+c	           	      ó(  — | j                  |||¬«      }	|€-| j                  ||| j                  j                  ¬«      \  }}
}n|j	                  d«      }
|€d}|	| j                  t        j                  |t        j                  |	j                  ¬«      «      z   }	|| j                  t        j                  |
|t        j                  |	j                  ¬«      «      z   }t        j                  |	|gd¬«      }t        j                  ||
gd¬«      }||fS )N)Ú	input_idsÚtoken_type_idsÚinputs_embeds)rs   r   ©ÚdtyperO   rE   )r0   r—   r?   rs   ra   r;   r!   Ú
zeros_likerX   rO   Ú	full_liker^   )r@   r™   Úattention_maskrš   rq   rr   r›   Úimage_embedsÚimage_token_type_idxÚtext_embedsÚimage_masksr„   Ú
embeddingsÚmaskss                 r(   ÚforwardzViltEmbeddings.forward´   s  € ð ×*Ñ*Ø°Èmð +ó 
ˆð
 ÐØ59×5FÑ5FØ˜j¸4¿;¹;×;WÑ;Wð 6Gó 6Ñ2ˆL˜+¡{ð %×,Ñ,¨QÓ/ˆKð  Ð'Ø#$Ð Ø! D×$>Ñ$>Ü×Ñ˜^´5·:±:Àk×FXÑFXÔYó%
ñ 
ˆð $ d×&@Ñ&@Ü�O‰O˜KÐ)=ÄUÇZÁZÐXc×XjÑXjÔkó'
ñ 
ˆô
 —Y‘Y ¨\Ð:ÀÔBˆ
Ü—	‘	˜>¨;Ð7¸QÔ?ˆà˜5Ð Ð r'   )éÈ   )r   )r   r   r   r    r.   r—   r§   Ú__classcell__©rA   s   @r(   r*   r*   D   s   ø„ ñôóV9ðB ÷'!r'   r*   c                   ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )r/   zGConstruct the embeddings from word, position and token_type embeddings.c                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        | j#                  dt%        j&                  |j                  «      j)                  d«      d¬«       | j#                  dt%        j*                  | j,                  j/                  «       t$        j0                  ¬«      d¬«       y )	N)Úpadding_idx©ÚepsÚposition_ids©r   rK   F)Ú
persistentrš   ©r�   )r-   r.   r   r9   Ú
vocab_sizer3   Úpad_token_idÚword_embeddingsÚmax_position_embeddingsr8   Útype_vocab_sizer;   Ú	LayerNormÚlayer_norm_epsr<   r=   r>   Úregister_bufferr!   rd   rf   r2   r°   rD   rX   ©r@   r?   rA   s     €r(   r.   zTextEmbeddings.__init__á   s  ø€ Ü‰ÑÔÜ!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¡<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ Ü%'§\¡\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"äŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒà×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	ô 	
ð 	×ÑØœeŸk™k¨$×*;Ñ*;×*@Ñ*@Ó*BÌ%Ï*É*ÔUÐbgð 	õ 	
r'   c                 ó6  — |�|j                  «       }n|j                  «       d d }|d   }|€| j                  d d …d |…f   }|€st        | d«      r-| j                  d d …d |…f   }|j	                  |d   |«      }|}n:t        j                  |t
        j                  | j                  j                  ¬«      }|€| j                  |«      }| j                  |«      }	||	z   }
| j                  |«      }|
|z  }
| j                  |
«      }
| j                  |
«      }
|
S )NrK   r   rš   r   rœ   )rD   r°   Úhasattrrš   rf   r!   r2   rX   rO   r¶   r;   r8   r¹   r>   )r@   r™   rš   r°   r›   Úinput_shapeÚ
seq_lengthÚbuffered_token_type_idsÚ buffered_token_type_ids_expandedr;   r¥   r8   s               r(   r§   zTextEmbeddings.forwardñ   s/  € ØÐ Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
àÐØ×,Ñ,ªQ°°°¨^Ñ<ˆLð
 Ð!Ü�tÐ-Ô.Ø*.×*=Ñ*=ºaÀÀ*À¸nÑ*MÐ'Ø3J×3QÑ3QÐR]Ð^_ÑR`ÐblÓ3mÐ0Ø!A‘ä!&§¡¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÔ!l�àÐ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐØ"Ð%:Ñ:ˆ
à"×6Ñ6°|ÓDÐØÐ)Ñ)ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr'   )NNNN©r   r   r   r    r.   r§   r©   rª   s   @r(   r/   r/   Þ   s   ø„ ÙQô
÷  r'   r/   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )r5   z#
    Image to Patch Embedding.
    c                 óÌ  •— t         ‰| �  «        |j                  |j                  }}|j                  |j
                  }}t        |t        j                  j                  «      r|n||f}t        |t        j                  j                  «      r|n||f}|d   |d   z  |d   |d   z  z  }|| _        || _        || _        || _
        t        j                  ||||¬«      | _        y )Nr   r   )Úkernel_sizeÚstride)r-   r.   rZ   r[   r|   r3   rg   ÚcollectionsÚabcÚIterabler7   r   ÚConv2drR   )r@   r?   rZ   r[   r|   r3   r7   rA   s          €r(   r.   zViltPatchEmbeddings.__init__  sÔ   ø€ Ü‰ÑÔØ!'×!2Ñ!2°F×4EÑ4E�Jˆ
Ø$*×$7Ñ$7¸×9KÑ9K�kˆä#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔäŸ)™) L°+È:Ð^hÔiˆ�r'   c                 óÞ   — |j                   \  }}}}|| j                  k7  rt        d«      ‚| j                  j                  j
                  }| j                  |j                  |¬«      «      }|S )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.r³   )rT   r|   Ú
ValueErrorrR   rS   r�   re   )r@   rq   r{   r|   r}   r~   Útarget_dtyperw   s           r(   r§   zViltPatchEmbeddings.forward(  si   € Ø2>×2DÑ2DÑ/ˆ
�L &¨%Ø˜4×,Ñ,Ò,ÜØwóð ð —‘×-Ñ-×3Ñ3ˆØ�O‰O˜LŸO™O°,˜OÓ?Ó@ˆØˆr'   rÃ   rª   s   @r(   r5   r5     s   ø„ ñôjör'   r5   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )ÚViltSelfAttentionc                 ó  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |d«      s&t        d|j                  › d|j                  › d�«      ‚|j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _        t        j                  |j                  | j                  |j                  ¬«      | _        t        j                  |j                  | j                  |j                  ¬«      | _        t        j                  |j                  | j                  |j                  ¬«      | _        t        j                  |j                   «      | _        y )Nr   Úembedding_sizezThe hidden size z4 is not a multiple of the number of attention heads ú.)Úbias)r-   r.   r3   Únum_attention_headsr¾   rÍ   rh   Úattention_head_sizeÚall_head_sizer   ÚLinearÚqkv_biasÚqueryÚkeyÚvaluer<   Úattention_probs_dropout_probr>   r¼   s     €r(   r.   zViltSelfAttention.__init__4  s.  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ" 6×#5Ñ#5Ð"6ð 7Ø×3Ñ3Ð4°Að7óð ð
 $*×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y‘Y˜v×1Ñ1°4×3EÑ3EÈFÏOÉOÔ\ˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÈ&Ï/É/ÔZˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÈFÏOÉOÔ\ˆŒ
ä—z‘z &×"EÑ"EÓFˆ�r'   c                 óH  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }t        j                  ||j	                  dd«      «      }	|	t        j                  | j                  «      z  }	|�|	|z   }	 t        j                  d¬«      |	«      }
| j                  |
«      }
t        j                  |
|«      }|j                  dddd«      j                  «       }|j!                  «       d d | j"                  fz   } |j                  |Ž }|r||
f}|S |f}|S )NrK   r   rC   rJ   rE   r   r   )rT   rÖ   rÚ   r]   r\   rÛ   rÜ   r!   ÚmatmulÚmathÚsqrtr   ÚSoftmaxr>   ÚpermuteÚ
contiguousrD   r×   )r@   r   r    Úoutput_attentionsr¿   Úhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                 r(   r§   zViltSelfAttention.forwardF  s�  € Ø#×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆØ—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆØ—H‘H˜]Ó+×0Ñ0°Ó>×HÑHÈÈAÓNˆ	Ø—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆô !Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐØ+¬d¯i©i¸×8PÑ8PÓ.QÑQÐØÐ%à/°.Ñ@Ðð -œ"Ÿ*™*¨Ô,Ð-=Ó>ˆð Ÿ,™, Ó7ˆäŸ™ _°kÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ*˜×*Ñ*Ð,CÐDˆá6G�= /Ð2ˆàˆð O\ÐM]ˆàˆr'   ©NF©r   r   r   r.   r§   r©   rª   s   @r(   rÐ   rÐ   3  s   ø„ ôG÷$r'   rÐ   c                   óx   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  dej                  fd„Zˆ xZ	S )ÚViltSelfOutputz¡
    The residual connection is defined in ViltLayer instead of here (as is the case with other models), due to the
    layernorm applied before each block.
    r?   c                 óÈ   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  «      | _        y ©N)	r-   r.   r   rØ   r3   Údenser<   r=   r>   r¼   s     €r(   r.   zViltSelfOutput.__init__m  sB   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r'   r   Úinput_tensorÚreturnc                 óJ   — | j                  |«      }| j                  |«      }|S rô   ©rõ   r>   ©r@   r   rö   s      r(   r§   zViltSelfOutput.forwardr  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØÐr'   )
r   r   r   r    r   r.   r!   ÚTensorr§   r©   rª   s   @r(   rò   rò   g  s=   ø„ ñð
>˜zõ >ð
 U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r'   rò   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )ÚViltAttentionc                 ób   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        y rô   )r-   r.   rÐ   Ú	attentionrò   Úoutputr¼   s     €r(   r.   zViltAttention.__init__y  s&   ø€ Ü‰ÑÔÜ*¨6Ó2ˆŒÜ$ VÓ,ˆ�r'   c                 óh   — | j                  |||«      }| j                  |d   |«      }|f|dd  z   }|S )Nr   r   )rÿ   r   )r@   r   r    rå   Úself_outputsÚattention_outputrî   s          r(   r§   zViltAttention.forward~  sC   € Ø—~‘~ m°^ÐEVÓWˆàŸ;™; |°A¡¸ÓFÐà#Ð%¨°Q°RÐ(8Ñ8ˆØˆr'   rï   rð   rª   s   @r(   rý   rý   x  s   ø„ ô-÷
r'   rý   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚViltIntermediater?   c                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y rô   )r-   r.   r   rØ   r3   Úintermediate_sizerõ   rg   Ú
hidden_actÚstrr   Úintermediate_act_fnr¼   s     €r(   r.   zViltIntermediate.__init__‰  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r'   r   r÷   c                 óJ   — | j                  |«      }| j                  |«      }|S rô   )rõ   r
  ©r@   r   s     r(   r§   zViltIntermediate.forward‘  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr'   ©	r   r   r   r   r.   r!   rû   r§   r©   rª   s   @r(   r  r  ˆ  s*   ø„ ð9˜zõ 9ð U§\¡\ð °e·l±l÷ r'   r  c                   ót   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  dej                  fd„Zˆ xZS )Ú
ViltOutputr?   c                 óÈ   •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j                  «      | _	        y rô   )
r-   r.   r   rØ   r  r3   rõ   r<   r=   r>   r¼   s     €r(   r.   zViltOutput.__init__™  sB   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r'   r   rö   r÷   c                 óT   — | j                  |«      }| j                  |«      }||z   }|S rô   rù   rú   s      r(   r§   zViltOutput.forwardž  s.   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØ%¨Ñ4ˆØÐr'   r  rª   s   @r(   r  r  ˜  s8   ø„ ð>˜zõ >ð
 U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r'   r  c                   ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )Ú	ViltLayerz?This corresponds to the Block class in the timm implementation.c                 ór  •— t         ‰| �  «        |j                  | _        d| _        t	        |«      | _        t        |«      | _        t        |«      | _	        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        y )Nr   r®   )r-   r.   Úchunk_size_feed_forwardÚseq_len_dimrý   rÿ   r  Úintermediater  r   r   r¹   r3   rº   Úlayernorm_beforeÚlayernorm_afterr¼   s     €r(   r.   zViltLayer.__init__¨  s‡   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ& vÓ.ˆŒÜ,¨VÓ4ˆÔÜ  Ó(ˆŒÜ "§¡¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÔÜ!Ÿ|™|¨F×,>Ñ,>ÀF×DYÑDYÔZˆÕr'   c                 ó  — | j                  | j                  |«      ||¬«      }|d   }|dd  }||j                  |j                  «      z   }| j	                  |«      }| j                  |«      }| j                  ||«      }|f|z   }|S )N)rå   r   r   )rÿ   r  re   rO   r  r  r   )r@   r   r    rå   Úself_attention_outputsr  rî   Úlayer_outputs           r(   r§   zViltLayer.forward²  s¦   € Ø!%§¡Ø×!Ñ! -Ó0ØØ/ð "0ó "
Ðð
 2°!Ñ4ÐØ(¨¨Ð,ˆð )¨=×+;Ñ+;Ð<L×<SÑ<SÓ+TÑTˆð ×+Ñ+¨MÓ:ˆØ×(Ñ(¨Ó6ˆð —{‘{ <°Ó?ˆà�/ GÑ+ˆàˆr'   rï   rÃ   rª   s   @r(   r  r  ¥  s   ø„ ÙIô[÷r'   r  c                   ó.   ‡ — e Zd Zˆ fd„Z	 	 	 	 dd„Zˆ xZS )ÚViltEncoderc                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w rï   )
r-   r.   r?   r   Ú
ModuleListÚrangeÚnum_hidden_layersr  ÚlayerÚgradient_checkpointing)r@   r?   rt   rA   s      €r(   r.   zViltEncoder.__init__Ë  sN   ø€ Ü‰ÑÔØˆŒÜ—]‘]¼uÀV×E]ÑE]Ó?^Ö#_¸!¤I¨fÕ$5Ò#_Ó`ˆŒ
Ø&+ˆÕ#ùò $`s   ½A#c                 óô   — |rdnd }|rdnd }t        | j                  «      D ](  \  }}	|r||fz   } |	|||«      }
|
d   }|sŒ ||
d   fz   }Œ* |r||fz   }|st        d„ |||fD «       «      S t        |||¬«      S )Nr&   r   r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrô   r&   )Ú.0rŒ   s     r(   ú	<genexpr>z&ViltEncoder.forward.<locals>.<genexpr>ë  s   è ø€ Òm˜qÐ_`Ñ_lœÑmùs   ‚Š)Úlast_hidden_stater   r   )rm   r#  r%   r   )r@   r   r    rå   Úoutput_hidden_statesÚreturn_dictÚall_hidden_statesÚall_self_attentionsr‘   Úlayer_moduleÚlayer_outputss              r(   r§   zViltEncoder.forwardÑ  s¼   € ñ #7™B¸DÐÙ$5™b¸4Ðä(¨¯©Ó4ò 		P‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!á(¨¸ÐHYÓZˆMà)¨!Ñ,ˆMâ Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ð		Pñ  Ø 1°]Ð4DÑ DÐáÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmÜØ+Ø+Ø*ô
ð 	
r'   )NFFTrð   rª   s   @r(   r  r  Ê  s   ø„ ô,ð ØØ"Ø÷
r'   r  c                   ó>   ‡ — e Zd ZU eed<   dZdZdZddgZˆ fd„Z	ˆ xZ
S )ÚViltPreTrainedModelr?   Úvilt)ÚimageÚtextTr*   rÐ   c                 ó6  •— t         ‰| �  |«       t        |t        «      ryt	        j
                  |j                  t        j                  |j                  j                  d   «      j                  d«      «       t	        j                  |j                  «       y y )NrK   r±   )r-   Ú_init_weightsrg   r/   ÚinitÚcopy_r°   r!   rd   rT   rf   Úzeros_rš   )r@   ÚmodulerA   s     €r(   r6  z!ViltPreTrainedModel._init_weightsû  sl   ø€ Ü‰Ñ˜fÔ%Ü�fœnÔ-Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÔhÜ�K‰K˜×-Ñ-Õ.ð .r'   )r   r   r   r   r#   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesr6  r©   rª   s   @r(   r1  r1  ó  s1   ø… àÓØÐØ(ÐØ&*Ð#Ø)Ð+>Ð?Ð÷/ð /r'   r1  c                   ót  ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ej                  dz  dej                  dz  de
dz  dedz  dedz  dedz  deeej                     z  fd„«       Zˆ xZS )Ú	ViltModelc                 ó  •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        j                  |j                  |j                  ¬«      | _        |rt        |«      nd| _        | j                  «        y)zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        r®   N)r-   r.   r?   r*   r¥   r  Úencoderr   r¹   r3   rº   Ú	layernormÚ
ViltPoolerÚpoolerÚ	post_init)r@   r?   Úadd_pooling_layerrA   s      €r(   r.   zViltModel.__init__  sk   ø€ ô
 	‰Ñ˜Ô ØˆŒä(¨Ó0ˆŒÜ" 6Ó*ˆŒäŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÙ,=”j Ô(À4ˆŒð 	�‰Õr'   c                 óB   — | j                   j                  j                  S rô   ©r¥   r0   r¶   ©r@   s    r(   Úget_input_embeddingszViltModel.get_input_embeddings  s   € Ø�‰×.Ñ.×>Ñ>Ð>r'   c                 ó:   — || j                   j                  _        y rô   rI  )r@   rÜ   s     r(   Úset_input_embeddingszViltModel.set_input_embeddings  s   € Ø:?ˆ�‰×'Ñ'Õ7r'   Nr™   r    rš   rq   rr   r›   r¡   r¢   rå   r*  r+  r÷   c           
      ó<  — |	�|	n| j                   j                  }	|
�|
n| j                   j                  }
|�|n| j                   j                  }|�|�t	        d«      ‚|�#| j                  ||«       |j                  «       }n!|�|j                  «       dd }nt	        d«      ‚|\  }}|�|j                  n|j                  }|€t        j                  ||f|¬«      }|�|�t	        d«      ‚|€|€t	        d«      ‚|�|j                  d   n|j                  d   }||k7  rt	        d	«      ‚|€Bt        j                  || j                   j                  | j                   j                  f|¬«      }| j                  ||||||||¬
«      \  }}t        | j                   ||¬«      }| j                  |||	|
|¬«      }|d   }| j                  |«      }| j                   �| j!                  |«      nd}|s
||f|dd z   S t#        |||j$                  |j&                  ¬«      S )a¼  
        image_embeds (`torch.FloatTensor` of shape `(batch_size, num_patches, hidden_size)`, *optional*):
            Optionally, instead of passing `pixel_values`, you can choose to directly pass an embedded representation.
            This is useful if you want more control over how to convert `pixel_values` into patch embeddings.
        image_token_type_idx (`int`, *optional*):
            - The token type ids for images.

        Examples:

        ```python
        >>> from transformers import ViltProcessor, ViltModel
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO

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

        >>> processor = ViltProcessor.from_pretrained("dandelin/vilt-b32-mlm")
        >>> model = ViltModel.from_pretrained("dandelin/vilt-b32-mlm")

        >>> inputs = processor(image, text, return_tensors="pt")
        >>> outputs = model(**inputs)
        >>> last_hidden_states = outputs.last_hidden_state
        ```NzDYou cannot specify both input_ids and inputs_embeds at the same timerK   z5You have to specify either input_ids or inputs_embedsrN   zFYou cannot specify both pixel_values and image_embeds at the same timez7You have to specify either pixel_values or image_embedsr   zAThe text inputs and image inputs need to have the same batch size)r¢   )r?   r›   r    )r    rå   r*  r+  r   )r)  Úpooler_outputr   r   )r?   rå   r*  r+  rÍ   Ú%warn_if_padding_and_no_attention_maskrD   rO   r!   ro   rT   rZ   r¥   r	   rB  rC  rE  r   r   r   )r@   r™   r    rš   rq   rr   r›   r¡   r¢   rå   r*  r+  Úkwargsr¿   Útext_batch_sizerÀ   rO   Úimage_batch_sizeÚembedding_outputÚencoder_outputsÚsequence_outputÚpooled_outputs                         r(   r§   zViltModel.forward  sl  € ðX 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐ  ]Ð%>ÜÐcÓdÐdØÐ"Ø×6Ñ6°yÀ.ÔQØ#Ÿ.™.Ó*‰KØÐ&Ø'×,Ñ,Ó.¨s°Ð3‰KäÐTÓUÐUà&1Ñ#ˆ˜Ø%.Ð%:�×!Ò!À×@TÑ@TˆàÐ!Ü"ŸZ™Z¨/¸:Ð)FÐPVÔWˆNàÐ#¨Ð(@ÜÐeÓfÐfØÐ! lÐ&:ÜÐVÓWÐWà4@Ð4L˜<×-Ñ-¨aÒ0ÐR^×RdÑRdÐefÑRgÐØ˜Ò.ÜÐ`ÓaÐaØÐÜŸ™Ð%5°t·{±{×7MÑ7MÈtÏ{É{×OeÑOeÐ$fÐouÔvˆJà+/¯?©?ØØØØØØØØ!5ð ,;ó 	,
Ñ(Ð˜.ô 3Ø—;‘;Ø*Ø)ô
ˆð Ÿ,™,ØØ)Ø/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆØŸ.™.¨Ó9ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆáØ# ]Ð3°oÀaÀbÐ6IÑIÐIä)Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r'   )T©NNNNNNNNNNN)r   r   r   r.   rK  rM  r   r!   Ú
LongTensorr"   rh   Úboolr   r%   r§   r©   rª   s   @r(   r@  r@    s;  ø„ õò"?ò@ð ð .2Ø37Ø26Ø15Ø.2Ø26Ø15Ø+/Ø)-Ø,0Ø#'ñp
à×#Ñ# dÑ*ðp
ð ×)Ñ)¨DÑ0ðp
ð ×(Ñ(¨4Ñ/ð	p
ð
 ×'Ñ'¨$Ñ.ðp
ð ×$Ñ$ tÑ+ðp
ð ×(Ñ(¨4Ñ/ðp
ð ×'Ñ'¨$Ñ.ðp
ð " D™jðp
ð   $™;ðp
ð # T™kðp
ð ˜D‘[ðp
ð 
$ e¨E×,=Ñ,=Ñ&>Ñ	>òp
ó ôp
r'   r@  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )rD  c                 ó²   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  «       | _        y rô   )r-   r.   r   rØ   r3   rõ   ÚTanhÚ
activationr¼   s     €r(   r.   zViltPooler.__init__�  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�r'   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S )Nr   )rõ   r^  )r@   r   Úfirst_token_tensorrW  s       r(   r§   zViltPooler.forward•  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr'   rð   rª   s   @r(   rD  rD  �  s   ø„ ô$ö
r'   rD  zU
    ViLT Model with a language modeling head on top as done during pretraining.
    c                   óŽ  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  d	ej                  dz  d
ej                  dz  dej                  dz  dej                  dz  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ej                     z  fd„«       Zˆ xZS )ÚViltForMaskedLMzmlm_score.decoder.weightz6vilt.embeddings.text_embeddings.word_embeddings.weightc                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y rô   )r-   r.   r@  r2  ÚViltMLMHeadÚ	mlm_scorerF  r¼   s     €r(   r.   zViltForMaskedLM.__init__¨  s4   ø€ Ü‰Ñ˜Ô ä˜fÓ%ˆŒ	Ü$ VÓ,ˆŒð 	�‰Õr'   c                 ó.   — | j                   j                  S rô   )re  ÚdecoderrJ  s    r(   Úget_output_embeddingsz%ViltForMaskedLM.get_output_embeddings±  s   € Ø�~‰~×%Ñ%Ð%r'   c                 ó\   — || j                   _        |j                  | j                   _        y rô   )re  rg  rÔ   )r@   Únew_embeddingss     r(   Úset_output_embeddingsz%ViltForMaskedLM.set_output_embeddings´  s    € Ø!/ˆ�‰ÔØ,×1Ñ1ˆ�‰Õr'   Nr™   r    rš   rq   rr   r›   r¡   Úlabelsrå   r*  r+  r÷   c                 óD  — |�|n| j                   j                  }| j                  ||||||||	|
|¬«
      }|dd \  }}|�|j                  d   n|j                  d   }|dd…d|…f   |dd…|d…f   }}| j	                  |«      }d}|�at        «       }|j                  |j                  «      } ||j                  d| j                   j                  «      |j                  d«      «      }|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  ¬«      S )a€  
        image_embeds (`torch.FloatTensor` of shape `(batch_size, num_patches, hidden_size)`, *optional*):
            Optionally, instead of passing `pixel_values`, you can choose to directly pass an embedded representation.
            This is useful if you want more control over how to convert `pixel_values` into patch embeddings.
        labels (*torch.LongTensor* of shape *(batch_size, sequence_length)*, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in *[-100, 0, ...,
            config.vocab_size]* (see *input_ids* docstring) Tokens with indices set to *-100* are ignored (masked), the
            loss is only computed for the tokens with labels in *[0, ..., config.vocab_size]*

        Examples:

        ```python
        >>> from transformers import ViltProcessor, ViltForMaskedLM
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image
        >>> import re
        >>> import torch

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))
        >>> text = "a bunch of [MASK] laying on a [MASK]."

        >>> processor = ViltProcessor.from_pretrained("dandelin/vilt-b32-mlm")
        >>> model = ViltForMaskedLM.from_pretrained("dandelin/vilt-b32-mlm")

        >>> # prepare inputs
        >>> encoding = processor(image, text, return_tensors="pt")

        >>> # forward pass
        >>> outputs = model(**encoding)

        >>> tl = len(re.findall("\[MASK\]", text))
        >>> inferred_token = [text]

        >>> # gradually fill in the MASK tokens, one by one
        >>> with torch.no_grad():
        ...     for i in range(tl):
        ...         encoded = processor.tokenizer(inferred_token)
        ...         input_ids = torch.tensor(encoded.input_ids)
        ...         encoded = encoded["input_ids"][0][1:-1]
        ...         outputs = model(input_ids=input_ids, pixel_values=encoding.pixel_values)
        ...         mlm_logits = outputs.logits[0]  # shape (seq_len, vocab_size)
        ...         # only take into account text features (minus CLS and SEP token)
        ...         mlm_logits = mlm_logits[1 : input_ids.shape[1] - 1, :]
        ...         mlm_values, mlm_ids = mlm_logits.softmax(dim=-1).max(dim=-1)
        ...         # only take into account text
        ...         mlm_values[torch.tensor(encoded) != 103] = 0
        ...         select = mlm_values.argmax().item()
        ...         encoded[select] = mlm_ids[select].item()
        ...         inferred_token = [processor.decode(encoded)]

        >>> selected_token = ""
        >>> encoded = processor.tokenizer(inferred_token)
        >>> output = processor.decode(encoded.input_ids[0], skip_special_tokens=True)
        >>> print(output)
        a bunch of cats laying on a couch.
        ```N©	r    rš   rq   rr   r›   r¡   rå   r*  r+  rC   r   rK   ©r   r   r   r   )r?   r+  r2  rT   re  r   re   rO   r]   r´   r   r   r   )r@   r™   r    rš   rq   rr   r›   r¡   rl  rå   r*  r+  rQ  rî   rV  rW  Útext_seq_lenÚtext_featuresrt   Ú
mlm_logitsÚmasked_lm_lossÚloss_fctr   s                          r(   r§   zViltForMaskedLM.forward¸  sZ  € ðV &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—)‘)ØØ)Ø)Ø%Ø!Ø'Ø%Ø/Ø!5Ø#ð ó 
ˆð *1°°!¨Ñ&ˆ˜à-6Ð-B�y—‘ qÒ)È×H[ÑH[Ð\]ÑH^ˆØ+ªA¨}°¨}Ð,<Ñ=¸ÊqÐR^ÑR_ÐO_Ñ?`�qˆà—^‘^ MÓ2ˆ
àˆØÐÜ'Ó)ˆHà—Y‘Y˜z×0Ñ0Ó1ˆFÙ% j§o¡o°b¸$¿+¹+×:PÑ:PÓ&QÐSY×S^ÑS^Ð_aÓSbÓcˆNáØ �] W¨Q¨R [Ñ0ˆFØ3AÐ3M�^Ð%¨Ñ.ÐYÐSYÐYäØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r'   rX  )r   r   r   Ú_tied_weights_keysr.   rh  rk  r   r!   rY  r"   rZ  r   r%   r§   r©   rª   s   @r(   rb  rb  ž  sQ  ø„ ð 	#Ð$\ðÐôò&ò2ð ð .2Ø37Ø26Ø15Ø.2Ø26Ø15Ø*.Ø)-Ø,0Ø#'ñp
à×#Ñ# dÑ*ðp
ð ×)Ñ)¨DÑ0ðp
ð ×(Ñ(¨4Ñ/ð	p
ð
 ×'Ñ'¨$Ñ.ðp
ð ×$Ñ$ tÑ+ðp
ð ×(Ñ(¨4Ñ/ðp
ð ×'Ñ'¨$Ñ.ðp
ð × Ñ  4Ñ'ðp
ð   $™;ðp
ð # T™kðp
ð ˜D‘[ðp
ð 
˜% × 1Ñ 1Ñ2Ñ	2òp
ó ôp
r'   rb  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚViltPredictionHeadTransformc                 óh  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        |j                  t        «      rt        |j                     | _
        n|j                  | _
        t        j                  |j                  |j                  ¬«      | _        y )Nr®   )r-   r.   r   rØ   r3   rõ   rg   r  r	  r   Útransform_act_fnr¹   rº   r¼   s     €r(   r.   z$ViltPredictionHeadTransform.__init__-  s{   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü�f×'Ñ'¬Ô-Ü$*¨6×+<Ñ+<Ñ$=ˆDÕ!à$*×$5Ñ$5ˆDÔ!ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆ�r'   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rô   )rõ   ry  r¹   r  s     r(   r§   z#ViltPredictionHeadTransform.forward6  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐr'   rð   rª   s   @r(   rw  rw  ,  s   ø„ ôUör'   rw  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )rd  c                 ó®   •— t         ‰| �  «        || _        t        |«      | _        t        j                  |j                  |j                  «      | _	        y rô   )
r-   r.   r?   rw  Ú	transformr   rØ   r3   r´   rg  r¼   s     €r(   r.   zViltMLMHead.__init__>  s?   ø€ Ü‰ÑÔØˆŒÜ4°VÓ<ˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÓGˆ�r'   c                 óJ   — | j                  |«      }| j                  |«      }|S rô   )r}  rg  )r@   rw   s     r(   r§   zViltMLMHead.forwardD  s"   € Ø�N‰N˜1ÓˆØ�L‰L˜‹OˆØˆr'   rð   rª   s   @r(   rd  rd  =  s   ø„ ôHör'   rd  z¶
    Vilt Model transformer with a classifier head on top (a linear layer on top of the final hidden state of the [CLS]
    token) for visual question answering, e.g. for VQAv2.
    c                   óz  ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  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
ej                     z  fd„«       Zˆ xZS )ÚViltForQuestionAnsweringc           	      óÐ  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  t        j                  |j                  |j                  dz  «      t        j                  |j                  dz  «      t        j                  «       t        j                  |j                  dz  |j                  «      «      | _        | j                  «        y )NrC   )r-   r.   Ú
num_labelsr@  r2  r   Ú
SequentialrØ   r3   r¹   ÚGELUÚ
classifierrF  r¼   s     €r(   r.   z!ViltForQuestionAnswering.__init__Q  s¥   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ˜fÓ%ˆŒ	ô Ÿ-™-Ü�I‰I�f×(Ñ(¨&×*<Ñ*<¸qÑ*@ÓAÜ�L‰L˜×+Ñ+¨aÑ/Ó0Ü�G‰G‹IÜ�I‰I�f×(Ñ(¨1Ñ,¨f×.?Ñ.?Ó@ó	
ˆŒð 	�‰Õr'   Nr™   r    rš   rq   rr   r›   r¡   rl  rå   r*  r+  r÷   c                 óÂ  — |�|n| j                   j                  }| j                  ||||||||	|
|¬«
      }|r|j                  n|d   }| j	                  |«      }d}|�K|j                  |j                  «      }t        j                  j                  ||«      |j                  d   z  }|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  ¬«      S )a©  
        image_embeds (`torch.FloatTensor` of shape `(batch_size, num_patches, hidden_size)`, *optional*):
            Optionally, instead of passing `pixel_values`, you can choose to directly pass an embedded representation.
            This is useful if you want more control over how to convert `pixel_values` into patch embeddings.
        labels (`torch.FloatTensor` of shape `(batch_size, num_labels)`, *optional*):
            Labels for computing the visual question answering loss. This tensor must be either a one-hot encoding of
            all answers that are applicable for a given example in the batch, or a soft encoding indicating which
            answers are applicable, where 1.0 is the highest score.

        Examples:

        ```python
        >>> from transformers import ViltProcessor, ViltForQuestionAnswering
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image

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

        >>> processor = ViltProcessor.from_pretrained("dandelin/vilt-b32-finetuned-vqa")
        >>> model = ViltForQuestionAnswering.from_pretrained("dandelin/vilt-b32-finetuned-vqa")

        >>> # prepare inputs
        >>> encoding = processor(image, text, return_tensors="pt")

        >>> # forward pass
        >>> outputs = model(**encoding)
        >>> logits = outputs.logits
        >>> idx = logits.argmax(-1).item()
        >>> print("Predicted answer:", model.config.id2label[idx])
        Predicted answer: 2
        ```Nrn  r   rC   ro  )r?   r+  r2  rO  r…  re   rO   r   rV   Ú binary_cross_entropy_with_logitsrT   r   r   r   )r@   r™   r    rš   rq   rr   r›   r¡   rl  rå   r*  r+  rQ  rî   rO  r   r   r   s                     r(   r§   z ViltForQuestionAnswering.forwardb  s  € ðf &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—)‘)ØØ)Ø)Ø%Ø!Ø'Ø%Ø/Ø!5Ø#ð ó 
ˆñ 2=˜×-Ò-À'È!Á*ˆà—‘ Ó/ˆàˆØÐà—Y‘Y˜vŸ}™}Ó-ˆFÜ—=‘=×AÑAÀ&È&ÓQÐTZ×T`ÑT`ÐabÑTcÑcˆDñ Ø�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r'   rX  ©r   r   r   r.   r   r!   rY  r"   rZ  r   r%   r§   r©   rª   s   @r(   r€  r€  J  s7  ø„ ôð" ð .2Ø37Ø26Ø15Ø.2Ø26Ø15Ø*.Ø)-Ø,0Ø#'ñU
à×#Ñ# dÑ*ðU
ð ×)Ñ)¨DÑ0ðU
ð ×(Ñ(¨4Ñ/ð	U
ð
 ×'Ñ'¨$Ñ.ðU
ð ×$Ñ$ tÑ+ðU
ð ×(Ñ(¨4Ñ/ðU
ð ×'Ñ'¨$Ñ.ðU
ð × Ñ  4Ñ'ðU
ð   $™;ðU
ð # T™kðU
ð ˜D‘[ðU
ð 
" E¨%×*;Ñ*;Ñ$<Ñ	<òU
ó ôU
r'   r€  zË
    Vilt Model transformer with a classifier head on top (a linear layer on top of the final hidden state of the [CLS]
    token) for image-to-text or text-to-image retrieval, e.g. MSCOCO and F30K.
    c                   óz  ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  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
ej                     z  fd„«       Zˆ xZS )ÚViltForImageAndTextRetrievalc                 ó®   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  d«      | _        | j                  «        y r,   )	r-   r.   r@  r2  r   rØ   r3   Úrank_outputrF  r¼   s     €r(   r.   z%ViltForImageAndTextRetrieval.__init__Â  sC   ø€ Ü‰Ñ˜Ô ä˜fÓ%ˆŒ	ô Ÿ9™9 V×%7Ñ%7¸Ó;ˆÔð 	�‰Õr'   Nr™   r    rš   rq   rr   r›   r¡   rl  rå   r*  r+  r÷   c                 óB  — |�|n| j                   j                  }d}|�t        d«      ‚| j                  ||||||||	|
|¬«
      }|r|j                  n|d   }| j                  |«      }|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  ¬«      S )aµ  
        image_embeds (`torch.FloatTensor` of shape `(batch_size, num_patches, hidden_size)`, *optional*):
            Optionally, instead of passing `pixel_values`, you can choose to directly pass an embedded representation.
            This is useful if you want more control over how to convert `pixel_values` into patch embeddings.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels are currently not supported.

        Examples:

        ```python
        >>> from transformers import ViltProcessor, ViltForImageAndTextRetrieval
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))
        >>> texts = ["An image of two cats chilling on a couch", "A football player scoring a goal"]

        >>> processor = ViltProcessor.from_pretrained("dandelin/vilt-b32-finetuned-coco")
        >>> model = ViltForImageAndTextRetrieval.from_pretrained("dandelin/vilt-b32-finetuned-coco")

        >>> # forward pass
        >>> scores = dict()
        >>> for text in texts:
        ...     # prepare inputs
        ...     encoding = processor(image, text, return_tensors="pt")
        ...     outputs = model(**encoding)
        ...     scores[text] = outputs.logits[0, :].item()
        ```NzTraining is not yet supported.rn  r   rC   ro  )	r?   r+  ÚNotImplementedErrorr2  rO  rŒ  r   r   r   )r@   r™   r    rš   rq   rr   r›   r¡   rl  rå   r*  r+  rQ  r   rî   rO  r   r   s                     r(   r§   z$ViltForImageAndTextRetrieval.forwardÍ  sÙ   € ð^ &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàˆØÐÜ%Ð&FÓGÐGà—)‘)ØØ)Ø)Ø%Ø!Ø'Ø%Ø/Ø!5Ø#ð ó 
ˆñ 2=˜×-Ò-À'È!Á*ˆà×!Ñ! -Ó0ˆáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r'   rX  rˆ  rª   s   @r(   rŠ  rŠ  »  s7  ø„ ô	ð ð .2Ø37Ø26Ø15Ø.2Ø26Ø15Ø*.Ø)-Ø,0Ø#'ñN
à×#Ñ# dÑ*ðN
ð ×)Ñ)¨DÑ0ðN
ð ×(Ñ(¨4Ñ/ð	N
ð
 ×'Ñ'¨$Ñ.ðN
ð ×$Ñ$ tÑ+ðN
ð ×(Ñ(¨4Ñ/ðN
ð ×'Ñ'¨$Ñ.ðN
ð × Ñ  4Ñ'ðN
ð   $™;ðN
ð # T™kðN
ð ˜D‘[ðN
ð 
" E¨%×*;Ñ*;Ñ$<Ñ	<òN
ó ôN
r'   rŠ  zq
    Vilt Model transformer with a classifier head on top for natural language visual reasoning, e.g. NLVR2.
    c                   óz  ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  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
ej                     z  fd„«       Zˆ xZS )Ú"ViltForImagesAndTextClassificationc           	      óî  •— t         ‰| �  |«       |j                  | _        t        |«      | _        |j
                  }t        j                  t        j                  |j                  |z  |j                  |z  «      t        j                  |j                  |z  «      t        j                  «       t        j                  |j                  |z  |j                  «      «      | _        | j                  «        y rô   )r-   r.   r‚  r@  r2  Ú
num_imagesr   rƒ  rØ   r3   r¹   r„  r…  rF  )r@   r?   r’  rA   s      €r(   r.   z+ViltForImagesAndTextClassification.__init__%  sµ   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ˜fÓ%ˆŒ	ð ×&Ñ&ˆ
ÜŸ-™-Ü�I‰I�f×(Ñ(¨:Ñ5°v×7IÑ7IÈJÑ7VÓWÜ�L‰L˜×+Ñ+¨jÑ8Ó9Ü�G‰G‹IÜ�I‰I�f×(Ñ(¨:Ñ5°v×7HÑ7HÓIó	
ˆŒð 	�‰Õr'   Nr™   r    rš   rq   rr   r›   r¡   rl  rå   r*  r+  r÷   c                 ó¨  — |	�|	n| j                   j                  }	|
�|
n| j                   j                  }
|�|n| j                   j                  }|� |j                  dk(  r|j                  d«      }|� |j                  dk(  r|j                  d«      }|�|j                  d   nd}|€|�|j                  d   nd}|| j                   j                  k7  rt        d«      ‚g }|
rg nd}|	rg nd}t        |«      D ]¶  }| j                  ||||�|dd…|dd…dd…dd…f   nd|�|dd…|dd…dd…f   nd||�|dd…|dd…dd…f   nd|dz   |	|
|¬«      }|r|j                  n|d   }|j                  |«       |
r|j                  |j                  «       |	sŒœ|j                  |j                  «       Œ¸ t        j                   |d¬«      }| j#                  |«      }d}|�Wt%        «       }|j'                  |j(                  «      } ||j+                  d| j,                  «      |j+                  d«      «      }|s|||f}|�|f|z   S |S t/        ||||¬	«      S )
aï  
        image_embeds (`torch.FloatTensor` of shape `(batch_size, num_patches, hidden_size)`, *optional*):
            Optionally, instead of passing `pixel_values`, you can choose to directly pass an embedded representation.
            This is useful if you want more control over how to convert `pixel_values` into patch embeddings.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Binary classification labels.

        Examples:

        ```python
        >>> from transformers import ViltProcessor, ViltForImagesAndTextClassification
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image

        >>> url_1 = "https://lil.nlp.cornell.edu/nlvr/exs/ex0_0.jpg"
        >>> with httpx.stream("GET", url_1) as response:
        ...     image_1 = Image.open(BytesIO(response.read()))

        >>> url_2 = "https://lil.nlp.cornell.edu/nlvr/exs/ex0_1.jpg"
        >>> with httpx.stream("GET", url_2) as response:
        ...     image_2 = Image.open(BytesIO(response.read()))

        >>> text = "The left image contains twice the number of dogs as the right image."

        >>> processor = ViltProcessor.from_pretrained("dandelin/vilt-b32-finetuned-nlvr2")
        >>> model = ViltForImagesAndTextClassification.from_pretrained("dandelin/vilt-b32-finetuned-nlvr2")

        >>> # prepare inputs
        >>> encoding = processor([image_1, image_2], text, return_tensors="pt")

        >>> # forward pass
        >>> outputs = model(input_ids=encoding.input_ids, pixel_values=encoding.pixel_values.unsqueeze(0))
        >>> logits = outputs.logits
        >>> idx = logits.argmax(-1).item()
        >>> print("Predicted answer:", model.config.id2label[idx])
        Predicted answer: True
        ```Né   r   r   z\Make sure to match the number of images in the model with the number of images in the input.)
r    rš   rq   rr   r›   r¡   r¢   rå   r*  r+  rK   rE   ro  )r?   rå   r*  r+  ÚndimÚ	unsqueezerT   r’  rÍ   r!  r2  rO  rp   r   r   r!   r^   r…  r   re   rO   r]   r‚  r   )r@   r™   r    rš   rq   rr   r›   r¡   rl  rå   r*  r+  rQ  r’  Úpooler_outputsr   r   r‘   rî   rO  rW  r   r   rt  r   s                            r(   r§   z*ViltForImagesAndTextClassification.forward7  s�  € ðl 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐ#¨×(9Ñ(9¸QÒ(>à'×1Ñ1°!Ó4ˆLàÐ#¨×(9Ñ(9¸QÒ(>à'×1Ñ1°!Ó4ˆLà.:Ð.F�\×'Ñ'¨Ò*ÈDˆ
ØÐØ2>Ð2J˜×+Ñ+¨AÒ.ÐPTˆJØ˜Ÿ™×/Ñ/Ò/ÜØnóð ð ˆÙ2™¸ˆÙ,‘R°$ˆ
Ü�zÓ"ò 	6ˆAà—i‘iØØ-Ø-Ø<HÐ<T˜\ª!¨Q²²1²a¨-Ò8ÐZ^Ø5?Ð5K˜:¢a¨ªAªq jÒ1ÐQUØ+Ø9EÐ9Q˜\ª!¨Q²²1¨*Ò5ÐW[Ø%&¨¡UØ"3Ø%9Ø'ð  ó ˆGñ 6A˜G×1Ò1ÀgÈaÁjˆMØ×!Ñ! -Ô0Ù#Ø×$Ñ$ W×%:Ñ%:Ô;Ú Ø×!Ñ! '×"4Ñ"4Õ5ð)	6ô, Ÿ	™	 .°bÔ9ˆØ—‘ Ó/ˆàˆØÐÜ'Ó)ˆHà—Y‘Y˜vŸ}™}Ó-ˆFÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDáØ˜m¨ZÐ8ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä7ØØØ'Ø!ô	
ð 	
r'   rX  )r   r   r   r.   r   r!   rY  r"   rZ  r   r%   r§   r©   rª   s   @r(   r�  r�    s7  ø„ ôð$ ð .2Ø37Ø26Ø15Ø.2Ø26Ø15Ø*.Ø)-Ø,0Ø#'ñv
à×#Ñ# dÑ*ðv
ð ×)Ñ)¨DÑ0ðv
ð ×(Ñ(¨4Ñ/ð	v
ð
 ×'Ñ'¨$Ñ.ðv
ð ×$Ñ$ tÑ+ðv
ð ×(Ñ(¨4Ñ/ðv
ð ×'Ñ'¨$Ñ.ðv
ð × Ñ  4Ñ'ðv
ð   $™;ðv
ð # T™kðv
ð ˜D‘[ðv
ð 
2°E¸%×:KÑ:KÑ4LÑ	Lòv
ó ôv
r'   r�  c                   óz  ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  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
ej                     z  fd„«       Zˆ xZS )ÚViltForTokenClassificationc                 ó0  •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        j                  |j                  «      | _        t        j                  |j                  |j                  «      | _        | j                  «        y )NF)rG  )r-   r.   r‚  r@  r2  r   r<   r=   r>   rØ   r3   r…  rF  r¼   s     €r(   r.   z#ViltForTokenClassification.__init__³  sk   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ˜f¸Ô>ˆŒ	ä—z‘z &×"<Ñ"<Ó=ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Õr'   Nr™   r    rš   rq   rr   r›   r¡   rl  rå   r*  r+  r÷   c                 ó2  — |�|n| j                   j                  }| j                  ||||||||	|
|¬«
      }|d   }|�|j                  d   n|j                  d   }| j	                  |«      }| j                  |dd…d|…f   «      }d}|�Wt        «       }|j                  |j                  «      } ||j                  d| j                  «      |j                  d«      «      }|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  ¬«      S )a/  
        image_embeds (`torch.FloatTensor` of shape `(batch_size, num_patches, hidden_size)`, *optional*):
            Optionally, instead of passing `pixel_values`, you can choose to directly pass an embedded representation.
            This is useful if you want more control over how to convert `pixel_values` into patch embeddings.
        labels (`torch.LongTensor` of shape `(batch_size, text_sequence_length)`, *optional*):
            Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.
        Nrn  r   r   rK   rC   ro  )r?   r+  r2  rT   r>   r…  r   re   rO   r]   r‚  r   r   r   )r@   r™   r    rš   rq   rr   r›   r¡   rl  rå   r*  r+  rQ  rî   rV  Útext_input_sizer   r   rt  r   s                       r(   r§   z"ViltForTokenClassification.forward¿  s<  € ð0 &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—)‘)ØØ)Ø)Ø%Ø!Ø'Ø%Ø/Ø!5Ø#ð ó 
ˆð " !™*ˆà09Ð0E˜)Ÿ/™/¨!Ò,È=×K^ÑK^Ð_`ÑKaˆàŸ,™, Ó7ˆØ—‘ ²Ð4D°_Ð4DÐ1DÑ!EÓFˆàˆØÐÜ'Ó)ˆHà—Y‘Y˜vŸ}™}Ó-ˆFÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r'   rX  )r   r   r   r.   r   r!   rY  r"   rZ  r   r%   r§   r©   rª   s   @r(   r™  r™  ±  s)  ø„ ô
ð ð .2Ø37Ø26Ø15Ø.2Ø26Ø15Ø*.Ø)-Ø,0Ø#'ñ=
à×#Ñ# dÑ*ð=
ð ×)Ñ)¨DÑ0ð=
ð ×(Ñ(¨4Ñ/ð	=
ð
 ×'Ñ'¨$Ñ.ð=
ð ×$Ñ$ tÑ+ð=
ð ×(Ñ(¨4Ñ/ð=
ð ×'Ñ'¨$Ñ.ð=
ð × Ñ  4Ñ'ð=
ð   $™;ð=
ð # T™kð=
ð ˜D‘[ð=
ð 
  u×'8Ñ'8Ñ!9Ñ	9ò=
ó ô=
r'   r™  )rŠ  r�  r™  rb  r€  r  r@  r1  );r    Úcollections.abcrÈ   rà   Údataclassesr   r!   r   Útorch.nnr   Ú r   r7  Úactivationsr   Úmasking_utilsr	   Úmodeling_layersr
   Úmodeling_outputsr   r   r   r   r   r   Úmodeling_utilsr   Úutilsr   r   Úconfiguration_viltr   Ú
get_loggerr   Úloggerr   ÚModuler*   r/   r5   rÐ   rò   rý   r  r  r  r  r1  r@  rD  rb  rw  rd  r€  rŠ  r�  r™  Ú__all__r&   r'   r(   ú<module>r¬     s^  ðñ ã Û Ý !ã Ý Ý %å &Ý !Ý 6Ý 9÷÷ õ .ß ,Ý *ð 
ˆ×	Ñ	˜HÓ	%€ñ ðôð
 ô=¨{ó =ó óð=ô$W!�R—Y‘Yô W!ôt3�R—Y‘Yô 3ôl˜"Ÿ)™)ô ô>0˜Ÿ	™	ô 0ôh�R—Y‘Yô ô"�B—I‘Iô ô �r—y‘yô ô 
�—‘ô 
ô"Ð*ô "ôJ&
�"—)‘)ô &
ðR ô/˜/ó /ó ð/ð ôI
Ð#ó I
ó ðI
ôX�—‘ô ñ ðôô
F
Ð)ó F
óð
F
ôR "§)¡)ô ô"
�"—)‘)ô 
ñ ðôôh
Ð2ó h
óðh
ñV ðôô[
Ð#6ó [
óð[
ñ| ðôô
J
Ð)<ó J
óð
J
ðZ ôK
Ð!4ó K
ó ðK
ò\	�r'   