§
    ‚ŠtjsÒ  ã                   óž  — 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j!        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¦  «        Z. G d&„ d'ej%        ¦  «        Z/e G d(„ d)e¦  «        ¦   «         Z0e G d*„ d+e0¦  «        ¦   «         Z1 G d,„ d-ej%        ¦  «        Z2 ed.¬¦  «         G d/„ d0e0¦  «        ¦   «         Z3 G d1„ d2ej%        ¦  «        Z4 G d3„ d4ej%        ¦  «        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:dS )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<   dS )Ú(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   © ó    úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/vilt/modeling_vilt.pyr   r   ,   s’   € € € € € € ð	ð 	ð &*€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        ¦  «        | _        || _        d S ©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Ô5ˆÔåœ¥e¤k°!°Q¸Ô8JÑ&KÔ&KÑLÔLˆŒÝ 3°FÑ ;Ô ;ˆÔØÔ+Ô7ˆÝ#%¤<µ´¸A¸{ÈQ¹ÐPVÔPbÑ0cÔ0cÑ#dÔ#dˆÔ å%'¤\°&Ô2QÐSYÔSeÑ%fÔ%fˆÔ"Ý”z &Ô"<Ñ=Ô=ˆŒØˆŒˆˆr'   éÈ   c           	      ó  ‡‡‡ ‡!‡"‡#— | j         j        j        j        \  }}}}|                       |¦  «        }|d d …d d d …d d …f                              ¦   «         }t
          j                             ||j        d         |j        d         f¬¦  «                             ¦   «         }|d d …df          	                    d¬¦  «        d d …df         }	|d d …df          	                    d¬¦  «        d d …df         }
|j        \  }}ŠŠ#| j
        j        | j
        j        z  }| j        d d …dd …d d …f                              dd¦  «                             d|||¦  «        Š!t!          j        ˆˆ!ˆ#fd„t%          |	|
¦  «        D ¦   «         d¬¦  «        }|                     d¦  «                             dd¦  «        }|                     d¦  «                             dd¦  «        }t!          j        t!          j        t!          j        |j        d         ¦  «        t!          j        |j        d	         ¦  «        d
¬¦  «        d	¬¦  «                             |j        ¬¦  «        }|d d d d …d d …d d …f         }|                     |j        d         |j        d         d	d	d	¦  «        }|                     dd¦  «        }|                     d¦  «        }‰dk     s‰�t5          ‰t6          ¦  «        s|	|
z  }|                     ¦   «         Šn'|	|
z  }t;          |                     ¦   «         ‰¦  «        Š|                     d¬¦  «        Š"d|z
                       d¬¦  «        Š ‰"d d …df                              ¦   «         }ˆ"fd„|D ¦   «         }ˆ fd„|D ¦   «         }d„ |D ¦   «         }d„ |D ¦   «         }ˆfd„|D ¦   «         }g }tA          t%          |||¦  «        ¦  «        D ]â\  }\  }}}|dk    r[t!          j!        t!          j"        |¦  «                             ¦   «         ‰¦  «        }| #                    ||         |         ¦  «         Œjt!          j!        t!          j"        |¦  «                             ¦   «         |d¬¦  «        }| #                    t!          j        ||         ||         |         gd¬¦  «        ¦  «         Œãt!          j        |d¬¦  «        }||d d …df         |d d …df         f                              |d	|¦  «        }||d d …df         |d d …df         f                              |d	¦  «        }||d d …df         |d d …df         f                              |d	d¦  «        }||d d …df         |d d …df         f                              |d	|¦  «        }| j$                             |d	d	¦  «        }t!          j        ||fd¬¦  «        }t!          j        | j        d d …dd d …f         d d …d d d …f                              |d	d	¦  «        |fd¬¦  «        }||z   }|  %                    |¦  «        }t!          j        t!          j"        |j        d         d¦  «                             |¦  «        |gd¬¦  «        }|||‰‰#fffS )Né   r   ©Úsizer   r   ©Údimc           
      ó°   •— g | ]R\  }}t           j                             t           j                             ‰||fd d¬¦  «        d‰|z
  d‰|z
  f¦  «        ‘ŒSS )ÚbilinearT)rF   ÚmodeÚalign_cornersr   )r   Ú
