






"""simple docstring"""


import unittest

import numpy as np
import torch
from torch import nn
from transformers import (
    CLIPImageProcessor,
    CLIPTextConfig,
    CLIPTextModelWithProjection,
    CLIPTokenizer,
    CLIPVisionConfig,
    CLIPVisionModelWithProjection,
)

from diffusers import KandinskyVaaPriorPipeline, PriorTransformer, UnCLIPScheduler
from diffusers.utils import torch_device
from diffusers.utils.testing_utils import enable_full_determinism, skip_mps

from ..test_pipelines_common import PipelineTesterMixin


enable_full_determinism()


class 					snake_case		(							_lowerCAmelCase   ,	unittest.TestCase						):


   '''simple docstring'''

   A_						:	List[str]						 = KandinskyVaaPriorPipeline
   A_						:	Dict						 = ["prompt"]
   A_						:	Any						 = ["prompt", "negative_prompt"]
   A_						:	Union[str, Any]						 = [
       "num_images_per_prompt",
       "generator",
       "num_inference_steps",
       "latents",
       "negative_prompt",
       "guidance_scale",
       "output_type",
       "return_dict",
   ]
   A_						:	str						 = False


   @property
   def 				_SCREAMING_SNAKE_CASE				(	self :     Any  ):

     '''simple docstring'''
     return 32


   @property
   def 				_SCREAMING_SNAKE_CASE				(	self :     Optional[int]  ):

     '''simple docstring'''
     return 32


   @property
   def 				_SCREAMING_SNAKE_CASE				(	self :     Optional[int]  ):

     '''simple docstring'''
     return self.time_input_dim


   @property
   def 				_SCREAMING_SNAKE_CASE				(	self :     Optional[Any]  ):

     '''simple docstring'''
     return self.time_input_dim * 4


   @property
   def 				_SCREAMING_SNAKE_CASE				(	self :     List[Any]  ):

     '''simple docstring'''
     return 1_00


   @property
   def 				_SCREAMING_SNAKE_CASE				(	self :     List[str]  ):

     '''simple docstring'''
     __A									= CLIPTokenizer.from_pretrained('''hf-internal-testing/tiny-random-clip'''  )
     return tokenizer


   @property
   def 				_SCREAMING_SNAKE_CASE				(	self :     Optional[Any]  ):

     '''simple docstring'''
     torch.manual_seed(0  )
     __A									= CLIPTextConfig(
         bos_token_id=0,       eos_token_id=2,       hidden_size=self.text_embedder_hidden_size,       projection_dim=self.text_embedder_hidden_size,       intermediate_size=37,       layer_norm_eps=1e-05,       num_attention_heads=4,       num_hidden_layers=5,       pad_token_id=1,       vocab_size=10_00,       )
     return CLIPTextModelWithProjection(_lowerCamelCase  )


   @property
   def 				_SCREAMING_SNAKE_CASE				(	self :     Tuple  ):

     '''simple docstring'''
     torch.manual_seed(0  )

     __A									= {
         '''num_attention_heads''': 2,
         '''attention_head_dim''': 12,
         '''embedding_dim''': self.text_embedder_hidden_size,
         '''num_layers''': 1,
     }

     __A									= PriorTransformer(**_lowerCamelCase  )
     # clip_std and clip_mean is initialized to be 0 so PriorTransformer.post_process_latents will always return 0 - set clip_std to be 1 so it won't return 0
     __A									= nn.Parameter(torch.ones(model.clip_std.shape  )  )
     return model


   @property
   def 				_SCREAMING_SNAKE_CASE				(	self :     Union[str, Any]  ):

     '''simple docstring'''
     torch.manual_seed(0  )
     __A									= CLIPVisionConfig(
         hidden_size=self.text_embedder_hidden_size,       image_size=2_24,       projection_dim=self.text_embedder_hidden_size,       intermediate_size=37,       num_attention_heads=4,       num_channels=3,       num_hidden_layers=5,       patch_size=14,       )

     __A									= CLIPVisionModelWithProjection(_lowerCamelCase  )
     return model


   @property
   def 				_SCREAMING_SNAKE_CASE				(	self :     str  ):

     '''simple docstring'''
     __A									= CLIPImageProcessor(
         crop_size=2_24,       do_center_crop=_lowerCamelCase,       do_normalize=_lowerCamelCase,       do_resize=_lowerCamelCase,       image_mean=[0.48_14_54_66, 0.4_57_82_75, 0.40_82_10_73],       image_std=[0.26_86_29_54, 0.26_13_02_58, 0.27_57_77_11],       resample=3,       size=2_24,       )

     return image_processor


   def 				_SCREAMING_SNAKE_CASE				(	self :     Tuple  ):

     '''simple docstring'''
     __A									= self.dummy_prior
     __A									= self.dummy_image_encoder
     __A									= self.dummy_text_encoder
     __A									= self.dummy_tokenizer
     __A									= self.dummy_image_processor

     __A									= UnCLIPScheduler(
         variance_type='''fixed_small_log''',       prediction_type='''sample''',       num_train_timesteps=10_00,       clip_sample=_lowerCamelCase,       clip_sample_range=10.0,       )

     __A									= {
         '''prior''': prior,
         '''image_encoder''': image_encoder,
         '''text_encoder''': text_encoder,
         '''tokenizer''': tokenizer,
         '''scheduler''': scheduler,
         '''image_processor''': image_processor,
     }

     return components


   def 				_SCREAMING_SNAKE_CASE				(	self :     Dict,       _lowerCamelCase :     str,       _lowerCamelCase :     Any=0  ):

     '''simple docstring'''
     if str(_lowerCamelCase  ).startswith('''mps'''  ):
       __A									= torch.manual_seed(_lowerCamelCase  )
     else:
       __A									= torch.Generator(device=_lowerCamelCase  ).manual_seed(_lowerCamelCase  )
     __A									= {
         '''prompt''': '''horse''',
         '''generator''': generator,
         '''guidance_scale''': 4.0,
         '''num_inference_steps''': 2,
         '''output_type''': '''np''',
     }
     return inputs


   def 				_SCREAMING_SNAKE_CASE				(	self :     Optional[int]  ):

     '''simple docstring'''
     __A									= '''cpu'''

     __A									= self.get_dummy_components()

     __A									= self.pipeline_class(**_lowerCamelCase  )
     __A									= pipe.to(_lowerCamelCase  )

     pipe.set_progress_bar_config(disable=_lowerCamelCase  )

     __A									= pipe(**self.get_dummy_inputs(_lowerCamelCase  )  )
     __A									= output.image_embeds

     __A									= pipe(
         **self.get_dummy_inputs(_lowerCamelCase  ),       return_dict=_lowerCamelCase,       )[0]

     __A									= image[0, -10:]
     __A									= image_from_tuple[0, -10:]

     assert image.shape == (1, 32)

     __A									= np.array(
         [-0.05_32, 1.71_20, 0.36_56, -1.08_52, -0.89_46, -1.17_56, 0.43_48, 0.24_82, 0.51_46, -0.11_56]  )

     assert np.abs(image_slice.flatten() - expected_slice  ).max() < 1e-2
     assert np.abs(image_from_tuple_slice.flatten() - expected_slice  ).max() < 1e-2


   @skip_mps
   def 				_SCREAMING_SNAKE_CASE				(	self :     str  ):

     '''simple docstring'''
     __A									= torch_device == '''cpu'''
     __A									= True
     __A									= False

     self._test_inference_batch_single_identical(
         test_max_difference=_lowerCamelCase,       relax_max_difference=_lowerCamelCase,       test_mean_pixel_difference=_lowerCamelCase,       )






   @skip_mps
   def 				_SCREAMING_SNAKE_CASE				(	self :     Optional[int]  ):

     '''simple docstring'''
     __A									= torch_device == '''cpu'''
     __A									= False

     self._test_attention_slicing_forward_pass(
         test_max_difference=_lowerCamelCase,       test_mean_pixel_difference=_lowerCamelCase,       )












