





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
lowerCAmelCase_						   =    """src/transformers"""


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

lowerCAmelCase_						   =    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)`
lowerCAmelCase_						   =    re.compile(r"""\[(.+?)\]\((https://huggingface\.co/.+?)\)""")


lowerCAmelCase_						   =    {
    """DecisionTransformerConfig""",
    """EncoderDecoderConfig""",
    """MusicgenConfig""",
    """RagConfig""",
    """SpeechEncoderDecoderConfig""",
    """TimmBackboneConfig""",
    """VisionEncoderDecoderConfig""",
    """VisionTextDualEncoderConfig""",
    """LlamaConfig""",
}


def     lowerCamelCase_	(      lowerCAmelCase:	int				)->		List[Any]:
  _snake_case   :				Dict														=	None

  # source code of `config_class`
  _snake_case   :				List[Any]														=	inspect.getsource(lowerCAmelCase				)
  _snake_case   :				List[Any]														=	_re_checkpoint.findall(lowerCAmelCase				)

  # 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   :				Optional[int]														=	ckpt_link[:-1]

    # 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   :				Any														=	ckpt_name
      break

  return checkpoint


def     lowerCamelCase_	(      )->		int:
  _snake_case   :				List[Any]														=	[]

  for config_class in list(CONFIG_MAPPING.values()				):
    # Skip deprecated models
    if "models.deprecated" in config_class.__module__:
      continue
    _snake_case   :				List[Any]														=	get_checkpoint_from_config_class(lowerCAmelCase				)

    _snake_case   :				int														=	config_class.__name__
    if checkpoint is None and name not in CONFIG_CLASSES_TO_IGNORE_FOR_DOCSTRING_CHECKPOINT_CHECK:
      configs_without_checkpoint.append(lowerCAmelCase				)

  if len(lowerCAmelCase				) > 0:
    _snake_case   :				List[str]														=	'\n'.join(sorted(lowerCAmelCase				)				)
    raise ValueError(F"""The following configurations don't contain any valid checkpoint:\n{message}"""				)


if __name__ == "__main__":
      check_config_docstrings_have_checkpoints()











import copy
from dataclasses import dataclass
from pathlib import Path
from typing import Dict, Optional, Union



@dataclass
class        _lowerCAmelCase    :


  '''simple docstring'''
  a_							:       Optional[Union[str, Path]]      					=None
  a_							:       bool      					=False
  a_							:       bool      					=False
  a_							:       bool      					=False
  a_							:       Optional[Dict]      					=None
  a_							:       Optional[str]      					=None
  a_							:       bool      					=False
  a_							:       bool      					=False
  a_							:       bool      					=False
  a_							:       bool      					=True
  a_							:       Optional[int]      					=None
  a_							:       int      					=1
  a_							:       Optional[Union[str, bool]]      					=None
  a_							:       bool      					=False
  a_							:       Optional[Dict]      					=None
  a_							:       Optional[str]      					=None







  def UpperCamelCase_ (      self      :					Dict							):


    '''simple docstring'''





    return self.__class__(**{k: copy.deepcopy(UpperCamelCase							) for k, v in self.__dict__.items()}							)