functionalÚpadÚinterpolate)Ú.0ÚhÚwÚheightÚspatial_posÚwidths      €€€r(   ú
<listcomp>z/ViltEmbeddings.visual_embed.<locals>.<listcomp>i   s�   ø€ ð ð ð ñ �A�qõ ”×!Ò!Ý”M×-Ò-Ø#Ø ˜VØ'Ø&*ð	 .ñ ô ð ˜ ™	 1 f¨q¡jÐ1ñô ðð ð r'   éþÿÿÿéÿÿÿÿÚij)Úindexing©ÚdeviceF)Úas_tuplec                 ó<   •— g | ]}‰‰d d …df         |k             ‘ŒS ©Nr   r&   )rP   ÚuÚ	valid_idxs     €r(   rV   z/ViltEmbeddings.visual_embed.<locals>.<listcomp>‘   s/   ø€ ÐNÐNÐN¸Q˜ 9¨Q¨Q¨Q°¨T¤?°aÒ#7Ô8ÐNÐNÐNr'   c                 ó<   •— g | ]}‰‰d d …df         |k             ‘ŒS r_   r&   )rP   r`   Únon_valid_idxs     €r(   rV   z/ViltEmbeddings.visual_embed.<locals>.<listcomp>’   s0   ø€ ÐZÐZÐZÈ˜]¨=¸¸¸¸A¸Ô+>À!Ò+CÔDÐZÐZÐZr'   c                 ó8   — g | ]}|                      d ¦  «        ‘ŒS ©r   rE   ©rP   Úvs     r(   rV   z/ViltEmbeddings.visual_embed.<locals>.<listcomp>”   s"   € Ð7Ð7Ð7 A�a—f’f˜Q‘i”iÐ7Ð7Ð7r'   c                 ó8   — g | ]}|                      d ¦  «        ‘ŒS re   rE   rf   s     r(   rV   z/ViltEmbeddings.visual_embed.<locals>.<listcomp>•   s"   € Ð?Ð?Ð?¨˜!Ÿ&š& ™)œ)Ð?Ð?Ð?r'   c                 ó   •— g | ]}‰|z
  ‘ŒS r&   r&   )rP   rg   Úmax_image_lengths     €r(   rV   z/ViltEmbeddings.visual_embed.<locals>.<listcomp>–   s   ø€ Ð=Ð=Ð=¨QÐ$ qÑ(Ð=Ð=Ð=r'   T)Úreplacement)&r6   Ú
projectionÚweightÚshapeÚfloatr   rM   rO   ÚlongÚsumr?   Ú
image_sizeÚ
patch_sizer8   Ú	transposeÚviewr!   ÚcatÚzipÚflattenÚstackÚmeshgridÚarangeÚtor\   ÚexpandÚ
isinstanceÚintÚmaxÚminÚnonzeroÚuniqueÚ	enumerateÚmultinomialÚonesÚappendr4   r>   )$r@   Úpixel_valuesÚ
pixel_maskrj   Ú_ÚphÚpwÚxÚx_maskÚx_hÚx_wÚ
batch_sizeÚnum_channelsÚ	patch_dimÚ	pos_embedÚpatch_indexÚeffective_resolutionÚunique_rowsÚvalid_row_idxÚnon_valid_row_idxÚ
valid_numsÚnon_valid_numsÚpad_numsÚselectÚirg   ÚnvÚpÚvalid_choiceÚ
pad_choiceÚ
cls_tokensrS   rc   rT   ra   rU   s$      `                           @@@@@r(   Úvisual_embedzViltEmbeddings.visual_embed\   sÎ  øøøøøø€ ØÔ,Ô7Ô>ÔD‰ˆˆ1ˆb�"à×!Ò! ,Ñ/Ô/ˆØ˜A˜A˜A˜t Q Q Q¨¨¨˜MÔ*×0Ò0Ñ2Ô2ˆÝ”×*Ò*¨6¸¼À¼ÀQÄWÈQÄZÐ8PÐ*ÑQÔQ×VÒVÑXÔXˆØ�Q�Q�Q˜�TŒl×Ò 1ÐÑ%Ô% a a a¨ dÔ+ˆØ�Q�Q�Q˜�TŒl×Ò 1ÐÑ%Ô% a a a¨ dÔ+ˆà23´'Ñ/ˆ
�L &¨%Ø”KÔ*¨d¬kÔ.DÑDˆ	ØÔ.¨q¨q¨q°!°"°"°a°a°a¨xÔ8×BÒBÀ1ÀaÑHÔH×MÒMÈaÐQ]Ð_hÐjsÑtÔtˆÝ”Iðð ð ð ð ð õ    S™MœMðñ ô ð ð
ñ 
ô 
ˆ	ð  ×%Ò% aÑ(Ô(×2Ò2°1°aÑ8Ô8ˆ	Ø�IŠI�a‰LŒL×"Ò" 1 aÑ(Ô(ˆå”kÝŒN�5œ<¨¬°RÔ(8Ñ9Ô9½5¼<ÈÌÐUWÔHXÑ;YÔ;YÐdhÐiÑiÔiÐoqð
ñ 
ô 
ç
Š"�F”Mˆ"Ñ
"Ô
"ð 	ð " $¨¨a¨a¨a°°°°A°A°AÐ"5Ô6ˆØ!×(Ò(¨¬°a¬¸&¼,Àq¼/È2ÈrÐSUÑVÔVˆØ!×)Ò)¨!¨QÑ/Ô/ˆØ—’ Ñ"Ô"ˆà˜aÒÐÐ#3Ð#;Å:ÐN^Õ`cÑCdÔCdÐ#;ð
 $'¨¡9Ð Ø3×7Ò7Ñ9Ô9ÐÐà#&¨¡9Ð Ý"Ð#7×#;Ò#;Ñ#=Ô#=Ð?OÑPÔPÐà—N’N¨E�NÑ2Ô2ˆ	Ø˜V™×,Ò,°eÐ,Ñ<Ô<ˆØ    1 ”o×,Ò,Ñ.Ô.ˆØNÐNÐNÐNÀ+ÐNÑNÔNˆØZÐZÐZÐZÈkÐZÑZÔZÐà7Ð7¨Ð7Ñ7Ô7ˆ
Ø?Ð?Ð->Ð?Ñ?Ô?ˆØ=Ð=Ð=Ð=°*Ð=Ñ=Ô=ˆàˆÝ&¥s¨:°~ÀxÑ'PÔ'PÑQÔQð 	fð 	f‰MˆA‰z��2�qØ�AŠvˆvÝ$Ô0µ´¸A±´×1DÒ1DÑ1FÔ1FÐHXÑYÔY�Ø—’˜m¨AÔ.¨|Ô<Ñ=Ô=Ð=Ð=å"Ô.­u¬z¸"©~¬~×/CÒ/CÑ/EÔ/EÀqÐVZÐ[Ñ[Ô[�
Ø—’�eœi¨°qÔ)9Ð;LÈQÔ;OÐPZÔ;[Ð(\ÐbcÐdÑdÔdÑeÔeÐeÐeå”˜6 qÐ)Ñ)Ô)ˆØˆf�Q�Q�Q˜�TŒl˜F 1 1 1 a 4œLÐ(Ô)×.Ò.¨z¸2¸|ÑLÔLˆØ˜˜q˜q˜q !˜tœ f¨Q¨Q¨Q°¨T¤lÐ2Ô3×8Ò8¸ÀRÑHÔHˆà! &¨¨¨¨A¨¤,°°q°q°q¸!°t´Ð"<Ô=×BÒBÀ:ÈrÐSTÑUÔUˆØ˜f Q Q Q¨ Tœl¨F°1°1°1°a°4¬LÐ8Ô9×>Ò>¸zÈ2È|Ñ\Ô\ˆ	à”^×*Ò*¨:°r¸2Ñ>Ô>ˆ
ÝŒI�z 1�o¨1Ð-Ñ-Ô-ˆÝ”IØÔ% a a a¨¨A¨A¨A gÔ.¨q¨q¨q°$¸¸¸¨zÔ:×AÒAÀ*ÈbÐRTÑUÔUÐW`ÐaÐghð
ñ 
ô 
ˆ	ð �	‰MˆØ�LŠL˜‰OŒOˆå”�EœJ v¤|°A¤¸Ñ:Ô:×=Ò=¸fÑEÔEÀvÐNÐTUÐVÑVÔVˆà�&˜;¨°¨Ð8Ð8Ð8r'   r   c	           	      ó  — |                       |||¬¦  «        }	|€'|                      ||| j        j        ¬¦  «        \  }}
}n|                     d¦  «        }
|€d}|	|                      t          j        |t          j        |	j	        ¬¦  «        ¦  «        z   }	||                      t          j
        |
|t          j        |	j	        ¬¦  «        ¦  «        z   }t          j        |	|gd¬¦  «        }t          j        ||
gd¬¦  «        }||fS )N)Ú	input_idsÚtoken_type_idsÚinputs_embeds)rj   r   ©Údtyper\   rG   )r0   r¤   r?   rj   rx   r;   r!   Ú
zeros_likerp   r\   Ú	full_likerv   )r@   r¦   Úattention_maskr§   rˆ   r‰   r¨   Úimage_embedsÚimage_token_type_idxÚtext_embedsÚimage_masksr•   Ú
embeddingsÚmaskss                 r(   ÚforwardzViltEmbeddings.forward´   s0  € ð ×*Ò*Ø°Èmð +ñ 
ô 
ˆð
 ÐØ59×5FÒ5FØ˜j¸4¼;Ô;Wð 6Gñ 6ô 6Ñ2ˆL˜+ { {ð %×,Ò,¨QÑ/Ô/ˆKð  Ð'Ø#$Ð Ø! D×$>Ò$>ÝÔ˜^µ5´:ÀkÔFXÐYÑYÔYñ%
ô %
ñ 
ˆð $ d×&@Ò&@ÝŒO˜KÐ)=ÅUÄZÐXcÔXjÐkÑkÔkñ'
ô '
ñ 
ˆõ
 ”Y ¨\Ð:ÀÐBÑBÔBˆ
Ý”	˜>¨;Ð7¸QÐ?Ñ?Ô?ˆà˜5Ð Ð r'   )rB   )r   )r   r   r   r    r.   r¤   r´   Ú__classcell__©rA   s   @r(   r*   r*   D   st   ø€ € € € € ðð ðð ð ð ð ðV9ð V9ð V9ð 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        ¦  «        | _        |                      dt%          j        |j        ¦  «                             d¦  «        d¬¦  «         |                      dt%          j        | j                             ¦   «         t$          j        ¬¦  «        d¬¦  «         d S )	N)Úpadding_idx©ÚepsÚposition_ids©r   rX   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!   r{   r}   r2   r¼   rF   rp   ©r@   r?   rA   s     €r(   r.   zTextEmbeddings.__init__á   s3  ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?QÐ_eÔ_rÐsÑsÔsˆÔÝ#%¤<°Ô0NÐPVÔPbÑ#cÔ#cˆÔ Ý%'¤\°&Ô2HÈ&ÔJ\Ñ%]Ô%]ˆÔ"åœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒà×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	×ÒØ�eœk¨$Ô*;×*@Ò*@Ñ*BÔ*BÍ%Ì*ÐUÑUÔUÐbgð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r'   Nc                 ón  — |�|                      ¦   «         }n|                      ¦   «         d d…         }|d         }|€| j        d d …d |…f         }|€mt          | d¦  «        r2| j        d d …d |…f         }|                     |d         |¦  «        }|}n+t          j        |t
          j        | j        j        ¬¦  «        }|€|  	                    |¦  «        }|  
                    |¦  «        }	||	z   }
|                      |¦  «        }|
|z  }
|                      |
¦  «        }
|                      |
¦  «        }
|
S )NrX   r   r§   r   r©   )rF   r¼   Úhasattrr§   r}   r!   r2   rp   r\   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ñ   sT  € ØÐ Ø#Ÿ.š.Ñ*Ô*ˆKˆKà'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKà  ”^ˆ
àÐØÔ,¨Q¨Q¨Q°°°¨^Ô<ˆLð
 Ð!Ý�tÐ-Ñ.Ô.ð mØ*.Ô*=¸a¸a¸aÀÀ*À¸nÔ*MÐ'Ø3J×3QÒ3QÐR]Ð^_ÔR`ÐblÑ3mÔ3mÐ0Ø!A��å!&¤¨[ÅÄ
ÐSWÔSdÔSkÐ!lÑ!lÔ!l�àÐ Ø ×0Ò0°Ñ;Ô;ˆMØ $× :Ò :¸>Ñ JÔ JÐØ"Ð%:Ñ:ˆ
à"×6Ò6°|ÑDÔDÐØÐ)Ñ)ˆ
à—^’^ JÑ/Ô/ˆ
Ø—\’\ *Ñ-Ô-ˆ
ØÐr'   )NNNN©r   r   r   r    r.   r´   rµ   r¶   s   @r(   r/   r/   Þ   sR   ø€ € € € € ØQÐ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        ||||¬¦  «        | _        d S )Nr   r   )Úkernel_sizeÚstride)r-   r.   rr   rs   r’   r3   r~   ÚcollectionsÚabcÚIterabler7   r   ÚConv2drl   )r@   r?   rr   rs   r’   r3   r7   rA   s          €r(   r.   zViltPatchEmbeddings.__init__  sá   ø€ Ý‰Œ×ÒÑÔÐØ!'Ô!2°FÔ4E�Jˆ
Ø$*Ô$7¸Ô9K�kˆå#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ý#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ø! !”}¨
°1¬Ñ5¸*ÀQ¼-È:ÐVWÌ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔåœ) L°+È:Ð^hÐiÑiÔiˆŒˆˆr'   c                 óÆ   — |j         \  }}}}|| j        k    rt          d¦  «        ‚| j        j        j        }|                      |                     |¬¦  «        ¦  «        }|S )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.r¿   )rn   r’   Ú
ValueErrorrl   rm   rª   r|   )r@   rˆ   r‘   r’   rS   rU   Útarget_dtyper�   s           r(   r´   zViltPatchEmbeddings.forward(  si   € Ø2>Ô2DÑ/ˆ
�L &¨%Ø˜4Ô,Ò,Ð,ÝØwñô ð ð ”Ô-Ô3ˆØ�OŠO˜LŸOšO°,˜OÑ?Ô?Ñ@Ô@ˆØˆr'   rÏ   r¶   s   @r(   r5   r5     sV   ø€ € € € € ðð ðjð jð jð jð jðð ð ð ð ð ð r'   r5   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )ÚViltSelfAttentionc                 óŽ  •— t          ¦   «                              ¦   «          |j        |j        z  dk    r0t	          |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        ¦  «        | _        d S )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Ù   r   Ú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ÔHiÐ?Ýð7 6Ô#5ð 7ð 7ØÔ3ð7ð 7ð 7ñô ð ð
 $*Ô#=ˆÔ Ý#& vÔ'9¸FÔ<VÑ'VÑ#WÔ#WˆÔ Ø!Ô5¸Ô8PÑPˆÔå”Y˜vÔ1°4Ô3EÈFÌOÐ\Ñ\Ô\ˆŒ
Ý”9˜VÔ/°Ô1CÈ&Ì/ÐZÑZÔZˆŒÝ”Y˜vÔ1°4Ô3EÈFÌOÐ\Ñ\Ô\ˆŒ
å”z &Ô"EÑFÔFˆŒˆˆr'   NFc                 ó”  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }t          j        ||                     dd¦  «        ¦  «        }	|	t          j
        | j        ¦  «        z  }	|�|	|z   }	 t          j        d¬¦  «        |	¦  «        }
