

'''simple docstring'''
from __future__ import annotations

from typing import Generic, TypeVar

_snake_case         =  TypeVar('T')


class        a__  (							Generic[T]  ):


   def __init__(			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				Optional[Any]      					=       data
      _lowercase      :				Optional[Any]      					=       self
      _lowercase      :				int      					=       0




class        a__  (							Generic[T]  ):


   def __init__(			self  ):





      """simple docstring"""





      _lowercase      :				dict[T, DisjointSetTreeNode[T]]      					=       {}


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				List[Any]      					=       DisjointSetTreeNode(_UpperCamelCase  )


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				Dict      					=       self.map[data]
      if elem_ref != elem_ref.parent:
         _lowercase      :				List[str]      					=       self.find_set(elem_ref.parent.data  )
      return elem_ref.parent


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase  ):





      """simple docstring"""





      if nodea.rank > nodea.rank:
         _lowercase      :				Optional[int]      					=       nodea
      else:
         _lowercase      :				int      					=       nodea
         if nodea.rank == nodea.rank:
            nodea.rank += 1






   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase  ):





      """simple docstring"""





      self.link(self.find_set(_UpperCamelCase  )      ,    self.find_set(_UpperCamelCase  )  )




class        a__  (							Generic[T]  ):


   def __init__(			self  ):





      """simple docstring"""





      _lowercase      :				dict[T, dict[T, int]]      					=       {}


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      if node not in self.connections:
         _lowercase      :				List[str]      					=       {}


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase      ,    _UpperCamelCase  ):





      """simple docstring"""





      self.add_node(_UpperCamelCase  )
      self.add_node(_UpperCamelCase  )
      _lowercase      :				int      					=       weight
      _lowercase      :				List[str]      					=       weight






   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      _lowercase      :				Tuple      					=       []
      _lowercase      :				int      					=       set()
      for start in self.connections:
         for end in self.connections[start]:
            if (start, end) not in seen:
               seen.add((end, start)  )
               edges.append((start, end, self.connections[start][end])  )
      edges.sort(key=lambda _UpperCamelCase  : x[2]  )

      # creating the disjoint set
      _lowercase      :				List[Any]      					=       DisjointSetTree[T]()
      for node in self.connections:
         disjoint_set.make_set(_UpperCamelCase  )

      # MST generation
      _lowercase      :				str      					=       0
      _lowercase      :				Union[str, Any]      					=       0
      _lowercase      :				int      					=       GraphUndirectedWeighted[T]()
      while num_edges < len(self.connections  ) - 1:
         _lowercase					,				_lowercase					,				_lowercase      :				Optional[int]      					=       edges[index]
         index += 1
         _lowercase      :				Tuple      					=       disjoint_set.find_set(_UpperCamelCase  )
         _lowercase      :				Dict      					=       disjoint_set.find_set(_UpperCamelCase  )
         if parent_u != parent_v:
            num_edges += 1
            graph.add_edge(_UpperCamelCase      ,    _UpperCamelCase      ,    _UpperCamelCase  )
            disjoint_set.union(_UpperCamelCase      ,    _UpperCamelCase  )
      return graph









'''simple docstring'''
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        a__  (							lowerCamelCase_  ,				lowerCamelCase_  ,				unittest.TestCase  ):
   _SCREAMING_SNAKE_CASE   :					List[str]     	=							IFImgaImgSuperResolutionPipeline
   _SCREAMING_SNAKE_CASE   :					int     	=							TEXT_GUIDED_IMAGE_VARIATION_PARAMS - {'width', 'height'}
   _SCREAMING_SNAKE_CASE   :					List[str]     	=							TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS.union({'original_image'}  )
   _SCREAMING_SNAKE_CASE   :					Optional[int]     	=							PipelineTesterMixin.required_optional_params - {'latents'}


   def 						_lowerCamelCase       (			self  ):





      """simple docstring"""





      return self._get_superresolution_dummy_components()


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase=0  ):





      """simple docstring"""





      if str(_UpperCamelCase  ).startswith("mps"  ):
         _lowercase      :				Tuple      					=       torch.manual_seed(_UpperCamelCase  )
      else:
         _lowercase      :				int      					=       torch.Generator(device=_UpperCamelCase  ).manual_seed(_UpperCamelCase  )

      _lowercase      :				List[Any]      					=       floats_tensor((1, 3, 32, 32)      ,    rng=random.Random(_UpperCamelCase  )  ).to(_UpperCamelCase  )
      _lowercase      :				Optional[int]      					=       floats_tensor((1, 3, 16, 16)      ,    rng=random.Random(_UpperCamelCase  )  ).to(_UpperCamelCase  )

      _lowercase      :				List[str]      					=       {
          "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      ,    )






