






import importlib
import inspect
import os
import re


# All paths are set with the intent you should run this script from the root of the repo with the command
# python utils/check_config_docstrings.py
__UpperCAmelCase							:   Union[str, Any]							=  "src/transformers"


# This is to make sure the transformers module imported is the one in the repo.
__UpperCAmelCase							:   Any							=  importlib.util.spec_from_file_location(
    "transformers",
    os.path.join(PATH_TO_TRANSFORMERS, "__init__.py"),
    submodule_search_locations=[PATH_TO_TRANSFORMERS],
)
__UpperCAmelCase							:   Dict							=  spec.loader.load_module()

__UpperCAmelCase							:   Optional[int]							=  transformers.models.auto.configuration_auto.CONFIG_MAPPING

# Regex pattern used to find the checkpoint mentioned in the docstring of `config_class`.
# For example, `[bert-base-uncased](https://huggingface.co/bert-base-uncased)`
__UpperCAmelCase							:   int							=  re.compile("\[(.+?)\]\((https://huggingface\.co/.+?)\)")


__UpperCAmelCase							:   Optional[int]							=  {
    "CLIPConfigMixin",
    "DecisionTransformerConfigMixin",
    "EncoderDecoderConfigMixin",
    "RagConfigMixin",
    "SpeechEncoderDecoderConfigMixin",
    "VisionEncoderDecoderConfigMixin",
    "VisionTextDualEncoderConfigMixin",
}





def 					lowercase_ (    )     -> Optional[Any]:





				'''simple docstring'''


				snake_case__      :List[str]         =   []

				for config_class in list(CONFIG_MAPPING.values()      ):
								snake_case__      :Any         =   False

								# source code of `config_class`
								snake_case__      :List[str]         =   inspect.getsource(__snake_case      )
								snake_case__      :Any         =   _re_checkpoint.findall(__snake_case      )

								for checkpoint in checkpoints:
												# Each `checkpoint` is a tuple of a checkpoint name and a checkpoint link.
												# For example, `('bert-base-uncased', 'https://huggingface.co/bert-base-uncased')`
												snake_case__    ,						snake_case__      :Optional[Any]         =   checkpoint

												# verify the checkpoint name corresponds to the checkpoint link
												snake_case__      :Dict         =   F'https://huggingface.co/{ckpt_name}'
												if ckpt_link == ckpt_link_from_name:
																snake_case__      :Dict         =   True
																break

								snake_case__      :Any         =   config_class.__name__
								if not checkpoint_found and name not in CONFIG_CLASSES_TO_IGNORE_FOR_DOCSTRING_CHECKPOINT_CHECK:
												configs_without_checkpoint.append(__snake_case      )

				if len(__snake_case      ) > 0:
								snake_case__      :int         =   "\n".join(sorted(__snake_case      )      )
								raise ValueError(F'The following configurations don\'t contain any valid checkpoint:\n{message}'      )


if __name__ == "__main__":
	check_config_docstrings_have_checkpoints()







import torch
import torch.nn as nn
from transformers.modeling_utils import ModuleUtilsMixin
from transformers.models.ta.modeling_ta import TaBlock, TaConfig, TaLayerNorm

from ...configuration_utils import ConfigMixin, register_to_config
from ...models import ModelMixin


class 					_snake_case						(			_A       ,    _A       ,    _A ):






	@register_to_config
	def __init__(		self					,UpperCamelCase					,UpperCamelCase					,UpperCamelCase					,UpperCamelCase					,UpperCamelCase					,UpperCamelCase					,UpperCamelCase					,UpperCamelCase					,UpperCamelCase					,UpperCamelCase = False					,)						->    int:
					super().__init__()

					snake_case__      :Union[str, Any]         =   nn.Embedding(UpperCamelCase					,UpperCamelCase       )

					snake_case__      :int         =   nn.Embedding(UpperCamelCase					,UpperCamelCase       )
					snake_case__      :Any         =   False

					snake_case__      :List[Any]         =   nn.Dropout(p=UpperCamelCase       )

					snake_case__      :Tuple         =   TaConfig(
					    vocab_size=UpperCamelCase					,d_model=UpperCamelCase					,num_heads=UpperCamelCase					,d_kv=UpperCamelCase					,d_ff=UpperCamelCase					,dropout_rate=UpperCamelCase					,feed_forward_proj=UpperCamelCase					,is_decoder=UpperCamelCase					,is_encoder_decoder=UpperCamelCase					,)

					snake_case__      :List[str]         =   nn.ModuleList()
					for lyr_num in range(UpperCamelCase       ):
									snake_case__      :List[Any]         =   TaBlock(UpperCamelCase       )
									self.encoders.append(UpperCamelCase       )

					snake_case__      :Optional[Any]         =   TaLayerNorm(UpperCamelCase       )
					snake_case__      :Any         =   nn.Dropout(p=UpperCamelCase       )






	def    lowerCAmelCase_							(		self					,UpperCamelCase					,UpperCamelCase       )						->    int:
					snake_case__      :str         =   self.token_embedder(UpperCamelCase       )

					snake_case__      :int         =   encoder_input_tokens.shape[1]
					snake_case__      :List[Any]         =   torch.arange(UpperCamelCase					,device=encoder_input_tokens.device       )
					x += self.position_encoding(UpperCamelCase       )

					snake_case__      :Optional[int]         =   self.dropout_pre(UpperCamelCase       )

					# inverted the attention mask
					snake_case__      :Optional[Any]         =   encoder_input_tokens.size()
					snake_case__      :Dict         =   self.get_extended_attention_mask(UpperCamelCase					,UpperCamelCase       )

					for lyr in self.encoders:
									snake_case__      :str         =   lyr(UpperCamelCase					,UpperCamelCase       )[0]
					snake_case__      :List[Any]         =   self.layer_norm(UpperCamelCase       )

					return self.dropout_post(UpperCamelCase       ), encoder_inputs_mask