


# Copyright 2023 The HuggingFace Inc. 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

from ..utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_torch_available,
)


lowerCAmelCase__       :	str     				={
    'agents': ['Agent', 'AzureOpenAiAgent', 'HfAgent', 'LocalAgent', 'OpenAiAgent'],
    'base': ['PipelineTool', 'RemoteTool', 'Tool', 'launch_gradio_demo', 'load_tool'],
}

try:
				if not is_torch_available():
								raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
				pass
else:
				lowerCAmelCase__       :	Any     				=['DocumentQuestionAnsweringTool']
				lowerCAmelCase__       :	List[str]     				=['ImageCaptioningTool']
				lowerCAmelCase__       :	Union[str, Any]     				=['ImageQuestionAnsweringTool']
				lowerCAmelCase__       :	List[Any]     				=['ImageSegmentationTool']
				lowerCAmelCase__       :	List[Any]     				=['SpeechToTextTool']
				lowerCAmelCase__       :	Dict     				=['TextClassificationTool']
				lowerCAmelCase__       :	Optional[Any]     				=['TextQuestionAnsweringTool']
				lowerCAmelCase__       :	Dict     				=['TextSummarizationTool']
				lowerCAmelCase__       :	List[Any]     				=['TextToSpeechTool']
				lowerCAmelCase__       :	int     				=['TranslationTool']

if TYPE_CHECKING:
				from .agents import Agent, AzureOpenAiAgent, HfAgent, LocalAgent, OpenAiAgent
				from .base import PipelineTool, RemoteTool, Tool, launch_gradio_demo, load_tool

				try:
								if not is_torch_available():
												raise OptionalDependencyNotAvailable()
				except OptionalDependencyNotAvailable:
								pass
				else:
								from .document_question_answering import DocumentQuestionAnsweringTool
								from .image_captioning import ImageCaptioningTool
								from .image_question_answering import ImageQuestionAnsweringTool
								from .image_segmentation import ImageSegmentationTool
								from .speech_to_text import SpeechToTextTool
								from .text_classification import TextClassificationTool
								from .text_question_answering import TextQuestionAnsweringTool
								from .text_summarization import TextSummarizationTool
								from .text_to_speech import TextToSpeechTool
								from .translation import TranslationTool
else:
				import sys

				lowerCAmelCase__       :	Tuple     				=_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)













import glob
import os

from get_test_info import get_tester_classes


if __name__ == "__main__":
							lowercase     :							List[Any]	     =			[]

							lowercase     :							Optional[int]	     =			os.path.join('''tests''', '''models''', '''**''', '''test_modeling_*.py''')
							lowercase     :							Optional[Any]	     =			glob.glob(pattern)
							# TODO: deal with TF/Flax too
							lowercase     :							Tuple	     =			[
							    x for x in test_files if not (x.startswith('''test_modeling_tf_''') or x.startswith('''test_modeling_flax_'''))
							]

							for test_file in test_files:
														lowercase     :							Union[str, Any]	     =			get_tester_classes(test_file)
														for tester_class in tester_classes:
																					# A few tester classes don't have `parent` parameter in `__init__`.
																					# TODO: deal this better
																					try:
																												lowercase     :							Union[str, Any]	     =			tester_class(parent=None)
																					except Exception:
																												continue
																					if hasattr(tester, '''get_config'''):
																												lowercase     :							Tuple	     =			tester.get_config()
																												for k, v in config.to_dict().items():
																																			if isinstance(v, int):
																																										lowercase     :							Tuple	     =			None
																																										if k in ["vocab_size"]:
																																																	lowercase     :							str	     =			1_00
																																										elif k in ["max_position_embeddings"]:
																																																	lowercase     :							List[str]	     =			1_28
																																										elif k in ["hidden_size", "d_model"]:
																																																	lowercase     :							Union[str, Any]	     =			40
																																										elif k == ["num_layers", "num_hidden_layers", "num_encoder_layers", "num_decoder_layers"]:
																																																	lowercase     :							List[str]	     =			5
																																										if target is not None and v > target:
																																																	failures.append(
																																																	    F"""{tester_class.__name__} will produce a `config` of type `{config.__class__.__name__}`"""
																																																	    F""" with config[\"{k}\"] = {v} which is too large for testing! Set its value to be smaller"""
																																																	    F""" than {target}."""
																																																	)

							if len(failures) > 0:
														raise Exception(F"""There were {len(failures)} failures:\n""" + '''\n'''.join(failures))
