Ë
    T^(h®#  ã                   ó¸   — d Z ddlmZ ddlmZmZmZmZ ddlm	Z	m
Z
 ddlmZmZ ddlmZmZmZ  ej$                  e«      Z G d„ d	e	«      Z G d
„ de«      Zd	dgZy)zLayoutLM model configurationé    ©ÚOrderedDict)ÚAnyÚListÚMappingÚOptionalé   )ÚPretrainedConfigÚPreTrainedTokenizer)Ú
OnnxConfigÚPatchingSpec)Ú
TensorTypeÚis_torch_availableÚloggingc                   óH   ‡ — e Zd ZdZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„	Zˆ xZS )ÚLayoutLMConfigaÁ  
    This is the configuration class to store the configuration of a [`LayoutLMModel`]. It is used to instantiate a
    LayoutLM model according to the specified arguments, defining the model architecture. Instantiating a configuration
    with the defaults will yield a similar configuration to that of the LayoutLM
    [microsoft/layoutlm-base-uncased](https://huggingface.co/microsoft/layoutlm-base-uncased) architecture.

    Configuration objects inherit from [`BertConfig`] and can be used to control the model outputs. Read the
    documentation from [`BertConfig`] for more information.


    Args:
        vocab_size (`int`, *optional*, defaults to 30522):
            Vocabulary size of the LayoutLM model. Defines the different tokens that can be represented by the
            *inputs_ids* passed to the forward method of [`LayoutLMModel`].
        hidden_size (`int`, *optional*, defaults to 768):
            Dimensionality of the encoder layers and the pooler layer.
        num_hidden_layers (`int`, *optional*, defaults to 12):
            Number of hidden layers in the Transformer encoder.
        num_attention_heads (`int`, *optional*, defaults to 12):
            Number of attention heads for each attention layer in the Transformer encoder.
        intermediate_size (`int`, *optional*, defaults to 3072):
            Dimensionality of the "intermediate" (i.e., feed-forward) layer in the Transformer encoder.
        hidden_act (`str` or `function`, *optional*, defaults to `"gelu"`):
            The non-linear activation function (function or string) in the encoder and pooler. If string, `"gelu"`,
            `"relu"`, `"silu"` and `"gelu_new"` are supported.
        hidden_dropout_prob (`float`, *optional*, defaults to 0.1):
            The dropout probability for all fully connected layers in the embeddings, encoder, and pooler.
        attention_probs_dropout_prob (`float`, *optional*, defaults to 0.1):
            The dropout ratio for the attention probabilities.
        max_position_embeddings (`int`, *optional*, defaults to 512):
            The maximum sequence length that this model might ever be used with. Typically set this to something large
            just in case (e.g., 512 or 1024 or 2048).
        type_vocab_size (`int`, *optional*, defaults to 2):
            The vocabulary size of the `token_type_ids` passed into [`LayoutLMModel`].
        initializer_range (`float`, *optional*, defaults to 0.02):
            The standard deviation of the truncated_normal_initializer for initializing all weight matrices.
        layer_norm_eps (`float`, *optional*, defaults to 1e-12):
            The epsilon used by the layer normalization layers.
        pad_token_id (`int`, *optional*, defaults to 0):
            The value used to pad input_ids.
        position_embedding_type (`str`, *optional*, defaults to `"absolute"`):
            Type of position embedding. Choose one of `"absolute"`, `"relative_key"`, `"relative_key_query"`. For
            positional embeddings use `"absolute"`. For more information on `"relative_key"`, please refer to
            [Self-Attention with Relative Position Representations (Shaw et al.)](https://arxiv.org/abs/1803.02155).
            For more information on `"relative_key_query"`, please refer to *Method 4* in [Improve Transformer Models
            with Better Relative Position Embeddings (Huang et al.)](https://arxiv.org/abs/2009.13658).
        use_cache (`bool`, *optional*, defaults to `True`):
            Whether or not the model should return the last key/values attentions (not used by all models). Only
            relevant if `config.is_decoder=True`.
        max_2d_position_embeddings (`int`, *optional*, defaults to 1024):
            The maximum value that the 2D position embedding might ever used. Typically set this to something large
            just in case (e.g., 1024).

    Examples:

    ```python
    >>> from transformers import LayoutLMConfig, LayoutLMModel

    >>> # Initializing a LayoutLM configuration
    >>> configuration = LayoutLMConfig()

    >>> # Initializing a model (with random weights) from the configuration
    >>> model = LayoutLMModel(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```Úlayoutlmc                 óú   •— t        ‰| �  dd|i|¤Ž || _        || _        || _        || _        || _        || _        || _        || _	        |	| _
        |
| _        || _        || _        || _        || _        || _        y )NÚpad_token_id© )ÚsuperÚ__init__Ú
vocab_sizeÚhidden_sizeÚnum_hidden_layersÚnum_attention_headsÚ
hidden_actÚintermediate_sizeÚhidden_dropout_probÚattention_probs_dropout_probÚmax_position_embeddingsÚtype_vocab_sizeÚinitializer_rangeÚlayer_norm_epsÚposition_embedding_typeÚ	use_cacheÚmax_2d_position_embeddings)Úselfr   r   r   r   r   r   r   r    r!   r"   r#   r$   r   r%   r&   r'   ÚkwargsÚ	__class__s                     €úq/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/layoutlm/configuration_layoutlm.pyr   zLayoutLMConfig.__init__c   s�   ø€ ô( 	‰ÑÑ= lÐ=°fÒ=Ø$ˆŒØ&ˆÔØ!2ˆÔØ#6ˆÔ Ø$ˆŒØ!2ˆÔØ#6ˆÔ Ø,HˆÔ)Ø'>ˆÔ$Ø.ˆÔØ!2ˆÔØ,ˆÔØ'>ˆÔ$Ø"ˆŒØ*DˆÕ'ó    )i:w  i   é   r-   i   Úgeluçš™™™™™¹?r/   i   é   g{®Gáz”?gê-�™—q=r   ÚabsoluteTi   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_typer   Ú__classcell__©r*   s   @r+   r   r      sO   ø„ ñBðH €Jð ØØØØØØØ%(Ø #ØØØØØ *ØØ#'÷##Eñ #Er,   r   c                   ó    ‡ — e Zd Z	 	 ddededee   fˆ fd„Zede	ee	e
ef   f   fd„«       Z	 	 	 	 ddede
d	e
d
edee   de	eef   fˆ fd„Zˆ xZS )ÚLayoutLMOnnxConfigÚconfigÚtaskÚpatching_specsc                 óR   •— t         ‰| �  |||¬«       |j                  dz
  | _        y )N)r<   r=   é   )r   r   r'   Úmax_2d_positions)r(   r;   r<   r=   r*   s       €r+   r   zLayoutLMOnnxConfig.__init__Š   s,   ø€ ô 	‰Ñ˜ d¸>ÐÔJØ &× AÑ AÀAÑ EˆÕr,   Úreturnc           	      óH   — t        ddddœfddddœfddddœfddddœfg«      S )NÚ	input_idsÚbatchÚsequence)r   r?   ÚbboxÚattention_maskÚtoken_type_idsr   )r(   s    r+   ÚinputszLayoutLMOnnxConfig.inputs“   sH   € äà '¨jÑ9Ð:Ø˜W¨Ñ4Ð5Ø! w°:Ñ#>Ð?Ø! w°:Ñ#>Ð?ð	ó
