Ë
    S^(h!| ã                   óì  — d Z ddlZddl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mZ ddlZddlZddlmZ ddlmZ dd	lmZmZ dd
lmZmZmZ ddlmZmZmZmZmZm Z m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z'  ejP                  e)«      Z*dZ+dZ,dZ-dZ.dZ/g d¢Z0dZ1dZ2ee'e%e&f   Z3e G d„ de«      «       Z4e G d„ de«      «       Z5e G d„ de«      «       Z6 G d„ dejn                  «      Z8 G d„ dejn                  «      Z9 G d„ d ejn                  «      Z: G d!„ d"ejn                  «      Z; G d#„ d$ejn                  «      Z< G d%„ d&ejn                  «      Z= G d'„ d(ejn                  «      Z> G d)„ d*ejn                  «      Z? G d+„ d,ejn                  «      Z@ G d-„ d.ejn                  «      ZA G d/„ d0ejn                  «      ZBd1ZCd2ZDd3ZEeEeDz   ZFd4ZGeGeDz   ZHd5eDz   ZId6ZJeEeGz   eDz   eJz   ZKd7eGz   eEz   d8z   eDz   ZLd9ZM G d:„ d;e«      ZN ed<eCjŸ                  d¬=«      «       G d>„ d?eN«      «       ZP ed@eCjŸ                  d¬=«      «       G dA„ dBeN«      «       ZQ edCeCjŸ                  d¬=«      «       G dD„ dEeN«      «       ZR edFeCjŸ                  dG¬=«      «       G dH„ dIeN«      «       ZS G dJ„ dKejn                  «      ZT G dL„ dMejn                  «      ZU G dN„ dOejn                  «      ZV edPeCjŸ                  dQ¬=«      «       G dR„ dSeN«      «       ZW G dT„ dUejn                  «      ZX G dV„ dWejn                  «      ZY G dX„ dYejn                  «      ZZ G dZ„ d[ejn                  «      Z[ ed\eCjŸ                  dG¬=«      eMz   «       G d]„ d^eN«      «       Z\g d_¢Z]y)`zPyTorch FLAVA model.é    N)ÚOrderedDict)Ú	dataclass)ÚAnyÚDictÚListÚOptionalÚSetÚTupleÚUnion)Únné   )ÚACT2FN)ÚBaseModelOutputÚBaseModelOutputWithPooling)ÚPreTrainedModelÚ find_pruneable_heads_and_indicesÚprune_linear_layer)ÚModelOutputÚadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstringsÚ	torch_inté   )ÚFlavaConfigÚFlavaImageCodebookConfigÚFlavaImageConfigÚFlavaMultimodalConfigÚFlavaTextConfigzfacebook/flava-fullzfacebook/flava-image-codebookr   r    r   )r   éÅ   é   g$(~Œ¹k@c                   óØ   — e Zd ZU dZdZeej                     ed<   dZ	ee
   ed<   dZeej                     ed<   dZee
   ed<   dZeej                     ed<   dZee
   ed<   d	ee   fd
„Zy)ÚFlavaModelOutputa¸  
    Output from FlavaModel containing embeddings and outputs from individual encoders.

    Note that `image_embeddings` and `text_embeddigns` returned are similar to pooled output returned from a
    transformer. If you want embeddings for contrastive loss or retrieval use a FLAVA model's `image_projection` and
    `text_projection` layers on `image_embeddings` and `text_embeddings` respectively.

    Args:
        image_embeddings (`torch.FloatTensor` of shape `(batch_size, output_dim)`, *optional*, returned when `pixel_values` are present):
            The image embeddings which are basically the pooled output of [`FlavaImageModel`].
        image_output (`BaseModelOutputWithPooling`, *optional*, returned when `pixel_values` are present):
            The output of the [`FlavaImageModel`].
        text_embeddings (`torch.FloatTensor` of shape `(batch_size, output_dim)`, *optional*, returned when `input_ids` are present):
            The text embeddings which are basically the pooled output of [`FlavaTextModel`].
        text_output (`BaseModelOutputWithPooling`, *optional*, returned when `input_ids` are present):
            The output of the [`FlavaTextModel`].
        multimodal_embeddings (`torch.FloatTensor` of shape `(batch_size, output_dim)`, *optional*, returned when `input_ids` and `pixel_values` are present and `skip_multimodal_encoder` is `None` or `False`):
            The multimodal embeddings which are basically the pooled output of [`FlavaTextModel`].
        multimodal_output (`BaseModelOutputWithPooling`, returned when `input_ids` and `pixel_values` are present and `skip_multimodal_encoder` is `None` or `False`):
            The output of the [`FlavaMultimodalModel`].
    NÚimage_embeddingsÚimage_outputÚtext_embeddingsÚtext_outputÚmultimodal_embeddingsÚmultimodal_outputÚreturnc                 óH   ‡ — t        ˆ fd„‰ j                  «       D «       «      S )Nc              3   ód   •K  — | ]'  }|d vr‰|   nt        ‰|«      j                  «       –— Œ) y­w))r(   r&   r*   N©ÚgetattrÚto_tuple)Ú.0ÚkÚselfs     €úf/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/flava/modeling_flava.pyú	<genexpr>z,FlavaModelOutput.to_tuple.<locals>.<genexpr>b   s=   øè ø€ ò 
àð Ð TÑTˆD�ŠGÔZaÐbfÐhiÓZj×ZsÑZsÓZuÓuñ
ùó   ƒ-0©ÚtupleÚkeys©r3   s   `r4   r0   zFlavaModelOutput.to_tuplea   s#   ø€ Üó 
à—Y‘Y“[ô
ó 
ð 	
ó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   r   ÚtorchÚFloatTensorÚ__annotations__r&   r   r'   r(   r)   r*   r
   r   r0   © r;   r4   r$   r$   B   s‹   … ñð, 59Ð�h˜u×0Ñ0Ñ1Ó8Ø9=€L�(Ð5Ñ6Ó=Ø37€O�X˜e×/Ñ/Ñ0Ó7Ø8<€K�Ð4Ñ5Ó<Ø9=Ð˜8 E×$5Ñ$5Ñ6Ó=Ø>BÐ�xÐ :Ñ;ÓBð
˜% ™*ô 
r;   r$   c                   ó  — e Zd ZU dZdZeej                     ed<   dZ	eej                     ed<   dZ
eej                     ed<   dZeej                     ed<   dZeej                     ed<   dZeej                     ed<   d	efd
„Zy)ÚFlavaLossesa"  Class representing pretraining losses from FLAVA model

    Args:
        mim (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `mim_labels` and `pixel_values` are present, `input_ids_masked` is absent and `mim_weight` > 0.:
            Masked Image Modeling loss as used in BeIT calculated only for unimodal image data.
        mlm (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `mlm_labels` and `input_ids_masked` are present, `pixel_values` is absent and `mlm_weight` > 0.:
            Masked Language Modeling loss as used in BERT calculated only for unimodal text data.
        itm (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `itm_labels`, `input_ids_masked`, `pixel_values` are present and `itm_weight` > 0.:
            Image Text Matching (ITM) loss calculated for paired image-text data. Note that ITM loss is calculated on
            masked pairs in FLAVA.
        global_contrastive (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `input_ids` and `pixel_values` are present and `global_contrastive_weight` > 0.:
            Contrastive loss for image-text similarity similar to CLIP but calculated globally for paired image-text
            data. This is calculated on unmasked images and texts.
        mmm_image (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `mim_labels`, `pixel_values` and `input_ids_masked` are present and `mmm_image_weight` > 0.:
            Masked Multimodal Modeling loss's image component calculated on paired image-text data.
        mmm_text (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `mlm_labels`, `pixel_values` and `input_ids_masked` are present and `mmm_text_weight` > 0.:
            Masked Multimodal Modeling loss's text component calculated on paired image-text data.
    NÚmimÚmlmÚitmÚglobal_contrastiveÚ	mmm_imageÚmmm_textr+   c                 óB   — d}| j                  «       D ]	  }|€Œd} |S  |S )NTF)Úvalues)r3   Úall_noneÚvs      r4   rN   zFlavaLosses.all_none„   s5   € ØˆØ—‘“ò 	ˆAØ‰}Ø �ØØˆð		ð ˆr;   )r<   r=   r>   r?   rF   r   r@   rA   rB   rG   rH   rI   rJ   rK   ÚboolrN   rC   r;   r4   rE   rE   h   s”   … ñð& (,€Cˆ�%×#Ñ#Ñ	$Ó+Ø'+€Cˆ�%×#Ñ#Ñ	$Ó+Ø'+€Cˆ�%×#Ñ#Ñ	$Ó+Ø6:Ð˜ ×!2Ñ!2Ñ3Ó:Ø-1€Iˆx˜×)Ñ)Ñ*Ó1Ø,0€Hˆh�u×(Ñ(Ñ)Ó0ð˜$ô r;   rE   c                   óÚ  — e Zd ZU dZdZeej                     ed<   dZ	e
ed<   dZeej                     ed<   dZee   ed<   dZeej                     ed<   dZee   ed<   dZeej                     ed	<   dZee   ed
<   dZeej                     ed<   dZee   ed<   dZeej                     ed<   dZee   ed<   dZeej                     ed<   dZee   ed<   dZeej                     ed<   dZeej                     ed<   dZeej                     ed<   dZeej                     ed<   dZeej                     ed<   dZeej                     ed<   dZeej                     ed<   dee    fd„Z!y)ÚFlavaForPreTrainingOutputa  
    Output from FlavaForPreTraining containing embeddings, and outputs from individual encoders.

    Note that `image_embeddings` and `text_embeddings` returned are similar to pooled output returned from a
    transformer. If you want embeddings for contrastive loss or retrieval use a FLAVA model's `image_projection` and
    `text_projection` layers on `image_embeddings` and `text_embeddings` respectively.

    Args:
        loss (`torch.FloatTensor`, *optional*, returned when `return_loss` is True):
            Total loss calculated for this model.
        loss_info (`FlavaLosses`):
            Detailed info for FLAVA Pretraining losses. Check `FlavaLosses` class description for the information on
            the keys.
        image_embeddings (`torch.FloatTensor` of shape `(batch_size, output_dim)`, *optional*, returned when `pixel_values` are present):
            The image embeddings which are basically the pooled output of [`FlavaImageModel`].
        image_output (`BaseModelOutputWithPooling`, *optional*, returned when `pixel_values` are present):
            The output of the [`FlavaImageModel`].
        text_embeddings (`torch.FloatTensor` of shape `(batch_size, output_dim)`, *optional*, returned when `input_ids` are present):
            The text embeddings which are basically the pooled output of [`FlavaTextModel`].
        text_output (`BaseModelOutputWithPooling`, *optional*, returned when `input_ids` are present):
            The output of the [`FlavaTextModel`].
        multimodal_embeddings (`torch.FloatTensor` of shape `(batch_size, output_dim)`, *optional*, returned when `input_ids` and `pixel_values` are present and `skip_unmasked_multimodal_encoder` is `None` or `False`):
            The multimodal embeddings which are basically the pooled output of [`FlavaTextModel`].
        multimodal_output (`BaseModelOutputWithPooling`, returned when `input_ids` and `pixel_values` are present and `skip_unmasked_multimodal_encoder` is `None` or `False`):
            The output of the [`FlavaMultimodalModel`].

        image_masked_embeddings (`torch.FloatTensor` of shape `(batch_size, output_dim)`, *optional*, returned when `pixel_values` are present):
            The image embeddings which are basically the pooled output of [`FlavaImageModel`]. Uses `bool_masked_pos`
            to create masked images.
        image_masked_output (`BaseModelOutputWithPooling`, *optional*, returned when `pixel_values` are present):
            The output of the [`FlavaImageModel`]. Uses `bool_masked_pos` to create masked images.
        text_masked_embeddings (`torch.FloatTensor` of shape `(batch_size, output_dim)`, *optional*, returned when `input_ids_masked` are present):
            The text embeddings which are basically the pooled output of [`FlavaTextModel`].
        text_masked_output (`BaseModelOutputWithPooling`, *optional*, returned when `input_ids_masked` are present):
            The output of the [`FlavaTextModel`].
        multimodal_masked_embeddings (`torch.FloatTensor` of shape `(batch_size, output_dim)`, *optional*, returned when `input_ids` and `pixel_values` are present):
            The multimodal embeddings which are basically the pooled output of [`FlavaTextModel`].
        multimodal_masked_output (`BaseModelOutputWithPooling`, *optional*, returned when `input_ids_masked` and `pixel_values` are present):
            The output of the [`FlavaMultimodalModel`].

        mim_logits (`torch.FloatTensor` of shape `(batch_size, num_image_patches, image_vocab_size)` or of shape `(total_masked_patches, image_vocab_size)` , *optional*, returned when `pixel_values` are present and `input_ids_masked` are not):
                The logits for MIM unimodal loss. Uses `book_masked_pos` to get masked patches. The flattened output is
                returned when `bool_masked_pos` has some of the patches masked.
        mlm_logits (`torch.FloatTensor` of shape `(batch_size, text_seq_length, text_vocab_size)` or of shape `(total_masked_seq_length, text_vocab_size)`, *optional*, returned when `input_ids_masked` are present and `pixel_values` are not):
                The logits for MLM unimodal loss. The flattened output is returned when `input_ids_masked` has some of
                the tokens masked.
        itm_logits (`torch.FloatTensor` of shape `(batch_size, 2)`, *optional*, returned when `input_ids_masked` and `pixel_values` are present):
                The logits for ITM loss. Note that ITM loss is calculated on masked pairs in FLAVA.
        mmm_image_logits (`torch.FloatTensor` of shape `(batch_size, num_image_patches, image_vocab_size)` or of shape`(total_masked_patches, image_vocab_size)`, *optional*, returned when `pixel_values` and `input_ids_masked` are present):
                The logits for MMM image multimodal loss. Uses `book_masked_pos` to get masked patches. The flattened
                output is returned when `bool_masked_pos` has some of the patches masked.
        mmm_text_logits (`torch.FloatTensor` of shape `(batch_size, text_seq_length, text_vocab_size)` or of shape `(`(total_masked_seq_length, text_vocab_size)`), *optional*, returned when `pixel_values` and `input_ids_masked` are present):
                The logits for MMM text multimodal loss. The flattened output is returned when `input_ids_masked` has
                some of the tokens masked.
        contrastive_logits_per_image (`torch.FloatTensor` of shape `(image_batch_size, text_batch_size)`):
            The scaled dot product scores between `image_embeddings` and `text_embeddings` but passed through FLAVA's
            `image_projection` and `text_projection` layers respectively. This represents the image-text similarity
            scores. This is calculated on unmasked images and texts.
        contrastive_logits_per_text (`torch.FloatTensor` of shape `(text_batch_size, image_batch_size)`):
            The scaled dot product scores between `text_embeddings` and `image_embeddings` but passed through FLAVA's
            `text_projection` and `image_projection` layers respectively. This is calculated on unmasked images and
            texts.
    NÚlossÚ	loss_infor%   r&   r'   r(   r)   r*   Úimage_masked_embeddingsÚimage_masked_outputÚtext_masked_embeddingsÚtext_masked_outputÚmultimodal_masked_embeddingsÚmultimodal_masked_outputÚ
