



from datasets.utils.patching import _PatchedModuleObj, patch_submodule

from . import _test_patching





def 		a__			(		):
   import os as original_os
   from os import path as original_path
   from os import rename as original_rename
   from os.path import dirname as original_dirname
   from os.path import join as original_join

   assert _test_patching.os is original_os
   assert _test_patching.path is original_path
   assert _test_patching.join is original_join

   assert _test_patching.renamed_os is original_os
   assert _test_patching.renamed_path is original_path
   assert _test_patching.renamed_join is original_join

   __lowerCamelCase													=    """__test_patch_submodule_mock__"""
   with patch_submodule(_test_patching ,'''os.path.join''' ,snake_case__							):
      # Every way to access os.path.join must be patched, and the rest must stay untouched

      # check os.path.join
      assert isinstance(_test_patching.os ,_PatchedModuleObj							)
      assert isinstance(_test_patching.os.path ,_PatchedModuleObj							)
      assert _test_patching.os.path.join is mock

      # check path.join
      assert isinstance(_test_patching.path ,_PatchedModuleObj							)
      assert _test_patching.path.join is mock

      # check join
      assert _test_patching.join is mock

      # check that the other attributes are untouched
      assert _test_patching.os.rename is original_rename
      assert _test_patching.path.dirname is original_dirname
      assert _test_patching.os.path.dirname is original_dirname

      # Even renamed modules or objects must be patched

      # check renamed_os.path.join
      assert isinstance(_test_patching.renamed_os ,_PatchedModuleObj							)
      assert isinstance(_test_patching.renamed_os.path ,_PatchedModuleObj							)
      assert _test_patching.renamed_os.path.join is mock

      # check renamed_path.join
      assert isinstance(_test_patching.renamed_path ,_PatchedModuleObj							)
      assert _test_patching.renamed_path.join is mock

      # check renamed_join
      assert _test_patching.renamed_join is mock

      # check that the other attributes are untouched
      assert _test_patching.renamed_os.rename is original_rename
      assert _test_patching.renamed_path.dirname is original_dirname
      assert _test_patching.renamed_os.path.dirname is original_dirname

   # check that everthing is back to normal when the patch is over

   assert _test_patching.os is original_os
   assert _test_patching.path is original_path
   assert _test_patching.join is original_join

   assert _test_patching.renamed_os is original_os
   assert _test_patching.renamed_path is original_path
   assert _test_patching.renamed_join is original_join





def 		a__			(		):
   assert _test_patching.open is open

   __lowerCamelCase													=    """__test_patch_submodule_builtin_mock__"""
   # _test_patching has "open" in its globals
   assert _test_patching.open is open
   with patch_submodule(_test_patching ,'''open''' ,snake_case__							):
      assert _test_patching.open is mock

   # check that everthing is back to normal when the patch is over

   assert _test_patching.open is open





def 		a__			(		):
   __lowerCamelCase													=    """__test_patch_submodule_missing_mock__"""
   with patch_submodule(_test_patching ,'''pandas.read_csv''' ,snake_case__							):
      pass





def 		a__			(		):
   __lowerCamelCase													=    """__test_patch_submodule_missing_builtin_mock__"""
   # _test_patching doesn't have "len" in its globals
   assert getattr(_test_patching ,'''len''' ,snake_case__							) is None
   with patch_submodule(_test_patching ,'''len''' ,snake_case__							):
      assert _test_patching.len is mock
   assert _test_patching.len is len





def 		a__			(		):
   __lowerCamelCase													=    """__test_patch_submodule_start_and_stop_mock__"""
   __lowerCamelCase													=    patch_submodule(_test_patching ,'''open''' ,snake_case__							)
   assert _test_patching.open is open
   patch.start()
   assert _test_patching.open is mock
   patch.stop()
   assert _test_patching.open is open





def 		a__			(		):
   from os import rename as original_rename
   from os.path import dirname as original_dirname
   from os.path import join as original_join

   __lowerCamelCase													=    """__test_patch_submodule_successive_join__"""
   __lowerCamelCase													=    """__test_patch_submodule_successive_dirname__"""
   __lowerCamelCase													=    """__test_patch_submodule_successive_rename__"""
   assert _test_patching.os.path.join is original_join
   assert _test_patching.os.path.dirname is original_dirname
   assert _test_patching.os.rename is original_rename

   with patch_submodule(_test_patching ,'''os.path.join''' ,snake_case__							):
      with patch_submodule(_test_patching ,'''os.rename''' ,snake_case__							):
         with patch_submodule(_test_patching ,'''os.path.dirname''' ,snake_case__							):
            assert _test_patching.os.path.join is mock_join
            assert _test_patching.os.path.dirname is mock_dirname
            assert _test_patching.os.rename is mock_rename

      # try another order
   with patch_submodule(_test_patching ,'''os.rename''' ,snake_case__							):
      with patch_submodule(_test_patching ,'''os.path.join''' ,snake_case__							):
         with patch_submodule(_test_patching ,'''os.path.dirname''' ,snake_case__							):
            assert _test_patching.os.path.join is mock_join
            assert _test_patching.os.path.dirname is mock_dirname
            assert _test_patching.os.rename is mock_rename

   assert _test_patching.os.path.join is original_join
   assert _test_patching.os.path.dirname is original_dirname
   assert _test_patching.os.rename is original_rename





def 		a__			(		):
   __lowerCamelCase													=    """__test_patch_submodule_doesnt_exist_mock__"""
   with patch_submodule(_test_patching ,'''__module_that_doesn_exist__.__attribute_that_doesn_exist__''' ,snake_case__							):
      pass
   with patch_submodule(_test_patching ,'''os.__attribute_that_doesn_exist__''' ,snake_case__							):
      pass











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


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

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


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





def 		a__			(		_UpperCamelCase			: Union[str, Any]							):
   __lowerCamelCase													=    None

   # source code of `config_class`
   __lowerCamelCase													=    inspect.getsource(_UpperCamelCase							)
   __lowerCamelCase													=    _re_checkpoint.findall(_UpperCamelCase							)

   # 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('''/'''							):
         __lowerCamelCase													=    ckpt_link[:-1]

      # verify the checkpoint name corresponds to the checkpoint link
      __lowerCamelCase													=    F"""https://huggingface.co/{ckpt_name}"""
      if ckpt_link == ckpt_link_from_name:
         __lowerCamelCase													=    ckpt_name
         break

   return checkpoint





def 		a__			(		):
   __lowerCamelCase													=    []

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

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

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


if __name__ == "__main__":
  check_config_docstrings_have_checkpoints()






