
"""simple docstring"""




from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


_A			:       Union[str, Any]   		=       {
    """configuration_distilbert""": [
        """DISTILBERT_PRETRAINED_CONFIG_ARCHIVE_MAP""",
        """DistilBertConfig""",
        """DistilBertOnnxConfig""",
    ],
    """tokenization_distilbert""": ["""DistilBertTokenizer"""],
}

try:
   if not is_tokenizers_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   _A			:       int   		=       ["""DistilBertTokenizerFast"""]

try:
   if not is_torch_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   _A			:       List[Any]   		=       [
       """DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST""",
       """DistilBertForMaskedLM""",
       """DistilBertForMultipleChoice""",
       """DistilBertForQuestionAnswering""",
       """DistilBertForSequenceClassification""",
       """DistilBertForTokenClassification""",
       """DistilBertModel""",
       """DistilBertPreTrainedModel""",
   ]

try:
   if not is_tf_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   _A			:       str   		=       [
       """TF_DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST""",
       """TFDistilBertForMaskedLM""",
       """TFDistilBertForMultipleChoice""",
       """TFDistilBertForQuestionAnswering""",
       """TFDistilBertForSequenceClassification""",
       """TFDistilBertForTokenClassification""",
       """TFDistilBertMainLayer""",
       """TFDistilBertModel""",
       """TFDistilBertPreTrainedModel""",
   ]

try:
   if not is_flax_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   _A			:       Union[str, Any]   		=       [
       """FlaxDistilBertForMaskedLM""",
       """FlaxDistilBertForMultipleChoice""",
       """FlaxDistilBertForQuestionAnswering""",
       """FlaxDistilBertForSequenceClassification""",
       """FlaxDistilBertForTokenClassification""",
       """FlaxDistilBertModel""",
       """FlaxDistilBertPreTrainedModel""",
   ]


if TYPE_CHECKING:
   from .configuration_distilbert import (
       DISTILBERT_PRETRAINED_CONFIG_ARCHIVE_MAP,
       DistilBertConfig,
       DistilBertOnnxConfig,
   )
   from .tokenization_distilbert import DistilBertTokenizer

   try:
      if not is_tokenizers_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .tokenization_distilbert_fast import DistilBertTokenizerFast

   try:
      if not is_torch_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .modeling_distilbert import (
          DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
          DistilBertForMaskedLM,
          DistilBertForMultipleChoice,
          DistilBertForQuestionAnswering,
          DistilBertForSequenceClassification,
          DistilBertForTokenClassification,
          DistilBertModel,
          DistilBertPreTrainedModel,
      )

   try:
      if not is_tf_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .modeling_tf_distilbert import (
          TF_DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
          TFDistilBertForMaskedLM,
          TFDistilBertForMultipleChoice,
          TFDistilBertForQuestionAnswering,
          TFDistilBertForSequenceClassification,
          TFDistilBertForTokenClassification,
          TFDistilBertMainLayer,
          TFDistilBertModel,
          TFDistilBertPreTrainedModel,
      )

   try:
      if not is_flax_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .modeling_flax_distilbert import (
          FlaxDistilBertForMaskedLM,
          FlaxDistilBertForMultipleChoice,
          FlaxDistilBertForQuestionAnswering,
          FlaxDistilBertForSequenceClassification,
          FlaxDistilBertForTokenClassification,
          FlaxDistilBertModel,
          FlaxDistilBertPreTrainedModel,
      )

else:
   import sys

   _A			:       Optional[int]   		=       _LazyModule(__name__, globals()["""__file__"""], _import_structure, module_spec=__spec__)



from dataclasses import dataclass
from typing import Optional, Tuple

import torch
from torch import nn
from transformers import RobertaPreTrainedModel, XLMRobertaConfig, XLMRobertaModel
from transformers.utils import ModelOutput





@dataclass
class      A							(				UpperCAmelCase_     ):
   __UpperCAmelCase : Optional[torch.FloatTensor]      =			None
   __UpperCAmelCase : torch.FloatTensor      =			None
   __UpperCAmelCase : Optional[Tuple[torch.FloatTensor]]      =			None
   __UpperCAmelCase : Optional[Tuple[torch.FloatTensor]]      =			None





