

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
_lowerCamelCase      :					List[Any]					    =      """src/transformers"""


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

_lowerCamelCase      :					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)`
_lowerCamelCase      :					List[Any]					    =      re.compile('''\[(.+?)\]\((https://huggingface\.co/.+?)\)''')


_lowerCamelCase      :					Dict					    =      {
    """CLIPConfigMixin""",
    """DecisionTransformerConfigMixin""",
    """EncoderDecoderConfigMixin""",
    """RagConfigMixin""",
    """SpeechEncoderDecoderConfigMixin""",
    """VisionEncoderDecoderConfigMixin""",
    """VisionTextDualEncoderConfigMixin""",
}





def      A__					(			)					->Tuple:
      __A    =[]

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

            # source code of `config_class`
            __A    =inspect.getsource(_lowercase			)
            __A    =_re_checkpoint.findall(_lowercase			)

            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')`
                  __A    =checkpoint

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

            __A    =config_class.__name__
            if not checkpoint_found and name not in CONFIG_CLASSES_TO_IGNORE_FOR_DOCSTRING_CHECKPOINT_CHECK:
                  configs_without_checkpoint.append(_lowercase			)

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


if __name__ == "__main__":
   check_config_docstrings_have_checkpoints()









# Copyright 2023 The HuggingFace Team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import TYPE_CHECKING

# rely on isort to merge the imports
from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available, is_vision_available


__UpperCamelCase:	List[Any] = {
    """configuration_efficientnet""": [
        """EFFICIENTNET_PRETRAINED_CONFIG_ARCHIVE_MAP""",
        """EfficientNetConfig""",
        """EfficientNetOnnxConfig""",
    ]
}

try:
			if not is_vision_available():
						raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
			pass
else:
			__UpperCamelCase:	Dict = ["""EfficientNetImageProcessor"""]

try:
			if not is_torch_available():
						raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
			pass
else:
			__UpperCamelCase:	Dict = [
			    """EFFICIENTNET_PRETRAINED_MODEL_ARCHIVE_LIST""",
			    """EfficientNetForImageClassification""",
			    """EfficientNetModel""",
			    """EfficientNetPreTrainedModel""",
			]

if TYPE_CHECKING:
			from .configuration_efficientnet import (
			    EFFICIENTNET_PRETRAINED_CONFIG_ARCHIVE_MAP,
			    EfficientNetConfig,
			    EfficientNetOnnxConfig,
			)

			try:
						if not is_vision_available():
									raise OptionalDependencyNotAvailable()
			except OptionalDependencyNotAvailable:
						pass
			else:
						from .image_processing_efficientnet import EfficientNetImageProcessor

			try:
						if not is_torch_available():
									raise OptionalDependencyNotAvailable()
			except OptionalDependencyNotAvailable:
						pass
			else:
						from .modeling_efficientnet import (
						    EFFICIENTNET_PRETRAINED_MODEL_ARCHIVE_LIST,
						    EfficientNetForImageClassification,
						    EfficientNetModel,
						    EfficientNetPreTrainedModel,
						)

else:
			import sys

			__UpperCamelCase:	List[str] = _LazyModule(__name__, globals()["""__file__"""], _import_structure)