|                      |
¦  «        }
t          j        |
|¦  «        }|                     dddd¦  «                             ¦   «         }|                     ¦   «         d d…         | j        fz   } |j        |Ž }|r||
fn|f}|S )NrX   r   rD   rW   rG   r   r   )rn   râ   ræ   ru   rt   rç   rè   r!   ÚmatmulÚmathÚsqrtr   ÚSoftmaxr>   ÚpermuteÚ
contiguousrF   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Ð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ˆõ !œ<¨°Y×5HÒ5HÈÈRÑ5PÔ5PÑQÔQÐØ+­d¬i¸Ô8PÑ.QÔ.QÑQÐØÐ%à/°.Ñ@Ðð -�"œ*¨Ð,Ñ,Ô,Ð-=Ñ>Ô>ˆð Ÿ,š, Ñ7Ô7ˆåœ _°kÑBÔBˆà%×-Ò-¨a°°A°qÑ9Ô9×DÒDÑFÔFˆØ"/×"4Ò"4Ñ"6Ô"6°s¸°sÔ";¸tÔ?QÐ>SÑ"SÐØ*˜Ô*Ð,CÐDˆà6GÐ]�= /Ð2Ð2ÈmÐM]ˆàˆr'   ©NF©r   r   r   r.   r´   rµ   r¶   s   @r(   rÜ   rÜ   3  sQ   ø€ € € € € ðGð Gð Gð Gð Gð$ð ð ð ð ð ð ð r'   rÜ   c                   óZ   ‡ — 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        ¦  «        | _        d S ©N)	r-   r.   r   rä   r3   Údenser<   r=   r>   rÈ   s     €r(   r.   zViltSelfOutput.__init__m  sJ   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr'   r   Úinput_tensorÚreturnc                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r   ©r  r>   ©r@   r   r  s      r(   r´   zViltSelfOutput.forwardr  s*   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØÐr'   )
r   r   r   r    r   r.   r!   ÚTensorr´   rµ   r¶   s   @r(   rþ   rþ   g  s   ø€ € € € € ðð ð
>˜zð >ð >ð >ð >ð >ð >ð
 U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r'   rþ   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )ÚViltAttentionc                 ó˜   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |¦  «        | _        d S r   )r-   r.   rÜ   Ú	attentionrþ   ÚoutputrÈ   s     €r(   r.   zViltAttention.__init__y  s;   ø€ Ý‰Œ×ÒÑÔÐÝ*¨6Ñ2Ô2ˆŒÝ$ VÑ,Ô,ˆŒˆˆr'   NFc                 óˆ   — |                       |||¦  «        }|                      |d         |¦  «        }|f|dd …         z   }|S )Nr   r   )r  r  )r@   r   r­   rñ   Úself_outputsÚattention_outputrú   s          r(   r´   zViltAttention.forward~  sK   € Ø—~’~ m°^ÐEVÑWÔWˆàŸ;š; |°A¤¸ÑFÔFÐà#Ð%¨°Q°R°RÔ(8Ñ8ˆØˆr'   rû   rü   r¶   s   @r(   r	  r	  x  sL   ø€ € € € € ð-ð -ð -ð -ð -ð
ð ð ð ð ð ð ð r'   r	  c                   óH   ‡ — 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                 | _        d S |j        | _        d S r   )r-   r.   r   rä   r3   Úintermediate_sizer  r~   Ú
hidden_actÚstrr   Úintermediate_act_fnrÈ   s     €r(   r.   zViltIntermediate.__init__‰  sn   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3KÑLÔLˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$r'   r   r  c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r   )r  r  ©r@   r   s     r(   r´   zViltIntermediate.forward‘  s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐr'   ©	r   r   r   r   r.   r!   r  r´   rµ   r¶   s   @r(   r  r  ˆ  sj   ø€ € € € € ð9˜zð 9ð 9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð r'   r  c                   óV   ‡ — 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        ¦  «        | _	        d S r   )
r-   r.   r   rä   r  r3   r  r<   r=   r>   rÈ   s     €r(   r.   zViltOutput.__init__™  sJ   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ7¸Ô9KÑLÔLˆŒ
Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr'   r   r  r  c                 ód   — |                       |¦  «        }|                      |¦  «        }||z   }|S r   r  r  s      r(   r´   zViltOutput.forwardž  s4   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØ%¨Ñ4ˆØÐr'   r  r¶   s   @r(   r  r  ˜  su   ø€ € € € € ð>˜zð >ð >ð >ð >ð >ð >ð
 U¤\ð ÀÄð ÐRWÔ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                 óz  •— t          ¦   «                              ¦   «          |j        | _        d| _        t	          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _	        t          j        |j        |j        ¬¦  «        | _        t          j        |j        |j        ¬¦  «        | _        d S )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ˆÔ$ØˆÔÝ& vÑ.Ô.ˆŒÝ,¨VÑ4Ô4ˆÔÝ  Ñ(Ô(ˆŒÝ "¤¨VÔ-?ÀVÔEZÐ [Ñ [Ô [ˆÔÝ!œ|¨FÔ,>ÀFÔDYÐZÑZÔZˆÔÐÐr'   NFc                 óF  — |                       |                      |¦  «        ||¬¦  «        }|d         }|dd …         }||                     |j        ¦  «        z   }|                      |¦  «        }|                      |¦  «        }|                      ||¦  «        }|f|z   }|S )N)rñ   r   r   )r  r$  r|   r\   r%  r#  r  )r@   r   r­   rñ   Úself_attention_outputsr  rú   Úlayer_outputs           r(   r´   zViltLayer.forward²  s¹   € Ø!%§¢Ø×!Ò! -Ñ0Ô0ØØ/ð "0ñ "
ô "
Ðð
 2°!Ô4ÐØ(¨¨¨Ô,ˆð )¨=×+;Ò+;Ð<LÔ<SÑ+TÔ+TÑTˆð ×+Ò+¨MÑ:Ô:ˆØ×(Ò(¨Ñ6Ô6ˆð —{’{ <°Ñ?Ô?ˆà�/ GÑ+ˆàˆr'   rû   rÏ   r¶   s   @r(   r  r  ¥  sW   ø€ € € € € ØIÐIð[ð [ð [ð [ð [ðð ð ð ð ð ð ð r'   r  c                   ó.   ‡ — e Zd Zˆ fd„Z	 	 	 	 dd„Zˆ xZS )ÚViltEncoderc                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r&   )r  )rP   rŠ   r?   s     €r(   rV   z(ViltEncoder.__init__.<locals>.<listcomp>Î  s!   ø€ Ð#_Ð#_Ð#_¸!¥I¨fÑ$5Ô$5Ð#_Ð#_Ð#_r'   F)	r-   r.   r?   r   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayerÚgradient_checkpointingrÈ   s    `€r(   r.   zViltEncoder.__init__Ë  s`   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”]Ð#_Ð#_Ð#_Ð#_½uÀVÔE]Ñ?^Ô?^Ð#_Ñ#_Ô#_Ñ`Ô`ˆŒ
Ø&+ˆÔ#Ð#Ð#r'   NFTc                 ó  — |rdnd }|rdnd }t          | j        ¦  «        D ]0\  }}	|r||fz   } |	|||¦  «        }
|
d         }|r||
d         fz   }Œ1|r||fz   }|st          d„ |||fD ¦   «         ¦  «        S t          |||¬¦  «        S )Nr&   r   r   c              3   ó   K  — | ]}|®|V — Œ	d S r   r&   rf   s     r(   ú	<genexpr>z&ViltEncoder.forward.<locals>.<genexpr>ë  s(   è è € ÐmÐm˜qÐ_`Ð_l˜Ð_lÐ_lÐ_lÐ_lÐmÐmr'   )Úlast_hidden_stater   r   )r„   r0  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˜B¸DÐØ$5Ð?˜b˜b¸4Ðå(¨¬Ñ4Ô4ð 		Pð 		P‰OˆAˆ|Ø#ð IØ$5¸Ð8HÑ$HÐ!à(˜L¨¸ÐHYÑZÔZˆMà)¨!Ô,ˆMà ð PØ&9¸]È1Ô=MÐ<OÑ&OÐ#øàð 	EØ 1°]Ð4DÑ DÐàð 	nÝÐmÐm ]Ð4EÐGZÐ$[ÐmÑmÔmÑmÔmÐmÝØ+Ø+Ø*ð
ñ 
ô 
ð 	
r'   )NFFTrü   r¶   s   @r(   r*  r*  Ê  sZ   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð ØØ"Øð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
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                 óH  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rjt	          j        |j        t          j        |j        j	        d         ¦  «         
                    d¦  «        ¦  «         t	          j        |j        ¦  «         d S d S )NrX   r½   )r-   Ú_init_weightsr~   r/   ÚinitÚcopy_r¼   r!   r{   rn   r}   Úzeros_r§   )r@   ÚmodulerA   s     €r(   rB  z!ViltPreTrainedModel._init_weightsû  sŠ   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�nÑ-Ô-ð 	/ÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÝŒK˜Ô-Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/r'   )r   r   r   r   r#   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesrB  rµ   r¶   s   @r(   r=  r=  ó  sd   ø€ € € € € € àÐÐÑØÐØ(ÐØ&*Ð#Ø)Ð+>Ð?Ðð/ð /ð /ð /ð /ð /ð /ð /ð /r'   r=  c                   ó0  ‡ — 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 )Ú	ViltModelTc                 óJ  •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        t          j        |j	        |j
        ¬¦  «        | _        |rt          |¦  «        nd| _        |                      ¦   «          dS )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__  s�   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð ØˆŒå(¨Ñ0Ô0ˆŒÝ" 6Ñ*Ô*ˆŒåœ fÔ&8¸fÔ>SÐTÑTÔTˆŒØ,=ÐG•j Ñ(Ô(Ð(À4ˆŒð 	�ŠÑÔÐÐÐr'   c                 ó$   — | j         j        j        S r   ©r²   r0   rÂ   ©r@   s    r(   Úget_input_embeddingszViltModel.get_input_embeddings  s   € ØŒÔ.Ô>Ð>r'   c                 ó(   — || j         j        _        d S r   rU  )r@   rè   s     r(   Úset_input_embeddingszViltModel.set_input_embeddings  s   € Ø:?ˆŒÔ'Ô7Ð7Ð7r'   Nr¦   r­   r§   rˆ   r‰   r¨   r®   r¯   rñ   r6  r7  r  c           
      ó  — |	�|	n| j         j        }	|
�|
n| j         j        }
|�|n| j         j        }|�|�t	          d¦  «        ‚|�+|                      ||¦  «         |                     ¦   «         }n.|�|                     ¦   «         dd…         }nt	          d¦  «        ‚|\  }}|�|j        n|j        }|€t          j	        ||f|¬¦  «        }|�|�t	          d¦  «        ‚|€|€t	          d¦  «        ‚|�|j
        d         n|j
        d         }||k    rt	          d	¦  «        ‚|€-t          j	        || j         j        | j         j        f|¬¦  «        }|                      ||||||||¬
¦  «        \  }}t          | j         ||¬¦  «        }|                      |||	|
|¬¦  «        }|d         }|                      |¦  «        }| 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 timerX   z5You have to specify either input_ids or inputs_embedsr[   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ñ   r6  r7  r   )r5  Úpooler_outputr   r   )r?   rñ   r6  r7  rÙ   Ú%warn_if_padding_and_no_attention_maskrF   r\   r!   r†   rn   rr   r²   r	   rN  rO  rQ  r   r   r   )r@   r¦   r­   r§   rˆ   r‰   r¨   r®   r¯   rñ   r6  r7  ÚkwargsrË   Útext_batch_sizerÌ   r\   Úimage_batch_sizeÚembedding_outputÚencoder_outputsÚsequence_outputÚpooled_outputs                         r(   r´   zViltModel.forward  s¥  € ðX 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàÐ  ]Ð%>ÝÐcÑdÔdÐdØÐ"Ø×6Ò6°yÀ.ÑQÔQÐQØ#Ÿ.š.Ñ*Ô*ˆKˆKØÐ&Ø'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKˆKåÐTÑUÔUÐUà&1Ñ#ˆ˜Ø%.Ð%:�Ô!Ð!ÀÔ@TˆàÐ!Ý"œZ¨/¸:Ð)FÐPVÐWÑWÔWˆNàÐ#¨Ð(@ÝÐeÑfÔfÐfØÐ! lÐ&:ÝÐVÑWÔWÐWà4@Ð4L˜<Ô-¨aÔ0Ð0ÐR^ÔRdÐefÔRgÐØ˜Ò.Ð.ÝÐ`ÑaÔaÐaØÐÝœÐ%5°t´{Ô7MÈtÌ{ÔOeÐ$fÐouÐvÑvÔvˆJà+/¯?ª?ØØØØØØØØ!5ð ,;ñ 	,
ô 	,
Ñ(Ð˜.õ 3Ø”;Ø*Ø)ð
ñ 
ô 
ˆð Ÿ,š,ØØ)Ø/Ø!5Ø#ð 'ñ 
ô 
ˆð *¨!Ô,ˆØŸ.š.¨Ñ9Ô9ˆØ8<¼Ð8O˜Ÿš OÑ4Ô4Ð4ÐUYˆàð 	JØ# ]Ð3°oÀaÀbÀbÔ6IÑIÐIå)Ø-Ø'Ø)Ô7Ø&Ô1ð	
ñ 
ô 
ð 	
r'   )T©NNNNNNNNNNN)r   r   r   r.   rW  rY  r   r!   Ú
LongTensorr"   r   Úboolr   r%   r´   rµ   r¶   s   @r(   rL  rL    s†  ø€ € € € € ðð ð ð ð ð ð"?ð ?ð ?ð@ð @ð @ð ð .2Ø37Ø26Ø15Ø.2Ø26Ø15Ø+/Ø)-Ø,0Ø#'ðp
ð 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
ð p
ñ „^ðp
ð p
ð p
ð p
ð p
r'   rL  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )rP  c                 óÀ   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        ¦   «         | _        d S r   )r-   r.   r   rä   r3   r  ÚTanhÚ
activationrÈ   s     €r(   r.   zViltPooler.__init__�  sC   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ'™)œ)ˆŒˆˆr'   c                 ór   — |d d …df         }|                       |¦  «        }|                      |¦  «        }|S r_   )r  rj  )r@   r   Úfirst_token_tensorrc  s       r(   r´   zViltPooler.forward•  s@   € ð +¨1¨1¨1¨a¨4Ô0ÐØŸ
š
Ð#5Ñ6Ô6ˆØŸš¨Ñ6Ô6ˆØÐr'   rü   r¶   s   @r(   rP  rP  �  sG   ø€ € € € € ð$ð $ð $ð $ð $ð
ð ð ð ð ð ð r'   rP  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	          |¦  «        | _        |                      ¦   «          d S r   )r-   r.   rL  r>  ÚViltMLMHeadÚ	mlm_scorerR  rÈ   s     €r(   r.   zViltForMaskedLM.__init__¨  sQ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜fÑ%Ô%ˆŒ	Ý$ VÑ,Ô,ˆŒð 	�ŠÑÔÐÐÐr'   c                 ó   — | j         j        S r   )rq  ÚdecoderrV  s    r(   Úget_output_embeddingsz%ViltForMaskedLM.get_output_embeddings±  s   € ØŒ~Ô%Ð%r'   c                 ó@   — || j         _        |j        | j         _        d S r   )rq  rs  rà   )r@   Únew_embeddingss     r(   Úset_output_embeddingsz%ViltForMaskedLM.set_output_embeddings´  s   € Ø!/ˆŒÔØ,Ô1ˆŒÔÐÐr'   Nr¦   r­   r§   rˆ   r‰   r¨   r®   Úlabelsrñ   r6  r7  r  c                 óT  — |�|n| j         j        }|                      ||||||||	|
|¬¦
  «
        }|dd…         \  }}|�|j        d         n|j        d         }|dd…d|…f         |dd…|d…f         }}|                      |¦  «        }d}|�et          ¦   «         }|                     |j        ¦  «        } ||                     d| j         j	        ¦  «        |                     d¦  «        ¦  «        }|s|f|dd…         z   }|�|f|z   n|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§   rˆ   r‰   r¨   r®   rñ   r6  r7  rD   r   rX   ©r   r   r   r   )r?   r7  r>  rn   rq  r   r|   r\   ru   rÀ   r   r   r   )r@   r¦   r­   r§   rˆ   r‰   r¨   r®   rx  rñ   r6  r7  r]  rú   rb  rc  Útext_seq_lenÚtext_featuresrŠ   Ú