mim_logitsÚ
mlm_logitsÚ
itm_logitsÚcontrastive_logits_per_imageÚcontrastive_logits_per_textÚmmm_image_logitsÚmmm_text_logitsr+   c                 óT   ‡ ‡— g d¢Št        ˆ ˆfd„‰ j                  «       D «       «      S )N)r(   r&   r*   rX   rV   rZ   c              3   ód   •K  — | ]'  }|‰vr‰|   nt        ‰|«      j                  «       –— Œ) y ­w©Nr.   )r1   r2   r3   Útransformer_outputss     €€r4   r5   z5FlavaForPreTrainingOutput.to_tuple.<locals>.<genexpr>î   s4   øè ø€ ÒsÐbc Ð)<Ñ <�T˜!’WÄ'È$ÐPQÓBR×B[ÑB[ÓB]Ó]Ñsùr6   r7   )r3   re   s   `@r4   r0   z"FlavaForPreTrainingOutput.to_tupleå   s(   ù€ ò
Ðô ÔsÐgk×gpÑgpÓgrÔsÓsÐsr;   )"r<   r=   r>   r?   rS   r   r@   rA   rB   rT   rE   r%   r&   r   r'   r(   r)   r*   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   r
   r   r0   rC   r;   r4   rR   rR   �   s¸  … ñ>ð@ )-€Dˆ(�5×$Ñ$Ñ
%Ó,Ø!€Iˆ{Ó!Ø48Ð�h˜u×0Ñ0Ñ1Ó8Ø9=€L�(Ð5Ñ6Ó=Ø37€O�X˜e×/Ñ/Ñ0Ó7Ø8<€K�Ð4Ñ5Ó<Ø9=Ð˜8 E×$5Ñ$5Ñ6Ó=Ø>BÐ�xÐ :Ñ;ÓBØ;?Ð˜X e×&7Ñ&7Ñ8Ó?Ø@DÐ˜Ð"<Ñ=ÓDØ:>Ð˜H U×%6Ñ%6Ñ7Ó>Ø?CÐ˜Ð!;Ñ<ÓCØ@DÐ  (¨5×+<Ñ+<Ñ"=ÓDØEIÐ˜hÐ'AÑBÓIØ.2€J�˜×*Ñ*Ñ+Ó2Ø.2€J�˜×*Ñ*Ñ+Ó2Ø.2€J�˜×*Ñ*Ñ+Ó2Ø@DÐ  (¨5×+<Ñ+<Ñ"=ÓDØ?CÐ ¨%×*;Ñ*;Ñ!<ÓCØ48Ð�h˜u×0Ñ0Ñ1Ó8Ø37€O�X˜e×/Ñ/Ñ0Ó7ð	t˜% ™*ô 	tr;   rR   c            	       óÒ   ‡ — e Zd ZdZddededdfˆ fd„Zdej                  de	d	e	dej                  fd
„Z
	 	 ddej                  deej                     dedej                  fd„Zˆ xZS )ÚFlavaImageEmbeddingszb
    Construct the CLS token, position and patch embeddings. Optionally, also the mask token.
    ÚconfigÚuse_mask_tokenr+   Nc                 óÂ  •— t         ‰| �  «        |xs |j                  }t        j                  t        j                  dd|j                  «      «      | _        |r4t        j                  t        j                  dd|j                  «      «      nd | _        t        |j                  |j                  |j                  |j                  ¬«      | _        | j                  j                  }t        j                  t        j                  d|dz   |j                  «      «      | _        t        j                   |j"                  «      | _        |j                  | _        || _        y )Nr   )Ú
image_sizeÚ
patch_sizeÚnum_channelsÚ	embed_dim)ÚsuperÚ__init__Ú
mask_tokenr   Ú	Parameterr@   ÚzerosÚhidden_sizeÚ	cls_tokenÚPatchEmbeddingsrk   rl   rm   Úpatch_embeddingsÚnum_patchesÚposition_embeddingsÚDropoutÚhidden_dropout_probÚdropoutrh   )r3   rh   ri   rx   Ú	__class__s       €r4   rp   zFlavaImageEmbeddings.__init__ø   s   ø€ Ü‰ÑÔà'Ò<¨6×+<Ñ+<ˆÜŸ™¤e§k¡k°!°Q¸×8JÑ8JÓ&KÓLˆŒÙQ_œ"Ÿ,™,¤u§{¡{°1°a¸×9KÑ9KÓ'LÔMÐeiˆŒÜ /Ø×(Ñ(Ø×(Ñ(Ø×,Ñ,Ø×(Ñ(ô	!
ˆÔð ×+Ñ+×7Ñ7ˆÜ#%§<¡<´·±¸A¸{ÈQ¹ÐPV×PbÑPbÓ0cÓ#dˆÔ Ü—z‘z &×"<Ñ"<Ó=ˆŒØ ×+Ñ+ˆŒØˆ�r;   Ú
embeddingsÚheightÚwidthc                 ó¦  — |j                   d   dz
  }| j                  j                   d   dz
  }t        j                  j	                  «       s||k(  r||k(  r| j                  S | j                  dd…dd…f   }| j                  dd…dd…f   }|j                   d   }|| j
                  z  }	|| j
                  z  }
t        |dz  «      }|j                  d|||«      }|j                  dddd«      }t        j                  j                  ||	|
fdd	¬
«      }|j                  dddd«      j                  dd|«      }t        j                  ||fd¬«      S )a   
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
        images. This method is also adapted to support torch.jit tracing.

        Adapted from:
        - https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
        - https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
        r   Néÿÿÿÿg      à?r   r   é   ÚbicubicF)ÚsizeÚmodeÚalign_corners©Údim)Úshapery   r@   ÚjitÚ
is_tracingrl   r   ÚreshapeÚpermuter   Ú
functionalÚinterpolateÚviewÚcat)r3   r~   r   r€   rx   Únum_positionsÚclass_pos_embedÚpatch_pos_embedr‰   Ú
new_heightÚ	new_widthÚsqrt_num_positionss               r4   Úinterpolate_pos_encodingz-FlavaImageEmbeddings.interpolate_pos_encoding  s`  € ð !×&Ñ& qÑ)¨AÑ-ˆØ×0Ñ0×6Ñ6°qÑ9¸AÑ=ˆô �y‰y×#Ñ#Ô%¨+¸Ò*FÈ6ÐUZÊ?Ø×+Ñ+Ð+à×2Ñ2²1°b°q°b°5Ñ9ˆØ×2Ñ2²1°a±b°5Ñ9ˆà×Ñ˜rÑ"ˆà˜tŸ™Ñ.ˆ
Ø˜TŸ_™_Ñ,ˆ	ä& }°cÑ'9Ó:ÐØ)×1Ñ1°!Ð5GÐI[Ð]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØ˜iÐ(ØØð	 4ó 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆä�y‰y˜/¨?Ð;ÀÔCÐCr;   Úpixel_valuesÚbool_masked_posr™   c                 óV  — |j                   \  }}}}| j                  ||¬«      }|j                  «       \  }}	}
|�| j                  j	                  ||	d«      }|j                  «       dk(  r!|j                  |j                  d«      d«      }|j                  d«      j                  |«      }|d|z
  z  ||z  z   }| j                  j	                  |dd«      }t        j                  ||fd¬«      }|r|| j                  |||«      z   }n|| j                  z   }| j                  |«      }|S )N)r™   r‚   r   r   ç      ð?r   rˆ   )rŠ   rw   r…   rq   Úexpandr‰   r‘   Ú	unsqueezeÚtype_asru   r@   r’   r™   ry   r|   )r3   rš   r›   r™   Ú
batch_sizerm   r   r€   r~   Úseq_lenÚ_Úmask_tokensÚmaskÚ
cls_tokenss                 r4   ÚforwardzFlavaImageEmbeddings.forward3  s4  € ð 3?×2DÑ2DÑ/ˆ
�L &¨%Ø×*Ñ*¨<ÐRjÐ*Ókˆ
à!+§¡Ó!2Ñˆ
�G˜QØÐ&ØŸ/™/×0Ñ0°¸WÀbÓIˆKà×"Ñ"Ó$¨Ò)Ø"1×"6Ñ"6°×7KÑ7KÈAÓ7NÐPRÓ"S�à"×,Ñ,¨RÓ0×8Ñ8¸ÓEˆDØ# s¨T¡zÑ2°[À4Ñ5GÑGˆJð —^‘^×*Ñ*¨:°r¸2Ó>ˆ
Ü—Y‘Y 
¨JÐ7¸QÔ?ˆ
ñ $Ø# d×&CÑ&CÀJÐPVÐX]Ó&^Ñ^‰Jà# d×&>Ñ&>Ñ>ˆJà—\‘\ *Ó-ˆ
àÐr;   ©F©NF)r<   r=   r>   r?   r   rP   rp   r@   ÚTensorÚintr™   r   Ú
BoolTensorr§   Ú__classcell__©r}   s   @r4   rg   rg   ó   s�   ø„ ññÐ/ð Àð ÐRVõ ð&&D°5·<±<ð &DÈð &DÐUXð &DÐ]b×]iÑ]ió &DðV 7;Ø).ñ	à—l‘lðð " %×"2Ñ"2Ñ3ðð #'ð	ð
 
�‰÷r;   rg   c            	       ó�   ‡ — e Zd ZdZ	 	 	 	 ddedeeeeef   f   dedefˆ fd„Zddej                  de
d	ej                  fd
„Zˆ xZS )rv   z#
    Image to Patch Embedding.
    rk   rl   rm   rn   c                 óV  •— t         ‰| �  «        t        |t        j                  j
                  «      s||f}t        |t        j                  j
                  «      s||f}|d   |d   z  |d   |d   z  z  }|| _        || _        || _        t        j                  ||||¬«      | _        y )Nr   r   )Úkernel_sizeÚstride)ro   rp   Ú
isinstanceÚcollectionsÚabcÚIterablerk   rl   rx   r   ÚConv2dÚ
projection)r3   rk   rl   rm   rn   rx   r}   s         €r4   rp   zPatchEmbeddings.__init__\  sž   ø€ ô 	‰ÑÔÜ˜*¤k§o¡o×&>Ñ&>Ô?Ø$ jÐ1ˆJÜ˜*¤k§o¡o×&>Ñ&>Ô?Ø$ jÐ1ˆJØ! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ&ˆÔäŸ)™) L°)ÈÐ\fÔgˆ�r;   rš   r™   r+   c                 ó8  — |j                   \  }}}}|sV|| j                  d   k7  s|| j                  d   k7  r2t        d|› d|› d| j                  d   › d| j                  d   › d�	«      ‚| j                  |«      j	                  d«      j                  dd«      }|S )Nr   r   zInput image size (Ú*z) doesn't match model (z).rƒ   )rŠ   rk   Ú
ValueErrorr¸   ÚflattenÚ	transpose)r3   rš   r™   r¡   rm   r   r€   Úxs           r4   r§   zPatchEmbeddings.forwardo  s­   € Ø2>×2DÑ2DÑ/ˆ
�L &¨%Ù'Ø˜Ÿ™¨Ñ+Ò+¨u¸¿¹ÈÑ8JÒ/JÜ Ø(¨¨°°%°ð 9ØŸ™¨Ñ+Ð,¨A¨d¯o©o¸aÑ.@Ð-AÀðEóð ð �O‰O˜LÓ)×1Ñ1°!Ó4×>Ñ>¸qÀ!ÓDˆØˆr;   )éà   é   r   r"   r¨   )r<   r=   r>   r?   r«   r   r
   rp   r@   rª   rP   r§   r­   r®   s   @r4   rv   rv   W  s}   ø„ ñð Ø24ØØñhàðhð ˜#˜u S¨# X™Ð.Ñ/ðhð ð	hð
 õhñ&	 E§L¡Lð 	ÈDð 	Ð]b×]iÑ]i÷ 	r;   rv   c                   óŒ   ‡ — e Zd ZdZˆ fd„Z	 	 	 ddeej                     deej                     deej                     fd„Zˆ xZ	S )ÚFlavaTextEmbeddingszGConstruct 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                  «      | _        t#        |dd«      | _        | j'                  dt)        j*                  |j                  «      j-                  d«      d¬«       | j'                  d	t)        j.                  | j0                  j3                  «       t(        j4                  ¬
«      d¬«       y )N)Úpadding_idx©ÚepsÚposition_embedding_typeÚabsoluteÚposition_ids)r   r‚   F)Ú
persistentÚtoken_type_ids)Údtype)ro   rp   r   Ú	EmbeddingÚ
vocab_sizert   Úpad_token_idÚword_embeddingsÚmax_position_embeddingsry   Útype_vocab_sizeÚtoken_type_embeddingsÚ	LayerNormÚlayer_norm_epsrz   r{   r|   r/   rÇ   Úregister_bufferr@   Úarangerž   rs   rÉ   r…   Úlong©r3   rh   r}   s     €r4   rp   zFlavaTextEmbeddings.__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 &×"<Ñ"<Ó=ˆŒä'.¨vÐ7PÐR\Ó']ˆÔ$Ø×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	ô 	
ð 	×ÑØœeŸk™k¨$×*;Ñ*;×*@Ñ*@Ó*BÌ%Ï*É*ÔUÐbgð 	õ 	
r;   Ú	input_idsrË   rÉ   c                 ó$  — |j                  «       }|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                  dk(  r| j                  |«      }|
|z  }
| j                  |
«      }
| j                  |
«      }
|
S )Nr   rË   r   )rÌ   ÚdevicerÈ   )r…   rÉ   ÚhasattrrË   rž   r@   rs   rØ   rÜ   rÐ   rÓ   rÇ   ry   rÔ   r|   )r3   rÚ   rË   rÉ   Úinput_shapeÚ
seq_lengthÚbuffered_token_type_idsÚ buffered_token_type_ids_expandedÚinputs_embedsrÓ   r~   ry   s               r4   r§   zFlavaTextEmbeddings.forward‘  s  € ð  —n‘nÓ&ˆØ  ‘^ˆ
àÐØ×,Ñ,ªQ°°°¨^Ñ<ˆLð
 Ð!Ü�tÐ-Ô.Ø*.×*=Ñ*=ºaÀÀ*À¸nÑ*MÐ'Ø3J×3QÑ3QÐR]Ð^_ÑR`ÐblÓ3mÐ0Ø!A‘ä!&§¡¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÔ!l�à×,Ñ,¨YÓ7ˆØ $× :Ñ :¸>Ó JÐà"Ð%:Ñ:ˆ
