
'''simple docstring'''

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


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

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


UpperCamelCase_   	=				{
    """CLIPConfigMixin""",
    """DecisionTransformerConfigMixin""",
    """EncoderDecoderConfigMixin""",
    """RagConfigMixin""",
    """SpeechEncoderDecoderConfigMixin""",
    """VisionEncoderDecoderConfigMixin""",
    """VisionTextDualEncoderConfigMixin""",
}


def 		_UpperCAmelCase (     )			->  Any:
  _lowerCAmelCase				:     Any       =    []

  for config_class in list(CONFIG_MAPPING.values()						):
    _lowerCAmelCase				:     List[Any]       =    False

    # source code of `config_class`
    _lowerCAmelCase				:     Tuple       =    inspect.getsource(a_						)
    _lowerCAmelCase				:     Dict       =    _re_checkpoint.findall(a_						)

    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')`
      _lowerCAmelCase				:     List[Any]       =    checkpoint

      # verify the checkpoint name corresponds to the checkpoint link
      _lowerCAmelCase				:     Tuple       =    f'https://huggingface.co/{ckpt_name}'
      if ckpt_link == ckpt_link_from_name:
        _lowerCAmelCase				:     List[str]       =    True
        break

    _lowerCAmelCase				:     Optional[int]       =    config_class.__name__
    if not checkpoint_found and name not in CONFIG_CLASSES_TO_IGNORE_FOR_DOCSTRING_CHECKPOINT_CHECK:
      configs_without_checkpoint.append(a_						)

  if len(a_						) > 0:
    _lowerCAmelCase				:     int       =    '''\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()









"""simple docstring"""
def      __lowerCamelCase   (							a_     :		int ,   a_     :		str							)			->      Optional[int]:
      __SCREAMING_SNAKE_CASE   :Optional[int]						=  [1]
      for i in range(2 ,   a_							):
            factorials.append(factorials[-1] * i							)
      assert 0 <= k < factorials[-1] * n, "k out of bounds"

      __SCREAMING_SNAKE_CASE   :List[str]						=  []
      __SCREAMING_SNAKE_CASE   :Optional[Any]						=  list(range(a_							)							)

      # Find permutation
      while factorials:
            __SCREAMING_SNAKE_CASE   :Optional[int]						=  factorials.pop()
            __SCREAMING_SNAKE_CASE				,__SCREAMING_SNAKE_CASE   :Dict						=  divmod(a_ ,   a_							)
            permutation.append(elements[number]							)
            elements.remove(elements[number]							)
      permutation.append(elements[0]							)

      return permutation


if __name__ == "__main__":
  import doctest

  doctest.testmod()