class      A							(				UpperCAmelCase_     ):


   def __init__(self     :						Union[str, Any]       ,  __UpperCAmelCase     :						Tuple=1       ,  __UpperCAmelCase     :						str=0       ,  __UpperCAmelCase     :						str=2       ,  __UpperCAmelCase     :						Union[str, Any]=5_1_2       ,  __UpperCAmelCase     :						List[str]="cls"       ,  __UpperCAmelCase     :						Optional[int]=False       ,  __UpperCAmelCase     :						str=True       ,  **__UpperCAmelCase     :						str       ,  )						->				int:
         """simple docstring"""



         super().__init__(pad_token_id=__UpperCAmelCase       ,  bos_token_id=__UpperCAmelCase       ,  eos_token_id=__UpperCAmelCase       ,  **__UpperCAmelCase		)
         UpperCAmelCase__								=  project_dim
         UpperCAmelCase__								=  pooler_fn
         UpperCAmelCase__								=  learn_encoder
         UpperCAmelCase__								=  use_attention_mask





class      A							(				UpperCAmelCase_     ):
   __UpperCAmelCase : Tuple      =			[r'pooler', r'logit_scale']
   __UpperCAmelCase : int      =			[r'position_ids', r'predictions.decoder.bias']
   __UpperCAmelCase : Any      =			'roberta'
   __UpperCAmelCase : List[str]      =			RobertaSeriesConfig


   def __init__(self     :						Tuple       ,  __UpperCAmelCase     :						Optional[int]		)						->				int:
         """simple docstring"""



         super().__init__(__UpperCAmelCase		)
         UpperCAmelCase__								=  XLMRobertaModel(__UpperCAmelCase		)
         UpperCAmelCase__								=  nn.Linear(config.hidden_size       ,  config.project_dim		)
         UpperCAmelCase__								=  getattr(__UpperCAmelCase       ,  "has_pre_transformation"       ,  __UpperCAmelCase		)
         if self.has_pre_transformation:
               UpperCAmelCase__								=  nn.Linear(config.hidden_size       ,  config.project_dim		)
               UpperCAmelCase__								=  nn.LayerNorm(config.hidden_size       ,  eps=config.layer_norm_eps		)
         self.post_init()





   def 			lowercase_      (self     :						Optional[Any]       ,  __UpperCAmelCase     :						Optional[torch.Tensor] = None       ,  __UpperCAmelCase     :						Optional[torch.Tensor] = None       ,  __UpperCAmelCase     :						Optional[torch.Tensor] = None       ,  __UpperCAmelCase     :						Optional[torch.Tensor] = None       ,  __UpperCAmelCase     :						Optional[torch.Tensor] = None       ,  __UpperCAmelCase     :						Optional[torch.Tensor] = None       ,  __UpperCAmelCase     :						Optional[torch.Tensor] = None       ,  __UpperCAmelCase     :						Optional[torch.Tensor] = None       ,  __UpperCAmelCase     :						Optional[bool] = None       ,  __UpperCAmelCase     :						Optional[bool] = None       ,  __UpperCAmelCase     :						Optional[bool] = None       ,  )						->				Optional[int]:
         """simple docstring"""



         UpperCAmelCase__								=  return_dict if return_dict is not None else self.config.use_return_dict

         UpperCAmelCase__								=  self.base_model(
             input_ids=__UpperCAmelCase       ,  attention_mask=__UpperCAmelCase       ,  token_type_ids=__UpperCAmelCase       ,  position_ids=__UpperCAmelCase       ,  head_mask=__UpperCAmelCase       ,  inputs_embeds=__UpperCAmelCase       ,  encoder_hidden_states=__UpperCAmelCase       ,  encoder_attention_mask=__UpperCAmelCase       ,  output_attentions=__UpperCAmelCase       ,  output_hidden_states=True if self.has_pre_transformation else output_hidden_states       ,  return_dict=__UpperCAmelCase       ,  )

         if self.has_pre_transformation:
               UpperCAmelCase__								=  outputs["hidden_states"][-2]
               UpperCAmelCase__								=  self.pre_LN(__UpperCAmelCase		)
               UpperCAmelCase__								=  self.transformation_pre(__UpperCAmelCase		)

               return TransformationModelOutput(
                   projection_state=__UpperCAmelCase       ,  last_hidden_state=outputs.last_hidden_state       ,  hidden_states=outputs.hidden_states       ,  attentions=outputs.attentions       ,  )
         else:
               UpperCAmelCase__								=  self.transformation(outputs.last_hidden_state		)
               return TransformationModelOutput(
                   projection_state=__UpperCAmelCase       ,  last_hidden_state=outputs.last_hidden_state       ,  hidden_states=outputs.hidden_states       ,  attentions=outputs.attentions       ,  )



