


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'''







 a_				:							Union[str, Any]    = IFImgaImgSuperResolutionPipeline
 a_				:							Union[str, Any]    = TEXT_GUIDED_IMAGE_VARIATION_PARAMS - {"width", "height"}
 a_				:							List[str]    = TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS.union({"original_image"}						)
 a_				:							Optional[Any]    = PipelineTesterMixin.required_optional_params - {"latents"}

 def   _snake_case    (  self  : str							):






       '''simple docstring'''



       return self._get_superresolution_dummy_components()

 def   _snake_case    (  self  : Optional[int]       ,  _lowerCamelCase  : Optional[Any]       ,  _lowerCamelCase  : Dict=0							):






       '''simple docstring'''



       if str(_lowerCamelCase							).startswith("""mps"""							):
             __lowerCamelCase     :      str       						=						torch.manual_seed(_lowerCamelCase							)
       else:
             __lowerCamelCase     :      Tuple       						=						torch.Generator(device=_lowerCamelCase							).manual_seed(_lowerCamelCase							)

       __lowerCamelCase     :      Optional[int]       						=						floats_tensor((1, 3, 3_2, 3_2)       ,  rng=random.Random(_lowerCamelCase							)							).to(_lowerCamelCase							)
       __lowerCamelCase     :      Dict       						=						floats_tensor((1, 3, 1_6, 1_6)       ,  rng=random.Random(_lowerCamelCase							)							).to(_lowerCamelCase							)

       __lowerCamelCase     :      Optional[Any]       						=						{
           """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   _snake_case    (  self  : int							):






       '''simple docstring'''



       self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1E-3							)

 def   _snake_case    (  self  : Dict							):






       '''simple docstring'''



       self._test_save_load_optional_components()

 @unittest.skipIf(torch_device != """cuda"""       ,  reason="""float16 requires CUDA"""							)
 def   _snake_case    (  self  : List[str]							):






       '''simple docstring'''



       super().test_save_load_floataa(expected_max_diff=1E-1							)

 def   _snake_case    (  self  : Dict							):






       '''simple docstring'''



       self._test_attention_slicing_forward_pass(expected_max_diff=1E-2							)

 def   _snake_case    (  self  : Tuple							):






       '''simple docstring'''



       self._test_save_load_local()


 def   _snake_case    (  self  : List[Any]							):






       '''simple docstring'''



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







# 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

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


__UpperCamelCase    :						Any     =							{
    'configuration_mgp_str': ['MGP_STR_PRETRAINED_CONFIG_ARCHIVE_MAP', 'MgpstrConfig'],
    'processing_mgp_str': ['MgpstrProcessor'],
    'tokenization_mgp_str': ['MgpstrTokenizer'],
}

try:
    if not is_torch_available():
        raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
    pass
else:
    __UpperCamelCase    :						Tuple     =							[
        'MGP_STR_PRETRAINED_MODEL_ARCHIVE_LIST',
        'MgpstrModel',
        'MgpstrPreTrainedModel',
        'MgpstrForSceneTextRecognition',
    ]

if TYPE_CHECKING:
    from .configuration_mgp_str import MGP_STR_PRETRAINED_CONFIG_ARCHIVE_MAP, MgpstrConfig
    from .processing_mgp_str import MgpstrProcessor
    from .tokenization_mgp_str import MgpstrTokenizer

    try:
        if not is_torch_available():
            raise OptionalDependencyNotAvailable()
    except OptionalDependencyNotAvailable:
        pass
    else:
        from .modeling_mgp_str import (
            MGP_STR_PRETRAINED_MODEL_ARCHIVE_LIST,
            MgpstrForSceneTextRecognition,
            MgpstrModel,
            MgpstrPreTrainedModel,
        )
else:
    import sys

    __UpperCamelCase    :						Optional[Any]     =							_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)