Ø×'Ñ'¨:Ò5Ø"&×":Ñ":¸<Ó"HÐØÐ-Ñ-ˆJØ—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr;   )NNN)
r<   r=   r>   r?   rp   r   r@   rª   r§   r­   r®   s   @r4   rÂ   rÂ   {  sR   ø„ ÙQô
ð* -1Ø15Ø/3ñ	 à˜EŸL™LÑ)ð ð ! §¡Ñ.ð ð ˜uŸ|™|Ñ,÷	 r;   rÂ   c                   ó"  ‡ — e Zd Zdeddfˆ fd„Zdej                  dej                  fd„Z	 	 	 ddej                  deej                     d	eej                     d
e	de
eej                  ej                  f   eej                     f   f
d„Zˆ xZS )ÚFlavaSelfAttentionrh   r+   Nc                 ó  •— 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)ro   rp   rt   Únum_attention_headsrÝ   r»   r«   Úattention_head_sizeÚall_head_sizer   ÚLinearÚqkv_biasÚqueryÚkeyÚvaluerz   Úattention_probs_dropout_probr|   rÙ   s     €r4   rp   zFlavaSelfAttention.__init__µ  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;   r¾   c                 ó    — |j                  «       d d | j                  | j                  fz   } |j                  |Ž }|j	                  dddd«      S )Nr‚   r   rƒ   r   r   )r…   rê   rë   r‘   rŽ   )r3   r¾   Únew_x_shapes      r4   Útranspose_for_scoresz'FlavaSelfAttention.transpose_for_scoresÇ  sN   € Ø—f‘f“h˜s �m t×'?Ñ'?À×AYÑAYÐ&ZÑZˆØˆA�F‰F�KÐ ˆØ�y‰y˜˜A˜q !Ó$Ð$r;   Úhidden_statesÚattention_maskÚ	head_maskÚoutput_attentionsc                 óÀ  — | j                  |«      }| j                  | j                  |«      «      }| j                  | j                  |«      «      }| j                  |«      }t	        j
                  ||j                  dd«      «      }	|	t        j                  | j                  «      z  }	|�|	|z   }	t        j                  j                  |	d¬«      }
| j                  |
«      }
|�|
|z  }
t	        j
                  |
|«      }|j                  dddd«      j                  «       }|j!                  «       d d | j"                  fz   } |j$                  |Ž }|r||
f}|S |f}|S )Nr‚   éþÿÿÿrˆ   r   rƒ   r   r   )rï   rõ   rð   rñ   r@   Úmatmulr½   ÚmathÚsqrtrë   r   r�   Úsoftmaxr|   rŽ   Ú
contiguousr…   rì   r‘   )r3   rö   r÷   rø   rù   Úmixed_query_layerÚ	key_layerÚvalue_layerÚquery_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                 r4   r§   zFlavaSelfAttention.forwardÌ  sg  € ð !ŸJ™J }Ó5Ðà×-Ñ-¨d¯h©h°}Ó.EÓFˆ	Ø×/Ñ/°·
±
¸=Ó0IÓJˆØ×/Ñ/Ð0AÓBˆô !Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐà+¬d¯i©i¸×8PÑ8PÓ.QÑQÐØÐ%à/°.Ñ@Ðô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÓIˆð Ÿ,™, Ó7ˆð Ð Ø-°	Ñ9ˆOäŸ™ _°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;   ©NNF)r<   r=   r>   ÚFlavaPossibleConfigsrp   r@   rª   rõ   r   rP   r   r
   r§   r­   r®   s   @r4   rä   rä   ´  s°   ø„ ðGÐ3ð G¸õ Gð$% e§l¡lð %°u·|±|ó %ð 26Ø,0Ø"'ñ(à—|‘|ð(ð ! §¡Ñ.ð(ð ˜EŸL™LÑ)ð	(ð
  ð(ð 
ˆu�U—\‘\ 5§<¡<Ð/Ñ0°%¸¿¹Ñ2EÐEÑ	F÷(r;   rä   c                   ó|   ‡ — e Zd ZdZdeddfˆ fd„Zdej                  dej                  dej                  fd„Zˆ xZ	S )	ÚFlavaSelfOutputzµ
    The residual connection is defined in FlavaLayer (same as ViTLayer) instead of here (as is the case with other
    models), due to the layernorm applied before each block.
    rh   r+   Nc                 óÈ   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  «      | _        y rd   )	ro   rp   r   rí   rt   Údenserz   r{   r|   rÙ   s     €r4   rp   zFlavaSelfOutput.__init__ý  sB   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r;   rö   Úinput_tensorc                 óJ   — | j                  |«      }| j                  |«      }|S rd   ©r  r|   ©r3   rö   r  s      r4   r§   zFlavaSelfOutput.forward  s$   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆàÐr;   )
r<   r=   r>   r?   r  rp   r@   rª   r§   r­   r®   s   @r4   r  r  ÷  sE   ø„ ñð
>Ð3ð >¸õ >ð
 U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r;   r  c                   ó   ‡ — e Zd Zdeddfˆ fd„Zdee   ddfd„Z	 	 	 ddej                  de
ej                     d	e
ej                     d
edeeej                  ej                  f   eej                     f   f
d„Zˆ xZS )ÚFlavaAttentionrh   r+   Nc                 ó€   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        t        «       | _        y rd   )ro   rp   rä   Ú	attentionr  ÚoutputÚsetÚpruned_headsrÙ   s     €r4   rp   zFlavaAttention.__init__
  s0   ø€ Ü‰ÑÔÜ+¨FÓ3ˆŒÜ% fÓ-ˆŒÜ›EˆÕr;   Úheadsc                 ó>  — t        |«      dk(  ry t        || j                  j                  | j                  j                  | j
                  «      \  }}t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _	        t        | j                  j                  |d¬«      | j                  _        | j                  j                  t        |«      z
  | j                  _        | j                  j                  | j                  j                  z  | j                  _        | j
                  j                  |«      | _        y )Nr   r   rˆ   )Úlenr   r  rê   rë   r  r   rï   rð   rñ   r  r  rì   Úunion)r3   r  Úindexs      r4   Úprune_headszFlavaAttention.prune_heads  s  € Üˆu‹:˜Š?ØÜ7Ø�4—>‘>×5Ñ5°t·~±~×7YÑ7YÐ[_×[lÑ[ló
‰ˆˆuô
  2°$·.±.×2FÑ2FÈÓNˆ�‰ÔÜ/°·±×0BÑ0BÀEÓJˆ�‰ÔÜ1°$·.±.×2FÑ2FÈÓNˆ�‰ÔÜ.¨t¯{©{×/@Ñ/@À%ÈQÔOˆ�‰Ôð .2¯^©^×-OÑ-OÔRUÐV[ÓR\Ñ-\ˆ�‰Ô*Ø'+§~¡~×'IÑ'IÈDÏNÉN×LnÑLnÑ'nˆ�‰Ô$Ø ×-Ñ-×3Ñ3°EÓ:ˆÕr;   rö   r÷   rø   rù   c                 ól   — | j                  ||||¬«      }| j                  |d   |«      }|f|dd  z   }|S ©N)r÷   rø   rù   r   r   )r  r  )r3   rö   r÷   rø   rù   Úself_outputsÚattention_outputr	  s           r4   r§   zFlavaAttention.forward"  sQ   € ð —~‘~Ø¨.ÀIÐarð &ó 
ˆð  Ÿ;™; |°A¡¸ÓFÐà#Ð%¨°Q°RÐ(8Ñ8ˆØˆr;   r
  )r<   r=   r>   r  rp   r	   r«   r   r@   rª   r   rP   r   r
   r§   r­   r®   s   @r4   r  r  	  s©   ø„ ð"Ð3ð "¸õ "ð;  S¡ð ;¨dó ;ð* 26Ø,0Ø"'ñà—|‘|ðð ! §¡Ñ.ðð ˜EŸL™LÑ)ð	ð
  ðð 
ˆu�U—\‘\ 5§<¡<Ð/Ñ0°%¸¿¹Ñ2EÐEÑ	F÷r;   r  c                   ó`   ‡ — e Zd Zdeddfˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚFlavaIntermediaterh   r+   Nc                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y rd   )ro   rp   r   rí   rt   Úintermediate_sizer  r³   Ú
hidden_actÚstrr   Úintermediate_act_fnrÙ   s     €r4   rp   zFlavaIntermediate.__init__4  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r;   rö   c                 óJ   — | j                  |«      }| j                  |«      }|S rd   )r  r+  ©r3   rö   s     r4   r§   zFlavaIntermediate.forward=  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆàÐr;   ©	r<   r=   r>   r  rp   r@   rª   r§   r­   r®   s   @r4   r&  r&  3  s2   ø„ ð9Ð3ð 9¸õ 9ð U§\¡\ð °e·l±l÷ r;   r&  c                   óx   ‡ — e Zd Zdeddfˆ fd„Zdej                  dej                  dej                  fd„Zˆ xZS )ÚFlavaOutputrh   r+   Nc                 óÈ   •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j                  «      | _	        y rd   )
ro   rp   r   rí   r(  rt   r  rz   r{   r|   rÙ   s     €r4   rp   zFlavaOutput.__init__E  sB   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆ�r;   rö   r  c                 óT   — | j                  |«      }| j                  |«      }||z   }|S rd   r  r  s      r4   r§   zFlavaOutput.forwardK  s.   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆà%¨Ñ4ˆàÐr;   r.  r®   s   @r4   r0  r0  D  s@   ø„ ð>Ð3ð >¸õ >ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r;   r0  c                   óî   ‡ — e Zd ZdZdeddfˆ fd„Z	 	 	 ddej                  deej                     deej                     d	e	de
eej                  ej                  f   eej                     f   f
d
„Zˆ xZS )Ú
FlavaLayerz?This corresponds to the Block class in the timm implementation.rh   r+   Nc                 ór  •— t         ‰| �  «        |j                  | _        d| _        t	        |«      | _        t        |«      | _        t        |«      | _	        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        y ©Nr   rÅ   )ro   rp   Úchunk_size_feed_forwardÚseq_len_dimr  r  r&  Úintermediater0  r  r   rÔ   rt   rÕ   Úlayernorm_beforeÚlayernorm_afterrÙ   s     €r4   rp   zFlavaLayer.__init__W  s‰   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ'¨Ó/ˆŒÜ-¨fÓ5ˆÔÜ! &Ó)ˆŒô !#§¡¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÔÜ!Ÿ|™|¨F×,>Ñ,>ÀF×DYÑDYÔZˆÕr;   rö   r÷   rø   rù   c                 óà   — | j                  | j                  |«      |||¬«      }|d   }|dd  }||z   }| j                  |«      }| j                  |«      }| j	                  ||«      }|f|z   }|S r"  )r  r:  r;  r9  r  )	r3   rö   r÷   rø   rù   Úself_attention_outputsr$  r	  Úlayer_outputs	            r4   r§   zFlavaLayer.forwardc  s™   € ð "&§¡Ø×!Ñ! -Ó0Ø)ØØ/ð	 "0ó "
Ðð 2°!Ñ4ÐØ(¨¨Ð,ˆð )¨=Ñ8ˆð ×+Ñ+¨MÓ:ˆØ×(Ñ(¨Ó6ˆð —{‘{ <°Ó?ˆà�/ GÑ+ˆàˆr;   r
  )r<   r=   r>   r?   r  rp   r@   rª   r   rP   r   r
   r§   r­   r®   s   @r4   r4  r4  T  s˜   ø„ ÙIð
[Ð3ð 
[¸õ 
[ð 26Ø,0Ø"'ñà—|‘|ðð ! §¡Ñ.ðð ˜EŸL™LÑ)ð	ð
  ðð 
ˆu�U—\‘\ 5§<¡<Ð/Ñ0°%¸¿¹Ñ2EÐEÑ	F÷r;   r4  c                   óª   ‡ — e Zd Zdeddfˆ fd„Z	 	 	 	 	 ddej                  deej                     deej                     ded	ed
ede	e
ef   fd„Zˆ xZS )ÚFlavaEncoderrh   r+   Nc                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w r©   )
ro   rp   rh   r   Ú
ModuleListÚrangeÚnum_hidden_layersr4  ÚlayerÚgradient_checkpointing)r3   rh   r£   r}   s      €r4   rp   zFlavaEncoder.__init__ƒ  sN   ø€ Ü‰ÑÔØˆŒÜ—]‘]ÄÀf×F^ÑF^Ó@_Ö#`¸1¤J¨vÕ$6Ò#`ÓaˆŒ
Ø&+ˆÕ#ùò $as   ½A#rö   r÷   rø   rù   Úoutput_hidden_statesÚreturn_dictc                 óx  — |rdnd }|rdnd }t        | j                  «      D ]j  \  }	}
|r||fz   }|�||	   nd }| j                  r,| j                  r | j	                  |
j
                  ||||«      }n |
||||«      }|d   }|sŒb||d   fz   }Œl |r||fz   }|st        d„ |||fD «       «      S t        |||¬«      S )NrC   r   r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrd   rC   )r1   rO   s     r4   r5   z'FlavaEncoder.forward.<locals>.<genexpr>¯  s   è ø€ Òm˜qÐ_`Ñ_lœÑmùó   ‚Š)Úlast_hidden_staterö   Ú
attentions)Ú	enumeraterE  rF  ÚtrainingÚ_gradient_checkpointing_funcÚ__call__r8   r   )r3   rö   r÷   rø   rù   rG  rH  Úall_hidden_statesÚall_self_attentionsÚiÚlayer_moduleÚlayer_head_maskÚlayer_outputss                r4   r§   zFlavaEncoder.forward‰  s  € ñ #7™B¸DÐÙ$5™b¸4Ðä(¨¯©Ó4ò 	P‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!à.7Ð.C˜i¨šlÈˆOà×*Ò*¨t¯}ª}Ø $× AÑ AØ ×)Ñ)Ø!Ø"Ø#Ø%ó!‘ñ !-¨]¸NÈOÐ]nÓ o�à)¨!Ñ,ˆMâ Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ð)	Pñ,  Ø 1°]Ð4DÑ DÐáÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmÜØ+Ð;LÐYlô
ð 	
r;   )NNFFT)r<   r=   r>   r   rp   r@   rª   r   rP   r   r8   r   r§   r­   r®   s   @r4   r@  r@  ‚  s�   ø„ ð,˜{ð ,¨tõ ,ð 26Ø,0Ø"'Ø%*Ø ñ)
à—|‘|ð)
ð ! §¡Ñ.ð)
ð ˜EŸL™LÑ)ð	)
ð
  ð)
ð #ð)
ð ð)
ð 
ˆu�oÐ%Ñ	&÷)
r;   r@  c                   óD   ‡ — e Zd Zdefˆ fd„Zdej                  fd„Zˆ xZS )ÚFlavaPoolerrh   c                 ó²   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  «       | _        y rd   )ro   rp   r   rí   rt   r  ÚTanhÚ
activationrÙ   s     €r4   rp   zFlavaPooler.__init__¶  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�r;   rö   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S ©Nr   )r  r\  )r3   rö   Úfirst_token_tensorÚpooled_outputs       r4   r§   zFlavaPooler.forward»  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr;   r.  r®   s   @r4   rY  rY  µ  s    ø„ ð$Ð3õ $ð
 U§\¡\÷ r;   rY  aD  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass. Use it
    as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`{config}`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
