






import inspect
import re

from transformers.utils import direct_transformers_import


# 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    :						Dict		     =  """src/transformers"""


# This is to make sure the transformers module imported is the one in the repo.
__UpperCamelCase    :						str		     =  direct_transformers_import(PATH_TO_TRANSFORMERS)

__UpperCamelCase    :						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    :						Union[str, Any]		     =  re.compile(R"""\[(.+?)\]\((https://huggingface\.co/.+?)\)""")


__UpperCamelCase    :						List[Any]		     =  {
    """DecisionTransformerConfig""",
    """EncoderDecoderConfig""",
    """MusicgenConfig""",
    """RagConfig""",
    """SpeechEncoderDecoderConfig""",
    """TimmBackboneConfig""",
    """VisionEncoderDecoderConfig""",
    """VisionTextDualEncoderConfig""",
    """LlamaConfig""",
}
def    a_       (					_A     )	->	str:







				"""simple docstring"""
				snake_case__													=   None

				# source code of `config_class`
				snake_case__													=   inspect.getsource(_A     )
				snake_case__													=   _re_checkpoint.findall(_A     )

				# Each `checkpoint` is a tuple of a checkpoint name and a checkpoint link.
				# For example, `('bert-base-uncased', 'https://huggingface.co/bert-base-uncased')`
				for ckpt_name, ckpt_link in checkpoints:
								# allow the link to end with `/`
								if ckpt_link.endswith('/'     ):
												snake_case__													=   ckpt_link[:-1]

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

				return checkpoint
def    a_       (					)	->	Dict:







				"""simple docstring"""
				snake_case__													=   []

				for config_class in list(CONFIG_MAPPING.values()     ):
								# Skip deprecated models
								if "models.deprecated" in config_class.__module__:
												continue
								snake_case__													=   get_checkpoint_from_config_class(_A     )

								snake_case__													=   config_class.__name__
								if checkpoint is None and name not in CONFIG_CLASSES_TO_IGNORE_FOR_DOCSTRING_CHECKPOINT_CHECK:
												configs_without_checkpoint.append(_A     )

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


if __name__ == "__main__":
							check_config_docstrings_have_checkpoints()








from ..utils import DummyObject, requires_backends


class        _a							(			metaclass=UpperCamelCase__			):
							_lowercase	:			Any        = ['''torch''', '''scipy''']

							def __init__(							self:	int    ,						*UpperCamelCase_:	Any    ,						**UpperCamelCase_:	Optional[Any]							)			->   List[str]:





									"""simple docstring"""







									requires_backends(self    ,						['''torch''', '''scipy''']							)

							@classmethod
							def       lowerCamelCase_ (							cls:	Optional[int]    ,						*UpperCamelCase_:	Any    ,						**UpperCamelCase_:	List[Any]							)			->   int:





									"""simple docstring"""







									requires_backends(cls    ,						['''torch''', '''scipy''']							)


							@classmethod
							def       lowerCamelCase_ (							cls:	Any    ,						*UpperCamelCase_:	Any    ,						**UpperCamelCase_:	Dict							)			->   Optional[int]:





									"""simple docstring"""







									requires_backends(cls    ,						['''torch''', '''scipy''']							)


