import random
import unittest

import torch

from diffusers import IFImgaImgSuperResolutionPipeline
from diffusers.utils import floats_tensor
from diffusers.utils.import_utils import is_xformers_available
from diffusers.utils.testing_utils import skip_mps, torch_device

from ..pipeline_params import TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS, TEXT_GUIDED_IMAGE_VARIATION_PARAMS
from ..test_pipelines_common import PipelineTesterMixin
from . import IFPipelineTesterMixin





@skip_mps
class UpperCAmelCase						( __A ,	__A ,	unittest.TestCase  ):


				'''simple docstring'''






				lowerCamelCase_    = IFImgaImgSuperResolutionPipeline
				lowerCamelCase_    = TEXT_GUIDED_IMAGE_VARIATION_PARAMS - {'''width''', '''height'''}
				lowerCamelCase_    = TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS.union({'''original_image'''}  )
				lowerCamelCase_    = PipelineTesterMixin.required_optional_params - {'''latents'''}
				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						return self._get_superresolution_dummy_components()
				def   lowerCAmelCase_       (						self		,     lowercase		,     lowercase=0 ):



						"""simple docstring"""





						if str(lowercase ).startswith('mps' ):
								A_		:    str         =				torch.manual_seed(lowercase )
						else:
								A_		:    Tuple         =				torch.Generator(device=lowercase ).manual_seed(lowercase )

						A_		:    Any         =				floats_tensor((1, 3, 3_2, 3_2)		,     rng=random.Random(lowercase ) ).to(lowercase )
						A_		:    Optional[int]         =				floats_tensor((1, 3, 1_6, 1_6)		,     rng=random.Random(lowercase ) ).to(lowercase )

						A_		:    Optional[int]         =				{
						    'prompt': 'A painting of a squirrel eating a burger',
						    'image': image,
						    'original_image': original_image,
						    'generator': generator,
						    'num_inference_steps': 2,
						    'output_type': 'numpy',
						}

						return inputs
				@unittest.skipIf(
				    torch_device != 'cuda' or not is_xformers_available()		,     reason='XFormers attention is only available with CUDA and `xformers` installed'		,     )
				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1E-3 )
				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						self._test_save_load_optional_components()
				@unittest.skipIf(torch_device != 'cuda'		,     reason='float16 requires CUDA' )
				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						super().test_save_load_floataa(expected_max_diff=1E-1 )
				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						self._test_attention_slicing_forward_pass(expected_max_diff=1E-2 )
				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						self._test_save_load_local()







				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						self._test_inference_batch_single_identical(
						    expected_max_diff=1E-2		,     )







from typing import TYPE_CHECKING

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


_UpperCAmelCase            =		{
    """configuration_bridgetower""": [
        """BRIDGETOWER_PRETRAINED_CONFIG_ARCHIVE_MAP""",
        """BridgeTowerConfig""",
        """BridgeTowerTextConfig""",
        """BridgeTowerVisionConfig""",
    ],
    """processing_bridgetower""": ["""BridgeTowerProcessor"""],
}

try:
	if not is_vision_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	_UpperCAmelCase            =		["""BridgeTowerImageProcessor"""]

try:
	if not is_torch_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	_UpperCAmelCase            =		[
	    """BRIDGETOWER_PRETRAINED_MODEL_ARCHIVE_LIST""",
	    """BridgeTowerForContrastiveLearning""",
	    """BridgeTowerForImageAndTextRetrieval""",
	    """BridgeTowerForMaskedLM""",
	    """BridgeTowerModel""",
	    """BridgeTowerPreTrainedModel""",
	]


if TYPE_CHECKING:
	from .configuration_bridgetower import (
	    BRIDGETOWER_PRETRAINED_CONFIG_ARCHIVE_MAP,
	    BridgeTowerConfig,
	    BridgeTowerTextConfig,
	    BridgeTowerVisionConfig,
	)
	from .processing_bridgetower import BridgeTowerProcessor

	try:
		if not is_vision_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .image_processing_bridgetower import BridgeTowerImageProcessor

	try:
		if not is_torch_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_bridgetower import (
		    BRIDGETOWER_PRETRAINED_MODEL_ARCHIVE_LIST,
		    BridgeTowerForContrastiveLearning,
		    BridgeTowerForImageAndTextRetrieval,
		    BridgeTowerForMaskedLM,
		    BridgeTowerModel,
		    BridgeTowerPreTrainedModel,
		)


else:
	import sys

	_UpperCAmelCase            =		_LazyModule(__name__, globals()["""__file__"""], _import_structure)