a®  
        attention_mask (`torch.FloatTensor` of shape `({0})`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:
            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.
            [What are attention masks?](../glossary#attention-mask)

        head_mask (`torch.FloatTensor` of shape `(num_heads,)` or `(num_layers, num_heads)`, *optional*):
            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:

            - 1 indicates the head is **not masked**,
            - 0 indicates the head is **masked**.

        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.

        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
a;  
    Args:
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See
            [`FlavaImageProcessor.__call__`] for details.

        bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, image_num_patches)`):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).

        interpolate_pos_encoding (`bool`, *optional*):
            Whether to interpolate the pre-trained position encodings.
aÌ  
    Args:
        input_ids (`torch.LongTensor` of shape `({0})`):
            Indices of input sequence tokens in the vocabulary. Indices can be obtained using [`AutoTokenizer`]. See
            [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details. [What are input
            IDs?](../glossary#input-ids)

        token_type_ids (`torch.LongTensor` of shape `({0})`, *optional*):
            Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,
            1]`:
            - 0 corresponds to a *sentence A* token,
            - 1 corresponds to a *sentence B* token.
            [What are token type IDs?](../glossary#token-type-ids)
zÀ
    Args:
        hidden_states (`torch.FloatTensor` of shape `(batch_size, image_num_patches + text_seq_len, hidden_size)`):
            The concatenated hidden states of unimodal encoders.
z²
    Args:
        skip_multimodal_encoder (*bool*, *optional*):
            Skip any calculations for multimodal encoder. Useful if multimodal encoding is not going to be used.
aä  
    Args:
        input_ids_masked (`torch.LongTensor` of shape `({0})`):
            Indices of input sequence tokens in the vocabulary. These ones are the masked version of the original task
            to be used with MLM. Indices can be obtained using [`AutoTokenizer`] along with
            [`DataCollatorForMaskedLanguageModeling`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details. [What are input IDs?](../glossary#input-ids)

a˜  
        image_attention_mask (`torch.FloatTensor` of shape `({1})`, *optional*):
            Mask to avoid performing attention on padding token indices specifically for images. Mask values selected
            in `[0, 1]`:
            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.
            [What are attention masks?](../glossary#attention-mask)

        skip_unmasked_multimodal_encoder (*bool*, *optional*):
            Skip any calculations for multimodal encoder for unmasked inputs. FLAVA pretraining doesn't need unmasked
            multimodal embeddings or outputs as of now.

        mlm_labels (`torch.LongTensor` of shape `(batch_size, text_seq_len)`, *optional*):
            Labels for computing the left-to-right language and multimodal masked modeling loss (next word prediction).
            Indices should be in `[-100, 0, ..., text_config.vocab_size - 1]` (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,
            ..., text_config.vocab_size - 1]`.

        mim_labels (`torch.LongTensor` of shape `(batch_size, image_num_patches)`, *optional*):
            Labels for computing the image and multimodal masked modeling loss. Indices should be in `[-100, 0, ...,
            image_config.vocab_size - 1]`. Tokens with indices set to `-100` are ignored (masked), the loss is only
            computed for the tokens with labels in `[0, ..., image_config.vocab_size - 1]`. If not passed, they are
            generated automatically using the image codebook assigned to the model. By default, it uses
            [`FlavaImageCodebook`]. See [`FlavaImageCodebook`] to understand how to generate mim_labels.

        itm_labels (`torch.LongTensor` of shape `(batch_size, 1)`, *optional*):
            Labels for computing the image-text matching loss. 0 means the pairs don't match and 1 means they match.
            The pairs with 0 will be skipped for calculation of MMM and global contrastive losses as well.

        return_loss (`bool`, *optional*, default to None):
            Whether to return calculated loss or not.
zî
    Parameters:
        image_codebook ([`nn.Module`]): If passed, the image codebook will be set to this. Otherwise. it will
            be initialized using the image_codebook_config defined in the config first as the first parameter.
c                   ót   — e Zd ZdZeZdZdZdee	j                  e	j                  e	j                  f   ddfd„Zy)ÚFlavaPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ÚflavaTÚmoduler+   Nc                 ó¸  — t        |t        j                  t        j                  f«      rm|j                  j
                  j                  d| j                  j                  ¬«       |j                  �%|j                  j
                  j                  «        yyt        |t        j                  «      rz|j                  j
                  j                  d| j                  j                  ¬«       |j                  �2|j                  j
                  |j                     j                  «        yyt        |t        j                  «      rJ|j                  j
                  j                  «        |j                  j
                  j                  d«       yt        |t        «      r%|j                  j
                  j                  «        yt        |t         «      rz|j"                  j
                  j                  «        |j$                  j
                  j                  «        |j&                  �%|j&                  j
                  j                  «        yyt        |t(        «      r2|j*                  r%|j"                  j
                  j                  «        yyt        |t,        «      r:|j.                  j
                  j                  | j                  j0                  «       yy)zInitialize the weightsg        )ÚmeanÚstdNr�   )r³   r   rí   r·   ÚweightÚdataÚnormal_rh   Úinitializer_rangeré   Úzero_rÍ   rÄ   rÔ   Úfill_ÚFlavaMaskedPredictionHeadrg   ru   ry   rq   ÚFlavaMultimodalModelÚuse_cls_tokenÚ
FlavaModelÚlogit_scaleÚlogit_scale_init_value)r3   rd  s     r4   Ú_init_weightsz"FlavaPreTrainedModel._init_weights^  só  € ä�fœrŸy™y¬"¯)©)Ð4Ô5ð �M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô-Ø�M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ×!Ñ!Ð-Ø—‘×"Ñ" 6×#5Ñ#5Ñ6×<Ñ<Õ>ð .ä˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)Ü˜Ô 9Ô:Ø�K‰K×Ñ×"Ñ"Õ$Ü˜Ô 4Ô5Ø×Ñ×!Ñ!×'Ñ'Ô)Ø×&Ñ&×+Ñ+×1Ñ1Ô3Ø× Ñ Ð,Ø×!Ñ!×&Ñ&×,Ñ,Õ.ð -ä˜Ô 4Ô5Ø×#Ò#Ø× Ñ ×%Ñ%×+Ñ+Õ-ð $ä˜¤
Ô+Ø×Ñ×#Ñ#×)Ñ)¨$¯+©+×*LÑ*LÕMð ,r;   )r<   r=   r>   r?   r   Úconfig_classÚbase_model_prefixÚsupports_gradient_checkpointingr   r   rí   r·   rÔ   rt  rC   r;   r4   rb  rb  T  sI   „ ñð
 €LØÐØ&*Ð#ðN E¨"¯)©)°R·Y±YÀÇÁÐ*LÑ$Mð NÐRVô Nr;   rb  zeThe bare FLAVA Image Model transformer outputting raw hidden-states without any specific head on top.)rh   c                   ó²  ‡ — e Zd ZeZdZdZddedefˆ fd„Zde	j                  fd„Zde	j                  fd	„Zd
eeee   f   ddfd„Z eej'                  d«      «       eeeede¬«      	 	 	 	 	 	 	 	 ddeej6                     deej8                     dee   deej6                     deej6                     dee   dee   dee   deeef   fd„«       «       Zˆ xZ S )ÚFlavaImageModelzflava.image_modelrš   rh   Úadd_pooling_layerc                 ó  •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        j                  |j                  |j                  ¬«      | _        |rt        |«      nd | _        | j                  «        y ©NrÅ   )ro   rp   rh   rg   r~   r@  Úencoderr   rÔ   rt   rÕ   Ú	layernormrY  ÚpoolerÚ	post_init©r3   rh   rz  r}   s      €r4   rp   zFlavaImageModel.__init__…  sg   ø€ Ü‰Ñ˜Ô àˆŒä.¨vÓ6ˆŒÜ# FÓ+ˆŒäŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÙ->”k &Ô)ÀDˆŒà�‰Õr;   r+   c                 ó.   — | j                   j                  S rd   ©r~   rw   r:   s    r4   Úget_input_embeddingsz$FlavaImageModel.get_input_embeddings’  s   € Ø�‰×/Ñ/Ð/r;   rñ   c                 ó&   — || j                   _        y rd   rƒ  ©r3   rñ   s     r4   Úset_input_embeddingsz$FlavaImageModel.set_input_embeddings•  s   € Ø+0ˆ�‰Õ(r;   Úheads_to_pruneNc                 ó˜   — |j                  «       D ]7  \  }}| j                  j                  |   j                  j	                  |«       Œ9 y©z�
        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
        class PreTrainedModel
        N©Úitemsr}  rE  r  r   ©r3   rˆ  rE  r  s       r4   Ú_prune_headszFlavaImageModel._prune_heads˜  óE   € ð
 +×0Ñ0Ó2ò 	C‰LˆE�5Ø�L‰L×Ñ˜uÑ%×/Ñ/×;Ñ;¸EÕBñ	Cr;   úbatch_size, image_num_patchesÚvision)Ú
checkpointÚoutput_typeru  ÚmodalityÚexpected_outputr›   r™   r÷   rø   rù   rG  rH  c	                 ó"  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|€t	        d«      ‚| j                  || j                   j                  «      }| j                  |||¬«      }	| j                  |	|||||¬«      }
|
d   }| j                  |«      }| j                  �| j                  |«      nd }|s
||f|
dd  z   S t        |||
j                  |
j                  ¬«      S )Nz You have to specify pixel_values)r›   r™   ©r÷   rø   rù   rG  rH  r   r   ©rL  Úpooler_outputrö   rM  )rh   rù   rG  Úuse_return_dictr»   Úget_head_maskrD  r~   r}  r~  r  r   rö   rM  )r3   rš   r›   r™   r÷   rø   rù   rG  rH  Úembedding_outputÚencoder_outputsÚsequence_outputr`  s                r4   r§   zFlavaImageModel.forward   s8  € ð& 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐÜÐ?Ó@Ð@ð ×&Ñ& y°$·+±+×2OÑ2OÓPˆ	àŸ?™?Ø¨/ÐTlð +ó 
Ðð Ÿ,™,ØØ)ØØ/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆØŸ.™.¨Ó9ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆáØ# ]Ð3°oÀaÀbÐ6IÑIÐIä)Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r;   ©T©NNNNNNNN)!r<   r=   r>   r   ru  rv  Úmain_input_namerP   rp   r   ÚModuler„  r‡  r   r«   r   rŽ  r   ÚFLAVA_IMAGE_INPUTS_DOCSTRINGÚformatr   Ú_CHECKPOINT_FOR_DOCr   Ú!_CONFIG_CLASS_FOR_IMAGE_MODEL_DOCÚ_EXPECTED_IMAGE_OUTPUT_SHAPEr   r@   rª   r¬   r   r8   r§   r­   r®   s   @r4   ry  ry  {  sb  ø„ ð
 $€Là+ÐØ$€OñÐ/ð ÀDõ ð0 b§i¡ió 0ð1¨"¯)©)ó 1ðC¨4°°T¸#±Y°Ñ+?ð CÀDó Cñ +Ð+G×+NÑ+NÐOnÓ+oÓpÙØ&Ø.Ø6ØØ4ôð 04Ø6:Ø37Ø15Ø,0Ø,0Ø/3Ø&*ñ3
à˜uŸ|™|Ñ,ð3
ð " %×"2Ñ"2Ñ3ð3
ð #+¨4¡.ð	3
ð
 ! §¡Ñ.ð3
ð ˜EŸL™LÑ)ð3
ð $ D™>ð3
ð ' t™nð3
ð ˜d‘^ð3
ð 
ˆuÐ0Ð0Ñ	1ò3
óó qô3
r;   ry  zdThe bare FLAVA Text Model transformer outputting raw hidden-states without any specific head on top.c                   óª  ‡ — e Zd ZeZdZddedefˆ fd„Zdefd„Z	de
j                  fd„Zd	eeee   f   dd
fd„Z eej'                  d«      «       eeee¬«      	 	 	 	 	 	 	 	 ddeej4                     deej4                     deej4                     deej4                     deej4                     dee   dee   dee   deeef   fd„«       «       Zˆ xZS )ÚFlavaTextModelzflava.text_modelrh   rz  c                 ó  •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        j                  |j                  |j                  ¬«      | _        |rt        |«      nd | _        | j                  «        y r|  )ro   rp   rh   rÂ   r~   r@  r}  r   rÔ   rt   rÕ   r~  rY  r  r€  r�  s      €r4   rp   zFlavaTextModel.__init__ç  sg   ø€ Ü‰Ñ˜Ô ØˆŒä-¨fÓ5ˆŒÜ# FÓ+ˆŒäŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÙ->”k &Ô)ÀDˆŒà�‰Õr;   r+   c                 ó.   — | j                   j                  S rd   ©r~   rÐ   r:   s    r4   r„  z#FlavaTextModel.get_input_embeddingsó  s   € Ø�‰×.Ñ.Ð.r;   rñ   c                 ó&   — || j                   _        y rd   r¬  r†  s     r4   r‡  z#FlavaTextModel.set_input_embeddingsö  s   € Ø*/ˆ�‰Õ'r;   rˆ  Nc                 ó˜   — |j                  «       D ]7  \  }}| j                  j                  |   j                  j	                  |«       Œ9 yrŠ  r‹  r�  s       r4   rŽ  zFlavaTextModel._prune_headsù  r�  r;   úbatch_size, text_seq_length©r’  r“  ru  rÚ   r÷   rË   rÉ   rø   rù   rG  rH  c	                 óÂ  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|€t	        d«      ‚|j                  «       }	|€!t        j                  |	|j                  ¬«      }| j                  || j                   j                  «      }| j                  ||	|j                  «      }
| j                  |||¬«      }| j                  ||
||||¬«      }|d   }| j                  |«      }| j                  �| j                  |«      nd }|s
||f|dd  z   S t!        |||j"                  |j$                  ¬«      S )NzYou have to specify input_ids©rÜ   )rÚ   rË   rÉ   r—  r   r   r˜  )rh   rù   rG  rš  r»   r…   r@   ÚonesrÜ   r›  rD  Úget_extended_attention_maskr~   r}  r~  r  r   rö   rM  )r3   rÚ   r÷   rË   rÉ   rø   rù   rG  rH  rÞ   Úextended_attention_maskrœ  r�  rž  r`  s                  r4   r§   zFlavaTextModel.forward  s�  € ð" 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐÜÐ<Ó=Ð=à—n‘nÓ&ˆàÐ!Ü"ŸZ™Z¨¸I×<LÑ<LÔMˆNð ×&Ñ& y°$·+±+×2OÑ2OÓPˆ	Ø04×0PÑ0PØ˜K¨×)9Ñ)9ó1
Ðð  Ÿ?™?ØØ)Ø%ð +ó 
Ðð Ÿ,™,ØØ2ØØ/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆØŸ.™.¨Ó9ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆáØ# ]Ð3°oÀaÀbÐ6IÑIÐIä)Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r;   rŸ  r   )r<   r=   r>   r    ru  rv  rP   rp   rv   r„  r   r¢  r‡  r   r«   r   rŽ  r   ÚFLAVA_TEXT_INPUTS_DOCSTRINGr¤  r   r¥  r   Ú _CONFIG_CLASS_FOR_TEXT_MODEL_DOCr   r@   rª   r   r8   r§   r­   r®   s   @r4   r©  r©  Þ  sU  ø„ ð
 #€Là*Ðñ