"""simple docstring"""


import unittest

from transformers import PegasusTokenizer, PegasusTokenizerFast
from transformers.testing_utils import get_tests_dir, require_sentencepiece, require_tokenizers, require_torch, slow
from transformers.utils import cached_property

from ...test_tokenization_common import TokenizerTesterMixin


lowercase_				     =     get_tests_dir('fixtures/test_sentencepiece_no_bos.model')


@require_sentencepiece
@require_tokenizers
class 					snake_case		(							_lowerCAmelCase   ,	unittest.TestCase						):


   '''simple docstring'''

   A_						:	Optional[Any]						 = PegasusTokenizer
   A_						:	int						 = PegasusTokenizerFast
   A_						:	Optional[Any]						 = True
   A_						:	Union[str, Any]						 = True


   def 				_SCREAMING_SNAKE_CASE				(	self :     Union[str, Any]  ):

     '''simple docstring'''
     super().setUp()

     # We have a SentencePiece fixture for testing
     __A									= PegasusTokenizer(_lowerCamelCase  )
     tokenizer.save_pretrained(self.tmpdirname  )


   @cached_property
   def 				_SCREAMING_SNAKE_CASE				(	self :     Tuple  ):

     '''simple docstring'''
     return PegasusTokenizer.from_pretrained('''google/pegasus-large'''  )


   def 				_SCREAMING_SNAKE_CASE				(	self :     int,       **_lowerCamelCase :     List[Any]  ):

     '''simple docstring'''
     return PegasusTokenizer.from_pretrained(self.tmpdirname,       **_lowerCamelCase  )


   def 				_SCREAMING_SNAKE_CASE				(	self :     Optional[Any],       _lowerCamelCase :     Dict  ):

     '''simple docstring'''
     return ("This is a test", "This is a test")


   def 				_SCREAMING_SNAKE_CASE				(	self :     Tuple  ):

     '''simple docstring'''
     __A									= '''</s>'''
     __A									= 1

     self.assertEqual(self.get_tokenizer()._convert_token_to_id(_lowerCamelCase  ),       _lowerCamelCase  )
     self.assertEqual(self.get_tokenizer()._convert_id_to_token(_lowerCamelCase  ),       _lowerCamelCase  )


   def 				_SCREAMING_SNAKE_CASE				(	self :     int  ):

     '''simple docstring'''
     __A									= list(self.get_tokenizer().get_vocab().keys()  )

     self.assertEqual(vocab_keys[0],       '''<pad>'''  )
     self.assertEqual(vocab_keys[1],       '''</s>'''  )
     self.assertEqual(vocab_keys[-1],       '''v'''  )
     self.assertEqual(len(_lowerCamelCase  ),       11_03  )


   def 				_SCREAMING_SNAKE_CASE				(	self :     int  ):

     '''simple docstring'''
     self.assertEqual(self.get_tokenizer().vocab_size,       11_03  )


   def 				_SCREAMING_SNAKE_CASE				(	self :     Dict  ):

     '''simple docstring'''
     __A									= self.rust_tokenizer_class.from_pretrained(self.tmpdirname  )
     __A									= self.tokenizer_class.from_pretrained(self.tmpdirname  )
     __A									= (
         '''Let\'s see which <unk> is the better <unk_token_11> one <mask_1> It seems like this <mask_2> was important'''
         ''' </s> <pad> <pad> <pad>'''
     )
     __A									= rust_tokenizer([raw_input_str],       return_tensors=_lowerCamelCase,       add_special_tokens=_lowerCamelCase  ).input_ids[0]
     __A									= py_tokenizer([raw_input_str],       return_tensors=_lowerCamelCase,       add_special_tokens=_lowerCamelCase  ).input_ids[0]
     self.assertListEqual(_lowerCamelCase,       _lowerCamelCase  )


   def 				_SCREAMING_SNAKE_CASE				(	self :     List[Any]  ):

     '''simple docstring'''
     __A									= self._large_tokenizer
     # <mask_1> masks whole sentence while <mask_2> masks single word
     __A									= '''<mask_1> To ensure a <mask_2> flow of bank resolutions.'''
     __A									= [2, 4_13, 6_15, 1_14, 3, 19_71, 1_13, 16_79, 1_07_10, 1_07, 1]
     __A									= tokenizer([raw_input_str],       return_tensors=_lowerCamelCase  ).input_ids[0]
     self.assertListEqual(_lowerCamelCase,       _lowerCamelCase  )


   def 				_SCREAMING_SNAKE_CASE				(	self :     Optional[int]  ):

     '''simple docstring'''
     __A									= self._large_tokenizer
     # The tracebacks for the following asserts are **better** without messages or self.assertEqual
     assert tokenizer.vocab_size == 9_61_03
     assert tokenizer.pad_token_id == 0
     assert tokenizer.eos_token_id == 1
     assert tokenizer.offset == 1_03
     assert tokenizer.unk_token_id == tokenizer.offset + 2 == 1_05
     assert tokenizer.unk_token == "<unk>"
     assert tokenizer.model_max_length == 10_24
     __A									= '''To ensure a smooth flow of bank resolutions.'''
     __A									= [4_13, 6_15, 1_14, 22_91, 19_71, 1_13, 16_79, 1_07_10, 1_07, 1]
     __A									= tokenizer([raw_input_str],       return_tensors=_lowerCamelCase  ).input_ids[0]
     self.assertListEqual(_lowerCamelCase,       _lowerCamelCase  )
     assert tokenizer.convert_ids_to_tokens([0, 1, 2, 3]  ) == ["<pad>", "</s>", "<mask_1>", "<mask_2>"]


   @require_torch
   def 				_SCREAMING_SNAKE_CASE				(	self :     Dict  ):

     '''simple docstring'''
     __A									= ['''This is going to be way too long.''' * 1_50, '''short example''']
     __A									= ['''not super long but more than 5 tokens''', '''tiny''']
     __A									= self._large_tokenizer(_lowerCamelCase,       padding=_lowerCamelCase,       truncation=_lowerCamelCase,       return_tensors='''pt'''  )
     __A									= self._large_tokenizer(
         text_target=_lowerCamelCase,       max_length=5,       padding=_lowerCamelCase,       truncation=_lowerCamelCase,       return_tensors='''pt'''  )

     assert batch.input_ids.shape == (2, 10_24)
     assert batch.attention_mask.shape == (2, 10_24)
     assert targets["input_ids"].shape == (2, 5)
     assert len(_lowerCamelCase  ) == 2  # input_ids, attention_mask.






   @slow
   def 				_SCREAMING_SNAKE_CASE				(	self :     Tuple  ):

     '''simple docstring'''
     # fmt: off
     __A									= {'''input_ids''': [[3_89_79, 1_43, 1_84_85, 6_06, 1_30, 2_66_69, 8_76_86, 1_21, 5_41_89, 11_29, 1_11, 2_66_69, 8_76_86, 1_21, 91_14, 1_47_87, 1_21, 1_32_49, 1_58, 5_92, 9_56, 1_21, 1_46_21, 3_15_76, 1_43, 6_26_13, 1_08, 96_88, 9_30, 4_34_30, 1_15_62, 6_26_13, 3_04, 1_08, 1_14_43, 8_97, 1_08, 93_14, 1_74_15, 6_33_99, 1_08, 1_14_43, 76_14, 1_83_16, 1_18, 42_84, 71_48, 1_24_30, 1_43, 14_00, 2_57_03, 1_58, 1_11, 42_84, 71_48, 1_17_72, 1_43, 2_12_97, 10_64, 1_58, 1_22, 2_04, 35_06, 17_54, 11_33, 1_47_87, 15_81, 1_15, 3_32_24, 44_82, 1_11, 13_55, 1_10, 2_91_73, 3_17, 5_08_33, 1_08, 2_01_47, 9_46_65, 1_11, 7_71_98, 1_07, 1], [1_10, 6_26_13, 1_17, 6_38, 1_12, 11_33, 1_21, 2_00_98, 13_55, 7_90_50, 1_38_72, 1_35, 15_96, 5_35_41, 13_52, 1_41, 1_30_39, 55_42, 1_24, 3_02, 5_18, 1_11, 2_68, 29_56, 1_15, 1_49, 44_27, 1_07, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1_39, 12_35, 27_99, 1_82_89, 1_77_80, 2_04, 1_09, 94_74, 12_96, 1_07, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], '''attention_mask''': [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]}  # noqa: E501
     # fmt: on

     self.tokenizer_integration_test_util(
         expected_encoding=_lowerCamelCase,       model_name='''google/bigbird-pegasus-large-arxiv''',       revision='''ba85d0851d708441f91440d509690f1ab6353415''',       )





@require_sentencepiece
@require_tokenizers
class 					snake_case		(							_lowerCAmelCase   ,	unittest.TestCase						):


   '''simple docstring'''

   A_						:	str						 = PegasusTokenizer
   A_						:	Union[str, Any]						 = PegasusTokenizerFast
   A_						:	Any						 = True
   A_						:	str						 = True


   def 				_SCREAMING_SNAKE_CASE				(	self :     List[Any]  ):

     '''simple docstring'''
     super().setUp()

     # We have a SentencePiece fixture for testing
     __A									= PegasusTokenizer(_lowerCamelCase,       offset=0,       mask_token_sent=_lowerCamelCase,       mask_token='''[MASK]'''  )
     tokenizer.save_pretrained(self.tmpdirname  )


   @cached_property
   def 				_SCREAMING_SNAKE_CASE				(	self :     str  ):

     '''simple docstring'''
     return PegasusTokenizer.from_pretrained('''google/bigbird-pegasus-large-arxiv'''  )


   def 				_SCREAMING_SNAKE_CASE				(	self :     Optional[int],       **_lowerCamelCase :     Dict  ):

     '''simple docstring'''
     return PegasusTokenizer.from_pretrained(self.tmpdirname,       **_lowerCamelCase  )


   def 				_SCREAMING_SNAKE_CASE				(	self :     List[str],       _lowerCamelCase :     List[str]  ):

     '''simple docstring'''
     return ("This is a test", "This is a test")


   def 				_SCREAMING_SNAKE_CASE				(	self :     List[Any]  ):

     '''simple docstring'''
     __A									= self.rust_tokenizer_class.from_pretrained(self.tmpdirname  )
     __A									= self.tokenizer_class.from_pretrained(self.tmpdirname  )
     __A									= (
         '''Let\'s see which <unk> is the better <unk_token> one [MASK] It seems like this [MASK] was important </s>'''
         ''' <pad> <pad> <pad>'''
     )
     __A									= rust_tokenizer([raw_input_str],       return_tensors=_lowerCamelCase,       add_special_tokens=_lowerCamelCase  ).input_ids[0]
     __A									= py_tokenizer([raw_input_str],       return_tensors=_lowerCamelCase,       add_special_tokens=_lowerCamelCase  ).input_ids[0]
     self.assertListEqual(_lowerCamelCase,       _lowerCamelCase  )


   @require_torch
   def 				_SCREAMING_SNAKE_CASE				(	self :     Tuple  ):

     '''simple docstring'''
     __A									= ['''This is going to be way too long.''' * 10_00, '''short example''']
     __A									= ['''not super long but more than 5 tokens''', '''tiny''']
     __A									= self._large_tokenizer(_lowerCamelCase,       padding=_lowerCamelCase,       truncation=_lowerCamelCase,       return_tensors='''pt'''  )
     __A									= self._large_tokenizer(
         text_target=_lowerCamelCase,       max_length=5,       padding=_lowerCamelCase,       truncation=_lowerCamelCase,       return_tensors='''pt'''  )

     assert batch.input_ids.shape == (2, 40_96)
     assert batch.attention_mask.shape == (2, 40_96)
     assert targets["input_ids"].shape == (2, 5)
     assert len(_lowerCamelCase  ) == 2  # input_ids, attention_mask.






   def 				_SCREAMING_SNAKE_CASE				(	self :     Tuple  ):

     '''simple docstring'''
     __A									= (
         '''This is an example string that is used to test the original TF implementation against the HF'''
         ''' implementation'''
     )

     __A									= self._large_tokenizer(_lowerCamelCase  ).input_ids

     self.assertListEqual(
         _lowerCamelCase,       [1_82, 1_17, 1_42, 5_87, 42_11, 1_20, 1_17, 2_63, 1_12, 8_04, 1_09, 8_56, 2_50_16, 31_37, 4_64, 1_09, 2_69_55, 31_37, 1],       )