ð 	
r,   Ú	tokenizerÚ
batch_sizeÚ
seq_lengthÚis_pairÚ	frameworkc                 ó   •— t         ‰	| �  |||||¬«      }g d¢}|t        j                  k(  st	        d«      ‚t        «       st        d«      ‚ddl}|d   j                  \  }}|j                  g |g|z  ¢«      j                  |dd«      |d	<   |S )
aŽ  
        Generate inputs to provide to the ONNX exporter for the specific framework

        Args:
            tokenizer: The tokenizer associated with this model configuration
            batch_size: The batch size (int) to export the model for (-1 means dynamic axis)
            seq_length: The sequence length (int) to export the model for (-1 means dynamic axis)
            is_pair: Indicate if the input is a pair (sentence 1, sentence 2)
            framework: The framework (optional) the tokenizer will generate tensor for

        Returns:
            Mapping[str, Tensor] holding the kwargs to provide to the model's forward function
        )rK   rL   rM   rN   )é0   éT   éI   é€   zCExporting LayoutLM to ONNX is currently only supported for PyTorch.z7Cannot generate dummy inputs without PyTorch installed.r   NrC   r?   rF   )r   Úgenerate_dummy_inputsr   ÚPYTORCHÚNotImplementedErrorr   Ú
ValueErrorÚtorchÚshapeÚtensorÚtile)
r(   rJ   rK   rL   rM   rN   Ú
input_dictÚboxrX   r*   s
            €r+   rT   z(LayoutLMOnnxConfig.generate_dummy_inputsž   s§   ø€ ô, ‘WÑ2Ø *¸ÈWÐ`ið 3ó 
ˆ
ò
  ˆàœJ×.Ñ.Ò.Ü%Ð&kÓlÐlä!Ô#ÜÐVÓWÐWÛà!+¨KÑ!8×!>Ñ!>Ñˆ
�JØ"Ÿ\™\Ð*?¨S¨E°JÑ,>Ð*?Ó@×EÑEÀjÐRSÐUVÓWˆ
�6ÑØÐr,   )ÚdefaultN)éÿÿÿÿr_   FN)r2   r3   r4   r
   Ústrr   r   r   Úpropertyr   ÚintrI   r   Úboolr   r   r   rT   r7   r8   s   @r+   r:   r:   ‰   sÃ   ø„ ð Ø-1ñ	Fà ðFð ðFð ˜\Ñ*õ	Fð ð
˜  W¨S°#¨XÑ%6Ð 6Ñ7ò 
ó ð
ð ØØØ*.ñ&à&ð&ð ð&ð ð	&ð
 ð&ð ˜JÑ'ð&ð 
��c�Ñ	÷&ñ &r,   r:   N)r5   Úcollectionsr   Útypingr   r   r   r   Ú r
   r   Úonnxr   r   Úutilsr   r   r   Ú
get_loggerr2   Úloggerr   r:   Ú__all__r   r,   r+   ú<module>rl      s_   ðñ #å #ß /Ó /ç 5ß ,ß <Ñ <ð 
ˆ×	Ñ	˜HÓ	%€ôjEÐ%ô jEôZ;˜ô ;ð| Ð1Ð
2�r,   