mlm_logitsÚmasked_lm_lossÚloss_fctr  s                          r(   r´   zViltForMaskedLM.forward¸  s  € ðV &1Ð%<�k�kÀ$Ä+ÔBYˆà—)’)ØØ)Ø)Ø%Ø!Ø'Ø%Ø/Ø!5Ø#ð ñ 
ô 
ˆð *1°°!°¬Ñ&ˆ˜à-6Ð-B�y” qÔ)Ð)ÈÔH[Ð\]ÔH^ˆØ+¨A¨A¨A¨}°¨}Ð,<Ô=¸ÈqÈqÈqÐR^ÐR_ÐR_ÐO_Ô?`�qˆà—^’^ MÑ2Ô2ˆ
àˆØÐÝ'Ñ)Ô)ˆHà—Y’Y˜zÔ0Ñ1Ô1ˆFØ%˜X j§o¢o°b¸$¼+Ô:PÑ&QÔ&QÐSY×S^ÒS^Ð_aÑSbÔSbÑcÔcˆNàð 	ZØ �] W¨Q¨R¨R¤[Ñ0ˆFØ3AÐ3M�^Ð%¨Ñ.Ð.ÐSYÐYåØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r'   rd  )r   r   r   Ú_tied_weights_keysr.   rt  rw  r   r!   re  r"   rf  r   r%   r´   rµ   r¶   s   @r(   rn  rn  ž  s’  ø€ € € € € ð 	#Ð$\ðÐðð ð ð ð ð&ð &ð &ð2ð 2ð 2ð ð .2Ø37Ø26Ø15Ø.2Ø26Ø15Ø*.Ø)-Ø,0Ø#'ðp
ð p
àÔ# dÑ*ðp
ð Ô)¨DÑ0ðp
ð Ô(¨4Ñ/ð	p
ð
 Ô'¨$Ñ.ðp
ð Ô$ tÑ+ðp
ð Ô(¨4Ñ/ðp
ð Ô'¨$Ñ.ðp
ð Ô  4Ñ'ðp
ð   $™;ðp
ð # T™kðp
ð ˜D‘[ðp
ð 
˜% Ô 1Ô2Ñ	2ðp
ð p
ð p
ñ „^ðp
ð p
ð p
ð p
ð p
r'   rn  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚViltPredictionHeadTransformc                 óV  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _
        n|j        | _
        t          j        |j        |j        ¬¦  «        | _        d S )Nrº   )r-   r.   r   rä   r3   r  r~   r  r  r   Útransform_act_fnrÅ   rÆ   rÈ   s     €r(   r.   z$ViltPredictionHeadTransform.__init__-  s…   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ý�fÔ'­Ñ-Ô-ð 	6Ý$*¨6Ô+<Ô$=ˆDÔ!Ð!à$*Ô$5ˆDÔ!Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒˆˆr'   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r   )r  r…  rÅ   r  s     r(   r´   z#ViltPredictionHeadTransform.forward6  s=   € ØŸ
š
 =Ñ1Ô1ˆØ×-Ò-¨mÑ<Ô<ˆØŸš }Ñ5Ô5ˆØÐr'   rü   r¶   s   @r(   rƒ  rƒ  ,  sL   ø€ € € € € ðUð Uð Uð Uð Uðð ð ð ð ð ð r'   rƒ  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )rp  c                 óÆ   •— t          ¦   «                              ¦   «          || _        t          |¦  «        | _        t          j        |j        |j        ¦  «        | _	        d S r   )
r-   r.   r?   rƒ  Ú	transformr   rä   r3   rÀ   rs  rÈ   s     €r(   r.   zViltMLMHead.__init__>  sL   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ4°VÑ<Ô<ˆŒÝ”y Ô!3°VÔ5FÑGÔGˆŒˆˆr'   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r   )r‰  rs  )r@   r�   s     r(   r´   zViltMLMHead.forwardD  s'   € Ø�NŠN˜1ÑÔˆØ�LŠL˜‰OŒOˆØˆr'   rü   r¶   s   @r(   rp  rp  =  sL   ø€ € € € € ðHð Hð Hð Hð Hðð ð ð ð ð ð r'   rp  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                   ó,  ‡ — 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        ¦  «        ¦  «        | _        |                      ¦   «          d S )NrD   )r-   r.   Ú
num_labelsrL  r>  r   Ú
Sequentialrä   r3   rÅ   ÚGELUÚ
classifierrR  rÈ   s     €r(   r.   z!ViltForQuestionAnswering.__init__Q  s³   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ˜fÑ%Ô%ˆŒ	õ œ-ÝŒI�fÔ(¨&Ô*<¸qÑ*@ÑAÔAÝŒL˜Ô+¨aÑ/Ñ0Ô0ÝŒG‰IŒIÝŒI�fÔ(¨1Ñ,¨fÔ.?Ñ@Ô@ñ	
ô 
ˆŒð 	�ŠÑÔÐÐÐr'   Nr¦   r­   r§   rˆ   r‰   r¨   r®   rx  rñ   r6  r7  r  c                 ó²  — |�|n| j         j        }|                      ||||||||	|
|¬¦
  «
        }|r|j        n|d         }|                      |¦  «        }d}|�H|                     |j        ¦  «        }t          j         	                    ||¦  «        |j
        d         z  }|s|f|dd…         z   }|�|f|z   n|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
        ```Nrz  r   rD   r{  )r?   r7  r>  r[  r‘  r|   r\   r   rM   Ú binary_cross_entropy_with_logitsrn   r   r   r   )r@   r¦   r­   r§   rˆ   r‰   r¨   r®   rx  rñ   r6  r7  r]  rú   r[  r   r   r  s                     r(   r´   z ViltForQuestionAnswering.forwardb  s  € ðf &1Ð%<�k�kÀ$Ä+ÔBYˆà—)’)ØØ)Ø)Ø%Ø!Ø'Ø%Ø/Ø!5Ø#ð ñ 
