"""simple docstring"""




from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_tf_available, is_torch_available


_a				:		int	   =       {
    'configuration_ctrl': ['CTRL_PRETRAINED_CONFIG_ARCHIVE_MAP', 'CTRLConfig'],
    'tokenization_ctrl': ['CTRLTokenizer'],
}

try:
     if not is_torch_available():
          raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
     pass
else:
     _a				:		Optional[Any]	   =       [
         'CTRL_PRETRAINED_MODEL_ARCHIVE_LIST',
         'CTRLForSequenceClassification',
         'CTRLLMHeadModel',
         'CTRLModel',
         'CTRLPreTrainedModel',
     ]

try:
     if not is_tf_available():
          raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
     pass
else:
     _a				:		int	   =       [
         'TF_CTRL_PRETRAINED_MODEL_ARCHIVE_LIST',
         'TFCTRLForSequenceClassification',
         'TFCTRLLMHeadModel',
         'TFCTRLModel',
         'TFCTRLPreTrainedModel',
     ]


if TYPE_CHECKING:
     from .configuration_ctrl import CTRL_PRETRAINED_CONFIG_ARCHIVE_MAP, CTRLConfig
     from .tokenization_ctrl import CTRLTokenizer

     try:
          if not is_torch_available():
               raise OptionalDependencyNotAvailable()
     except OptionalDependencyNotAvailable:
          pass
     else:
          from .modeling_ctrl import (
              CTRL_PRETRAINED_MODEL_ARCHIVE_LIST,
              CTRLForSequenceClassification,
              CTRLLMHeadModel,
              CTRLModel,
              CTRLPreTrainedModel,
          )

     try:
          if not is_tf_available():
               raise OptionalDependencyNotAvailable()
     except OptionalDependencyNotAvailable:
          pass
     else:
          from .modeling_tf_ctrl import (
              TF_CTRL_PRETRAINED_MODEL_ARCHIVE_LIST,
              TFCTRLForSequenceClassification,
              TFCTRLLMHeadModel,
              TFCTRLModel,
              TFCTRLPreTrainedModel,
          )

else:
     import sys

     _a				:		List[str]	   =       _LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)





"""simple docstring"""




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							(			SCREAMING_SNAKE_CASE_		):
     _UpperCamelCase							:      Optional[torch.FloatTensor]		 =		None
     _UpperCamelCase							:      torch.FloatTensor		 =		None
     _UpperCamelCase							:      Optional[Tuple[torch.FloatTensor]]		 =		None
     _UpperCamelCase							:      Optional[Tuple[torch.FloatTensor]]		 =		None







class 						__A							(			SCREAMING_SNAKE_CASE_		):






     def __init__(		self    ,					a__=1    ,					a__=0    ,					a__=2    ,					a__=512    ,					a__="cls"    ,					a__=False    ,					a__=True    ,					**a__    ,					):
       super().__init__(pad_token_id=a__    ,					bos_token_id=a__    ,					eos_token_id=a__    ,					**a__  )
       _lowerCAmelCase						:	Optional[Any]        =					project_dim
       _lowerCAmelCase						:	List[str]        =					pooler_fn
       _lowerCAmelCase						:	Any        =					learn_encoder
       _lowerCAmelCase						:	Optional[int]        =					use_attention_mask







class 						__A							(			SCREAMING_SNAKE_CASE_		):
     _UpperCamelCase							:      Optional[int]		 =		[R"pooler", R"logit_scale"]
     _UpperCamelCase							:      List[Any]		 =		[R"position_ids", R"predictions.decoder.bias"]
     _UpperCamelCase							:      List[Any]		 =		"roberta"
     _UpperCamelCase							:      Optional[int]		 =		RobertaSeriesConfig






     def __init__(		self    ,					a__  ):
       super().__init__(a__  )
       _lowerCAmelCase						:	str        =					XLMRobertaModel(a__  )
       _lowerCAmelCase						:	Optional[Any]        =					nn.Linear(config.hidden_size    ,					config.project_dim  )
       _lowerCAmelCase						:	List[Any]        =					getattr(a__    ,					"""has_pre_transformation"""    ,					a__  )
       if self.has_pre_transformation:
         _lowerCAmelCase						:	List[str]        =					nn.Linear(config.hidden_size    ,					config.project_dim  )
         _lowerCAmelCase						:	Optional[int]        =					nn.LayerNorm(config.hidden_size    ,					eps=config.layer_norm_eps  )
       self.post_init()






     def    __A  (		self    ,					a__ = None    ,					a__ = None    ,					a__ = None    ,					a__ = None    ,					a__ = None    ,					a__ = None    ,					a__ = None    ,					a__ = None    ,					a__ = None    ,					a__ = None    ,					a__ = None    ,					):
       _lowerCAmelCase						:	List[str]        =					return_dict if return_dict is not None else self.config.use_return_dict

       _lowerCAmelCase						:	Optional[int]        =					self.base_model(
           input_ids=a__    ,					attention_mask=a__    ,					token_type_ids=a__    ,					position_ids=a__    ,					head_mask=a__    ,					inputs_embeds=a__    ,					encoder_hidden_states=a__    ,					encoder_attention_mask=a__    ,					output_attentions=a__    ,					output_hidden_states=True if self.has_pre_transformation else output_hidden_states    ,					return_dict=a__    ,					)

       if self.has_pre_transformation:
         _lowerCAmelCase						:	Optional[Any]        =					outputs["""hidden_states"""][-2]
         _lowerCAmelCase						:	Optional[Any]        =					self.pre_LN(a__  )
         _lowerCAmelCase						:	int        =					self.transformation_pre(a__  )

         return TransformationModelOutput(
             projection_state=a__    ,					last_hidden_state=outputs.last_hidden_state    ,					hidden_states=outputs.hidden_states    ,					attentions=outputs.attentions    ,					)
       else:
         _lowerCAmelCase						:	Union[str, Any]        =					self.transformation(outputs.last_hidden_state  )
         return TransformationModelOutput(
             projection_state=a__    ,					last_hidden_state=outputs.last_hidden_state    ,					hidden_states=outputs.hidden_states    ,					attentions=outputs.attentions    ,					)




