
'''simple docstring'''







import os
import sys
import unittest


lowercase    :							Dict      =					os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
sys.path.append(os.path.join(git_repo_path, "utils"))

import check_dummies  # noqa: E402
from check_dummies import create_dummy_files, create_dummy_object, find_backend, read_init  # noqa: E402


# Align TRANSFORMERS_PATH in check_dummies with the current path
lowercase    :							List[str]      =					os.path.join(git_repo_path, "src", "diffusers")


class 						__UpperCAmelCase      (					unittest.TestCase						):


							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






								_snake_case   						=		find_backend('    if not is_torch_available():'  )
								self.assertEqual(lowerCAmelCase_    ,   'torch'  )

								# backend_with_underscore = find_backend("    if not is_tensorflow_text_available():")
								# self.assertEqual(backend_with_underscore, "tensorflow_text")

								_snake_case   						=		find_backend('    if not (is_torch_available() and is_transformers_available()):'  )
								self.assertEqual(lowerCAmelCase_    ,   'torch_and_transformers'  )

								# double_backend_with_underscore = find_backend(
								#    "    if not (is_sentencepiece_available() and is_tensorflow_text_available()):"
								# )
								# self.assertEqual(double_backend_with_underscore, "sentencepiece_and_tensorflow_text")

								_snake_case   						=		find_backend(
								    '    if not (is_torch_available() and is_transformers_available() and is_onnx_available()):'  )
								self.assertEqual(lowerCAmelCase_    ,   'torch_and_transformers_and_onnx'  )


							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






								_snake_case   						=		read_init()
								# We don't assert on the exact list of keys to allow for smooth grow of backend-specific objects
								self.assertIn('torch'    ,   lowerCAmelCase_  )
								self.assertIn('torch_and_transformers'    ,   lowerCAmelCase_  )
								self.assertIn('flax_and_transformers'    ,   lowerCAmelCase_  )
								self.assertIn('torch_and_transformers_and_onnx'    ,   lowerCAmelCase_  )

								# Likewise, we can't assert on the exact content of a key
								self.assertIn('UNet2DModel'    ,   objects['torch']  )
								self.assertIn('FlaxUNet2DConditionModel'    ,   objects['flax']  )
								self.assertIn('StableDiffusionPipeline'    ,   objects['torch_and_transformers']  )
								self.assertIn('FlaxStableDiffusionPipeline'    ,   objects['flax_and_transformers']  )
								self.assertIn('LMSDiscreteScheduler'    ,   objects['torch_and_scipy']  )
								self.assertIn('OnnxStableDiffusionPipeline'    ,   objects['torch_and_transformers_and_onnx']  )


							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






								_snake_case   						=		create_dummy_object('CONSTANT'    ,   '\'torch\''  )
								self.assertEqual(lowerCAmelCase_    ,   '\nCONSTANT = None\n'  )

								_snake_case   						=		create_dummy_object('function'    ,   '\'torch\''  )
								self.assertEqual(
								    lowerCAmelCase_    ,   '\ndef function(*args, **kwargs):\n    requires_backends(function, \'torch\')\n'  )

								_snake_case   						=		'\nclass FakeClass(metaclass=DummyObject):\n    _backends = \'torch\'\n\n    def __init__(self, *args, **kwargs):\n        requires_backends(self, \'torch\')\n\n    @classmethod\n    def from_config(cls, *args, **kwargs):\n        requires_backends(cls, \'torch\')\n\n    @classmethod\n    def from_pretrained(cls, *args, **kwargs):\n        requires_backends(cls, \'torch\')\n'
								_snake_case   						=		create_dummy_object('FakeClass'    ,   '\'torch\''  )
								self.assertEqual(lowerCAmelCase_    ,   lowerCAmelCase_  )




							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






								_snake_case   						=		'# This file is autogenerated by the command `make fix-copies`, do not edit.\nfrom ..utils import DummyObject, requires_backends\n\n\nCONSTANT = None\n\n\ndef function(*args, **kwargs):\n    requires_backends(function, ["torch"])\n\n\nclass FakeClass(metaclass=DummyObject):\n    _backends = ["torch"]\n\n    def __init__(self, *args, **kwargs):\n        requires_backends(self, ["torch"])\n\n    @classmethod\n    def from_config(cls, *args, **kwargs):\n        requires_backends(cls, ["torch"])\n\n    @classmethod\n    def from_pretrained(cls, *args, **kwargs):\n        requires_backends(cls, ["torch"])\n'
								_snake_case   						=		create_dummy_files({'torch': ['CONSTANT', 'function', 'FakeClass']}  )
								self.assertEqual(dummy_files['torch']    ,   lowerCAmelCase_  )



'''simple docstring'''







from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available, is_vision_available


lowercase    :							Any      =					{
    "configuration_chinese_clip": [
        "CHINESE_CLIP_PRETRAINED_CONFIG_ARCHIVE_MAP",
        "ChineseCLIPConfig",
        "ChineseCLIPOnnxConfig",
        "ChineseCLIPTextConfig",
        "ChineseCLIPVisionConfig",
    ],
    "processing_chinese_clip": ["ChineseCLIPProcessor"],
}

try:
					if not is_vision_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					pass
else:
					lowercase    :							Optional[Any]      =					["ChineseCLIPFeatureExtractor"]
					lowercase    :							List[Any]      =					["ChineseCLIPImageProcessor"]

try:
					if not is_torch_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					pass
else:
					lowercase    :							Any      =					[
					    "CHINESE_CLIP_PRETRAINED_MODEL_ARCHIVE_LIST",
					    "ChineseCLIPModel",
					    "ChineseCLIPPreTrainedModel",
					    "ChineseCLIPTextModel",
					    "ChineseCLIPVisionModel",
					]

if TYPE_CHECKING:
					from .configuration_chinese_clip import (
					    CHINESE_CLIP_PRETRAINED_CONFIG_ARCHIVE_MAP,
					    ChineseCLIPConfig,
					    ChineseCLIPOnnxConfig,
					    ChineseCLIPTextConfig,
					    ChineseCLIPVisionConfig,
					)
					from .processing_chinese_clip import ChineseCLIPProcessor

					try:
										if not is_vision_available():
															raise OptionalDependencyNotAvailable()
					except OptionalDependencyNotAvailable:
										pass
					else:
										from .feature_extraction_chinese_clip import ChineseCLIPFeatureExtractor, ChineseCLIPImageProcessor

					try:
										if not is_torch_available():
															raise OptionalDependencyNotAvailable()
					except OptionalDependencyNotAvailable:
										pass
					else:
										from .modeling_chinese_clip import (
										    CHINESE_CLIP_PRETRAINED_MODEL_ARCHIVE_LIST,
										    ChineseCLIPModel,
										    ChineseCLIPPreTrainedModel,
										    ChineseCLIPTextModel,
										    ChineseCLIPVisionModel,
										)

else:
					import sys

					lowercase    :							List[Any]      =					_LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)

