



from typing import TYPE_CHECKING

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


UpperCAmelCase							=       {
    """configuration_gpt2""": ["""GPT2_PRETRAINED_CONFIG_ARCHIVE_MAP""", """GPT2Config""", """GPT2OnnxConfig"""],
    """tokenization_gpt2""": ["""GPT2Tokenizer"""],
}

try:
	if not is_tokenizers_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	UpperCAmelCase							=       ["""GPT2TokenizerFast"""]

try:
	if not is_torch_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	UpperCAmelCase							=       [
	    """GPT2_PRETRAINED_MODEL_ARCHIVE_LIST""",
	    """GPT2DoubleHeadsModel""",
	    """GPT2ForQuestionAnswering""",
	    """GPT2ForSequenceClassification""",
	    """GPT2ForTokenClassification""",
	    """GPT2LMHeadModel""",
	    """GPT2Model""",
	    """GPT2PreTrainedModel""",
	    """load_tf_weights_in_gpt2""",
	]

try:
	if not is_tf_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	UpperCAmelCase							=       [
	    """TF_GPT2_PRETRAINED_MODEL_ARCHIVE_LIST""",
	    """TFGPT2DoubleHeadsModel""",
	    """TFGPT2ForSequenceClassification""",
	    """TFGPT2LMHeadModel""",
	    """TFGPT2MainLayer""",
	    """TFGPT2Model""",
	    """TFGPT2PreTrainedModel""",
	]

try:
	if not is_keras_nlp_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	UpperCAmelCase							=       ["""TFGPT2Tokenizer"""]

try:
	if not is_flax_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	UpperCAmelCase							=       ["""FlaxGPT2LMHeadModel""", """FlaxGPT2Model""", """FlaxGPT2PreTrainedModel"""]

if TYPE_CHECKING:
	from .configuration_gpta import GPT2_PRETRAINED_CONFIG_ARCHIVE_MAP, GPTaConfig, GPTaOnnxConfig
	from .tokenization_gpta import GPTaTokenizer

	try:
		if not is_tokenizers_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .tokenization_gpta_fast import GPTaTokenizerFast

	try:
		if not is_torch_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_gpta import (
		    GPT2_PRETRAINED_MODEL_ARCHIVE_LIST,
		    GPTaDoubleHeadsModel,
		    GPTaForQuestionAnswering,
		    GPTaForSequenceClassification,
		    GPTaForTokenClassification,
		    GPTaLMHeadModel,
		    GPTaModel,
		    GPTaPreTrainedModel,
		    load_tf_weights_in_gpta,
		)

	try:
		if not is_tf_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_tf_gpta import (
		    TF_GPT2_PRETRAINED_MODEL_ARCHIVE_LIST,
		    TFGPTaDoubleHeadsModel,
		    TFGPTaForSequenceClassification,
		    TFGPTaLMHeadModel,
		    TFGPTaMainLayer,
		    TFGPTaModel,
		    TFGPTaPreTrainedModel,
		)

	try:
		if not is_keras_nlp_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .tokenization_gpta_tf import TFGPTaTokenizer

	try:
		if not is_flax_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_flax_gpta import FlaxGPTaLMHeadModel, FlaxGPTaModel, FlaxGPTaPreTrainedModel

else:
	import sys

	UpperCAmelCase							=       _LazyModule(__name__, globals()["""__file__"""], _import_structure, module_spec=__spec__)




from typing import Callable, Optional, Union

from ...configuration_utils import PretrainedConfig
from ...utils import logging


lowerCamelCase   					=  logging.get_logger(__name__)

lowerCamelCase   					=  {
    '''microsoft/prophetnet-large-uncased''': (
        '''https://huggingface.co/microsoft/prophetnet-large-uncased/resolve/main/config.json'''
    ),
}





class      snake_case_      (					_a				):


							"""simple docstring"""





							__UpperCAmelCase      ="""prophetnet"""
							__UpperCAmelCase      =["""past_key_values"""]
							__UpperCAmelCase      ={
							    """num_attention_heads""": """num_encoder_attention_heads""",
							}




							def __init__(			self       ,    _A = 0.1       ,    _A = "gelu"       ,    _A = 3_0_5_2_2       ,    _A = 1_0_2_4       ,    _A = 4_0_9_6       ,    _A = 1_2       ,    _A = 1_6       ,    _A = 4_0_9_6       ,    _A = 1_2       ,    _A = 1_6       ,    _A = 0.1       ,    _A = 0.1       ,    _A = 5_1_2       ,    _A = 0.02       ,    _A = True       ,    _A = True       ,    _A = 0       ,    _A = 2       ,    _A = 3_2       ,    _A = 1_2_8       ,    _A = False       ,    _A = 0.0       ,    _A = True       ,    _A = 0       ,    _A = 1       ,    _A = 2       ,    **_A       ,    ):
												__lowerCAmelCase       =				vocab_size
												__lowerCAmelCase       =				hidden_size
												__lowerCAmelCase       =				encoder_ffn_dim
												__lowerCAmelCase       =				num_encoder_layers
												__lowerCAmelCase       =				num_encoder_attention_heads
												__lowerCAmelCase       =				decoder_ffn_dim
												__lowerCAmelCase       =				num_decoder_layers
												__lowerCAmelCase       =				num_decoder_attention_heads
												__lowerCAmelCase       =				max_position_embeddings
												__lowerCAmelCase       =				init_std  # Normal(0, this parameter)
												__lowerCAmelCase       =				activation_function

												# parameters for prophetnet
												__lowerCAmelCase       =				ngram
												__lowerCAmelCase       =				num_buckets
												__lowerCAmelCase       =				relative_max_distance
												__lowerCAmelCase       =				disable_ngram_loss
												__lowerCAmelCase       =				eps

												# 3 Types of Dropout
												__lowerCAmelCase       =				attention_dropout
												__lowerCAmelCase       =				activation_dropout
												__lowerCAmelCase       =				dropout

												__lowerCAmelCase       =				use_cache

												super().__init__(
												    pad_token_id=_A       ,    bos_token_id=_A       ,    eos_token_id=_A       ,    is_encoder_decoder=_A       ,    add_cross_attention=_A       ,    decoder_start_token_id=_A       ,    **_A       ,    )




							@property
							def 							A__	(			self				):
												return self.num_encoder_layers + self.num_decoder_layers




							@num_hidden_layers.setter
							def 							A__	(			self       ,    _A				):
												raise NotImplementedError(
												    'This model does not support the setting of `num_hidden_layers`. Please set `num_encoder_layers` and'
												    ' `num_decoder_layers`.'				)