ô 
ˆð 2=ÐL˜Ô-Ð-À'È!Ä*ˆà—’ Ñ/Ô/ˆàˆØÐà—Y’Y˜vœ}Ñ-Ô-ˆFÝ”=×AÒAÀ&È&ÑQÔQÐTZÔT`ÐabÔTcÑcˆDð ð 	FØ�Y ¨¨¨¤Ñ,ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå'ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r'   rd  ©r   r   r   r.   r   r!   re  r"   rf  r   r%   r´   rµ   r¶   s   @r(   rŒ  rŒ  J  sd  ø€ € € € € ðð ð ð ð ð" ð .2Ø37Ø26Ø15Ø.2Ø26Ø15Ø*.Ø)-Ø,0Ø#'ðU
ð 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
ð U
ñ „^ðU
ð U
ð U
ð 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                   ó,  ‡ — 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¦  «        | _        |                      ¦   «          d S r,   )	r-   r.   rL  r>  r   rä   r3   Úrank_outputrR  rÈ   s     €r(   r.   z%ViltForImageAndTextRetrieval.__init__Â  s[   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜fÑ%Ô%ˆŒ	õ œ9 VÔ%7¸Ñ;Ô;ˆÔð 	�ŠÑÔÐÐÐr'   Nr¦   r­   r§   rˆ   r‰   r¨   r®   rx  rñ   r6  r7  r  c                 ó@  — |�|n| j         j        }d}|�t          d¦  «        ‚|                      ||||||||	|
|¬¦
  «
        }|r|j        n|d         }|                      |¦  «        }|s|f|dd…         z   }|�|f|z   n|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.rz  r   rD   r{  )	r?   r7  ÚNotImplementedErrorr>  r[  r˜  r   r   r   )r@   r¦   r­   r§   rˆ   r‰   r¨   r®   rx  rñ   r6  r7  r]  r   rú   r[  r   r  s                     r(   r´   z$ViltForImageAndTextRetrieval.forwardÍ  sð   € ð^ &1Ð%<�k�kÀ$Ä+ÔBYˆàˆØÐÝ%Ð&FÑGÔGÐGà—)’)ØØ)Ø)Ø%Ø!Ø'Ø%Ø/Ø!5Ø#ð ñ 
