





"""simple docstring"""
# Copyright 2023 The HuggingFace Inc. 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.
import torch

from ..models.speechta import SpeechTaForTextToSpeech, SpeechTaHifiGan, SpeechTaProcessor
from ..utils import is_datasets_available
from .base import PipelineTool


if is_datasets_available():
       from datasets import load_dataset







class       a							(   a__  ):
 snake_case__             =       '''microsoft/speecht5_tts'''
 snake_case__             =       (
     '''This is a tool that reads an English text out loud. It takes an input named `text` which should contain the '''
     '''text to read (in English) and returns a waveform object containing the sound.'''
 )
 snake_case__             =       '''text_reader'''
 snake_case__             =       SpeechTaProcessor
 snake_case__             =       SpeechTaForTextToSpeech
 snake_case__             =       SpeechTaHifiGan

 snake_case__             =       ['''text''']
 snake_case__             =       ['''audio''']



 def    UpperCamelCase__  (     self     ):







  """simple docstring"""






  if self.post_processor is None:
   lowerCAmelCase    				= 'microsoft/speecht5_hifigan'
  super().setup()



 def    UpperCamelCase__  (     self				,       _snake_case				,       _snake_case=None     ):







  """simple docstring"""






  lowerCAmelCase    				= self.pre_processor(text=_snake_case				,       return_tensors='pt'				,       truncation=_snake_case     )

  if speaker_embeddings is None:
   if not is_datasets_available():
    raise ImportError('Datasets needs to be installed if not passing speaker embeddings.'     )

   lowerCAmelCase    				= load_dataset('Matthijs/cmu-arctic-xvectors'				,       split='validation'     )
   lowerCAmelCase    				= torch.tensor(embeddings_dataset[73_05]['xvector']     ).unsqueeze(0     )

  return {"input_ids": inputs["input_ids"], "speaker_embeddings": speaker_embeddings}



 def    UpperCamelCase__  (     self				,       _snake_case     ):







  """simple docstring"""






  with torch.no_grad():
   return self.model.generate_speech(**_snake_case     )



 def    UpperCamelCase__  (     self				,       _snake_case     ):







  """simple docstring"""






  with torch.no_grad():
   return self.post_processor(_snake_case     ).cpu().detach()












"""simple docstring"""
import random
import unittest

import torch

from diffusers import IFInpaintingPipeline
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							(   a__   , a__   , unittest.TestCase  ):
 snake_case__             =       IFInpaintingPipeline
 snake_case__             =       TEXT_GUIDED_IMAGE_INPAINTING_PARAMS - {'''width''', '''height'''}
 snake_case__             =       TEXT_GUIDED_IMAGE_INPAINTING_BATCH_PARAMS
 snake_case__             =       PipelineTesterMixin.required_optional_params - {'''latents'''}



 def    UpperCamelCase__  (     self     ):







  """simple docstring"""






  return self._get_dummy_components()



 def    UpperCamelCase__  (     self				,       _snake_case				,       _snake_case=0     ):







  """simple docstring"""






  if str(_snake_case     ).startswith('mps'     ):
   lowerCAmelCase    				= torch.manual_seed(_snake_case     )
  else:
   lowerCAmelCase    				= torch.Generator(device=_snake_case     ).manual_seed(_snake_case     )

  lowerCAmelCase    				= floats_tensor((1, 3, 32, 32)				,       rng=random.Random(_snake_case     )     ).to(_snake_case     )
  lowerCAmelCase    				= floats_tensor((1, 3, 32, 32)				,       rng=random.Random(_snake_case     )     ).to(_snake_case     )

  lowerCAmelCase    				= {
      'prompt': 'A painting of a squirrel eating a burger',
      'image': 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    UpperCamelCase__  (     self     ):







  """simple docstring"""






  self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1E-3     )



 def    UpperCamelCase__  (     self     ):







  """simple docstring"""






  self._test_save_load_optional_components()



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







  """simple docstring"""






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



 def    UpperCamelCase__  (     self     ):







  """simple docstring"""






  self._test_attention_slicing_forward_pass(expected_max_diff=1E-2     )



 def    UpperCamelCase__  (     self     ):







  """simple docstring"""






  self._test_save_load_local()



 def    UpperCamelCase__  (     self     ):







  """simple docstring"""






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





