

'''simple docstring'''
import warnings

from transformers import AutoTokenizer
from transformers.utils import is_torch_available
from transformers.utils.generic import ExplicitEnum

from ...processing_utils import ProcessorMixin


if is_torch_available():
    import torch


class        a__  (							lowerCamelCase_  ):






   """simple docstring"""




   _SCREAMING_SNAKE_CASE   :					Optional[Any]     	=							'char'
   _SCREAMING_SNAKE_CASE   :					Optional[int]     	=							'bpe'
   _SCREAMING_SNAKE_CASE   :					List[str]     	=							'wp'




_snake_case         =  (DecodeType.CHARACTER, DecodeType.BPE, DecodeType.WORDPIECE)


class        a__  (							lowerCamelCase_  ):






   """simple docstring"""




   _SCREAMING_SNAKE_CASE   :					List[str]     	=							['image_processor', 'char_tokenizer']
   _SCREAMING_SNAKE_CASE   :					Tuple     	=							'ViTImageProcessor'
   _SCREAMING_SNAKE_CASE   :					List[str]     	=							'MgpstrTokenizer'


   def __init__(			self      ,    _UpperCamelCase=None      ,    _UpperCamelCase=None      ,    **_UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				int      					=       None
      if "feature_extractor" in kwargs:
         warnings.warn(
             "The `feature_extractor` argument is deprecated and will be removed in v5, use `image_processor`"
             " instead."      ,    _UpperCamelCase      ,    )
         _lowercase      :				List[Any]      					=       kwargs.pop("feature_extractor"  )

      _lowercase      :				List[Any]      					=       image_processor if image_processor is not None else feature_extractor
      if image_processor is None:
         raise ValueError("You need to specify an `image_processor`."  )
      if tokenizer is None:
         raise ValueError("You need to specify a `tokenizer`."  )

      _lowercase      :				Optional[int]      					=       tokenizer
      _lowercase      :				Any      					=       AutoTokenizer.from_pretrained("gpt2"  )
      _lowercase      :				Union[str, Any]      					=       AutoTokenizer.from_pretrained("bert-base-uncased"  )

      super().__init__(_UpperCamelCase      ,    _UpperCamelCase  )


   def __call__(			self      ,    _UpperCamelCase=None      ,    _UpperCamelCase=None      ,    _UpperCamelCase=None      ,    **_UpperCamelCase  ):





      """simple docstring"""





      if images is None and text is None:
         raise ValueError("You need to specify either an `images` or `text` input to process."  )

      if images is not None:
         _lowercase      :				Dict      					=       self.image_processor(_UpperCamelCase      ,    return_tensors=_UpperCamelCase      ,    **_UpperCamelCase  )
      if text is not None:
         _lowercase      :				Tuple      					=       self.char_tokenizer(_UpperCamelCase      ,    return_tensors=_UpperCamelCase      ,    **_UpperCamelCase  )

      if text is None:
         return inputs
      elif images is None:
         return encodings
      else:
         _lowercase      :				Optional[int]      					=       encodings['input_ids']
         return inputs


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				str      					=       sequences
      _lowercase      :				Dict      					=       char_preds.size(0  )

      _lowercase      :				Union[str, Any]      					=       self._decode_helper(_UpperCamelCase      ,    "char"  )
      _lowercase      :				Tuple      					=       self._decode_helper(_UpperCamelCase      ,    "bpe"  )
      _lowercase      :				int      					=       self._decode_helper(_UpperCamelCase      ,    "wp"  )

      _lowercase      :				Tuple      					=       []
      _lowercase      :				int      					=       []
      for i in range(_UpperCamelCase  ):
         _lowercase      :				List[str]      					=       [char_scores[i], bpe_scores[i], wp_scores[i]]
         _lowercase      :				Tuple      					=       [char_strs[i], bpe_strs[i], wp_strs[i]]
         _lowercase      :				List[Any]      					=       scores.index(max(_UpperCamelCase  )  )
         final_strs.append(strs[max_score_index]  )
         final_scores.append(scores[max_score_index]  )

      _lowercase      :				str      					=       {}
      _lowercase      :				Dict      					=       final_strs
      _lowercase      :				Optional[Any]      					=       final_scores
      _lowercase      :				int      					=       char_strs
      _lowercase      :				List[Any]      					=       bpe_strs
      _lowercase      :				Any      					=       wp_strs
      return out


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase      ,    _UpperCamelCase  ):





      """simple docstring"""





      if format == DecodeType.CHARACTER:
         _lowercase      :				Any      					=       self.char_decode
         _lowercase      :				List[str]      					=       1
         _lowercase      :				Optional[Any]      					=       '[s]'
      elif format == DecodeType.BPE:
         _lowercase      :				Union[str, Any]      					=       self.bpe_decode
         _lowercase      :				int      					=       2
         _lowercase      :				Dict      					=       '#'
      elif format == DecodeType.WORDPIECE:
         _lowercase      :				List[Any]      					=       self.wp_decode
         _lowercase      :				Optional[int]      					=       102
         _lowercase      :				Tuple      					=       '[SEP]'
      else:
         raise ValueError(f'''Format {format} is not supported.'''  )

      _lowercase      :				Union[str, Any]      					=       [], []
      _lowercase      :				Optional[int]      					=       pred_logits.size(0  )
      _lowercase      :				Optional[int]      					=       pred_logits.size(1  )
      _lowercase      :				Union[str, Any]      					=       pred_logits.topk(1      ,    dim=-1      ,    largest=_UpperCamelCase      ,    sorted=_UpperCamelCase  )
      _lowercase      :				Dict      					=       preds_index.view(-1      ,    _UpperCamelCase  )[:, 1:]
      _lowercase      :				Union[str, Any]      					=       decoder(_UpperCamelCase  )
      _lowercase      :				Dict      					=       torch.nn.functional.softmax(_UpperCamelCase      ,    dim=2  ).max(dim=2  )
      _lowercase      :				int      					=       preds_max_prob[:, 1:]

      for index in range(_UpperCamelCase  ):
         _lowercase      :				int      					=       preds_str[index].find(_UpperCamelCase  )
         _lowercase      :				int      					=       preds_str[index][:pred_eos]
         _lowercase      :				Tuple      					=       preds_index[index].cpu().tolist()
         _lowercase      :				str      					=       pred_index.index(_UpperCamelCase  ) if eos_token in pred_index else -1
         _lowercase      :				List[str]      					=       preds_max_prob[index][: pred_eos_index + 1]
         _lowercase      :				Tuple      					=       pred_max_prob.cumprod(dim=0  )[-1] if pred_max_prob.nelement() != 0 else 0.0
         dec_strs.append(_UpperCamelCase  )
         conf_scores.append(_UpperCamelCase  )

      return dec_strs, conf_scores


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				Dict      					=       [seq.replace(" "      ,    ""  ) for seq in self.char_tokenizer.batch_decode(_UpperCamelCase  )]
      return decode_strs


   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      return self.bpe_tokenizer.batch_decode(_UpperCamelCase  )






   def 						_lowerCamelCase       (			self      ,    _UpperCamelCase  ):





      """simple docstring"""





      _lowercase      :				str      					=       [seq.replace(" "      ,    ""  ) for seq in self.wp_tokenizer.batch_decode(_UpperCamelCase  )]
      return decode_strs









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