ô 
ˆð 2=ÐL˜Ô-Ð-À'È!Ä*ˆà×!Ò! -Ñ0Ô0ˆàð 	FØ�Y ¨¨¨¤Ñ,ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå'ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r'   rd  r”  r¶   s   @r(   r–  r–  »  sd  ø€ € € € € ð	ð 	ð 	ð 	ð 	ð ð .2Ø37Ø26Ø15Ø.2Ø26Ø15Ø*.Ø)-Ø,0Ø#'ðN
ð 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
ð N
ñ „^ðN
ð N
ð N
ð N
ð N
r'   r–  zq
    Vilt Model transformer with a classifier head on top for natural language visual reasoning, e.g. NLVR2.
    c                   ó,  ‡ — 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        ¦  «        ¦  «        | _        |                      ¦   «          d S r   )r-   r.   rŽ  rL  r>  Ú
num_imagesr   r�  rä   r3   rÅ   r�  r‘  rR  )r@   r?   rž  rA   s      €r(   r.   z+ViltForImagesAndTextClassification.__init__%  sÀ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ˜fÑ%Ô%ˆŒ	ð Ô&ˆ
Ýœ-ÝŒI�fÔ(¨:Ñ5°vÔ7IÈJÑ7VÑWÔWÝŒL˜Ô+¨jÑ8Ñ9Ô9ÝŒG‰IŒIÝŒI�fÔ(¨:Ñ5°vÔ7HÑIÔIñ	
ô 
ˆŒð 	�ŠÑÔÐÐÐr'   Nr¦   r­   r§   rˆ   r‰   r¨   r®   rx  rñ   r6  r7  r  c                 ó–  — |	�|	n| j         j        }	|
�|
n| j         j        }
|�|n| j         j        }|� |j        dk    r|                     d¦  «        }|� |j        dk    r|                     d¦  «        }|�|j        d         nd}|€|�|j        d         nd}|| j         j        k    rt          d¦  «        ‚g }|
rg nd}|	rg nd}t          |¦  «        D ]Â}|  
                    ||||�|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         }|                     |¦  «         |