˜ð 
À4õ 
ð/ oó /ð0¨"¯)©)ó 0ðC¨4°°T¸#±Y°Ñ+?ð CÀDó Cñ +Ð+F×+MÑ+MÐNkÓ+lÓmÙØ&Ø.Ø5ôð -1Ø15Ø15Ø/3Ø,0Ø,0Ø/3Ø&*ñ=
à˜EŸL™LÑ)ð=
ð ! §¡Ñ.ð=
ð ! §¡Ñ.ð	=
ð
 ˜uŸ|™|Ñ,ð=
ð ˜EŸL™LÑ)ð=
ð $ D™>ð=
ð ' t™nð=
ð ˜d‘^ð=
ð 
ˆuÐ0Ð0Ñ	1ò=
óó nô=
r;   r©  zjThe bare FLAVA Multimodal Model transformer outputting raw hidden-states without any specific head on top.c                   ó6  ‡ — e Zd ZeZdZdZddefˆ fd„Zdee	e
e	   f   ddfd„Z eej                  d	«      «       eeee¬
«      	 	 	 	 	 ddej(                  deej(                     deej(                     dee   dee   dee   deeef   fd„«       «       Zˆ xZS )ro  zflava.multimodal_modelrö   rh   c                 óº  •— t         ‰| �  |«       || _        | j                  j                  | _        | j                  r9t	        j
                  t        j                  dd|j                  «      «      | _	        t        |«      | _        t	        j                  |j                  |j                  ¬«      | _        |rt        |«      nd | _        | j#                  «        y r6  )ro   rp   rh   rp  r   rr   r@   rs   rt   ru   r@  r}  rÔ   rÕ   r~  rY  r  r€  r�  s      €r4   rp   zFlavaMultimodalModel.__init__Q  s™   ø€ Ü‰Ñ˜Ô ØˆŒØ!Ÿ[™[×6Ñ6ˆÔØ×ÒÜŸ\™\¬%¯+©+°a¸¸F×<NÑ<NÓ*OÓPˆDŒNä# FÓ+ˆŒäŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÙ->”k &Ô)ÀDˆŒà�‰Õr;   rˆ  r+   Nc                 ó˜   — |j                  «       D ]7  \  }}| j                  j                  |   j                  j	                  |«       Œ9 yrŠ  r‹  r�  s       r4   rŽ  z!FlavaMultimodalModel._prune_heads_  r�  r;   ú,batch_size, image_num_patches + text_seq_lenr°  r÷   rø   rù   rG  rH  c                 ó  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|j	                  «       \  }}}	| j
                  r;| j                  j                  |dd«      }
t        j                  |
|fd¬«      }|dz  }|€#t        j                  ||f|j                  ¬«      }| j                  || j                   j                  «      }| j                  |||f|j                  «      }| j                  ||||||¬«      }|d   }| j!                  |«      }| j"                  �| j#                  |«      nd }|s
||f|dd  z   S t%        |||j&                  |j(                  ¬«      S )Nr‚   r   rˆ   r²  r—  r   r˜  )rh   rù   rG  rš  r…   rp  ru   rž   r@   r’   r³  rÜ   r›  rD  r´  r}  r~  r  r   rö   rM  )r3   rö   r÷   rø   rù   rG  rH  r¡   rß   r£   r¦   rµ  r�  rž  r`  s                  r4   r§   zFlavaMultimodalModel.forwardg  s¢  € ð" 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà$1×$6Ñ$6Ó$8Ñ!ˆ
�J à×ÒØŸ™×.Ñ.¨z¸2¸rÓBˆJÜ!ŸI™I z°=Ð&AÀqÔIˆMØ˜!‰OˆJàÐ!Ü"ŸZ™Z¨°ZÐ(@È×I]ÑI]Ô^ˆNð ×&Ñ& y°$·+±+×2OÑ2OÓPˆ	Ø04×0PÑ0PØ˜Z¨Ð4°m×6JÑ6Jó1
Ðð Ÿ,™,ØØ2ØØ/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆØŸ.™.¨Ó9ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆáØ# ]Ð3°oÀaÀbÐ6IÑIÐIä)Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
r;   rŸ  )NNNNN)r<   r=   r>   r   ru  rv  r¡  rp   r   r«   r   rŽ  r   Ú!FLAVA_MULTIMODAL_INPUTS_DOCSTRINGr¤  r   r¥  r   Ú&_CONFIG_CLASS_FOR_MULTIMODAL_MODEL_DOCr@   rª   r   rP   r   r8   r§   r­   r®   s   @r4   ro  ro  G  s  ø„ ð
 )€Là0ÐØ%€OñÐ4õ ðC¨4°°T¸#±Y°Ñ+?ð CÀDó Cñ +Ø)×0Ñ0Ð1_Ó`óñ  Ø&Ø.Ø;ôð 26Ø,0Ø,0Ø/3Ø&*ñ7
à—|‘|ð7
ð ! §¡Ñ.ð7
ð ˜EŸL™LÑ)ð	7
ð
 $ D™>ð7
ð ' t™nð7
ð ˜d‘^ð7
ð 
ˆuÐ0Ð0Ñ	1ò7
óóô7
r;   ro  z_The bare FLAVA Model transformer outputting raw hidden-states without any specific head on top.r   c                   ó˜  ‡ — e Zd ZeZdefˆ fd„Z eej                  d«      «      	 	 	 	 	 	 	 dde	e
j                     de	e
j                     de	e
j                     de	e
j                     de	e   d	e	e   d
e	e   de
j                  fd„«       Z eej                  d«      «      	 	 	 	 	 	 	 	 dde	e
j                     de	e
j                      de	e   de	e
j                     de	e
j                     de	e   d	e	e   d
e	e   de
j                  fd„«       Z eej                  d«      «       eee¬«      	 	 	 	 	 	 	 	 	 	 	 dde	e
j*                     de	e
j                     de	e
j                     de	e
j                     de	e
j                     de	e
j*                     de	e
j                     de	e   de	e   d	ed
e	e   deeef   fd„«       «       Zˆ xZS )rq  rh   c                 óÜ  •— t         ‰| �  |«       t        |j                  t        «      s"t        dt        |j                  «      › d�«      ‚t        |j                  t        «      s"t        dt        |j                  «      › d�«      ‚t        |j                  t        «      s%t        ddt        |j                  «      › d�z   «      ‚|j                  }|j                  }|j                  }|j                  | _        |j                  | _        |j                  | _        |j                  | _        t!        |«      | _        t%        |«      | _        t)        |«      | _        t-        j.                  | j                  | j                  «      | _        t-        j.                  | j                  | j                  «      | _        t-        j4                  t7        j8                  | j:                  j<                  «      «      | _        t-        j.                  | j                  | j                  «      | _         t-        j.                  | j                  | j                  «      | _!        | jE                  «        y )NzLconfig.text_config is expected to be of type FlavaTextConfig but is of type rç   zNconfig.image_config is expected to be of type FlavaImageConfig but is of type zMconfig.multimodal_config is expected to be of type FlavaMultimodalConfig but zis of type )#ro   rp   r³   Útext_configr    Ú	TypeErrorÚtypeÚimage_configr   Úmultimodal_configr   Úprojection_dimrt   Útext_hidden_sizeÚimage_hidden_sizeÚmm_hidden_sizer©  Ú
text_modelry  Úimage_modelro  Úmultimodal_modelr   rí   Úimage_projectionÚtext_projectionrr   r@   Útensorrh   rs  rr  Úimage_to_mm_projectionÚtext_to_mm_projectionr€  )r3   rh   rÁ  rÄ  rÅ  r}   s        €r4   rp   zFlavaModel.__init__°  sõ  ø€ Ü‰Ñ˜Ô ä˜&×,Ñ,¬oÔ>ÜðÜ˜×+Ñ+Ó,Ð-¨Qð0óð ô
 ˜&×-Ñ-Ô/?Ô@ÜðÜ˜×,Ñ,Ó-Ð.¨að1óð ô
 ˜&×2Ñ2Ô4IÔJÜØ_Ø¤ V×%=Ñ%=Ó >Ð?¸qÐAñBóð ð
 ×(Ñ(ˆØ×*Ñ*ˆØ"×4Ñ4Ðà$×3Ñ3ˆÔØ +× 7Ñ 7ˆÔØ!-×!9Ñ!9ˆÔØ/×;Ñ;ˆÔä(¨Ó5ˆŒÜ*¨<Ó8ˆÔÜ 4Ð5FÓ GˆÔä "§	¡	¨$×*@Ñ*@À$×BUÑBUÓ VˆÔÜ!Ÿy™y¨×)>Ñ)>À×@SÑ@SÓTˆÔÜŸ<™<¬¯©°T·[±[×5WÑ5WÓ(XÓYˆÔä&(§i¡i°×0FÑ0FÈ×H[ÑH[Ó&\ˆÔ#Ü%'§Y¡Y¨t×/DÑ/DÀd×FYÑFYÓ%ZˆÔ"à�‰Õr;   r¯  rÚ   r÷   rË   rÉ   rù   rG  rH  r+   c           	      óŒ   — dj                  t        «       | j                  |||||||¬«      }|d   }	| j                  |	«      }
|
S )Na¥  
        Returns:
            text_features (`torch.FloatTensor` of shape `(batch_size, output_dim`): The text embeddings obtained by
            applying the projection layer to the pooled output of [`FlavaTextModel`].

        Examples:

        ```python
        >>> from transformers import AutoProcessor, FlavaModel

        >>> model = FlavaModel.from_pretrained("{0}")
        >>> processor = AutoProcessor.from_pretrained("{0}")

        >>> inputs = processor(
        ...     text=["a photo of a cat", "a photo of a dog"], max_length=77, padding="max_length", return_tensors="pt"
        ... )
        >>> text_features = model.get_text_features(**inputs)
        ```)rÚ   r÷   rË   rÉ   rù   rG  rH  r   )r¤  r¥  rÊ  rÎ  )r3   rÚ   r÷   rË   rÉ   rù   rG  rH  Útext_outputsr`  Útext_featuress              r4   Úget_text_featureszFlavaModel.get_text_featuresÛ  s]   € ð	÷" ‰vÔ)Ô*Ø—‘ØØ)Ø)Ø%Ø/Ø!5Ø#ð 'ó 
ˆð % Q™ˆØ×,Ñ,¨]Ó;ˆàÐr;   r�  rš   r›   r™   rø   c	           
      óŽ   — dj                  t        «       | j                  ||||||||¬«      }	|	d   }
| j                  |
«      }|S )Na  
        Returns:
            image_features (`torch.FloatTensor` of shape `(batch_size, output_dim`): The image embeddings obtained by
            applying the projection layer to the pooled output of [`FlavaImageModel`].

        Examples:

        ```python
        >>> from PIL import Image
        >>> import requests
        >>> from transformers import AutoProcessor, FlavaModel

        >>> model = FlavaModel.from_pretrained("{0}")
        >>> processor = AutoProcessor.from_pretrained("{0}")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

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

        >>> image_features = model.get_image_features(**inputs)
        ```)rš   r›   r÷   rø   rù   rG  r™   rH  r   )r¤  r¥  rË  rÍ  )r3   rš   r›   r™   r÷   rø   rù   rG  rH  Úimage_outputsr`  Úimage_featuress               r4   Úget_image_featureszFlavaModel.get_image_features  sc   € ð	÷* ‰vÔ)Ô*Ø×(Ñ(Ø%Ø+Ø)ØØ/Ø!5Ø%=Ø#ð )ó 	
ˆð & aÑ(ˆØ×.Ñ.¨}Ó=ˆàÐr;   r»  ©r“  ru  Úimage_attention_maskÚskip_multimodal_encoderc           	      óÒ  — |�|n| j                   j                  }|
st        d«      ‚d}d}d}d}|�5| j                  ||||	|
|¬«      }|d   |d   }}| j	                  |d   «      }d}d}d}d}|�6| j                  |||||	|
|¬«      }|d   |d   }}| j                  |d   «      }d}d}|�¡|�Ÿ|s�|�g|j                  \  }}}| j                  j                  r|dz  }t        j                  |||j                  ¬	«      }t        j                  ||gd¬
«      }nd}t        j                  ||gd¬
«      }| j                  |||¬«      }|d   }|s||||||fS t        ||||||¬«      S )a  
        Returns:

        Examples:

        ```python
        >>> from PIL import Image
        >>> import requests
        >>> from transformers import AutoProcessor, FlavaModel

        >>> model = FlavaModel.from_pretrained("facebook/flava-full")
        >>> processor = AutoProcessor.from_pretrained("facebook/flava-full")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> inputs = processor(text=["a photo of a cat"], images=image, return_tensors="pt", padding=True)

        >>> outputs = model(**inputs)

        >>> image_embeddings = outputs.image_embeddings
        >>> text_embeddings = outputs.text_embeddings
        >>> multimodal_embeddings = outputs.multimodal_embeddings

        >>> outputs.image_embeddings.shape
        torch.Size([1, 197, 768])

        >>> text_embeddings.shape
        torch.Size([1, 7, 768])

        >>> multimodal_embeddings.shape
        torch.Size([1, 205, 768])
        ```
        NzRFLAVA model requires hidden states to work. Please set `output_hidden_states=True`)rš   r›   r÷   rù   rG  rH  r   rƒ   r‚   )rÚ   r÷   rÉ   rË   rù   rG  rH  r   r²  rˆ   )r÷   rH  )r%   r&   r'   r(   r)   r*   )rh   rH  r»   rË  rÐ  rÊ  rÑ  rŠ   rÌ  rp  r@   r³  rÜ   r’   r$   )r3   rÚ   rš   r÷   rË   r›   rÉ   rÛ  rÜ  rù   rG  rH  r%   Úimage_statesÚimage_mm_projectionr&   r'   Útext_statesÚtext_mm_projectionr(   r)   r*   r¡   r¢   r£   Úattention_mask_imageÚattention_multimodalÚmultimodal_inputs                               r4   r§   zFlavaModel.forward9  s
  € ðj &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆÙ#ÜÐqÓrÐrØÐØˆØ"ÐØˆØÐ#Ø×+Ñ+Ø)Ø /Ø3Ø"3Ø%9Ø'ð ,ó ˆLð .:¸!©_¸lÈ1¹o˜lÐà"&×"=Ñ"=¸lÈ2Ñ>NÓ"OÐàˆØˆØ!ÐØˆØÐ ØŸ/™/Ø#Ø-Ø)Ø-Ø"3Ø%9Ø'ð *ó ˆKð ,7°q©>¸;Àq¹>˜[ˆOà!%×!;Ñ!;¸KÈ¹OÓ!LÐà $ÐØ ÐØÐ*Ð/AÐ/MÑVmØÐ)Ø)<×)BÑ)BÑ&�
˜G QØ×(Ñ(×6Ò6Ø˜q‘L�GÜ',§z¡z°*¸gÐNa×NhÑNhÔ'iÐ$Ü',§y¡yÐ2FÈÐ1WÐ]^Ô'_Ñ$à'+Ð$Ü$Ÿy™yÐ*=Ð?QÐ)RÐXYÔZÐØ $× 5Ñ 5Ø Ð1EÐS^ð !6ó !Ðð %6°aÑ$8Ð!áà ØØØØ%Ø!ðð ô  Ø-Ø%Ø+Ø#Ø"7Ø/ô
ð 	
r;   )NNNNNNNr   )NNNNNNNNNTN)r<   r=   r>   r   ru  rp   r   r¶  r¤  r   r@   rª   rP   rA   rÕ  r£  r¬   rÙ  ÚFLAVA_MODEL_INPUTS_DOCSTRINGr   r$   Ú
LongTensorr   r
   r0  r§   r­   r®   s   @r4   rq  rq  ©  sí  ø„ ð
 €Lð)˜{õ )ñV +Ð+F×+MÑ+MÐNkÓ+lÓmð -1Ø15Ø15Ø/3Ø,0Ø/3Ø&*ñ)à˜EŸL™LÑ)ð)ð ! §¡Ñ.ð)ð ! §¡Ñ.ð	)ð
 ˜uŸ|™|Ñ,ð)ð $ D™>ð)ð ' t™nð)ð ˜d‘^ð)ð 
×	Ñ	ò)ó nð)ñV +Ð+G×+NÑ+NÐOnÓ+oÓpð 04Ø6:Ø37Ø15Ø,0Ø,0Ø/3Ø&*ñ/à˜uŸ|™|Ñ,ð/ð " %×"2Ñ"2Ñ3ð/ð #+¨4¡.ð	/ð
 ! §¡Ñ.ð/ð ˜EŸL™LÑ)ð/ð $ D™>ð/ð ' t™nð/ð ˜d‘^ð/ð 
×	Ñ	ò/ó qð/ñb +Ø$×+Ñ+Ð,ZÓ[óñ Ð+;È+ÔVð 15Ø48Ø15Ø15Ø26Ø37Ø7;Ø26Ø,0Ø%)Ø&*ñz
à˜E×,Ñ,Ñ-ðz
ð ˜u×0Ñ0Ñ1ðz
ð ! §¡Ñ.ð	z
ð
 ! §¡Ñ.ðz
ð " %§,¡,Ñ/ðz
ð ˜u×/Ñ/Ñ0ðz
ð ' u§|¡|Ñ4ðz
ð "*¨$¡ðz
ð $ D™>ðz
ð #ðz
ð ˜d‘^ðz
ð 
ˆu�kÐ!Ñ	"òz
ó Wóôz
r;   rq  c                   ó`   ‡ — e Zd Zdedefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚFlavaImageCodebookResPathÚin_sizeÚout_sizec                 ó  •— t         ‰| �  «        |dz  }t        «       }t        j                  «       |d<   t        j
                  ||dd¬«      |d<   t        j                  «       |d<   t        j
                  ||dd¬«      |d<   t        j                  «       |d	<   t        j
                  ||dd¬«      |d
<   t        j                  «       |d<   t        j
                  ||dd¬«      |d<   t        j                  |«      | _        y )Né   Úrelu_1r   r   ©r±   ÚpaddingÚconv_1Úrelu_2Úconv_2Úrelu_3Úconv_3Úrelu_4r   Úconv_4)ro   rp   r   r   ÚReLUr·   Ú
SequentialÚpath)r3   ré  rê  ÚkwargsÚhid_sizerù  r}   s         €r4   rp   z"FlavaImageCodebookResPath.__init__»  sÊ   ø€ Ü‰ÑÔØ˜q‘=ˆä‹}ˆÜŸ™›ˆˆX‰ÜŸ™ 7¨HÀ!ÈQÔOˆˆX‰ÜŸ™›ˆˆX‰ÜŸ™ 8¨XÀ1ÈaÔPˆˆX‰ÜŸ™›ˆˆX‰ÜŸ™ 8¨XÀ1ÈaÔPˆˆX‰ÜŸ™›ˆˆX‰ÜŸ™ 8¨XÀ1ÈaÔPˆˆX‰ä—M‘M $Ó'ˆ�	r;   r¾   r+   c                 ó$   — | j                  |«      S rd   )rù  ©r3   r¾   s     r4   r§   z!FlavaImageCodebookResPath.forwardË  s   € Ø�y‰y˜‹|Ðr;   ©	r<   r=   r>   r«   rp   r@   rª   r§   r­   r®   s   @r4   rè  rè  º  s1   ø„ ð( ð (¨sõ (ð ˜Ÿ™ð ¨%¯,©,÷ r;   rè  c                   ód   ‡ — e Zd Zdededefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚFlavaImageCodebookBlockré  rê  Ú
num_layersc                 óØ   •— t         ‰| �  «        d|dz  z  | _        ||k7  rt        j                  ||dd¬«      | _        nt        j                  «       | _        t        ||«      | _        y )Nr   rƒ   r   rî  )	ro   rp   Ú	post_gainr   r·   Úid_pathÚIdentityrè  Úres_path)r3   ré  rê  r  rú  r}   s        €r4   rp   z FlavaImageCodebookBlock.__init__Ð  sW   ø€ Ü‰ÑÔà˜j¨!™mÑ,ˆŒà�hÒÜŸ9™9 W¨hÀAÈqÔQˆD�LäŸ;™;›=ˆDŒLä1°'¸8ÓDˆ�r;   r¾   r+   c                 ób   — | j                  |«      | j                  | j                  |«      z  z   S rd   )r  r  r  rý  s     r4   r§   zFlavaImageCodebookBlock.forwardÜ  s'   € Ø�|‰|˜A‹ §¡°$·-±-ÀÓ2BÑ!BÑBÐBr;   rþ  r®   s   @r4   r   r   Ï  s?   ø„ ð
E ð 
E¨sð 
EÀõ 
EðC˜Ÿ™ð C¨%¯,©,÷ Cr;   r   c                   ón   ‡ — e Zd Zd
dededededef
ˆ fd„Zdej                  dej                  fd	„Zˆ xZ	S )ÚFlavaImageCodebookLayerGroupÚ
num_blocksr  ré  rê  Úuse_poolc                 ó$  •— t         ‰| �  «        t        «       }t        |«      D ]4  }|dk(  rt	        |||«      |d|dz   › �<   Œt	        |||«      |d|dz   › �<   Œ6 |rt        j                  d¬«      |d<   t        j                  |«      | _        y )Nr   Úblock_r   rƒ   )r±   Úpool)	ro   rp   r   rC  r   r   Ú	MaxPool2drø  Úgroup)	r3   r
  r  ré  rê  r  ÚblocksrT  r}   s	           €r4   rp   z%FlavaImageCodebookLayerGroup.__init__á  s—   ø€ Ü‰ÑÔÜ“ˆÜ�zÓ"ò 	cˆAØ�AŠvÜ+BÀ7ÈHÐV`Ó+a�˜  A¡˜wÐ'Ò(ä+BÀ8ÈXÐWaÓ+b�˜  A¡˜wÐ'Ò(ð		cñ ÜŸ\™\°aÔ8ˆF�6‰Nä—]‘] 6Ó*ˆ�
r;   r¾   r+   c                 ó$   — | j                  |«      S rd   )r  rý  s     r4   r§   z$FlavaImageCodebookLayerGroup.forwardï  s   € Ø�z‰z˜!‹}Ðr;   rŸ  )
r<   r=   r>   r«   rP   rp   r@   rª   r§   r­   r®   s   @r4   r	  r	  à  sH   ø„ ñ+ 3ð +°Cð +À#ð +ÐQTð +Ð`dõ +ð˜Ÿ™ð ¨%¯,©,÷ r;   r	  a"  
    The FLAVA's image codebook model inspired from DALL-E's original encoder. Outputs raw hidden states and can be used
    to generate image tokens for an image based on DALL-E's vocab. Used to generate labels for MIM. Use
    `get_codebook_indices` to get image tokens for an image.
    r   c                   óà   ‡ — e Zd ZdZeZdZdZdedefˆ fd„Z	de
j                  de
j                  fd„Zde
j                  de
j                  fd	„Zde
j                  de
j                  fd
„Zˆ xZS )ÚFlavaImageCodebookÚ rš   Frh   rú  c                 óÆ  •— t         ‰| �  |«       || _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        | j                  | j
                  z  }t        «       }t        j                  «       |d<   t        j                  d| j                  z  | j                  dd¬«      |d<   t        «       }t        j                  | j                  d| j                  z  dd¬«      |d	<   t        | j
                  |d| j                  z  d| j                  z  «      |d
<   t        | j
                  |d| j                  z  d| j                  z  «      |d<   t        | j
                  |d| j                  z  d| j                  z  «      |d<   t        | j
                  |d| j                  z  d| j                  z  d¬«      |d<   t        j                  |«      |d<   t        j                  |«      | _        | j                  «        | j                  j                   r| j#                  «       D ]	  }d|_        Œ y y )NÚrelué   r   r   rî  Úconvé   r   ÚinputÚgroup_1rƒ   Úgroup_2rì  Úgroup_3F)r  Úgroup_4r  )ro   rp   rh   Ú
num_groupsÚinput_channelsÚnum_blocks_per_grouprt   rÎ   r   r   r÷  r·   r	  rø  r  r€  ÚfreezeÚ
parametersÚrequires_grad)r3   rh   rú  r  Úoutput_blocksr  Úparamr}   s          €r4   rp   zFlavaImageCodebook.__init__  s  ø€ ô
 	‰Ñ˜Ô àˆŒØ ×+Ñ+ˆŒØ$×3Ñ3ˆÔØ$*×$?Ñ$?ˆÔ!Ø!×-Ñ-ˆÔØ ×+Ñ+ˆŒà—_‘_ t×'@Ñ'@Ñ@ˆ
