





import random
import unittest

import torch

from diffusers import IFInpaintingSuperResolutionPipeline
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_INPAINTING_BATCH_PARAMS,
    TEXT_GUIDED_IMAGE_INPAINTING_PARAMS,
)
from ..test_pipelines_common import PipelineTesterMixin
from . import IFPipelineTesterMixin






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

			'''simple docstring'''







			lowerCAmelCase_							     =						IFInpaintingSuperResolutionPipeline
			lowerCAmelCase_							     =						TEXT_GUIDED_IMAGE_INPAINTING_PARAMS - {"""width""", """height"""}
			lowerCAmelCase_							     =						TEXT_GUIDED_IMAGE_INPAINTING_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       ,  __lowerCAmelCase       ,  __lowerCAmelCase=0							):



				'''simple docstring'''







				if str(__lowerCAmelCase							).startswith('''mps'''							):
					lowerCamelCase__								=		torch.manual_seed(__lowerCAmelCase							)
				else:
					lowerCamelCase__								=		torch.Generator(device=__lowerCAmelCase							).manual_seed(__lowerCAmelCase							)

				lowerCamelCase__								=		floats_tensor((1, 3, 1_6, 1_6)       ,  rng=random.Random(__lowerCAmelCase							)							).to(__lowerCAmelCase							)
				lowerCamelCase__								=		floats_tensor((1, 3, 3_2, 3_2)       ,  rng=random.Random(__lowerCAmelCase							)							).to(__lowerCAmelCase							)
				lowerCamelCase__								=		floats_tensor((1, 3, 3_2, 3_2)       ,  rng=random.Random(__lowerCAmelCase							)							).to(__lowerCAmelCase							)

				lowerCamelCase__								=		{
				    '''prompt''': '''A painting of a squirrel eating a burger''',
				    '''image''': image,
				    '''original_image''': original_image,
				    '''mask_image''': mask_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       ,  )










import pytest

from datasets.parallel import ParallelBackendConfig, parallel_backend
from datasets.utils.py_utils import map_nested

from .utils import require_dill_gt_0_3_2, require_joblibspark, require_not_windows





def lowerCAmelCase__(__snake_case							)				->      int:  # picklable for multiprocessing







	'''simple docstring'''







	return i + 1





@require_dill_gt_0_3_2
@require_joblibspark
@require_not_windows
def lowerCAmelCase__()				->      Any:







	'''simple docstring'''







	with parallel_backend('''spark'''							):
		assert ParallelBackendConfig.backend_name == "spark"

	lowerCamelCase__								=		[1, 2, 3]
	with pytest.raises(__snake_case							):
		with parallel_backend('''unsupported backend'''							):
			map_nested(__snake_case       ,__snake_case       ,num_proc=2							)

	with pytest.raises(__snake_case							):
		with parallel_backend('''unsupported backend'''							):
			map_nested(__snake_case       ,__snake_case       ,num_proc=-1							)





@require_dill_gt_0_3_2
@require_joblibspark
@require_not_windows
@pytest.mark.parametrize('''num_proc'''       ,[2, -1]							)
def lowerCAmelCase__(__snake_case							)				->      Tuple:







	'''simple docstring'''







	lowerCamelCase__								=		[1, 2]
	lowerCamelCase__								=		{'''a''': 1, '''b''': 2}
	lowerCamelCase__								=		{'''a''': [1, 2], '''b''': [3, 4]}
	lowerCamelCase__								=		{'''a''': {'''1''': 1}, '''b''': 2}
	lowerCamelCase__								=		{'''a''': 1, '''b''': 2, '''c''': 3, '''d''': 4}
	lowerCamelCase__								=		[2, 3]
	lowerCamelCase__								=		{'''a''': 2, '''b''': 3}
	lowerCamelCase__								=		{'''a''': [2, 3], '''b''': [4, 5]}
	lowerCamelCase__								=		{'''a''': {'''1''': 2}, '''b''': 3}
	lowerCamelCase__								=		{'''a''': 2, '''b''': 3, '''c''': 4, '''d''': 5}

	with parallel_backend('''spark'''							):
		assert map_nested(__snake_case       ,__snake_case       ,num_proc=__snake_case							) == expected_map_nested_sa
		assert map_nested(__snake_case       ,__snake_case       ,num_proc=__snake_case							) == expected_map_nested_sa
		assert map_nested(__snake_case       ,__snake_case       ,num_proc=__snake_case							) == expected_map_nested_sa
		assert map_nested(__snake_case       ,__snake_case       ,num_proc=__snake_case							) == expected_map_nested_sa
		assert map_nested(__snake_case       ,__snake_case       ,num_proc=__snake_case							) == expected_map_nested_sa