r|                     |j        ¦  «         |	r|                     |j        ¦  «         ŒÃt          j        |d¬¦  «        }|                      |¦  «        }d}|�`t%          ¦   «         }|                     |j        ¦  «        } ||                     d| j        ¦  «        |                     d¦  «        ¦  «        }|s|||f}|�|f|z   n|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§   rˆ   r‰   r¨   r®   r¯   rñ   r6  r7  rX   rG   r{  )r?   rñ   r6  r7  ÚndimÚ	unsqueezern   rž  rÙ   r.  r>  r[  r‡   r   r   r!   rv   r‘  r   r|   r\   ru   rŽ  r   )r@   r¦   r­   r§   rˆ   r‰   r¨   r®   rx  rñ   r6  r7  r]  rž  Úpooler_outputsr   r   rž   rú   r[  rc  r   r   r€  r  s                            r(   r´   z*ViltForImagesAndTextClassification.forward7  s  € ðl 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàÐ#¨Ô(9¸QÒ(>Ð(>à'×1Ò1°!Ñ4Ô4ˆLàÐ#¨Ô(9¸QÒ(>Ð(>à'×1Ò1°!Ñ4Ô4ˆLà.:Ð.F�\Ô'¨Ô*Ð*ÈDˆ
ØÐØ2>Ð2J˜Ô+¨AÔ.Ð.ÐPTˆJØ˜œÔ/Ò/Ð/ÝØnñô ð ð ˆØ2Ð<˜˜¸ˆØ,Ð6�R�R°$ˆ
Ý�zÑ"Ô"ð 	6ð 	6ˆAà—i’iØØ-Ø-Ø<HÐ<T˜\¨!¨!¨!¨Q°°°°1°1°1°a°a°a¨-Ô8Ð8ÐZ^Ø5?Ð5K˜: a a a¨¨A¨A¨A¨q¨q¨q jÔ1Ð1ÐQUØ+Ø9EÐ9Q˜\¨!¨!¨!¨Q°°°°1°1°1¨*Ô5Ð5ÐW[Ø%&¨¡UØ"3Ø%9Ø'ð  ñ ô ˆGð 6AÐP˜GÔ1Ð1ÀgÈaÄjˆMØ×!Ò! -Ñ0Ô0Ð0Ø#ð <Ø×$Ò$ WÔ%:Ñ;Ô;Ð;Ø ð 6Ø×!Ò! 'Ô"4Ñ5Ô5Ð5øåœ	 .°bÐ9Ñ9Ô9ˆØ—’ Ñ/Ô/ˆàˆØÐÝ'Ñ)Ô)ˆHà—Y’Y˜vœ}Ñ-Ô-ˆFØ�8˜FŸKšK¨¨D¬OÑ<Ô<¸f¿kºkÈ"¹o¼oÑNÔNˆDàð 	FØ˜m¨ZÐ8ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå7ØØØ'Ø!ð	
ñ 
ô 
ð 	
r'   rd  )r   r   r   r.   r   r!   re  r"   rf  r   r%   r´   rµ   r¶   s   @r(   rœ  rœ    sd  ø€ € € € € ðð ð ð ð ð$ ð .2Ø37Ø26Ø15Ø.2Ø26Ø15Ø*.Ø)-Ø,0Ø#'ðv
ð 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Ô4LÑ	Lðv
ð v
ð v
ñ „^ðv
ð v
ð v
ð v
ð v
r'   rœ  c                   ó,  ‡ — 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                 ó:  •— t          ¦   «                              |¦  «         |j        | _        t          |d¬¦  «        | _        t          j        |j        ¦  «        | _        t          j	        |j
        |j        ¦  «        | _        |                      ¦   «          d S )NF)rS  )r-   r.   rŽ  rL  r>  r   r<   r=   r>   rä   r3   r‘  rR  rÈ   s     €r(   r.   z#ViltForTokenClassification.__init__³  s~   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ˜f¸Ð>Ñ>Ô>ˆŒ	å”z &Ô"<Ñ=Ô=ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐr'   Nr¦   r­   r§   rˆ   r‰   r¨   r®   rx  rñ   r6  r7  r  c                 óJ  — |�|n| j         j        }|                      ||||||||	|
|¬¦
  «
        }|d         }|�|j        d         n|j        d         }|                      |¦  «        }|                      |dd…d|…f         ¦  «        }d}|�`t          ¦   «         }|                     |j        ¦  «        } || 	                    d| j
        ¦  «        | 	                    d¦  «        ¦  «        }|s|f|dd…         z   }|�|f|z   n|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]`.
        Nrz  r   r   rX   rD   r{  )r?   r7  r>  rn   r>   r‘  r   r|   r\   ru   rŽ  r   r   r   )r@   r¦   r­   r§   rˆ   r‰   r¨   r®   rx  rñ   r6  r7  r]  rú   rb  Útext_input_sizer   r   r€  r  s                       r(   r´   z"ViltForTokenClassification.forward¿  s^  € ð0 &1Ð%<�k�kÀ$Ä+ÔBYˆà—)’)ØØ)Ø)Ø%Ø!Ø'Ø%Ø/Ø!5Ø#ð ñ 
ô 
ˆð " !œ*ˆà09Ð0E˜)œ/¨!Ô,Ð,È=ÔK^Ð_`ÔKaˆàŸ,š, Ñ7Ô7ˆØ—’ °°°Ð4D°_Ð4DÐ1DÔ!EÑFÔFˆàˆØÐÝ'Ñ)Ô)ˆHà—Y’Y˜vœ}Ñ-Ô-ˆFØ�8˜FŸKšK¨¨D¬OÑ<Ô<¸f¿kºkÈ"¹o¼oÑNÔNˆDàð 	FØ�Y ¨¨¨¤Ñ,ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r'   rd  )r   r   r   r.   r   r!   re  r"   rf  r   r%   r´   rµ   r¶   s   @r(   r¥  r¥  ±  sO  ø€ € € € € ð
ð 
ð 
ð 
ð 
ð ð .2Ø37Ø26Ø15Ø.2Ø26Ø15Ø*.Ø)-Ø,0Ø#'ð=
ð =
àÔ# dÑ*ð=
ð Ô)¨DÑ0ð=
ð Ô(¨4Ñ/ð	=
ð
 Ô'¨$Ñ.ð=
ð Ô$ tÑ+ð=
ð Ô(¨4Ñ/ð=
ð Ô'¨$Ñ.ð=
ð Ô  4Ñ'ð=
ð   $™;ð=
ð # T™kð=
ð ˜D‘[ð=
ð 
  uÔ'8Ô!9Ñ	9ð=
ð =
ð =
ñ „^ð=
ð =
ð =
ð =
ð =
r'   r¥  )r–  rœ  r¥  rn  rŒ  r  rL  r=  );r    Úcollections.abcrÔ   rì   Údataclassesr   r!   r   Útorch.nnr   Ú r   rC  Ú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*  r=  rL  rP  rn  rƒ  rp  rŒ  r–  rœ  r¥  Ú__all__r&   r'   r(   ú<module>r¸     s  ðð Ð à Ð Ð Ð Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø *Ð *Ð *Ð *Ð *Ð *ð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð
 ð=ð =ð =ð =ð =¨{ñ =ô =ñ „ñô ð=ð$W!ð W!ð W!ð W!ð W!�R”Yñ W!ô W!ð W!ðt3ð 3ð 3ð 3ð 3�R”Yñ 3ô 3ð 3ðlð ð ð ð ˜"œ)ñ ô ð ð>0ð 0ð 0ð 0ð 0˜œ	ñ 0ô 0ð 0ðhð ð ð ð �R”Yñ ô ð ð"ð ð ð ð �B”Iñ ô ð ð ð ð ð ð �r”yñ ô ð ð 
ð 
ð 
ð 
ð 
�”ñ 
ô 
ð 
ð"ð "ð "ð "ð "Ð*ñ "ô "ð "ðJ&
ð &
ð &
ð &
ð &
�"”)ñ &
ô &
ð &
ðR ð/ð /ð /ð /ð /˜/ñ /ô /ñ „ð/ð ðI
ð I
ð I
ð I
ð I
Ð#ñ I
ô I
ñ „ðI
ðXð ð ð ð �”ñ ô ð ð €ððñ ô ð
F
ð F
ð F
ð F
ð F
Ð)ñ F
ô F
ñô ð
F
ðRð ð ð ð  "¤)ñ ô ð ð"
ð 
ð 
ð 
ð 
�"”)ñ 
ô 
ð 
ð €ððñ ô ðh
ð h
ð h
ð h
ð h
Ð2ñ h
ô h
ñô ðh
ðV €ððñ ô ð[
ð [
ð [
ð [
ð [
Ð#6ñ [
ô [
ñô ð[
ð| €ððñ ô ð
J
ð J
ð J
ð J
ð J
Ð)<ñ J
ô J
ñô ð
J
ðZ ðK
ð K
ð K
ð K
ð K
Ð!4ñ K
ô K
ñ „ðK
ð\	ð 	ð 	€€€r'   