ä#›ˆÜ "§¡£	ˆ�fÑÜ "§	¡	¨!¨d×.>Ñ.>Ñ*>ÀÇÁÐ]^ÐhiÔ jˆ�fÑä“ˆÜŸ)™) D×$7Ñ$7¸¸T×=MÑ=MÑ9MÐ[\ÐfgÔhˆˆw‰Ü8Ø×%Ñ% z°1°t×7GÑ7GÑ3GÈÈT×M]ÑM]ÑI]ó
ˆˆyÑô 9Ø×%Ñ% z°1°t×7GÑ7GÑ3GÈÈT×M]ÑM]ÑI]ó
ˆˆyÑô 9Ø×%Ñ% z°1°t×7GÑ7GÑ3GÈÈT×M]ÑM]ÑI]ó
ˆˆyÑô 9Ø×%Ñ% z°1°t×7GÑ7GÑ3GÈÈT×M]ÑM]ÑI]Ðhmô
ˆˆyÑô Ÿ=™=¨Ó7ˆˆxÑä—m‘m FÓ+ˆŒà�‰Ôà�;‰;×ÒØŸ™Ó*ò ,�Ø&+�Õ#ñ,ð r;   r+   c                 ó|   — dj                  t        «       | j                  |«      }t        j                  |d¬«      S )Naü  
        Args:
            pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
                Pixel values. Codebook pixel values can be obtained using [`AutoImageProcessor`] by passing
                `return_codebook_pixels=True`. See [`FlavaImageProcessor.__call__`] for details.

        Examples:
        ```python
        >>> from PIL import Image
        >>> import requests
        >>> from transformers import AutoImageProcessor, FlavaImageCodebook

        >>> model = FlavaImageCodebook.from_pretrained("{0}")
        >>> image_processor = AutoImageProcessor.from_pretrained("{0}")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> inputs = image_processor([image], return_codebook_pixels=True, return_tensors="pt")
        >>> inputs = dict(pixel_values=inputs.codebook_pixel_values)

        >>> outputs = model.get_codebook_indices(**inputs)
        ```
        r   )Úaxis)r¤  Ú_CHECKPOINT_FOR_CODEBOOK_DOCr  r@   Úargmax©r3   rš   Úz_logitss      r4   Úget_codebook_indicesz'FlavaImageCodebook.get_codebook_indices.  s3   € ð	÷. ‰FÔ/Ô0Ø—;‘;˜|Ó,ˆÜ�|‰|˜H¨1Ô-Ð-r;   c                 ó\   — | j                  |«      } t        j                  d¬«      |«      S )Nr   rˆ   )r  r   ÚSoftmaxr,  s      r4   Úget_codebook_probsz%FlavaImageCodebook.get_codebook_probsJ  s&   € Ø—;‘;˜|Ó,ˆØ Œr�z‰z˜aÔ  Ó*Ð*r;   c                 ó8  — dj                  t        «       t        |j                  «      dk7  rt	        d|j                  › d�«      ‚|j                  d   | j
                  k7  r(t	        d|j                  d   › d| j
                  › �«      ‚| j                  |«      S )Na  
        Args:
            pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`):
                Pixel values. Codebook pixel values can be obtained using [`AutoImageProcessor`] by passing
                `return_codebook_pixels=True`. See [`FlavaImageProcessor.__call__`] for details.

        Examples:

        ```python
        >>> from PIL import Image
        >>> import requests
        >>> from transformers import AutoImageProcessor, FlavaImageCodebook

        >>> model = FlavaImageCodebook.from_pretrained("{0}")
        >>> image_processor = AutoImageProcessor.from_pretrained("{0}")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> inputs = image_processor([image], return_codebook_pixels=True, return_tensors="pt")
        >>> inputs = dict(pixel_values=inputs.codebook_pixel_values)

        >>> outputs = model(**inputs)
        >>> print(outputs.shape)
        (1, 196)
        ```
        rì  zinput shape z
 is not 4dr   z
input has z channels but model built for )r¤  r*  r  rŠ   r»   r!  r  )r3   rš   s     r4   r§   zFlavaImageCodebook.forwardN  s—   € ð	÷4 ‰FÔ/Ô0Üˆ|×!Ñ!Ó" aÒ'Ü˜|¨L×,>Ñ,>Ð+?¸zÐJÓKÐKØ×Ñ˜aÑ  D×$7Ñ$7Ò7Ü˜z¨,×*<Ñ*<¸QÑ*?Ð)@Ð@^Ð_c×_rÑ_rÐ^sÐtÓuÐuØ�{‰{˜<Ó(Ð(r;   )r<   r=   r>   rv  r   ru  r¡  rw  r   rp   r@   rª   r.  r1  rA   r§   r­   r®   s   @r4   r  r  ô  s†   ø„ ð ÐØ+€LØ$€OØ&+Ð#ð*,à(ð*,ð õ*,ðX.°·±ð .À%Ç,Á,ó .ð8+¨u¯|©|ð +ÀÇÁó +ð ) E×$5Ñ$5ð  )¸%¿,¹,÷  )r;   r  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚFlavaPredictionHeadTransformc                 óh  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        |j                  t        «      rt        |j                     | _
        n|j                  | _
        t        j                  |j                  |j                  ¬«      | _        y r|  )ro   rp   r   rí   rt   r  r³   r)  r*  r   Útransform_act_fnrÔ   rÕ   rÙ   s     €r4   rp   z%FlavaPredictionHeadTransform.__init__r  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 rd   )r  r6  rÔ   r-  s     r4   r§   z$FlavaPredictionHeadTransform.forward{  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐr;   ©r<   r=   r>   rp   r§   r­   r®   s   @r4   r4  r4  q  s   ø„ ôUör;   r4  c                   ó,   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zˆ xZS )rn  c                 ó|  •— t         ‰| �  «        || _        t        |«      | _        t        j                  |j                  |j                  d¬«      | _	        t        j                  t        j                  |j                  «      «      | _        |�|| j                  _        | j                  | j                  _        y )NFrè   )ro   rp   rh   r4  Ú	transformr   rí   rt   rÎ   Údecoderrr   r@   rs   ré   rh  )r3   rh   rh  r}   s      €r4   rp   z"FlavaMaskedPredictionHead.__init__ƒ  s„   ø€ Ü‰ÑÔØˆŒÜ5°fÓ=ˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒÜ—L‘L¤§¡¨V×->Ñ->Ó!?Ó@ˆŒ	ØÐØ"(ˆD�L‰LÔð !ŸI™Iˆ�‰Õr;   c                 ó:   — | j                   | j                  _         y rd   )ré   r<  r:   s    r4   Ú_tie_weightsz&FlavaMaskedPredictionHead._tie_weights�  s   € Ø ŸI™Iˆ�‰Õr;   c                 óJ   — | j                  |«      }| j                  |«      }|S rd   )r;  r<  rý  s     r4   r§   z!FlavaMaskedPredictionHead.forward’  s"   € Ø�N‰N˜1ÓˆØ�L‰L˜‹OˆØˆr;   rd   )r<   r=   r>   rp   r>  r§   r­   r®   s   @r4   rn  rn  ‚  s   ø„ õ
&ò&ör;   rn  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚFlavaITMHeadc                 óš   •— t         ‰| �  «        || _        t        |«      | _        t        j                  |j                  d«      | _        y )Nrƒ   )	ro   rp   rh   rY  r  r   rí   rt   Úseq_relationshiprÙ   s     €r4   rp   zFlavaITMHead.__init__™  s:   ø€ Ü‰ÑÔØˆŒÜ! &Ó)ˆŒÜ "§	¡	¨&×*<Ñ*<¸aÓ @ˆÕr;   c                 óJ   — | j                  |«      }| j                  |«      }|S rd   )r  rC  rý  s     r4   r§   zFlavaITMHead.forwardŸ  s$   € Ø�K‰K˜‹NˆØ×!Ñ! !Ó$ˆØˆr;   r8  r®   s   @r4   rA  rA  ˜  s   ø„ ôAör;   rA  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚFlavaGlobalContrastiveHeadc                 óR   •— t         ‰| �  «        || _        |j                  | _        y rd   )ro   rp   rh   Úglobal_backprop_contrastiverÙ   s     €r4   rp   z#FlavaGlobalContrastiveHead.__init__¦  s#   ø€ Ü‰ÑÔØˆŒØ+1×+MÑ+MˆÕ(r;   c                 ó   — t        j                  |«      }t         j                  j                  «       rt         j                  j	                  «       s8t        j
                  |j                  d«      |j                  ¬«      }|g}|g}�n{|j                  d«      }t         j                  j                  «       }	| j                  rgt         j                  j                  j                  j                  |«      }t         j                  j                  j                  j                  |«      }n–t        |	«      D �
cg c]  }
t        j                  |«      ‘Œ }}
t        |	«      D �
cg c]  }
t        j                  |«      ‘Œ }}
t         j                  j                  ||«       t         j                  j                  ||«       |t         j                  j                  «       z  t        j
                  ||j                  ¬«      z   }t        j                   |«      }t        j                   |«      }t        j"                  ||j%                  dd«      «      |z  }t        j"                  ||j%                  dd«      «      |z  }|||fS c c}
w c c}
w )Nr   r²  r   )r@   ÚexpÚdistributedÚis_availableÚis_initializedr×   r…   rÜ   Úget_world_sizerH  r   r�   Ú
all_gatherrC  Ú
zeros_likeÚget_rankr’   rü   r½   )r3   r%   r'   rr  ÚtemperatureÚlabelsÚimage_embeddings_allÚtext_embeddings_allÚlocal_batch_sizeÚ
world_sizer£   Úlogits_per_imageÚlogits_per_texts                r4   r§   z"FlavaGlobalContrastiveHead.forward«  s  € Ü—i‘i Ó,ˆÜ× Ñ ×-Ñ-Ô/´u×7HÑ7H×7WÑ7WÔ7YÜ—\‘\Ð"2×"7Ñ"7¸Ó":ÐCS×CZÑCZÔ[ˆFØ$4Ð#5Ð Ø#2Ð"3Òà/×4Ñ4°QÓ7ÐÜ×*Ñ*×9Ñ9Ó;ˆJà×/Ò/ô (-×'8Ñ'8×';Ñ';×'FÑ'F×'QÑ'QÐRbÓ'cÐ$Ü&+×&7Ñ&7×&:Ñ&:×&EÑ&E×&PÑ&PÐQ`Ó&aÑ#äSXÐYcÓSdÖ'eÈa¬×(8Ñ(8¸Õ(IÐ'eÐ$Ð'eÜSXÐYcÓSdÖ&eÈa¤u×'7Ñ'7Ð8HÕ'IÐ&eÐ#Ð&eÜ×!Ñ!×,Ñ,Ð-AÐCSÔTÜ×!Ñ!×,Ñ,Ð-@À/ÔRà%¬×(9Ñ(9×(BÑ(BÓ(DÑDÄuÇ|Á|Ø Ð)9×)@Ñ)@ôHñ ˆFô  %Ÿy™yÐ)=Ó>ÐÜ#Ÿi™iÐ(;Ó<Ðä Ÿ<™<Ð(8Ð:M×:WÑ:WÐXYÐ[\Ó:]Ó^ÐalÑlÐÜŸ,™, Ð8L×8VÑ8VÐWXÐZ[Ó8\Ó]Ð`kÑkˆà °&Ð8Ð8ùò (fùÚ&es   Ä9JÅ$Jr8  r®   s   @r4   rF  rF  ¥  s   ø„ ôNö
9r;   rF  zk
    The FLAVA model for pretraining which outputs losses, embeddings, logits and transformer outputs.
    c            )       ó¤  ‡ — e Zd Zg d¢Zddedeej                     fˆ fd„Zde	j                  fd„Z eej                  dd«      «       eee¬	«      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
ee	j"                     dee	j"                     dee	j$                     dee	j$                     dee	j                     dee	j                     dee	j                     dee	j"                     dee	j                     dee   dee	j                     dee	j                     dee	j                     dee   dedee   dee   deee	j                     ef   f$d„«       «       Zˆ xZS )ÚFlavaForPreTraining)zmmm_text_head.decoder.biaszmmm_image_head.decoder.biaszmlm_head.decoder.biaszmim_head.decoder.biasrh   Úimage_codebookc                 ób  •— t         ‰| �  |«       t        |«      | _        || _        | j                  €&|j
                  rt        |j                  «      | _        t        |j                  «      | _
        t        |j                  «      | _        t        |«      | _        t        |j                  «      | _        t        |j                  «      | _        t#        |«      | _        |j                  j&                  | _        |j                  j&                  | _        |j,                  | _        |j.                  | _        |j0                  | _        |j2                  | _        |j4                  | _        |j6                  | _        |j8                  | _        |j:                  | _        | j=                  «        y rd   )ro   rp   rq  rc  r\  Úinit_codebookr  Úimage_codebook_configrn  rÄ  Úmim_headrÁ  Úmlm_headrA  Úitm_headÚmmm_image_headÚmmm_text_headrF  Úglobal_contrastive_headrÎ   Úimage_vocab_sizeÚtext_vocab_sizeÚ
mlm_weightÚ
mim_weightÚglobal_contrastive_weightÚce_ignore_indexÚ
itm_weightÚmmm_image_weightÚmmm_text_weightÚ skip_unmasked_multimodal_encoderr€  )r3   rh   r\  r}   s      €r4   rp   zFlavaForPreTraining.__init__Ü  sO  ø€ Ü‰Ñ˜Ô Ü Ó'ˆŒ
à,ˆÔØ×ÑÐ&¨6×+?Ò+?Ü"4°V×5QÑ5QÓ"RˆDÔô 2°&×2EÑ2EÓFˆŒÜ1°&×2DÑ2DÓEˆŒÜ$ VÓ,ˆŒÜ7¸×8KÑ8KÓLˆÔÜ6°v×7IÑ7IÓJˆÔÜ'AÀ&Ó'IˆÔ$à &× 3Ñ 3× >Ñ >ˆÔØ%×1Ñ1×<Ñ<ˆÔØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒØ)/×)IÑ)IˆÔ&Ø%×5Ñ5ˆÔØ ×+Ñ+ˆŒØ &× 7Ñ 7ˆÔØ%×5Ñ5ˆÔØ06×0WÑ0WˆÔ-à�‰Õr;   r¾   c                 ón   — |j                  «       dkD  r!|j                  |j                  d«      d«      }|S )Nrƒ   r   r‚   )r‰   r‘   r…   rý  s     r4   Ú_resize_to_2dz!FlavaForPreTraining._resize_to_2dú  s,   € Ø�5‰5‹7�QŠ;Ø—‘�q—v‘v˜a“y "Ó%ˆAØˆr;   zbatch_size, text_seq_lenr�  rÚ  rÚ   Úinput_ids_maskedrš   Úcodebook_pixel_valuesr÷   rË   r›   rÉ   rÛ  ro  Ú
mlm_labelsÚ
mim_labelsÚ
itm_labelsrù   rG  rH  Úreturn_lossr+   c                 óä  — |�|n| j                   j                  }|�|n| j                   j                  }|
�|
n| j                  }
|€|�t        j                  d«       |}| j                  ||||||	|
||d¬«
      }| j                  |||||	|||d¬«	      }d}|j                  }|j                  }|j                  }|j                  }|j                  }dx}x}x}x}x}x}} dx}!x}"x}#}$dx}%x}&}'|€|�C|€A|r?| j                  €t        d«      ‚|€t        d«      ‚| j                  j                  |«      }| j                  dkD  �r|��|�€|}(|�ó| j                  |«      }| j                  |«      }| j                   ||j#                  d«      <   |(dd…|j%                  d	«       d…dd…f   }(|j#                  | j                   «      })||)   }*|(|)dd…f   }(| j'                  |(«      }!|rjt(        j*                  j-                  |!j/                  d
| j0                  «      |*j/                  d
«      «      }|| j                  z  }n| j'                  |(«      }!| j2                  dkD  rÝ|�Û|€Ù|}+|�Ä| j                  |«      }|+dd…|j%                  d	«       d…dd…f   }+|j#                  | j                   «      })||)   },|+|)dd…f   }+| j5                  |+«      }"|rjt(        j*                  j-                  |"j/                  d
| j6                  «      |,j/                  d
«      «      }|| j2                  z  }n| j5                  |+«      }"| j8                  dkD  r¦|�¤| j;                  |«      }%|�‘|j#                  d«      }-t=        j>                  |-jA                  «       |-|-jC                  dg«      «      }|r/t(        j*                  j-                  |%|«      } | | j8                  z  } |�||   }|�||   }|�
||   }||   }|��| jD                  dkD  �r|}(|j%                  d	«      d	z
  }.|(dd…dd|.z   …dd…f   }(|�Õ| j                  |«      }| j                  |«      }| j                   ||j#                  d«      <   |j#                  | j                   «      })||)   }*|(|)dd…f   }(| jG                  |(«      }$|rjt(        j*                  j-                  |$j/                  d
| j0                  «      |*j/                  d
«      «      }|| jD                  z  }n| jG                  |(«      }$|�è| jH                  dkD  rÙ|}+|+dd…|j%                  d	«       d…dd…f   }+|�¦| j                  |«      }|j#                  | j                   «      })||)   },|+|)dd…f   }+| jK                  |+«      }#|rjt(        j*                  j-                  |#j/                  d
| j6                  «      |,j/                  d
«      «      }|| jH                  z  }n| jK                  |+«      }#|��l|��i| jL                  dkD  �rY| j                  jO                  |dd…ddd…f   «      }/t(        j*                  jQ                  |/d
¬«      }/| j                  jS                  |dd…ddd…f   «      }0t(        j*                  jQ                  |0d
¬«      }0| j                  jT                  jV                  jY                  tZ        t\        «       | j_                  |0|/| j                  jT                  «      \  }&}'}1|�|&|   }&|'|   }'|1|   }1|rWt(        j*                  j-                  |&|1«      }2t(        j*                  j-                  |'|1«      }3|2|3z   dz  }|| jL                  z  }ta        ||| |||¬«      }4|r0|4jc                  «       s te        d„ |4jg                  «       D «       «      }|�s.||jh                  �|jh                  jk                  «       nd||jl                  �|jl                  jk                  «       nd|j                  |jn                  �|jn                  jk                  «       nd||jh                  �|jh                  jk                  «       nd||jl                  �|jl                  jk                  «       nd||jn                  �|jn                  jk                  «       nd|!|"|%|&|&|$|#f}5|r|4jc                  «       s||4f|5z   }5tq        d„ |5D «       «      S ts        d%i d|“d|4“d|“d|jh                  “d|“d|jl                  “d|j                  “d|jn                  “d|“d|jh                  “d|“d|jl                  “d|“d|jn                  “d|!“d|"“d |%“d!|&“d"|'“d#|$“d$|#“ŽS )&ai  
        Examples:
        ```python
        >>> from PIL import Image
        >>> import requests
        >>> from transformers import FlavaForPreTraining, AutoProcessor

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> model = FlavaForPreTraining.from_pretrained("facebook/flava-full")
        >>> processor = AutoProcessor.from_pretrained("facebook/flava-full")

        >>> text = ["a photo of a cat"]

        >>> inputs = processor(
        ...     images=[image],
        ...     text=text,
        ...     return_masks=True,
        ...     return_codebook_pixels=True,
        ...     padding=True,
        ...     max_length=77,
        ...     return_tensors="pt",
        ... )


        >>> output = model(**inputs)
        ```

        Return:

        Nzð`input_ids_masked` isn't passed which means MLM loss won't be calculated correctlySetting it to `input_ids` so that model can work. Please pass it if this is unintentional. This is usually OKAY if you are doing inference on unmasked text...T)
rÚ   rš   r÷   rË   rÉ   rÛ  rÜ  rù   rG  rH  )	rÚ   rš   r÷   rË   rÛ  r›   rù   rG  rH  zÊ`return_loss` is set to True but the image codebook is not initialized and no `mim_labels`  have been passed. Reinstantiate the model with `init_codebook` set to True or pass in your custom `mim_labels`z�`codebook_pixel_value` are required to generate `mim_labels` if loss is expected. Call `AutoProcessor` with `return_codebook_pixels` set to Truer   r   r‚   rƒ   rˆ   )rF   rG   rH   rI   rJ   rK   c              3   ó(   K  — | ]
  }|�|nd–— Œ y ­wr^  rC   )r1   rS   s     r4   r5   z.FlavaForPreTraining.forward.<locals>.<genexpr>  s   è ø€ Ò_À TÐ%5™T¸1Ó<Ñ_ùs   ‚c              3   ó&   K  — | ]	  }|�Œ|–— Œ y ­wrd   rC   )r1   r¾   s     r4   r5   z.FlavaForPreTraining.forward.<locals>.<genexpr>,  s   è ø€ Ò8˜q¨a©iœÑ8ùrK  rS   rT   r%   r&   r'   r(   r)   r*   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rC   ):rh   rš  rw  ro  ÚloggerÚwarningrc  r%   r'   r)   r\  ÚRuntimeErrorr»   r.  ri  rq  rk  Úner…   r`  r   r�   Úcross_entropyr‘   rf  rh  ra  rg  rl  rb  r@   ÚwhereÚanyÚnewrm  rc  rn  rd  rj  rÎ  Ú	normalizerÍ  rr  ri  Úclamp_ÚLOGIT_SCALE_CLAMP_MINÚLOGIT_SCALE_CLAMP_MAXre  rE   rN   ÚsumrM   r&   r0   r(   r*   r8   rR   )6r3   rÚ   rr  rš   rs  r÷   rË   r›   rÉ   rÛ  ro  rt  ru  rv  rù   rG  rH  rw  Úflava_outputÚflava_masked_outputÚpos_maskr%   r'   rU   rW   rY   Ú
total_lossÚmim_lossÚmlm_lossÚmmm_text_lossÚmmm_image_lossÚgc_lossÚitm_lossr[   r\   ra   r`   r]   rX  rY  Úsequence_for_imageÚmasked_tokensÚmim_labels_filteredÚsequence_for_textÚmlm_labels_filteredÚ	pos_pairsÚ	end_indexÚtext_embeddingÚimage_embeddingÚ	gc_labelsÚgc_loss_imageÚgc_loss_textÚflava_lossesr  s6                                                         r4   r§   zFlavaForPreTraining.forwardÿ  s…
  € ðp &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆØ%0Ð%<‘kÀ$Ç+Á+×BYÑBYˆð 0Ð;ñ -à×6Ñ6ð 	)ð Ð#¨	Ð(=Ü�N‰Nð?ôð
  )Ðà—z‘zØØ%Ø)Ø)Ø%Ø!5ð %EØ/Ø!5àð "ó 
ˆð  #Ÿj™jØ&Ø%Ø)Ø)Ø!5Ø+Ø/Ø!5Øð )ó 

Ðð ˆà'×8Ñ8ÐØ&×6Ñ6ˆØ"5×"FÑ"FÐØ!4×!DÑ!DÐØ':×'PÑ'PÐ$àaeÐeˆ
Ðe�XÐe Ðe¨=Ðe¸>ÐeÈGÐV^ØGKÐKˆ
ÐK�ZÐK /Ð4DØ:>Ð>ˆ
Ð>Ð%¨ð #Ð.Ð2NÐ2ZØÐ!¡kØ×&Ñ&Ð.Ü&ð;óð ð
 )Ð0Ü$ðYóð ð "×0Ñ0×EÑEÐF[Ó\�
ð �?‰?˜QÓÐ#:Ñ#FÐKgÑKoØ!8ÐàÐ%Ø!×/Ñ/°
Ó;�
Ø"&×"4Ñ"4°_Ó"E�Ø7;×7KÑ7K�
˜?×-Ñ-¨dÓ3Ñ4à%7º¸J¿O¹OÈAÓ<NÐ;NÑ;PÒRSÐ8SÑ%TÐ"Ø *§¡¨d×.BÑ.BÓ C�Ø&0°Ñ&?Ð#Ø%7¸ÂqÐ8HÑ%IÐ"Ø!Ÿ]™]Ð+=Ó>�
ÙÜ!Ÿ}™}×:Ñ:Ø"Ÿ™¨¨D×,AÑ,AÓBÐDW×D\ÑD\Ð]_ÓD`ó �Hð  §¡Ñ/‘Hà!Ÿ]™]Ð+=Ó>�
ð �?‰?˜QÒÐ#9Ð#EÐJfÐJnØ 6ÐØÐ%Ø!×/Ñ/°
Ó;�
Ø$5²a¸*¿/¹/È!Ó:LÐ9LÑ9NÒPQÐ6QÑ$RÐ!Ø *§¡¨d×.BÑ.BÓ C�Ø&0°Ñ&?Ð#Ø$5°mÂQÐ6FÑ$GÐ!Ø!Ÿ]™]Ð+<Ó=�
ÙÜ!Ÿ}™}×:Ñ:Ø"Ÿ™¨¨D×,@Ñ,@ÓAÐCV×C[ÑC[Ð\^ÓC_ó �Hð  §¡Ñ/‘Hà!Ÿ]™]Ð+<Ó=�
ð �?‰?˜QÒÐ#?Ð#KØŸ™Ð'CÓDˆJàÐ%Ø&ŸM™M¨!Ó,�	Ü Ÿ;™; y§}¡}£¸	À9Ç=Á=ÐRVÐQWÓCXÓY�ÙÜ!Ÿ}™}×:Ñ:¸:ÀzÓR�HØ §¡Ñ/�Hà/Ð;Ø3OÐPXÑ3YÐ0àÐ)Ø!+¨HÑ!5�JàÐ)Ø!+¨HÑ!5�JØ&5°hÑ&?�Oð (Ñ3¸×8MÑ8MÐPQÓ8QØ!=ÐØ/×4Ñ4°QÓ7¸!Ñ;ˆIØ!3²A°q¸1¸y¹=Ð7HÊ!Ð4KÑ!LÐàÐ%Ø!×/Ñ/°
Ó;�
Ø"&×"4Ñ"4°_Ó"E�Ø7;×7KÑ7K�
˜?×-Ñ-¨dÓ3Ñ4à *§¡¨d×.BÑ.BÓ C�Ø&0°Ñ&?Ð#Ø%7¸ÂqÐ8HÑ%IÐ"Ø#'×#6Ñ#6Ð7IÓ#JÐ ÙÜ%'§]¡]×%@Ñ%@Ø(×-Ñ-¨b°$×2GÑ2GÓHÐJ]×JbÑJbÐceÓJfó&�Nð # d×&;Ñ&;Ñ;‘Nà#'×#6Ñ#6Ð7IÓ#JÐ ð (Ð3¸×8LÑ8LÈqÒ8PØ <ÐØ 1²!Ð6L×6QÑ6QÐRSÓ6TÐ5TÑ5VÒXYÐ2YÑ ZÐàÐ%Ø!×/Ñ/°
Ó;�
Ø *§¡¨d×.BÑ.BÓ C�Ø&0°Ñ&?Ð#Ø$5°mÂQÐ6FÑ$GÐ!Ø"&×"4Ñ"4Ð5FÓ"G�ÙÜ$&§M¡M×$?Ñ$?Ø'×,Ñ,¨R°×1EÑ1EÓFÐH[×H`ÑH`ÐacÓHdó%�Mð " T×%9Ñ%9Ñ9‘Mà"&×"4Ñ"4Ð5FÓ"G�ð Ñ'¨OÑ,GÈD×LjÑLjÐmnÓLnØ!ŸZ™Z×7Ñ7¸ÊÈ1ÊaÈÑ8PÓQˆNÜŸ]™]×4Ñ4°^ÈÐ4ÓLˆNà"Ÿj™j×9Ñ9Ð:JÊ1ÈaÒQRÈ7Ñ:SÓTˆOÜ Ÿm™m×5Ñ5°oÈ2Ð5ÓNˆOà�J‰J×"Ñ"×'Ñ'×.Ñ.Ô/DÔF[Ô\à;?×;WÑ;WØ °·±×1GÑ1Gó<Ñ8Ð˜o¨yð
 Ð#Ø#3°HÑ#=Ð Ø"1°(Ñ";�Ø% hÑ/�	áÜ "§¡× ;Ñ ;Ð<LÈiÓ X�Ü!Ÿ}™}×:Ñ:¸?ÈIÓV�Ø(¨<Ñ7¸1Ñ<�Ø˜4×9Ñ9Ñ9�ä"ØØØØ&Ø$Ø"ô
ˆñ ˜|×4Ñ4Ô6ÜÑ_È×I\ÑI\ÓI^Ô_Ó_ˆJâà Ø8D×8QÑ8QÐ8]�×)Ñ)×2Ñ2Ô4ÐcgØØ7C×7OÑ7OÐ7[�×(Ñ(×1Ñ1Ô3ÐaeØ×2Ñ2Ø=I×=[Ñ=[Ð=g�×.Ñ.×7Ñ7Ô9ÐmqØ'Ø?R×?_Ñ?_Ð?kÐ#×0Ñ0×9Ñ9Ô;ÐquØ&Ø>Q×>]Ñ>]Ð>iÐ#×/Ñ/×8Ñ8Ô:ÐosØ,à&×8Ñ8ÐDð $×5Ñ5×>Ñ>Ô@àØØØØ Ø Ø Øð+ˆFñ.  <×#8Ñ#8Ô#:àØ ðð ñ�ô Ñ8 FÔ8Ó8Ð8ä(ò 
Ùð
á"ð
ñ .ð
ð &×2Ò2ð	
ñ
 ,ð
ð %×0Ò0ð
ð #/×"DÒ"Dð
ð +×<Ò<ð
ñ %<ð
ð !4× @Ò @ð
ñ $:ð
ð  3×>Ò>ð
ñ *Fð
ð &9×%JÒ%Jð
ñ "ð
ñ  "ð!
ñ" "ð#
ñ$ *:ð%
ñ& )8ð'
ñ( .ð)
ñ* ,ð+
ð 	
r;   rd   )NNNNNNNNNNNNNNTNN)r<   r=   r>   Ú_tied_weights_keysr   r   r   r¢  rp   r@   rª   rq  r   Ú"FLAVA_PRETRAINING_INPUTS_DOCSTRINGr¤  r   rR   ræ  rA   rP   r   r
   r§   r­   r®   s   @r4   r[  r[  Í  s  ø„ òÐñ˜{ð ¸HÀRÇYÁYÑ<Oõ ð<˜uŸ|™|ó ñ
 +Ø*×1Ñ1Ð2LÐNmÓnóñ Ð+DÐS^Ô_ð 15Ø7;Ø48Ø=AØ15Ø15Ø26Ø37Ø7;Ø;?Ø-1Ø-1Ø-1Ø,0Ø%)Ø&*Ø&*ñ%A
à˜E×,Ñ,Ñ-ðA
ð # 5×#3Ñ#3Ñ4ðA
ð ˜u×0Ñ0Ñ1ð	A
ð
  (¨×(9Ñ(9Ñ:ðA
ð ! §¡Ñ.ðA
ð ! §¡Ñ.ðA
ð " %§,¡,Ñ/ðA
ð ˜u×/Ñ/Ñ0ðA
ð ' u§|¡|Ñ4ðA
ð +3°4©.ðA
ð ˜UŸ\™\Ñ*ðA
ð ˜UŸ\™\Ñ*ðA
ð ˜UŸ\™\Ñ*ðA
ð $ D™>ðA
ð  #ð!A
ð" ˜d‘^ð#A
ð$ ˜d‘^ð%A
ð& 
ˆu�U—\‘\Ñ"Ð$=Ð=Ñ	>ò'A
ó `óôA
r;   r[  )r[  r  ry  rq  ro  rb  r©  )^r?   r´   rý   r   Údataclassesr   Útypingr   r   r   r   r	   r
   r   r@   Útorch.utils.checkpointr   Úactivationsr   Úmodeling_outputsr   r   Úmodeling_utilsr   r   r   Úutilsr   r   r   r   r   r   r   Úconfiguration_flavar   r   r   r   r    Ú
get_loggerr<   r{  r¥  r*  r¦  r·  r¾  r§  r…  r†  r  r$   rE   rR   r¢  rg   rv   rÂ   rä   r  r  r&  r0  r4  r@  rY  ÚFLAVA_START_DOCSTRINGÚFLAVA_INPUTS_DOCSTRING_COMMONÚ!FLAVA_IMAGE_INPUTS_DOCSTRING_BASEr£  Ú FLAVA_TEXT_INPUTS_DOCSTRING_BASEr¶  r½  Ú!FLAVA_MODEL_INPUTS_DOCSTRING_BASErå  r   Ú'FLAVA_PRETRAINING_START_DOCSTRING_EXTRArb  r¤  ry  r©  ro  rq  rè  r   r	  r  r4  rn  rA  rF  r[  Ú__all__rC   r;   r4   ú<module>r±     si  ðñ ã Û Ý #Ý !ß ?× ?Ñ ?ã Û Ý å !ß Kß cÑ c÷÷ ñ ÷õ ð 
ˆ×	Ñ	˜HÓ	%€à+Ð ð  ?Ð Ø$6Ð !Ø#4Ð  Ø)@Ð &Ú,Ð ð Ð ØÐ à˜_Ð.>Ð@UÐUÑVÐ ð ô"
�{ó "
ó ð"
ðJ ô!�+ó !ó ð!ðH ô`t ó `tó ð`tôJ_˜2Ÿ9™9ô _ôH!�b—i‘iô !ôH6˜"Ÿ)™)ô 6ôr@˜Ÿ™ô @ôF�b—i‘iô ô$'�R—Y‘Yô 'ôT˜Ÿ	™	ô ô"�"—)‘)ô ô +�—‘ô +ô\0
�2—9‘9ô 0
ôf�"—)‘)ô ð	Ð ð!Ð ð0%Ð !ð  AÐC`Ñ`Ð ð$Ð  ð ?ÐA^Ñ^Ð ðð
 $ñ$ð "ð%Ð !ð &Ø&ñ'à#ñ$ð (ñ(ð ðð 'ñ	'ð (ñ
(ðñ*ðV $ñW+$ð #ð^+Ð 'ô$N˜?ô $NñN ØkØ× Ñ Ð(:Ð Ó;óô\
Ð*ó \
ó	ð\
ñ~ ØjØ× Ñ Ð(9Ð Ó:óôb
Ð)ó b
ó	ðb
ñJ ØpØ× Ñ Ð(?Ð Ó@óô[
Ð/ó [
ó	ð[
ñ| ØeØ× Ñ ¨Ð Ó6óôJ
Ð%ó J
ó	ðJ
ôZ §	¡	ô ô*C˜bŸi™iô Cô" 2§9¡9ô ñ( ðð
 × Ñ Ð(BÐ ÓCóôr)Ð-ó r)óðr)ôj 2§9¡9ô ô" §	¡	ô ô,
�2—9‘9ô 
ô%9 §¡ô %9ñP ðð × Ñ ¨Ð Ó6Ð9`Ñ`ó	ôq
Ð.ó q
óðq
òh�r;   